Limits
Rate limits vary by workspace type:
| Workspace | Requests/minute | Burst/second |
|---|
| Live | 3,000 | 30 |
| Sandbox | 100 | 5 |
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.
Every response includes rate limit information:
X-RateLimit-Limit: 3000
X-RateLimit-Remaining: 2988
X-RateLimit-Reset: 1704067200
| Header | Description |
|---|
X-RateLimit-Limit | Maximum requests per minute |
X-RateLimit-Remaining | Requests remaining |
X-RateLimit-Reset | Unix 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.