Rate Limits
The API enforces rate limits to ensure fair usage and system stability.
Default Limits
| Plan | Requests/Minute | Requests/Day |
|---|---|---|
| Free | 60 | 1,000 |
| Pro | 300 | 50,000 |
Rate Limit Headers
Every API response includes rate limit information in headers:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 45
X-RateLimit-Reset: 1705320000 | Header | Description |
|---|---|
X-RateLimit-Limit | Max requests per window |
X-RateLimit-Remaining | Remaining requests in current window |
X-RateLimit-Reset | Unix timestamp when limit resets |
Rate Limit Exceeded
When you exceed the rate limit, you'll receive a 429 Too Many Requests response:
{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Too many requests. Please retry after 45 seconds.",
"retryAfter": 45
}
} Best Practices
Implement Exponential Backoff
When you receive a 429, wait before retrying. Double the wait time with each subsequent failure:
async function fetchWithRetry(url, options, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
const response = await fetch(url, options);
if (response.status === 429) {
const retryAfter = response.headers.get('Retry-After') || Math.pow(2, i);
await sleep(retryAfter * 1000);
continue;
}
return response;
}
throw new Error('Max retries exceeded');
} Cache Responses
Cache GET responses when possible. Project and knowledge data changes infrequently.
Batch Operations
When creating multiple tasks, consider if you can batch them into fewer requests.
Use Webhooks
Instead of polling for changes, use webhooks to receive real-time notifications.
Endpoint-Specific Limits
Some endpoints have additional limits:
| Endpoint | Additional Limit |
|---|---|
POST /v1/tasks | 100 creates/hour |
GET /v1/*/search | 30 searches/minute |
PUT /v1/knowledge/* | 60 writes/hour |
Need Higher Limits?
If you need higher rate limits for your use case, contact us to discuss options.