R
Docs
API Documentation

Rate limits

The numbers + how to handle 429 responses.

1 min read Updated 5/28/2026developer

Default limits

| Endpoint family | Limit | Window | |---|---|---| | Public (no auth) | 60 requests | per minute per IP | | Tenant-scoped (platform_session) | 600 requests | per minute per tenant | | Admin (admin_session) | 1,200 requests | per minute per user | | Webhooks inbound | 240 events | per minute per source | | Auth (login, register, password reset) | 30 attempts | per 15 minutes per IP |

Enterprise contracts can raise any of these.

When you hit the limit

HTTP
HTTP/1.1 429 Too Many Requests
Retry-After: 17
Content-Type: application/json

{ "error": "Rate limit exceeded", "retryAfterSeconds": 17 }

The Retry-After header is always set (whole seconds). Back off until it elapses; further requests before then return 429 again without resetting the timer.

Best practice

  • Don't poll faster than necessary. Most list endpoints accept since= query params; use that instead of full re-fetches.
  • Respect Retry-After exactly — don't half-back-off. The server will tell you when the door opens.
  • Spread parallel requests across a sliding window — a burst of 60 in one second hits the per-minute IP limit for the rest of the minute.
  • Authenticate. Authenticated requests get a 10× higher limit than anonymous.