Rate limits
API request limits, rate-limit headers, and retry guidance
The Clarify API enforces a per-workspace rate limit. It's high enough that normal integration traffic rarely reaches it. It exists to protect the platform from runaway loops and accidental request floods.
Limit
3,000 requests per minute, per workspace, per endpoint. Each endpoint has its own budget, so heavy traffic against one endpoint doesn't throttle your requests to others.
The window is a rolling 60 seconds; once it resets, your full allowance is
available again. When you exceed the limit, the API responds with
429 Too Many Requests until the window resets.
Rate-limit headers
Responses include headers describing your remaining budget:
| Header | Description |
|---|---|
X-RateLimit-Limit | Maximum requests allowed in the window (3000) |
X-RateLimit-Remaining | Requests remaining in the current window |
X-RateLimit-Reset | Seconds until the window resets |
A 429 response adds one more:
| Header | Description |
|---|---|
Retry-After | Seconds to wait before retrying |
Handling 429 responses
A throttled request returns the standard error format:
{
"errors": [
{
"status": "429",
"detail": "API rate limit exceeded"
}
]
}Wait for the number of seconds in Retry-After, then retry. If the header is
missing, fall back to exponential backoff:
async function fetchWithRetry(url, options, retries = 3) {
for (let attempt = 0; attempt <= retries; attempt++) {
const res = await fetch(url, options);
if (res.status !== 429) {
return res;
}
if (attempt === retries) {
break;
}
const retryAfter = Number(res.headers.get("Retry-After"));
const delaySeconds =
Number.isFinite(retryAfter) && retryAfter > 0 ? retryAfter : 2 ** attempt;
await new Promise((resolve) => setTimeout(resolve, delaySeconds * 1000));
}
throw new Error("Still rate limited after retries");
}High-volume writes
For large imports, use the bulk endpoints: sending one request with many
records instead of one request per record keeps you well under the per-endpoint
limit and is faster overall. Add a short delay between batches and back off on
429. See the bulk operations guide for batch
sizing and import ordering.