Skip to content
MyStocks Developers
API v1

API v1

Current stable contract

Versioning policyRelease changelog
Sandbox console
Market Data API

Market Data API FAQs

MyStocks Partner API

Common questions about MyStocks market-data freshness, history, symbols, keys, and redistribution.

Explore endpoints

1 of 1
GET

/stocks

List stocks (NSE, NGX, JSE, GSE, BRVM, etc.)

Full endpoint documentation
Sandbox availablelistStocks

Returns the full tradeable stock and ETF universe across all supported African exchanges. Provides exchange-supplied, 15-minute-delayed stock price data. The API refresh target is 900 seconds during the published coverage window. These are not real-time prices. MyStocks holds full data rights for every supported exchange. - Nairobi Stock Exchange (NSE) in Kenya (KES) - Nigerian Exchange Group (NGX) in Nigeria (NGN) - Johannesburg Stock Exchange (JSE) in South Africa (ZAR) - Ghana Stock Exchange (GSE) in Ghana (GHS) - BRVM serving 8 West African French-speaking countries (XOF) - LuSE (Zambia), USE (Uganda), BSE (Botswana), DSE (Tanzania), ZSE (Zimbabwe), EGX (Egypt), MSE (Malawi), CSE (Morocco), and SEM (Mauritius). Filter by exchange, sector, asset type, or free-text search. Results are cursor-paginated to keep catalogue responses fast as market coverage grows. Use nextCursor while hasMore is true.

Parameters

exchangestringquery

Filter by exchange code. One of: NSE, NGX, JSE, GSE, BRVM, ZSE, BSE, LUSE, EGX, DSE, USE, MSE, CSE, SEM.

Example: NSE

sectorstringquery

Filter by GICS sector name.

Example: Telecommunications

assetTypeSTOCK | ETFquery

Filter to stocks or ETFs.

searchstringquery

Free-text match against symbol or company name.

Example: safaricom

limitintegerquery

Page size. Defaults to 50 and is capped at 200.

Example: 50

cursorstringquery

Continuation cursor returned as nextCursor by the previous page.

Headers

AuthorizationstringRequired

Bearer sk_sandbox_<your_key> for sandbox requests.

Response fields

stocksobject[]
stocks[].idstring

Unique stock identifier.

Example: "SCOM.KE"

stocks[].symbolstring

Exchange-qualified ticker symbol.

Example: "SCOM.KE"

stocks[].namestring

Full company name.

Example: "Safaricom PLC"

stocks[].slugstring | null

URL-safe identifier. Interchangeable with symbol.

Example: "safaricom"

stocks[].exchangestring

Exchange code: NSE, NGX, JSE, GSE, BRVM, ZSE, BSE, LUSE, EGX, DSE, USE, MSE, CSE, SEM.

Example: "NSE"

stocks[].exchangeMicstring | null

ISO 10383 operating Market Identifier Code for the listing exchange.

Example: "XNAI"

stocks[].currencystring

Local trading currency.

Example: "KES"

stocks[].sectorstring | null

Example: "Telecommunications"

stocks[].assetTypeSTOCK | ETF
stocks[].listingStatusACTIVE | SUSPENDED | DELISTED
stocks[].pricenumber | null

Latest price in local currency.

Example: 16.5

stocks[].usdPricenumber | null

Latest price converted to USD at live spot rate.

Example: 0.1274

stocks[].changenumber | null

Absolute price change from previous close.

Example: 0.25

stocks[].changePctnumber | null

Percentage price change from previous close.

Example: 1.54

stocks[].opennumber | null

Session opening price in local currency.

stocks[].dayHighnumber | null

Intraday high in local currency.

stocks[].dayLownumber | null

Intraday low in local currency.

stocks[].volumeinteger | null

Current session trading volume.

stocks[].previousClosenumber | null

Prior session closing price.

stocks[].logoUrlstring | null

Self-hosted SVG logo. Safe to use as img src.

Example: "https://mystocks.africa/logos/scom-ke.svg"

stocks[].lastPriceUpdatestring | null
stocks[].marketStatusstring

Exchange state at quote time: OPEN or CLOSED. Present on /market/quotes and /market/movers responses.

stocks[].bidnumber | null

Best bid. Currently always null (no order-book depth in the data source).

stocks[].asknumber | null

Best ask. Currently always null (no order-book depth in the data source).

stocks[].dataFreshnessSecondsinteger | null

Seconds since the last price update. Present on /market/quotes and /market/movers responses.

stocks[].asOfstring | null

Timestamp of the exchange observation — NOT when the API answered. African equity data is 15-minute delayed and the API refresh target is 900 seconds, so display and evaluate freshness against this value.

stocks[].staleboolean

True when the price is older than two refresh intervals (30 minutes). The feed for this symbol is genuinely behind — do not trust the price for pricing a trade.

stocks[].dataQualityobject

The published market-data freshness contract. African equity quotes are supplied by the exchanges on a 15-minute-delayed basis, not in real time. MyStocks holds full exchange data rights. The API refresh target is 900 seconds during the published coverage window, with an end-of-day pass after market close.

countinteger

Number of stocks in this page.

totalCountinteger | null

Exact matching count when known; null for bounded cursor scans.

hasMoreboolean
nextCursorstring

Response codes

200List of stocks.

Are prices tick-by-tick?

No. Partner market data is pull-based and refreshes according to the documented market-data cadence. Events and SSE are not a tick stream.

African equity quotes are supplied by the exchanges on a 15-minute-delayed basis. MyStocks targets a 15-minute API refresh cadence during the published coverage window. Read asOf on every response; do not describe the value as live or real-time.

Does the 15-minute delay mean MyStocks lacks exchange data rights?

No. MyStocks holds full market-data rights for every supported exchange. Fifteen-minute delay is the latency class of the exchange-supplied feed. It is not a licensing or entitlement gap.

Can every African stock render a chart?

Yes, every listed African equity has EOD data for a line chart. Not every instrument has complete reported OHLCV. Use /stocks/{symbol}/candles and follow meta.recommendedChartType; show candlesticks only when the response recommends them, otherwise use the EOD close line.

How do I identify a symbol?

Use the canonical SYMBOL.EXCHANGE value returned by GET /stocks and do not infer exchange from a company name.

Does a data key allow trading?

No. Data keys are read-only and limited to market-data routes.

Is historical depth identical for every exchange?

No. History depth varies by exchange and instrument. Inspect historyConfidence and treat missing history as a data characteristic, not a zero-price series.

May I redistribute the data?

Only within the permissions and attribution requirements in Data Licensing.

Was this page useful?

Your signal helps us tighten partner onboarding docs.

Send note

Last updated on