Skip to content
Partner API Docs

Quotes, Movers, and Market Status

Fetch single or batch quotes, movers, exchange status, settlement calendars, and holidays for African markets.

Quotes

Use GET /market/quotes?symbols=SCOM.KE,MTN.ZA for up to 50 symbols per request. Unresolved symbols appear in not_found without failing the whole batch. Use GET /stocks/{symbol} for a detailed single-instrument response.

Data freshness — read this before you price a trade

MyStocks quotes are delayed, not real-time. There is no tick-by-tick feed. Prices are polled from our upstream providers every 15 minutes, between 08:00 and 16:00 UTC, Monday–Friday, with an end-of-day pass at 16:30 UTC. A quote can therefore be up to ~15 minutes old (plus whatever lag the upstream provider carries) while a market is open, and is a closing price outside that window.

Every quote carries its own freshness, so you never have to guess:

FieldTypeRequiredDescription
asOfstring | nullNoWhen the price was actually captured upstream — NOT when the API answered. This is the only timestamp you should price a trade against.
stalebooleanNotrue when the price is older than two refresh intervals (30 min). The feed for that symbol is genuinely behind; do not trust the price for pricing.
dataFreshnessSecondsnumber | nullNoAge of the price in seconds — the same thing as now − asOf.
dataQualityobjectNoThe full contract: delayMode (DELAYED | END_OF_DAY), delayMinutes, refreshIntervalSeconds, provider, and a plain-English disclaimer.
{
  "symbol": "SCOM.KE",
  "price": 17.85,
  "asOf": "2026-07-13T11:45:02.000Z",
  "stale": false,
  "dataFreshnessSeconds": 214,
  "dataQuality": {
    "delayMode": "DELAYED",
    "delayMinutes": 15,
    "refreshIntervalSeconds": 900,
    "provider": "mstocks",
    "disclaimer": "Delayed quote — refreshed every 15 minutes. Not real-time tick data. Price the trade against `asOf`."
  }
}

GET /market/exchanges returns the same contract per exchange (marketData), plus a top-level marketDataPolicy block stating realtime: false and whether the intraday window is currently open.

Because quotes are delayed, a market order is quote-gated: you must fetch a single-use quoteId from GET /quote/{symbol} and submit it with the order, so the price you were shown is the price the order is bound to. If you need to control the execution price yourself, place a LIMIT order instead — see Advanced order types.

Market state

  • GET /market/status reports whether an exchange is open and its next open time.
  • GET /market/holidays provides forward-looking closures.
  • GET /market/movers ranks instruments by movement.
  • GET /market/settlement describes market settlement cycles and execution targets.

Use market status and holidays before submitting orders. A quote can be valid while an exchange is closed; order acceptance and execution remain subject to market hours, halts, auctions, and dealing rules.

All responses are read-only and data-key safe. See Rate Limits for batch and polling strategy.

Was this page useful?

Your signal helps us tighten partner onboarding docs.

Last updated on

On this page