Skip to main content

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.

Next Steps