Skip to main content
Limits are applied per API key. If you need higher limits, contact us with your workspace id and the use case.

Response headers

Every response - success or error - carries the current state:
  • X-RateLimit-Limit - the cap for the method class on this key.
  • X-RateLimit-Remaining - how many calls you have left in the current window.
  • X-RateLimit-Reset - unix seconds when the window resets.
On 429, we additionally send Retry-After: <seconds>.

When you exceed the limit

Pacing strategy

The cheap and correct approach: pre-pace using X-RateLimit-Remaining rather than waiting for the 429.

Retrying after a 429

Honour Retry-After literally - don’t add jitter that beats it:
If you have multiple workers sharing one key, do not retry from every worker at the same instant. Add a small random jitter on top of Retry-After (e.g. 0–500ms) to spread the thundering herd.

Best practices

  • Use webhooks instead of polling list endpoints. See Webhooks.
  • Use the cursor’s has_more flag, not while (true), when paginating.
  • Batch writes at your end where the data model allows (e.g. one PATCH /companies/{id} with five fields instead of five PATCHes).
  • Share keys at the integration level, not per user. One key per “thing that calls us” is the sweet spot.