Skip to main content

tickstream (Python)

CME futures, options and dealer-gamma data over REST and WebSocket.

21 endpoints, 12 option-history request types, 6 streaming channels — the complete API. Coverage is asserted by sdk/check-coverage.mjs against a manifest generated from the gateway's own router, and every call in the table below is exercised against production before release.

Install

pip install "tickstream[stream]"      # omit [stream] for REST only — zero dependencies

Quickstart

from tickstream import Tickstream

ts = Tickstream()                       # reads TICKSTREAM_API_KEY
print(ts.quote("NQ"))

for tick in ts.stream("NQ", "ES"):
    print(tick["symbol"], tick["price"])

Everything you can call

what call
quote ts.quote("NQ")
symbols ts.symbols()
recent ticks ts.ticks("NQ", start=…)
deep ticks ts.history.ticks("NQ", start=…, end=…)
deep L2 book ts.history.book("NQ", start=…, end=…)
legacy chain archive ts.history.options("QQQ", source="archive")
live chain ts.options.chain("QQQ")
option history (12 types) ts.options.eod(underlying="QQQ", date="20260715")
dealer gamma, live ts.gex("NQ")
dealer gamma, past ts.gex("NQ", date="2026-07-15")
participant flow ts.participants("NQ")
CFTC positioning ts.cot("NQ", weeks=8)
algo catalogue / record ts.algos.list() · ts.algos.track(id)
orders, positions, fills ts.exec.positions()
place / close / protect ts.exec.order({...})
stream for t in ts.stream("NQ","ES"): …

Three things that will bite you otherwise

1. ticks() without start returns one hour. Not seven days — one hour. The window reaches back seven days on any plan and years with an archive plan, but you have to ask: pass start. This is the single most common integration surprise.

2. Timestamps come in two units. Range arguments are unix seconds; tick rows are stamped in microseconds. They differ by a factor of a million, and comparing them returns nothing rather than raising — so this SDK converts for you rather than documenting it and hoping.

3. Two opposite symbol conventions. gex() and participants() take the futures or stock symbol (NQ, ES, AAPL) and map onto the deep ETF surface internally. options and history.options take the ETF or index root (QQQ, SPY, SPX). Passing QQQ to gex() is a 400 unsupported_symbol.

Errors

Every failure carries the API's machine-readable code, which is stable and worth branching on. A 403 whose code ends in _required means the endpoint works and your key does not hold that package — distinct from an invalid key, without parsing prose.

Entitlements per endpoint

endpoint needs parameters
GET /v1/algos included —
GET /v1/algos/:id/events included —
GET /v1/algos/:id/signal included —
GET /v1/algos/:id/track included —
GET /v1/cot included symbol, weeks
POST /v1/exec/close execution —
GET /v1/exec/fills included —
POST /v1/exec/order execution —
GET /v1/exec/orders included —
GET /v1/exec/positions included —
POST /v1/exec/protect execution —
GET /v1/gex gex underlying, symbol, weight, dte, at, date
GET /v1/history/book data:nq-ticks end, limit, start, symbol
GET /v1/history/options data:options-data end, limit, source, start, underlying
GET /v1/history/ticks data:nq-ticks end, limit, start, symbol
GET /v1/options options_stream underlying
GET /v1/options/:req options —
GET /v1/participants gex underlying
GET /v1/quote included symbol
GET /v1/symbols included —
GET /v1/ticks included end, start, symbol

included means every plan that can reach the API at all. data:* is an archive window, gex/options/execution are the product packages — see https://tick-stream.xyz/pricing.

Streaming, and why silence is not a bug

Every frame carries a type, ticks included. A filter that skips anything with a type therefore drops all the data and leaves a socket that looks connected and delivers nothing — this SDK handles that. Error frames are never swallowed either: a refused symbol is exactly the failure that reads as a quiet market.

Index levels (SPX, VIX, NDX, RUT) are quotes, not trade prints: they update on change, roughly every two seconds. A flat VIX genuinely sends nothing. A liquid future going quiet for minutes is worth reporting.

Docs

https://tick-stream.xyz/docs/sdks · machine-readable: https://tick-stream.xyz/llms-full.txt

Metadata

Release files for tickstream 1.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tickstream 1.1.0
File Size Uploaded
tickstream-1.1.0.tar.gz 10.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for tickstream 1.1.0
File Interpreter ABI Platform
tickstream-1.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 19.5 kB

Release files / tickstream-1.1.0.tar.gz

Download URL tickstream-1.1.0.tar.gz
Size 10.4 kB
Tags Source
SHA-256 checksum
How to use checksums
a9a0b65cada376b0cff9c246d25ccf64423b8c979878b7219245e2bf0690562d
BLAKE2b-256 checksum
How to use checksums
d8f7e995c2b8dc86794edaeb1b21700170d3a04f422dbe666544e56676a45443
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.3

Release files / tickstream-1.1.0-py3-none-any.whl

Download URL tickstream-1.1.0-py3-none-any.whl
Size 9.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f134506ab3cc8f917e645f625d11985438027a7d7f8fa338a8add2e329f1d26a
BLAKE2b-256 checksum
How to use checksums
318f0cbdbb43e18862de915a0aa18ec1a734e15593fbceae0f796313a1476db4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.3

Release history Release notifications | RSS feed

This release

1.1.0 This release

2 release files

1.0.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page