mempool channel, which comes with the Pro, Scale and Enterprise plans. Otherwise, plans differ in capacity: how many requests you can send each second, how many can run at once, how many credits you can spend in a month, and how much WebSocket and replay capacity you get. Prices and checkout are on the pricing page.
Requests
What a request costs in credits is on Credits.
WebSocket and replay
Each connection accepts at most 10 subscribe or unsubscribe operations per second. WebSocket limits shows how to size a client to these numbers.
History
Free serves the most recent rolling 30 days, and one request or replay can span at most 30 days. Build and above keep the full retained archive, so the first served date of each dataset sets how far back a request can reach. Free tier has the rest of the Free plan.
Export credits and Webhook Alerts
Export credits reduce the cost of file exports, which are priced per order; see Exports. Unused export credits roll over, as Credits explains. The webhook allowance covers endpoints, rules, watched wallets and deliveries a day. Deliveries are counted per account across every endpoint and do not use API credits, and a rule that crosses the daily allowance pauses until you resume it; see Webhook Alerts.
When you reach a limit
Every metered REST response carries your current position in its headers:x-ratelimit-limit, x-ratelimit-remaining and x-ratelimit-reset for the per-second limit, and x-credits-limit, x-credits-used, x-credits-remaining and x-credits-reset for monthly credits. Reset values are Unix seconds.
A 429 is not always worth retrying. Read its error_code, and the field beside it, before you decide:
- Request rate:
429,error_coderate_limited, andretry_after, the seconds to wait. Wait that long, then retry at a lower request rate, within a fixed retry budget. - Concurrent queries:
429,error_coderate_limited, andmax_concurrent, your plan’s limit. There is no wait value: retry when one of your in-flight requests finishes, within the same budget, and cap your worker pool at the limit. - Monthly API credits:
429,error_codeinsufficient_credits, withcredits_usedandcredits_limit. Stop the job. A retry cannot succeed until credits reset atx-credits-resetor the plan changes. - Temporary unavailability:
503with aRetry-Afterheader. Wait that many seconds and retry within the budget. - WebSocket subscriptions: a subscribe beyond the plan’s limit gets an
errormessage witherror_coderate_limited. Unsubscribe from something first; a retry of the same subscribe fails the same way. - Mempool channel on Free or Build: a
mempoolsubscribe gets anerrormessage witherror_codeforbidden. A retry cannot succeed until the plan changes to Pro, Scale or Enterprise. - Standard replay speed: a replay that asks for more than the plan’s speed runs at the plan’s speed. Nothing to retry.
request_id in the error body, or the x-request-id header. Do not retry an authentication, malformed-request, unsupported-symbol or invalid-parameter error unchanged; fix the request first. Errors lists every status code and error_code.
Design clients around limits
Build clients as queues, not as unbounded loops. A historical job that knows its route, symbol, time window, page size, concurrency and retry budget before it starts can pause, resume and explain a run without duplicating data.1
Start with one symbol and one route
One BTC order-book request confirms authentication and the response shape. One one-hour trade window confirms pagination, latency and the output schema.
2
Split long pulls into windows
Retry or resume each window on its own, from its saved cursor, so one failure does not restart the whole job.
3
Keep heavy and light work apart
Run L3, L4, replay and long-history jobs in their own bounded worker pool, so one slow request cannot block freshness checks.
4
Set stop conditions
Stop or pause on a rate-limit response that persists, a credit threshold, stale data, a gap event or consumer lag, and record why the run stopped.