Overview
The API enforces rate limits to protect the service and ensure fair usage. Limits are applied per API key (the same key you send asx-api-key), not per IP address. Each quota uses a sliding window (e.g. “60 requests per 60 seconds”).
Plan-specific quotas may still apply elsewhere; when in doubt, treat limits as documented in your contract or dashboard.
Limits by endpoint
All paths below are under the/v1 prefix (for example, GET /v1/campaigns).
| Method | Path | Limit |
|---|---|---|
GET | /analytics | 30 requests / 60 s |
GET | /analytics/daily | 30 requests / 60 s |
GET | /analytics/by-user | 30 requests / 60 s |
POST | /leads/add_to_campaign | 20 requests / 60 s |
GET | /campaigns | 60 requests / 60 s |
GET | /campaigns/:id | 120 requests / 60 s |
GET | /campaigns/:id/statistics | 30 requests / 60 s |
GET | /users | 60 requests / 60 s |
GET | /users/:id | 60 requests / 60 s |
GET | /teams/me | 60 requests / 60 s |
Response headers
When the rate limit check runs successfully, responses include:X-RateLimit-Limit— maximum requests allowed in the current window.X-RateLimit-Remaining— requests remaining in the current window.X-RateLimit-Reset— Unix timestamp in milliseconds when the limit window resets.
When you hit the limit
You will receive 429 Too Many Requests. The response includes:- The same
X-RateLimit-*headers as above. Retry-After— suggested wait time in seconds before retrying.
Retry-After or wait until X-RateLimit-Reset, then retry with a small buffer.
Backoff strategy
- Prefer
Retry-Afteron 429 responses, or sleep untilX-RateLimit-Reset(with a small buffer). - If those headers are missing, use exponential backoff (e.g. 1s, 2s, 4s, …) with jitter, and cap the maximum delay.
Operational note
If the rate-limit backend is temporarily unavailable, the API may allow the request without settingX-RateLimit-* headers. This is rare; normal operation always includes those headers when the check succeeds.