Rate Limits
Neuratel applies rate limits to protect platform stability and ensure fair usage. This page covers the limits, how to detect them, and how to build resilient integrations.
Default Rate Limits
| Scope | Limit | Window |
|---|---|---|
| Per IP address (unauthenticated) | 20 requests | 1 minute |
| Per API key (authenticated) | 100 requests | 1 minute |
| Bulk contact import | 10 imports | 1 hour |
| Knowledge base file upload | 10 uploads | 1 hour |
Authenticated requests receive significantly higher limits than unauthenticated ones. Always include your API key.
Enterprise accounts can request higher limits. Contact [email protected].
Rate Limit Headers
Every response includes rate limit headers:
Code
| Header | Description |
|---|---|
X-RateLimit-Limit | Maximum requests allowed in the current window |
X-RateLimit-Remaining | Requests remaining in the current window |
X-RateLimit-Reset | Unix timestamp when the window resets |
429 Response
When you exceed the limit, the API returns HTTP 429:
Code
The response also includes a Retry-After header with the number of seconds to wait:
Code
Handling Rate Limits
Exponential Backoff
The recommended approach for handling 429 responses:
Code
Code
Proactive Throttling
Check remaining quota before sending requests to avoid hitting limits:
Code
Code
Bulk Operation Limits
Some endpoints have separate limits to prevent resource exhaustion:
| Operation | Limit | Notes |
|---|---|---|
| Contact CSV import | 10,000 contacts per file | Max 10 MB file size |
| Knowledge base upload | 21 MB per file | PDF, DOCX, TXT supported |
| Batch imports per hour | 10 | Applies to both contacts and knowledge base |
| Webhook test sends | 10 per minute | Per webhook endpoint |
Best Practices
Cache Read-Heavy Responses
For data that changes infrequently (agent configs, number lists), cache responses locally and refresh on a schedule rather than re-fetching on every request.
Code
Batch Where Possible
Use bulk endpoints instead of individual requests. For example, upload one CSV with 5,000 contacts instead of making 5,000 individual contact creation requests.
Distribute Requests
If you have multiple services calling the API, use a separate API key per service. Rate limits are tracked per key, giving each service its own quota.
Monitor Usage
Log X-RateLimit-Remaining values to detect when your integration is approaching limits:
Code
Next Steps
- Error Codes — handle
RATE_LIMIT_5001and other errors - Using API Keys — create per-service keys for separate rate limit pools
- Production Checklist — verify your integration handles rate limits
