Skip to content
Open Breno

Rate limits

120 requests a minute per token and 300 per IP address for token traffic, the Retry-After header, and how to stay under them.

Token traffic is limited so that one integration cannot crowd out the rest.

The limits#

  • 120 requests per minute per token.
  • 300 requests per minute per IP address, across all tokens, for token traffic.
  • The workspace's normal per-user limits also apply.
  • Export jobs have their own limits: three running and ten a day per caller.

When you exceed one#

The response is 429 with the code RATE_LIMIT_EXCEEDED and a Retry-After header giving the number of seconds to wait.

A rate-limited response
HTTP/1.1 429 Too Many Requests
Retry-After: 12

Wait that long and retry. Do not retry sooner: it extends the wait.

Staying under#

  • Page, do not poll. List with limit (up to 200) and follow offset instead of many small calls.
  • Cache what does not change. An item's text changes only when it is edited; use updated_since to fetch only what changed.
  • Back off on 429 and 5xx, exponentially with a little jitter, and honor Retry-After.
  • Prefer search to ask for lookups. Search does not call a model and costs no coins.
  • Use idempotency keys on writes so a retry is safe.

Limits on the source side#

Syncing a connected source is a different matter: Breno keeps its own request budget per provider so a busy provider slows a sync rather than failing it. See Provenance and sync.