Docs
API Reference

Rate Limiting

API rate limits and how to handle them gracefully.

Limit

The Ticket0 API is rate-limited to 60 requests per minute per workspace. The limit is shared across every API key in a workspace — adding more keys doesn't raise it.

For higher limits on a dedicated plan, contact support.

When you exceed the limit

Requests over the limit get a 429 response:

HTTP 429 Too Many Requests
Retry-After: 42
{
  "error": {
    "code": "RATE_LIMITED",
    "message": "Too many requests. Please slow down."
  }
}

The Retry-After response header holds an integer number of seconds to wait before retrying. Parse it rather than hard-coding a delay — the window resets based on the time of your first request in the current minute, not a fixed boundary.

Handling 429s

  • Respect Retry-After. Sleep for at least that many seconds before the next request.
  • Back off on repeat. If you get a 429 twice in a row, double the wait time on each retry (exponential backoff with a cap).
  • Don't retry synchronously in user-facing code. Queue the work and retry off the request path.

Pagination

If you're polling lists, use cursor-based pagination rather than many small requests. Responses that support pagination include a nextCursor field; pass it as the cursor query parameter on the next request:

# First page
curl "https://app.ticket0.ai/api/v1/tickets?limit=100" \
  -H "Authorization: Bearer t0_your_api_key"

# Next page (using cursor from previous response)
curl "https://app.ticket0.ai/api/v1/tickets?limit=100&cursor=cur_01abc..." \
  -H "Authorization: Bearer t0_your_api_key"

When nextCursor is null, you've reached the last page.

Best practices

  • Use the maximum limit (100) when fetching large datasets to reduce request count
  • Implement exponential backoff when you receive a 429
  • Cache responses that don't change frequently (tag lists, knowledge-base articles)
  • Use webhooks for real-time events instead of polling the API — a single subscription replaces a continuous poll loop

On this page