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, list/read conversations, list webhook endpoints.
Write60 req/minCreate/update/delete agents and conversations, visitor/human send, action‑result, webhook create/delete, delete sources.
Training20 req/minCreate sources, retrain sources, start crawls.
Polling200 req/minPoll crawl results, training‑job status, and conversation messages.

The high polling allowance is deliberate: training, crawls, and AI replies are asynchronous, so you are expected to poll those 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
/agents/{agent}/conversationsGETRead
/agents/{agent}/conversationsPOSTWrite
/agents/{agent}/conversations/{conversation}GETRead
/agents/{agent}/conversations/{conversation}PATCHWrite
/agents/{agent}/conversations/{conversation}DELETEWrite
/agents/{agent}/conversations/{conversation}/messagesGETPolling
/agents/{agent}/conversations/{conversation}/messagesPOSTWrite
/agents/{agent}/conversations/{conversation}/human-messagesPOSTWrite
/agents/{agent}/conversations/{conversation}/messages/{message}/action-resultPOSTWrite
/agents/{agent}/webhook-endpointsGETRead
/agents/{agent}/webhook-endpointsPOSTWrite
/agents/{agent}/webhook-endpoints/{endpoint}DELETEWrite

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.