Rate limits & quotas

How per-second limits and monthly quotas work, and how to build well-behaved clients.

Two independent controls apply to every API key:

  • Rate limit — sustained requests per second, enforced as a token bucket with burst capacity equal to your plan's rate. Short bursts up to the limit are fine; sustained excess is rejected.
  • Monthly quota — total successful requests per calendar month, shared across all APIs. Quotas reset on the first of the month at 00:00 UTC.

Plan limits

This table is generated from the same configuration the gateway enforces:

PlanRequests / monthSustained rateBurst
Free1,0002 req/s2 requests
Starter50,0005 req/s5 requests
Growth250,00015 req/s15 requests
Scale1,000,00050 req/s50 requests
EnterpriseCustomCustomCustom

Response headers

Every rate-limited response — success or rejection — carries the current state:

x-ratelimit-limit: 15          ← plan's sustained requests/second
x-ratelimit-remaining: 14      ← tokens left in the bucket right now
x-ratelimit-reset: 1785503186  ← epoch seconds when the bucket refills
x-quota-limit: 250000          ← monthly quota
x-quota-remaining: 249862      ← requests left this month
x-quota-reset: 1785542400      ← epoch seconds at the next monthly reset

When you exceed a limit

ExceededResponseWhat to do
Requests/second429 RATE_LIMIT_EXCEEDED + Retry-AfterWait Retry-After seconds, then retry
Monthly quota429 QUOTA_EXCEEDED + Retry-AfterUpgrade the plan, or wait for the reset

There are no automatic overage charges — when a quota is exhausted, requests are simply rejected until you upgrade or the month rolls over.

Client best practices

  • Watch x-ratelimit-remaining and pace proactively instead of reacting to 429s.
  • On 429, sleep exactly Retry-After seconds — it is calculated, not a guess.
  • Add jitter when many workers share one key, so refilled tokens are not consumed in a stampede.
  • Alert your team when x-quota-remaining drops below ~10% — before production traffic stalls.