Rate Limiting
All endpoints are limited to protect the mail2many API from abuse and to ensure fair usage.
Current limits
- 600 requests per minute per API key
- Maximum of 10 concurrent requests per API key
These limits apply per API key and within a time window.
Response headers
You can find the current rate-limit status in response headers:
| Header | Description |
|---|---|
X-RateLimit-Limit | Maximum number of requests allowed in the current time window |
X-RateLimit-Remaining | Remaining number of requests in the current time window |
For concurrent requests, the API also provides:
| Header | Description |
|---|---|
X-ConcurrencyLimit-Limit | Maximum number of concurrent requests per API key |
X-ConcurrencyLimit-Remaining | Remaining number of concurrent requests |
Behavior when limits are exceeded
When a limit is exceeded, the API returns 429 Too Many Requests.
Example for request-rate limit:
{
"status": "error",
"code": 429,
"message": "Too many requests. Please slow down.",
"error": "RATE_LIMIT_EXCEEDED",
"statusCode": 429
}
Example for concurrent-request limit:
{
"status": "error",
"code": 429,
"message": "Too many concurrent requests. Please wait for existing requests to complete.",
"error": "CONCURRENT_LIMIT_EXCEEDED",
"statusCode": 429,
"concurrencyLimit": 10,
"remaining": 0
}
Additional headers in 429 responses may include:
| Header | Description |
|---|---|
Retry-After | Seconds to wait before retrying |
X-RateLimit-Reset | Time when the current rate-limit window resets (UTC epoch seconds) |
Recommended handling
- Wait based on
Retry-Afteror until the time window resets - Retry the rejected request afterward
- Reduce your request rate permanently
- Reduce concurrent requests (queue/worker limit)
- Use retries with exponential backoff
For general retry strategies, see Fault Tolerance.