Skip to main content

Limits

Rate limits vary by workspace type:
WorkspaceRequests/minuteBurst/second
Live3,00030
Sandbox1005
Pricing is usage-based. There are no plan tiers - everyone gets the same limits. Contact support if you need higher limits for planned traffic spikes.

Response headers

Every response includes rate limit information:
X-RateLimit-Limit: 3000
X-RateLimit-Remaining: 2988
X-RateLimit-Reset: 1704067200
HeaderDescription
X-RateLimit-LimitMaximum requests per minute
X-RateLimit-RemainingRequests remaining
X-RateLimit-ResetUnix timestamp when limit resets

Handling 429 errors

When you exceed rate limits, you’ll receive a 429 Too Many Requests response:
{
  "error": "Rate limit exceeded",
  "retry_after": 30
}
Implement exponential backoff when retrying:
async function fetchWithRetry(url, options, maxRetries = 3) {
  for (let attempt = 0; attempt < maxRetries; attempt++) {
    const response = await fetch(url, options)

    if (response.status === 429) {
      const retryAfter = response.headers.get("retry-after") || 2 ** attempt
      await new Promise((r) => setTimeout(r, retryAfter * 1000))
      continue
    }

    return response
  }
}
Repeatedly exceeding rate limits may result in temporary API access suspension.

Best practices

  • Cache responses - Reduce API calls by caching data that doesn’t change frequently
  • Use webhooks - Subscribe to events instead of polling for updates
  • Batch operations - Use list endpoints instead of fetching items individually
  • Monitor headers - Track X-RateLimit-Remaining to avoid hitting limits

Need higher limits?

Contact [email protected] with your workspace ID and expected traffic volume. We’ll coordinate capacity ahead of time.