Rate limits
Limits depend on your plan. REST and streams are metered separately.
REST
REST has two independent controls: a per-key per-minute burst and a per-user monthly quota (monthlyRequests). Exceeding either returns 429 with rate_limited or quota_exceeded, plus a Retry-After header. Wait that long, then retry. WebSocket traffic is not counted against the monthly REST quota.
Burst ceilings are enforced with a 1-minute window on the gateway rate-limit plugin (not a true sliding window). Limits are per API key. Every HTTP call costs 1 against burst — including batch endpoints.
Monthly quota is per item for batch routes: GET /v1/tokens/batch and /tokens/batch/price charge one quota unit per unique mint (max 50). Other REST routes charge 1 per call. Responses include X-Request-Cost with the charged weight, alongside X-Quota-*.
| Plan | Req / minute | Req / month |
|---|---|---|
| Free | 30/min | 2.5k |
| Starter | 300/min | 250k |
| Pro | 600/min | 2.5M |
| Enterprise | Custom | Custom |
HTTP/1.1 429 Too Many Requests
Retry-After: 2
Content-Type: application/json
{ "error": { "code": "rate_limited", "message": "…" } }Streams
Stream event delivery is not counted against REST rate limits. Your plan caps concurrent subscriptions per channel across your account — every WebSocket connection and every API key shares one counter (Free: 1, Starter: 1, Pro: 2). One connection may subscribe to multiple channels, but opening a second connection does not raise the per-channel cap. Exceeding it returns a stream error frame with code subscription_limit. See Connection limits for details.