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 limits how many connections per stream you can hold open at once — each WebSocket connection is one stream, subscribed to a single channel (Free: 1, Starter: 1, Pro: 2). See Connection limits for details.
Subscribe and unsubscribe messages are rate-limited to 10 per second per connection. Exceeding this returns a stream error frame with code rate_limited.