Limits by endpoint class
GET /health uses the detail tier.
List and detail limits are independent — exhausting the list budget does not block detail requests.
Response headers
Every response includes rate limit headers:
When you exceed the limit, the API returns
429 with code RATE_LIMIT_EXCEEDED and a Retry-After header (seconds to wait). The error envelope may also include retry_after.
Best practices
- Backoff on 429 — sleep for
Retry-Afterseconds (or exponential backoff with jitter) before retrying. - Avoid tight polling loops — use reasonable intervals for agent tools; combine cursor pagination with backoff instead of hammering list endpoints.
- Cache view metadata —
GET /viewschanges infrequently; cache viewid→ name/filter mapping in your integration. - Batch sensibly — fetch message threads only for tickets you need, not every row in a list response.
Legacy /public/* limits
Deprecated legacy endpoints use different limits (30–300 requests / minute depending on endpoint). See the legacy OpenAPI reference if you still call /public/* during migration.