Usage terms
Access to the Platform API is granted for personal, non-commercial use only. Commercial use, including redistribution or resale of data, is not permitted, and commercial licensing is not available at this time.Quotas
- Windows are fixed. The full quota comes back at once when the window resets, at the time in
x-ratelimit-reset. Unused credits do not carry over. - Keys share one balance. Another key does not add credits: every key on the account spends the same quota.
- REST and WebSocket are counted apart. Streams never spend REST credits, and REST requests never spend stream credits.
What REST requests cost
- 1,000 credits is the floor. Three candles cost as much as a thousand, and a range with no data still costs 1,000.
- TPO is priced per period. With
mergeSessions=GROUP_BY_TYPEyou get one profile per session type for every period at no extra cost. - No request costs more than 10,000 credits. A request returns at most 10,000 candles, 1,000 footprint profiles or 400 TPO profiles, see Request limits.
- Rejected requests are free. A request answered with
400,404or429costs nothing.
What streams cost
The last column assumes every stream is of one kind. Mixed streams share the 1,000 credits: for example, 50 candle streams and 10 order books.
A stream is charged per subscription, never per frame:
- When data starts to flow. The price is taken once upstream data confirms the subscription. A stream that ends on a terminal upstream error before that costs nothing.
- Again in every window it stays open. Right after each 300-second window resets, every open stream pays its price again. That makes the WebSocket quota a cap on how many streams you hold at once, and a stream opened shortly before a reset pays for both windows.
- Again on every reconnect. A new connection is a new subscription.
429. If the window is already spent when an open stream is due to renew, the stream ends with an error frame with code rate_limited, followed by a normal close.
Quota headers
Every authenticated REST response and every WebSocket handshake response carries the state of the window:
On REST,
x-ratelimit-remaining already includes the price of the request it came with. On a handshake it is read before the stream is charged, because the price is taken once data starts to flow.
When the quota runs out
A REST request that the remaining credits cannot cover is rejected with429, and a Retry-After header gives the seconds left until the window resets:
429. The rejection itself costs nothing. A WebSocket handshake that fails on credits answers the same way, with 429 and Retry-After.
To stay under the quota, watch x-ratelimit-remaining as you go and spread heavy requests across windows: ten requests for 10,000 candles each spend a whole minute of REST credits.
Request limits
A single REST request is capped:
A range over the cap is rejected with
400 and code too_much_data before anything is billed, and the message names the cap it hit. Narrow from and to, use a longer timeframe, or split a long history into several requests. It is never a rate limit, so sending the same request again will not help.
A candle limit above 10000 is different: that is a bad parameter value rather than an oversized range, and it comes back as invalid_argument.
History depth
Candles cover the full history we hold for each security. Volume footprint and TPO reach back less far. Volume footprint keeps a fixed number of calendar days per timeframe, counted back from the security’s newest candle, which is now while it trades:
A
from older than the limit is trimmed rather than rejected: the response starts at the limit, and its first profileStart is the real start. A range that ends before the limit comes back empty and still costs 1,000 credits. On the live footprint stream, a rangeTruncated frame tells you the limit moved since forward.
TPO has no depth limit per timeframe, only the 400-profile cap per request.
Both start on 29 May 2026, the day we began collecting the data they are built from; weekly profiles start with the week that contains it, on 25 May. Where a limit above reaches further back, history starts on that date. There are no plans to backfill earlier periods: that would take historical tick data, which not every exchange makes available.