Skip to main content
Rate limits are applied per API key, using token buckets. A bucket holds a number of tokens (its burst), each request takes one, and tokens refill continuously at a steady rate. Short bursts are fine as long as your average stays under the refill rate. Requests to the payments endpoints take a token from both buckets. If you need more than this, use separate keys for separate systems, cache reads, and rely on webhooks instead of polling.

Response headers

Every authenticated response includes: On the charging and payments endpoints, these headers describe the stricter bucket.

When you’re limited

You get 429 Too Many Requests with a Retry-After header (in seconds) and this body:
Wait at least Retry-After seconds before retrying. A 429 is never stored against an Idempotency-Key, so retry with the same key.

Good practice

  • Spread batch jobs out instead of firing them all at once; the burst covers spikes, not sustained load.
  • Use limit=100 when walking lists, so you make fewer requests.
  • Subscribe to session.* webhooks rather than polling GET /sessions/{sessionId}.
  • Limits are an operational safeguard and may be enforced approximately. Don’t design around being able to send exactly the documented number.