Every endpoint, and what it costs you.
REST over HTTPS, JSON responses, one bearer token. The endpoint list below is generated from the API's own specification, and the limits are read from the table the rate limiter enforces — neither is retyped by hand.
Quickstart
curl -H "Authorization: Bearer volar_sk_live_..." \
https://api.volardata.com/v1/chains/BTC
import volar
client = volar.Client(api_key="volar_sk_live_...")
# the current chain, every active instrument
chain = client.get_chain("BTC")
# a daily Parquet partition, straight from storage
path = client.download_file("BTC", "2026-07-14")
Base URL https://api.volardata.com. Keys are created in your
dashboard; Sandbox is free and needs no card.
An interactive console lives at https://api.volardata.com/docs.
Authentication
Send your key as Authorization: Bearer <key> on every
request. Keys look like volar_sk_live_…. We store only a
hash, so a lost key is replaced rather than recovered.
Pro includes three. Revoking one takes only that environment down, which is the whole reason to separate them before you need to.
Limits by plan
Read from the same table the API enforces, so this page cannot advertise
a ceiling that is not applied. Exceeding the request rate returns
429 with a Retry-After header.
| Plan | Requests / min | Concurrent | History | Files / day | Bulk window | Currencies |
|---|---|---|---|---|---|---|
| Sandbox | 10 | 1 | 14d | — | — | BTC |
| Pro monthly | 1,000 | 10 | 90d | 2 | 7d | AVAX BTC ETH HYPE SOL TRX XRP |
| Pro annual | 1,000 | 10 | full archive | 50 | 31d | AVAX BTC ETH HYPE SOL TRX XRP |
| Enterprise | 5,000 | 50 | full archive | 10,000 | 365d | AVAX BTC ETH HYPE SOL TRX XRP |
Full plan comparison on pricing.
Endpoints
31 endpoints, generated from the running API's specification (v1.0.0). If it is listed here it exists; if it exists it is listed here.
Max pain
GET /v1/analytics/{underlying}/max-pain reports, per expiry, the
strike minimising total intrinsic value across outstanding open interest:
pain(K) = Σ calls with strike < K of (K − strike) × OI
+ Σ puts with strike > K of (strike − K) × OI
K ranges over the strikes actually listed for that expiry, never a
synthetic grid. Ties resolve to the lower strike —
arbitrary but fixed, so the number is reproducible rather than dependent on
iteration order. There is more than one max-pain definition in circulation;
this is the one that produces our number, so a figure compared against
another vendor's can be checked against the formula that made it.
An expiry whose total open interest is zero returns null for that
expiry rather than a fabricated strike — a degenerate book with no position
to speak of, not an outage.
This endpoint is newly added — it may not yet appear in the generated list above until the evidence job next runs. The interactive console at https://api.volardata.com/docs already has it.
Errors
| Status | Meaning |
|---|---|
| 400 | Malformed parameter — the body names the one at fault. |
| 401 | Missing or unrecognised key. |
| 403 | Your plan does not reach this data. Includes asking for history older than your window, or a currency outside your plan. |
| 404 | No such instrument, date or file. |
| 429 | Over your request rate. Retry after the seconds given in Retry-After. |
| 5xx | Ours. It will appear on the operations record if it interrupted capture. |