How delayed quotes work
U.S. listings are snapshotted every 10 minutes from 9:31 New York time until the delay has caught up with the close, at about 16:30. Each snapshot holds trades that are at least 15 minutes old. GET /v1/quotes returns the last trade from the newest snapshot as last_price, with last_at recording when that trade printed.
Because the final snapshot can include after-hours prints, last_price after the close can differ from the official closing price. When you need the close, read it from daily bars or from /v1/snapshot, where price_source is session_close.
| Field | What it holds today |
|---|---|
last_price, last_at | Last trade in the newest delayed snapshot and when it printed |
bid_price, ask_price, bid_size, ask_size, bid_at, ask_at | Always null. Reserved so clients need not change when a licensed source is added |
symbol, exchange_mic, instrument_id, currency_code | Listing identity |
Mutual funds publish one NAV a day and have no quotes; read their NAV from /v1/eod. OTC listings have no quotes either.
Snapshots: price and change in one call
GET /v1/snapshot answers the question most dashboards ask: what is the price, and how far has it moved since yesterday? price is the delayed quote when it is from a newer trading date than the latest session, otherwise the latest official close. price_source tells you which (delayed_quote or session_close) and updated_at when it was observed.
previous_close is split-adjusted to the price's session, so a stock that split overnight does not show a 75% loss. change_percent is 100 × change / previous_close, rounded to 8 places. Every requested symbol comes back either as a row or as an entry in meta.errors, including listings with no quote and no session in the last 31 days.
Top gainers and losers
GET /v1/movers ranks listings by percent change from the previous session close to a session close, using reconciled end-of-day prices. It is a closing-price ranking, not an intraday scanner. By default it ranks the latest complete session; pass date to rank any session in your plan's history.
direction:gainers(default) orloserslimit: 1 to 50 rows, default 20min_price: minimum close, default1, so sub-dollar stocks are excluded unless you set0min_volume: minimum session volume, default100000sharesexchanges: limit to MIC codes such asXNYS,XNAS
Expect thinly traded, low-priced names at the top of an unfiltered ranking. Raising min_price and min_volume is usually the first thing to do.
Streaming delayed quotes
Pro and higher plans can subscribe over WebSocket instead of polling. A quote frame arrives when a new delayed snapshot is published for a subscribed symbol, using the same schema as /v1/quotes. Pro streams up to 250 symbols, Commercial 1,000 and Scale unlimited. The stream is delayed exactly like the REST endpoint. See streaming.
Plans, credits and display rights
Quotes, snapshots and movers are included on every plan, Free included. On Free they are limited to AAPL, NVDA, JNJ, PEP, MSFT, SPY and QQQ, and movers rank only those seven. Quotes and snapshots cost 5 credits per symbol, up to 100 symbols per request; movers cost 25 credits per request. Showing prices to other people in your product requires a Commercial or Scale plan.
Prices delayed 15 minutes or more. OHLC does not provide real-time quotes, bid/ask spreads, Level 2 data or consolidated tape (SIP) data.
Snapshot for Apple
curl 'https://api.ohlc.io/v1/snapshot?symbols=XNAS:AAPL' \
-H "Authorization: Bearer $OHLC_API_KEY"{
"data": [
{
"security_id": "01M35H2KE2ZJHXFY5C3E7FPC66",
"symbol": "XNAS:AAPL",
"exchange_mic": "XNAS",
"currency_code": "USD",
"price": "333.69",
"price_source": "session_close",
"previous_close": "330.32",
"change": "3.37",
"change_percent": "1.02022281",
"updated_at": "2026-10-02T20:00:00.000000Z",
"quote": {
"last_price": "333.69",
"last_at": "2026-10-02T20:14:00.000000Z",
"bid_price": null,
"ask_price": null,
"bid_size": null,
"ask_size": null,
"bid_at": null,
"ask_at": null
},
"session": { "date": "2026-10-02", "open": "333.205", "high": "334.54", "low": "330.61", "close": "333.69", "volume": "31878433" },
"previous_session": { "date": "2026-10-01", "open": "330.17", "high": "332.4816", "low": "325.81", "close": "330.32", "volume": "35017775" }
}
],
"meta": { "timezone": "UTC", "as_of": "2026-10-03T15:04:51Z", "next_cursor": null }
}Prices delayed 15 minutes · Illustrative sample data