Skip to main content
GET

What it is

For every symbol and completed session there are three gzip-compressed CSV files, built once the session is complete. They hold the full stored history, including every expiration and every strike, and are meant for backtests, spreadsheets and data pipelines. Two endpoints: Column layouts are in the data dictionary.

List files

GET /history/files/{exchange}/{coin} costs 1 request.
string
required
bybit, deribit, okx, derive, combined or tradfi. Venue subsets return 400 history_not_available.
string
required
Symbol, for example BTC, QQQ. Case-insensitive.
string
First session date, YYYY-MM-DD, inclusive. Default: the earliest. Years 2020 to 2100 are accepted.
string
Last session date, YYYY-MM-DD, exclusive. Default: the latest. start on or after end returns 400 invalid_param.
array
Newest session first, at most 400 rows. Use start / end to page through longer ranges. Each row: session_date, file (levels, strikes_total or strikes_by_expiry), rows, bytes, sha256 (of the gzip file) and schema_version.

Download a file

GET /history/files/{exchange}/{coin}/{date}/{file} answers 302 Found with a Location header: a presigned link to the file that is valid for up to 15 minutes. Request the link again whenever you need it. The 302 is sent with Cache-Control: no-store, so do not cache it either. Use GET. A HEAD request returns 405 method_not_allowed (with Allow: GET) and costs no credit.
string
required
Session date, YYYY-MM-DD.
string
required
levels, strikes_total or strikes_by_expiry.
The file is served as application/gzip and downloads as <date>_<file>.csv.gz, for example 2026-10-05_strikes_total.csv.gz.
The presigned link is self-authenticating. Fetch it without your X-API-Key header. Most HTTP clients, curl -L included, forward custom headers to the redirect target, so follow the redirect in two steps as shown below.

Credits

A successful download costs one file credit from the separate history_files daily bucket, not a request. A 400, 404 or 503 never costs a credit, because the input, the file and the link are checked and prepared first. The manifest listing is not a download: it costs a normal request. Limits and headers are in Rate limits; see your balance in /me. The 302 and the 429 carry: All three headers are missing if the quota service is briefly unavailable (the download then still proceeds). No Retry-After header is sent; read X-History-Files-Reset. Browser clients can read these headers (they are listed in CORS Access-Control-Expose-Headers).

Errors

error
No such file for that exchange, symbol, date and kind: the date is outside coverage or not built yet. Check the manifest or /history/coverage. Costs no credit.
error
The daily file credits are used up. The body repeats the figures under rate_limit, and the X-History-Files-* headers are set.
error
File storage is temporarily unavailable. Retry later. Costs no credit.
error
file is not one of the three kinds (the body includes valid_values), or a date is not YYYY-MM-DD. On the listing: a year outside 2020 to 2100, or start on or after end.
error
The download was requested with HEAD. Use GET. Costs no credit.
error
Venue subset. The body includes valid_exchanges.
The values above are illustrative. Verify a download against the manifest’s sha256 and bytes if you need to.