Pagination
Every list answers the same shape. History routes page back in time with end. Each parameter's maximum is in the
API reference.
Lists
{"object": "list", "data": [], "next_cursor": "opaque string, or null"}
Send limit for the page size. For the next page, send next_cursor unchanged as after, with the same filters.
next_cursor is null on the last page, and that is the only end signal: a page of long items can hold fewer than
limit and still have a next page. A list served whole always answers null.
curl "https://api.tauric.ai/v1/news?instrument=security:AAPL&limit=20" \
-H "Authorization: Bearer $TAURIC_API_KEY"
# the next page: after = the previous answer's next_cursor
curl "https://api.tauric.ai/v1/news?instrument=security:AAPL&limit=20&after=$NEXT_CURSOR" \
-H "Authorization: Bearer $TAURIC_API_KEY"
A route's own fields, such as coverage or freshness, sit beside data.
History
Every history route, daily and intraday, pages the same way. One response carries at most the period or days
window given in history windows.
end (a date, inclusive) anchors the window on the newest stored session on or before it. Every answer names the next
older window in coverage.continue_end: send it as end with the same period or days, until it is null.
# the newest 20 sessions
curl "https://api.tauric.ai/v1/securities/MSFT/history?interval=60m&days=20" \
-H "Authorization: Bearer $TAURIC_API_KEY"
# the next older page: end = the previous answer's coverage.continue_end
curl "https://api.tauric.ai/v1/securities/MSFT/history?interval=60m&days=20&end=2026-08-19" \
-H "Authorization: Bearer $TAURIC_API_KEY"
A period window pages the same way:
curl "https://api.tauric.ai/v1/securities/AAPL/history?period=1y&end=2025-10-02" \
-H "Authorization: Bearer $TAURIC_API_KEY"
Every stored session is served, or named in skipped_sessions, exactly once across the pages. The last page reaches
coverage.available_from, the earliest session held; a window asked beyond it states window_bound: history_depth.
end you send | what you get |
|---|---|
| at or after the newest session | the newest window; a completed session whose bar is not available yet is named in pending_session |
| a date that is not a session | the window anchored on the session before it |
| a future date | 422 invalid_request (param: end); it is never clamped |
before available_from | 404 insufficient_history (param: end), not an empty page |
A window that reaches only partly before the history held is served from its first held session and marked:
complete is false, with insufficient_history as the reason
(incomplete windows).
A longer period or days than one response carries is 422, naming the parameter.
Series observations, positioning, and reference rates
The same end and coverage.continue_end page /v1/series/{key}/observations (limit at most 110; end is
compared with each period's start, its first day) and /v1/futures/{root}/positioning (reports at most 33).
Two count-windowed routes also take start, a date that is the window's oldest period (inclusive):
/v1/series/{key}/observations and /v1/fx/{pair}/reference-rates. With ?start=2026-08-03 you get the newest
limit periods dated on or after it, and paging back stops there. A window holding no period is served empty
(none_in_period).
The bar /history routes take no start (422, naming the parameters they take). Their window is a period (or
days) back from end, so for "since a date", ask for the smallest period that covers it and drop the earlier bars.
Financials
Financials page per concept: by default 1 value per concept. A limit above 1 needs named concepts (422 invalid_request
on the default set), and fewer concepts allow a larger limit. Each concept states values_total and has_more, and offset
continues it.