Rate limits are tracked per API key (by workspace), and unauthenticated requests fall back to per-IP tracking. If multiple time windows are exceeded simultaneously, the most restrictive limit applies.
429 Response
When you exceed a rate limit, you’ll receive a429 Too Many Requests response:
The response also includes rate-limit headers:
Retry-After, X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset. Use Retry-After or retryAfterSeconds to decide when to retry.
Best Practices
- Use webhooks instead of polling. Webhooks notify your server immediately when a run completes, eliminating the need for polling the run results endpoint.
- Use our SDKs. The TypeScript and Python SDKs use server-sent events for real-time updates, avoiding polling entirely.
- Implement exponential backoff. If you receive a
429, wait forretryAfterSecondsbefore retrying and increase the delay on subsequent failures.

