Skip to main content

Price history

Daily and intraday bars of every family share one shape. For indicators computed from the bars, see technicals.

A stock's daily bars for the last year:

curl "https://api.tauric.ai/v1/securities/AAPL/history?period=1y" \
-H "Authorization: Bearer $TAURIC_API_KEY"

For the year before, send coverage.continue_end as end with the same period, until continue_end is null. Stocks and ETFs covers the stock routes.

Routes​

bars ofrouteperiodinterval
a stock or ETFGET /v1/securities/{symbol}/history1d 5d 1mo 3mo 6mo ytd 1y1d, 15m, 60m (with days)
a continuous futureGET /v1/futures/{root}/continuous/history1d 5d 1mo 3mo 6mo ytd 1y1d
an FX pairGET /v1/fx/{pair}/history1d 5d 1mo 3mo 6mo1d
a crypto pairGET /v1/crypto/pairs/{pair}/history1d 5d 1mo 3mo 6moUTC days
an index, yield, or volatility seriesGET /v1/series/{key}/history1d 5d 1mo 3mo 6mo1d

Every route takes end to page back (history paging); none takes start.

{"instrument": {"key": "future:XCME:ES/continuous", "name": "E-mini S&P 500", "currency": "USD",
"price_scale": null, "price_precision": null, "venue": "XCME",
"field_states": {"price_scale": {"state": "unavailable", "reason": "quoted_in_points", "retry": "never"}},
"...": "..."},
"interval": "1d", "price_basis": "unadjusted",
"coverage": {"requested": {"period": "5d", "days": null, "end": null}, "from": "2026-09-21",
"through": "2026-09-25",
"complete": true, "complete_reason": null, "window_bound": null,
"available_from": "2021-09-27", "continue_end": "2026-09-18",
"skipped_sessions": [], "pending_session": null, "revision_window": {"...": "..."}},
"freshness": {"refreshed_at": "2026-09-26T13:00:00.000000Z", "stale": false,
"session_calendar": {"id": "cme.equity_index"}, "field_states": null},
"bars": [{"date": "2026-09-24", "start": null, "open": 7741.25, "high": 7768.5, "low": 7730.0, "close": 7752.75,
"volume": 812344, "status": "unsettled", "session_complete": true, "field_states": {}},
{"date": "2026-09-25", "start": null, "open": 7759.0, "high": 7814.75, "low": 7748.5, "close": 7803.75,
"volume": null, "status": "unsettled", "session_complete": true,
"field_states": {"volume": {"state": "withheld", "reason": "unreliable", "retry": "never"}}}]}

Two of the window's five bars are shown; both are unsettled (settlement).

Response fields​

Every field is described in the API reference. To use them:

  • price_basis: split_dividend_adjusted for a security (splits and cash dividends applied back, so a past close is below the price that traded; volume is split-adjusted only), or unadjusted. Before a listing's first recorded distribution, its bars are adjusted for splits only.
  • day_boundary (crypto pairs only): utc_midnight. A bar is the UTC day, not a session close.
  • A bar's null value says why in the bar's field_states.

Coverage​

  • complete says whether every session of the window is served as a bar or named in skipped_sessions. It says nothing about values: each bar's field_states does. false comes with complete_reason; null means not assessed.
  • continue_end is the end to send, with the same period or days, for the next older window; null when no older session is held.
  • skipped_sessions names each unserved session with its reason. An intraday session that cannot be put on the served adjustment basis is skipped (not_held), never served unadjusted.
  • pending_session is a completed session whose bar is not available yet.
  • revision_window.revisable says which recent bars may still change; a correction to an older bar is not shown.

A window is plainly complete only when complete is true and no bar carries a field_states entry.

Incomplete windows​

complete_reasoncompletemeaning
insufficient_historyfalsethe window reaches before the history held; it is served from its first held session
temporarily_unavailablefalsea completed session has no bar yet (pending_session), or earlier intraday sessions may still be filled
possibly_incompletefalsecrypto days: a day inside the window is missing or still pending; never read it as a day without trades
not_assessednullthe expected sessions are not assessed (some FX, futures, and index windows; intraday bars)

An end before any held history is refused 404 insufficient_history (history paging).

Incomplete intraday sessions​

coverage.incomplete_sessions lists intraday sessions holding fewer bars than their trading hours imply, each {date, bars, bars_expected, reason}: temporarily_unavailable (may still be filled) or not_held (will not be).

Session calendars​

freshness.session_calendar.id (FX, futures, and index bars) names the calendar the window's sessions are dated on. A trading day ends:

used forthe day ends
a continuous futureat the family's close, Chicago time: 16:00 for equity index, interest rate, energy, metals, and dairy; 13:20 for the grains; 13:05 for livestock
an index or yield series16:15 New York (the US Dollar Index 17:00)
an FX pair23:59 London, every weekday
the softs (coffee, sugar, cocoa)weekdays less the NYSE closures

A market holiday inside a window has no bar, and the response does not name it.

Bars​

Completed sessions only​

A history serves completed sessions only; a session in progress is the quote's. For FX, futures, index, and yield bars, the newest session is named in pending_session until its final bar is available (on a Monday afternoon a futures history ends on Friday's bar).

Withheld bars​

An FX, futures, or index bar can be served with every value null and unreliable; the technicals skip it.

Close-only series​

A close-only series (the MOVE, one level a day) serves each bar's close only. Its open, high, and low are null with unreliable, as are its quote's day range and the range indicators (technicals).

Settlement​

statusmeaning
settledfinal: the bar does not change
unsettlednot final: it may still change, or its close is missing. A futures or index bar inside revision_window, a session with no bar, a series bar with no close, and every FX bar (its close is withheld) stay unsettled

settled is not an exchange settlement price: a futures bar's close is the daily close. A bar can be session_complete: true and unsettled. A departed listing's unsettled bars stay so (listing lifecycle).

History windows​

1d and 5d are the newest 1 and 5 served sessions. A calendar period counts back from the newest served session: 1mo over bars through Friday 2026-09-25 is 2026-08-26 to 2026-09-25. ytd starts on 1 January of that session's year.

datadepthone responsefurther
security daily barsthe listing's history, from coverage.available_froma period up to 1yend = coverage.continue_end
security intraday bars15m and 60m over a recent window that varies by listing and interval (coverage.available_from)days sessions (at most 7 at 15m, 28 at 60m)end
FX, futures, and index barsup to 5 yearsup to 6mo (1y for a continuous future)end
crypto daily barsfrom 2024-07-01, or from the pair's first traded day if later (coverage.available_from)up to 6moend

A security's intraday bars are available after the session ends. Its intraday volumes do not sum to the daily bar's volume: use the daily bar for a day's volume.

When the data is behind​

freshness.stale is defined on freshness. For the bars:

windowwhen the served data is behind
a security's daily window, any periodrefused 503 temporarily_unavailable, so a served window has stale false (null for a delisted or departed listing)
a security's intraday windowstale is null with not_assessed
period=1d or 5d of an FX, futures, index, or crypto windowrefused 503 temporarily_unavailable when the newest bar is too old to stand for the latest sessions
a longer period of an FX, futures, or index windowrefused 503 temporarily_unavailable when the window holds no recent bar; otherwise served, with stale true once a session's bar is overdue
a longer period of a crypto windowserved, with stale true once a day's bar is overdue

For FX, futures, index, and crypto bars, a window anchored on a past end is not refused as stale.