Default limits
Both limits are enforced and can be customized per API key when creating the key in the Dashboard.
Rate limit headers
Every response to a request authenticated with an API key includes these headers (requests authenticated with a Dashboard JWT are not rate limited and carry no headers):
Example response headers:
When you hit the limit
When rate limited, the API returns429 Too Many Requests with Retry-After: 60 (minute window) or Retry-After: 3600 (hour window):
Handling rate limits
Proactive: Check headers before hitting the limit
Reactive: Retry on 429
Tips for staying within limits
- Batch reads with pagination — Use
limit=100to fetch more data per request - Use
PUT /forwarding-slotsto replace all slots in one request instead of multiple creates/deletes - Cache responses when possible — Agent configurations change infrequently
- Use the status endpoint (
GET /agents/{id}/status) instead of the full agent endpoint when you only need active/schedule status - Spread requests over time — Avoid burst patterns; space requests evenly across the minute window
- Request higher limits — If your integration needs more throughput, set custom rate limits when creating the API key in the Dashboard