Composio enforces rate limits on API requests to ensure fair use and platform stability. Limits are enforced per organization on a rolling 10-minute window. When you exceed a limit, the API returns aDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/ComposioHQ/composio/llms.txt
Use this file to discover all available pages before exploring further.
429 Too Many Requests status with headers that tell you exactly when to retry.
Rate limits by plan
| Plan | Requests per 10 minutes |
|---|---|
| Starter | 20,000 |
| Hobby | 20,000 |
| Growth | 100,000 |
| Enterprise | Unlimited |
Rate limit headers
Every API response includes headers to help you track your usage:| Header | Description |
|---|---|
X-RateLimit | Total requests allowed in the current window. |
X-RateLimit-Remaining | Requests remaining in the current window. |
X-RateLimit-Window-Size | Length of the window (e.g. 600s for 600 seconds). |
Retry-After | Seconds until the window resets. Only present on 429 responses. |
Handling 429 errors
When the API returns429, read the Retry-After header and pause before retrying. Implement exponential backoff with jitter to avoid thundering-herd problems when multiple processes are affected simultaneously.
Rate limit error response body
SDK retry behavior
The Composio Python and TypeScript SDKs have built-in retry logic with exponential backoff. Configure the retry count via themax_retries constructor parameter — the default is 3.
429 responses and network-level transient failures (5xx status codes, connection resets). It reads the Retry-After header and waits the indicated duration before each retry.
SDK retries are transparent — your code does not need to handle
429 errors explicitly when using the SDK. Add your own retry layer only when calling the REST API directly.Pagination
List endpoints return paginated results using cursor-based pagination. Avoid fetching all pages at once when you only need recent items — uselimit to cap each page and stop once you have what you need.
cursor query parameter:
Best practices
- Monitor remaining quota — check
X-RateLimit-Remainingin responses and add alerting before you reach zero. - Cache tool schemas — tool definitions rarely change. Cache the output of
tools.get()locally and refresh on a schedule rather than fetching on every request. - Use
limiton list endpoints — don’t fetch more pages than you need. - Prefer SDK retries — the SDK handles
429backoff automatically. Usemax_retriesrather than reimplementing retry logic. - Pin toolkit versions — using
toolkit_versionsprevents unintended fetches when a new version is released and keeps schema caches valid longer.
Need higher limits?
If you regularly hit rate limits, consider upgrading your plan. For high-volume workloads or custom limits, contact us.Related pages
- Authentication — how to authenticate API requests
- API Overview — base URL, resource list, and error shapes