tickstreamdocs

DOCS

REST API

A small REST surface for latest quotes, historical backfill and reference data.

The REST API complements the stream: use it for the latest quote, to backfill history before going live, and to list reference data. Base URL: https://api.tick-stream.xyz/v1. All requests need an API key. Times you send may be ISO-8601 UTC or Unix seconds; times we return are Unix seconds, except tick rows, whose ts is Unix microseconds.

GET /quote

The latest trade and top-of-book for a symbol.

ParamRequiredDescription
symbolyesThe instrument, e.g. ES.
curl "https://api.tick-stream.xyz/v1/quote?symbol=ES" \
  -H "Authorization: Bearer sk_live_…"
{
  "symbol": "ES",
  "price": 5283.25,
  "bid": 5283.00,
  "ask": 5283.25,
  "ts": 1749556800,
  "price_ts": 1749556800,
  "quote_ts": 1749556800
}

GET /ticks

Recent ticks for a time window, reaching back 7 days (a start further back is clamped, and the response says so in window and note). Results are ordered by time, oldest first by default. Older data is on the history endpoints.

That default matters when you combine it with limit: the rows are taken from the start of the window, so limit=1 returns the OLDEST tick in range, not the most recent one. For the latest trade, pass order=desc, which takes them from the other end and returns them newest first. Every response now states which it did in an order field, so you never have to infer it.

ParamRequiredDescription
symbolyesThe instrument, e.g. ES.
start / endnoISO-8601 UTC (2026-06-10T13:30:00Z) or Unix seconds. Defaults: end = now, start = one hour before end.
limitnoMax rows (default 10,000, max 100,000). Taken from the start of the window unless order=desc.
ordernoasc (default, oldest first) or desc (newest first). ?limit=1&order=desc is the last trade in the window.
curl "https://api.tick-stream.xyz/v1/ticks?symbol=ES&limit=1000" \
  -H "Authorization: Bearer sk_live_…"
from tickstream import Tickstream
r = Tickstream("sk_live_…").ticks("ES", limit=1000)   # last hour
print(r["count"], "ticks", r["ticks"][0])

The response carries count and truncated. If truncated is true, request the next page with start = the last row's ts divided by 1,000,000 and rounded down (rows are in microseconds, start in seconds), and drop the rows you already have. The window reaches the current second; for a continuous feed use the WebSocket stream.

GET /l3

Replay of order-level depth — every individual order's new/change/delete with its exchange order id, queue priority, sequence number and nanosecond stamp. Windows are capped at one hour per request, and the archive starts when order-level recording was switched on (there is no vendor MBO history). Full field reference on the L3 page.

GET /cot

Weekly CFTC Commitments of Traders positioning for the index futures — refreshed automatically after each Friday release (data as of Tuesday).

ParamRequiredDescription
symbolyesES, NQ, YM or RTY.
weeksnoNumber of weekly reports, newest first (default 52, full history available).

Each report carries open_interest, change_oi and long/short/net for non-commercials (large specs) and commercials (hedgers), and long/short for non-reportables (small traders). Available on legacy Pro, Ultra and All-in-One plans; no current package includes it.

GET /symbols & GET /options

Reference data lives at /symbols (all instruments) and /options?underlying= (latest chain snapshot). See those pages for the full parameters and response shapes.

GET /history/*

The endpoints above serve recent data. For older ticks and Level 2 use /history/ticks and /history/book, included in the futures packages within their history window (1 year Realtime, 5 years Realtime + L2, 7 years L3). Coverage differs by symbol: NQ reaches back to 2019, ES ticks to 2014, other symbols start with our own recording. Options history is under /v1/options.

GET /algos

The live-tested algos are queryable over REST: GET /v1/algos (catalog) and GET /v1/algos/{id}/track (full backtest + live track record) are public; GET /v1/algos/{id}/signal and /events return the current signal and live event feed once you rent that algo.

tip

For continuous live data prefer the WebSocket stream — REST is best for snapshots and backfill, not high-frequency polling. See rate limits.