Skip to main content

Rate Limits & Errors

Understanding API rate limits and error handling.

Rate Limits

Each API key has three rate limit counters:

WindowDefault Limit
Per Minute100 requests
Per Hour5,000 requests
Per Day100,000 requests

Limits are configurable per API key in agent settings.

Rate Limit Headers

All responses include rate limit information:

X-RateLimit-Limit: 100
X-RateLimit-Remaining: 47
X-RateLimit-Reset: 1638360000
HeaderDescription
X-RateLimit-LimitMaximum requests allowed
X-RateLimit-RemainingRequests remaining in current window
X-RateLimit-ResetUnix timestamp when limit resets

Rate Limit Response

When limit exceeded:

{
"error": "Rate limit exceeded",
"message": "Too many requests. Please try again later.",
"retryAfter": 45,
"rateLimits": {
"requestsPerMinute": 100,
"requestsPerHour": 5000,
"requestsPerDay": 100000
}
}

Status Code: 429 Too Many Requests

Handling Rate Limits

Exponential Backoff

async function retryWithBackoff(fn, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
try {
return await fn();
} catch (error) {
if (error.status === 429) {
const delay = Math.pow(2, i) * 1000;
await new Promise(resolve => setTimeout(resolve, delay));
continue;
}
throw error;
}
}
}

Check Headers Before Next Request

function shouldWait(headers) {
const remaining = parseInt(headers.get('X-RateLimit-Remaining'));
return remaining < 5; // Wait if < 5 requests left
}

Error Codes

CodeStatusDescriptionRetry?
400Bad RequestInvalid request❌ No
401UnauthorizedInvalid API key❌ No
403ForbiddenAccess denied❌ No
404Not FoundResource not found❌ No
429Too Many RequestsRate limit exceeded✅ Yes
500Internal Server ErrorServer error✅ Yes
503Service UnavailableService down✅ Yes