OHLCV price bars for a symbol and resolution
https://atlas-api.skylit.ai/v1/historyTradingView UDF history bars for one symbol at one resolution,
covering [from, to) (Unix seconds; to is exclusive). Returns column arrays (t, o,
h, l, c, v) of equal length, oldest-first. When the window
holds no bars the response is a 200 with { "s": "no_data" } (plus
nextTime pointing at the nearest earlier bar when one exists), per the
UDF contract. Equity bars also carry sided-volume columns (bv/sv/uv
= buy / sell / unclassified) where available.
Request-window limit
One call may span at most a fixed number of trading days, set by the
bar tier the resolution reads from — not by the resolution itself. 240
and 60 share the 1-hour tier and therefore share its allowance.
| Tier | Resolutions | Max trading days / request |
|---|---|---|
| 1-min | 1 2 3 5 15 30 | 90 |
| 1-hour | 60 240 480 | 720 |
| 1-day | D W | 2,600 |
A window wider than the cap is rejected with 400, carrying the two
numbers a client needs to react (requested_days, max_days). It is
never silently shortened — a short { "s": "ok" } always means the data
ends there, never that your range was clipped. Page through anything
wider in windows of max_days or fewer.
A rejected 400 is refunded (failed calls are free). The caps are
fixed and published here, so check your range before sending it rather
than discovering the limit by retrying. /v1/config is free if you
would rather read the feed's capabilities first.
Cache-Control tracks data freshness: today max-age=2, the prior
session max-age=60, older complete days immutable. A 400 is
no-store.
Authorization
Authorization: Bearer <your API key>Required. A missing header returns 401; an invalid, revoked or expired key returns 403.
Query parameters
symbolstringrequiredTicker (e.g.
SPY).resolutionstringrequiredBar size. Intraday minutes or
D/W. Withextended=false, the 1-hour tier (60,240,480) is built from regular-session hours aligned to the 09:30 ET open: 09:30, 10:30 … 15:30 ET on a full session, the last one covering 15:30–16:00. Each hour is the fold of theresolution=1minute bars in its window. The server does not aggregate above one hour:240and480return the same hourly bars as60, so a caller grouping them into 4-hour bars anchors at 09:30 ET (09:30, 13:30).1235153060240480DWfromintegerint64requiredWindow start, Unix seconds (UTC).
tointegerint64requiredWindow end, Unix seconds (UTC).
countbackintegermin 1When set, return exactly this many bars ending at
to(takes precedence overfrom, per the UDF spec).extendedbooleandefaultfalseInclude extended-hours (pre / post-market) bars. Default is regular trading hours only (09:30–16:00 ET).
Changed 2026-10-08: regular-hours bars on the 1-hour tier are stamped on the half hour (09:30 … 15:30 ET), 30 minutes later than the clock hours they replace. Each bar covers a new one-hour window starting on the half hour, so its open, high, low, close and volume are recomputed over that window, not merely restamped. This applies to every date, so a 1-hour-tier response cached before the change (older days are served
immutable) still carries the old clock-hour bars; re-fetch it without the cache.extended=truekeeps clock-aligned hours.
Responses
- 200
Bars, or a
no_datamarker — both200per UDF. - 400
Invalid request: the requested range is wider than the resolution's tier allows, or a parameter is missing or invalid (for example an unsupported
resolution). Refunded, like every failed call. - 401
Missing or invalid API key.
- 402
Credit balance is below the request cost.
- 403
Unknown, revoked or expired API key (the gateway's
forbidden), or the account is not API-eligible (account_suspended). Not retryable. - 404
Unknown symbol (
symbol_not_found). Refunded. - 429
Per-minute rate limit exceeded.
- 503
The credit ledger or datafeed is temporarily unavailable.
Response fields
sstringrequiredStatus flag.
oktinteger[]requiredBar open times, Unix seconds (UTC), oldest-first.
onumber[]requiredOpens.
hnumber[]requiredHighs.
lnumber[]requiredLows.
cnumber[]requiredCloses.
vnumber[]requiredVolumes.
bvnumber[]Buy (aggressor) volume per bar, equities where available.
svnumber[]Sell (aggressor) volume per bar.
uvnumber[]Unclassified volume per bar.
Last updated