Get stock detail (NSE, NGX, JSE, etc.)
Pan-African Market Data & Intelligence
/stocks/{symbol}
Get stock detail (NSE, NGX, JSE, etc.)
getStocksReturns full delayed price and detail data for a single stock. Accepts exchange-qualified symbols (e.g. SCOM.KE for Safaricom PLC on the Nairobi Stock Exchange, DANGCEM.NG for Dangote Cement on the Nigerian Exchange Group, MTN.ZA on the Johannesburg Stock Exchange) or bare tickers (SCOM) when unambiguous.
Parameters
symbolstringpathRequiredExchange-qualified ticker (e.g. SCOM.KE, DANGCEM.NG) or bare ticker.
Example: SCOM.KE
Headers
AuthorizationstringRequiredBearer sk_sandbox_<your_key> for sandbox requests.
Response fields
idstringUnique stock identifier.
Example: "SCOM.KE"
symbolstringExchange-qualified ticker symbol.
Example: "SCOM.KE"
namestringFull company name.
Example: "Safaricom PLC"
slugstring | nullURL-safe identifier. Interchangeable with symbol.
Example: "safaricom"
exchangestringExchange code: NSE, NGX, JSE, GSE, BRVM, ZSE, BSE, LUSE, EGX, DSE, USE, MSE, CSE, SEM.
Example: "NSE"
exchangeMicstring | nullISO 10383 operating Market Identifier Code for the listing exchange.
Example: "XNAI"
currencystringLocal trading currency.
Example: "KES"
sectorstring | nullExample: "Telecommunications"
assetTypeSTOCK | ETFlistingStatusACTIVE | SUSPENDED | DELISTEDpricenumber | nullLatest price in local currency.
Example: 16.5
usdPricenumber | nullLatest price converted to USD at live spot rate.
Example: 0.1274
changenumber | nullAbsolute price change from previous close.
Example: 0.25
changePctnumber | nullPercentage price change from previous close.
Example: 1.54
opennumber | nullSession opening price in local currency.
dayHighnumber | nullIntraday high in local currency.
dayLownumber | nullIntraday low in local currency.
volumeinteger | nullCurrent session trading volume.
previousClosenumber | nullPrior session closing price.
logoUrlstring | nullSelf-hosted SVG logo. Safe to use as img src.
Example: "https://mystocks.africa/logos/scom-ke.svg"
lastPriceUpdatestring | nullmarketStatusstringExchange state at quote time: OPEN or CLOSED. Present on /market/quotes and /market/movers responses.
bidnumber | nullBest bid. Currently always null (no order-book depth in the data source).
asknumber | nullBest ask. Currently always null (no order-book depth in the data source).
dataFreshnessSecondsinteger | nullSeconds since the last price update. Present on /market/quotes and /market/movers responses.
asOfstring | nullTimestamp 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.
stalebooleanTrue 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.
dataQualityobjectThe 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.
dataQuality.asOfstring | nullRequiredTimestamp of the exchange observation, not the time the API response was generated.
dataQuality.ageSecondsinteger | nullRequiredAge of the price in seconds (now − asOf).
dataQuality.stalebooleanRequiredTrue when the price is older than two refresh intervals.
dataQuality.delayModeDELAYED | END_OF_DAYRequiredDELAYED — exchange-supplied data in the 15-minute-delayed latency class. END_OF_DAY — outside the window; this is the most recent close, not a live quote.
dataQuality.delayMinutesintegerRequiredExchange feed latency class in minutes. This is distinct from the API refresh target.
Example: 15
dataQuality.refreshIntervalSecondsintegerRequiredTarget interval between API ingestion refreshes during the published coverage window.
Example: 900
dataQuality.providermstocks | mansaRequiredMyStocks ingestion connector for this exchange feed. This field does not describe exchange licensing or partner entitlement.
dataQuality.disclaimerstringRequiredPlain-English statement of what this price is and is not.
Response codes
200Stock detail.404Symbol not found.