Rate Limits

Per-key request quotas and how to handle 429 responses.

Requests are rate limited per account — the limit is keyed to the API key's owner, so all keys belonging to the same user draw from one shared quota. Limits are grouped by operation class, so read traffic and write traffic are metered independently.

Limits

ClassLimitApplies to
Read120 req/minList/read agents, list AI models, list/read sources.
Write60 req/minUpdate & delete agents, delete sources.
Training20 req/minCreate sources, retrain sources, start crawls.
Polling200 req/minPoll crawl results and training‑job status.

The high polling allowance is deliberate: training and crawl jobs are asynchronous, so you are expected to poll their status endpoints frequently. Keep ingestion (training) calls well under the 20/min ceiling.

Which limit applies to each endpoint

EndpointMethodClass
/ai-modelsGETRead
/organizations/{org}/agentsGETRead
/organizations/{org}/agentsPOSTWrite
/agents/{agent}GETRead
/agents/{agent}PATCHWrite
/agents/{agent}DELETEWrite
/agents/{agent}/sourcesGETRead
/agents/{agent}/sources/{source}GETRead
/agents/{agent}/sourcesPOSTTraining
/agents/{agent}/sources/{source}/retrainPOSTTraining
/agents/{agent}/sources/{source}DELETEWrite
/agents/{agent}/training-jobs/{taskId}GETPolling
/organizations/{org}/crawlsPOSTTraining
/organizations/{org}/crawls/{taskId}GETPolling

When you exceed a limit

Exceeding a limit returns 429 Too Many Requests. The response includes standard rate‑limit headers:

HeaderMeaning
Retry-AfterSeconds to wait before retrying.
X-RateLimit-LimitMaximum requests allowed in the window.
X-RateLimit-RemainingRequests remaining in the current window.

Back off when you receive a 429. Respect Retry-After and use exponential backoff with jitter for retries rather than tight retry loops.