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-*.

PlanReq / minuteReq / month
Free30/min2.5k
Starter300/min250k
Pro600/min2.5M
EnterpriseCustomCustom
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.