Overview
The DialNexa API enforces rate limits to ensure fair usage and platform stability. Rate limits are applied per API key. When you exceed a rate limit, the API returns429 Too Many Requests:
Rate limit headers
Every API response includes headers that tell you your current usage:| Header | Description |
|---|---|
X-RateLimit-Limit | The maximum number of requests allowed in the current window. |
X-RateLimit-Remaining | How many requests you have left in the current window. |
X-RateLimit-Reset | Unix timestamp when the current window resets. |
Retry-After | Seconds to wait before retrying (present on 429 responses). |
Handling 429 responses
When you receive a429, wait for the number of seconds indicated in the Retry-After header before retrying. Implement exponential backoff for production systems to avoid hammering the API immediately after the window resets.
Retry with exponential backoff
Best practices
Batch operations over single-item calls: If you need to add 500 leads to a campaign, use the file upload endpoint rather than making 500 individual POST requests to/campaigns-leads.
Cache read-only data: Voices, languages, LLMs, and transcribers change infrequently. Fetch them once and cache locally rather than re-fetching on every request.
Use ETags for call logs: The GET /call-logs endpoint supports If-None-Match / ETag caching. Pass the ETag from a previous response so the server can return 304 Not Modified instead of a full payload when nothing has changed.
Use webhooks instead of polling: Rather than polling GET /campaigns/{id}/status in a loop, register a webhook for campaign.completed and handle the event when it arrives.