Skip to main content

Limit behavior

Every request is subject to an account-wide default of 120 requests per 60-second window. A handful of endpoints carry a tighter, endpoint-specific limit on top of that default, because they’re either expensive, carrier-facing, or an abuse surface: Every other endpoint is subject only to the 120/60s account-wide default. When you exceed a limit, the request fails with:
These are the limits coded today — they can change, and a limit tied to your specific account plan may differ. Read the rate-limit headers at runtime rather than hardcoding these numbers into alerting thresholds.

Relevant headers

A 429 response itself only carries one header: Retry-After (seconds until you can retry). The X-RateLimit-* headers below are only sent on requests that succeeded (i.e. weren’t throttled) — read them to see how close you are to the limit before you hit it, not as part of handling the 429 itself:

Handling throttling

  • Treat 429 RATE_LIMITED as a signal to slow down, not a bug to route around by hammering the endpoint faster.
  • Apply backoff per endpoint — a limit on renew-number doesn’t mean your other calls are also throttled, so don’t globally pause your whole integration in response to one endpoint’s 429.
  • Never retry a 429 immediately in a tight loop; it will not succeed sooner and behaves poorly for every other caller sharing your account’s limit.
Retry-After (on the 429 itself) tells you when to retry — prefer waiting at least that long. As a general-purpose fallback (or when you want to smooth out repeated throttling rather than waiting for one window), use exponential backoff with jitter:
Bound maxAttempts — an unbounded retry loop against a sustained 429 just extends an outage into your own system.

Next steps