Skip to Content
REST APIRate limits

Rate limits

Two independent limits apply to the data plane. They answer different questions, so hitting one tells you nothing about the other.

LimitWindowExceeded response
Request-unit quotaBilling period429 quota_exceeded
Short-term request ratePer second429 rate_limit_exceeded

The quota is the durable, billable limit — see Usage & quotas. The per-second rate is a burst control that protects shared capacity.

Per-plan rate

PlanRequests per second
Free2
Developer10
Pro25
Business50
Enterprise100 (or as agreed)

These are the defaults. The current values for every plan are on the website’s pricing page and in GET /v1/pricing.

Headers

Every billable data-plane response carries:

  • X-RateLimit-Limit — your plan’s per-second allowance.
  • X-RateLimit-Remaining — allowance left in the current second.

A throttled response additionally carries Retry-After, in whole seconds.

Throttled response — 429

{ "code": "rate_limit_exceeded", "message": "Short-term request rate exceeded for your plan.", "request_id": "...", "limit": 2, "retry_after_seconds": 1 }

A throttled request is not billed — it never reaches the rate store, so no request unit is consumed.

Handling throttling

Wait for Retry-After and retry. Because the window is one second, a single short sleep is almost always enough; exponential backoff with jitter is still the right shape if you are driving many concurrent workers.

Do not pattern-match on message. Branch on code: rate_limit_exceeded means “slow down and retry”, quota_exceeded means “this billing period is finished — retrying will not help”.