How do you get a price from the middle of a trading day?
A daily bar answers "what happened yesterday". /intraday/{ticker} answers "what happened at 10:15", by cutting the session into fixed-length slices and reporting OHLCV for each one.
The five intervals
interval is the only parameter in this family that the specification marks required. The server does not enforce it: on 28 September 2026 a request without it returned exactly the rows interval=5m returns, and nothing in them names the bar size. Send it every time. It accepts exactly five values:
1m, 5m, 15m, 30m, 1h
All five, no more. There is no 4h, no 1d (use /eod), and no seconds-level bar (for that you need ticks, two lessons from here).
The response is an array of objects with eight keys: timestamp, gmtoffset, datetime, open, high, low, close, volume. Same OHLCV vocabulary as the daily bar, plus three fields describing when — which the daily row did not need and this one very much does.
One schema detail that bites in production: volume is declared nullable, and it really does come back null. A live 1-hour bar for NVDA on 7 June 2024 at 20:00 UTC returns open, high, low and close all equal to 1208.880004 and volume: null. A degenerate bar carrying the closing print and nothing else. If your loader assumes volume is an integer, that row is where it stops.
Picking an interval is picking a data set
Here is the finding that changes how you should think about the parameter. Take Apple on 20 July 2026 and compare one 5-minute bar against the five 1-minute bars covering the identical window, 13:30 to 13:34 UTC:
| field | 5m bar | five 1m bars combined |
|---|---|---|
| open | 333.024993 | 333.505 |
| high | 333.709991 | 333.71 |
| low | 331.130004 | 331.13 |
| close | 331.910003 | 331.91 |
| volume | 2,985,899 | 1,778,212 |
High, low and close agree to rounding. The open and the volume do not. The 5-minute bar reports 1,207,687 more shares than the minute bars covering the same 300 seconds — roughly 1.68 times as many.
Neither is a bug and neither is the "true" number. The intervals are assembled from different underlying feeds with different inclusion rules about which prints count. The practical instruction is blunt: choose one interval and stay inside it. Do not sum 1-minute volume and compare it to a 5-minute figure, do not backfill a 5-minute series with resampled 1-minute data, and do not compute a ratio whose numerator and denominator came from different interval values.
How far back it goes
Intraday history is finite and shallower than daily history, and the depth differs by interval and by symbol. This is verifiable rather than theoretical: /intraday/NVDA.US with interval=1h returns bars for 7 June 2024, while the same endpoint and interval for AAPL.US across 25–28 August 2020 returns an empty array. Apple's daily history for that week is right there in /eod; the hourly detail is not.
So an empty intraday response has three possible meanings and you cannot tell them apart from the response alone: the window is outside the coverage, the window contains no trading, or your from/to are wrong. Check the last of those first — on this endpoint they are UNIX seconds in UTC, not dates.
Format
fmt accepts json and csv, and the specification states that this endpoint defaults to CSV. Ask for fmt=json explicitly. Relying on an undeclared default is how a working pipeline breaks on a day nobody deployed anything.
Try it now
- Here are
/intraday/AAPL.US1-minute bars around the open on 25 September 2026, and the 5-minute bar stamped 13:30 UTC that day. Sum the volumes of the five 1-minute bars from 13:30 to 13:34 and compare with the 5-minute bar's volume. Compare the two opens as well. Record the ratio you get, and set it against the 1.68 in the table above.
- Here is an interval that is not in the enum,
interval=2m, sent on 28 September 2026: status 422,Content-Type: application/json, and this body. Read it. Knowing what a rejected parameter looks like is worth one deliberate failure, and note that this one is checked, unlike most parameters on/eod.
{"errors": {"interval": ["The selected interval is invalid."]}}
- Here is
/intraday/AAPL.USwalked backwards a year at a time on 28 September 2026, five-day windows from the last full week of September, then narrowed.
| window | interval=1h |
interval=1m |
|---|---|---|
| each year from 2021 to 2025 | bars | bars |
| from 28 September 2020 | empty | 4,541 bars |
| first hourly bar of all | 2020-10-12 13:30 UTC | not asked |
| 1 to 10 January 2016 | not asked | 3,945 bars |
The hourly series stops in October 2020 while the minute series still answers for 2016. Say what that does to the rule "finer data is shallower", and why the boundary for your own symbol and interval has to be measured: it is not documented per-symbol anywhere.