IvyMail enforces API request rate limits to ensure fair usage and protect infrastructure stability. For sending volume limits (emails per hour/day/month), warmup periods, and reputation monitoring, see Sending Limits & Safety.
Current limits
| Endpoint | Limit | Window |
|---|---|---|
POST /v1/send | 30 requests | Per minute |
| All other endpoints | 60 requests | Per minute |
Limits are per API key. Each key has independent counters.
Rate limit headers
Every response includes headers to help you track your usage:
| Header | Description |
|---|---|
X-RateLimit-Limit | Maximum requests allowed in the window |
X-RateLimit-Remaining | Requests remaining in the current window |
X-RateLimit-Reset | Unix timestamp when the window resets |
Handling 429 responses
When you exceed the rate limit, the API returns 429 Too Many Requests:
{
"success": false,
"error": "Rate limit exceeded"
}Recommended retry strategy
Use exponential backoff with jitter:
async function sendWithBackoff(payload, apiKey, maxRetries = 3) {
for (let attempt = 0; attempt < maxRetries; attempt++) {
const resp = await fetch("https://api.ivymail.io/v1/send", {
method: "POST",
headers: {
"x-api-key": apiKey,
"Content-Type": "application/json",
},
body: JSON.stringify(payload),
});
if (resp.status !== 429) return resp.json();
const wait = Math.min(2 ** attempt * 1000, 10000);
const jitter = Math.random() * 500;
await new Promise((r) => setTimeout(r, wait + jitter));
}
throw new Error("Max retries exceeded");
}Best practices
- Batch recipients: Use the
toarray (up to 50 addresses) instead of making individual API calls. - Queue sends: If you send high volumes, use a job queue to smooth out request rates.
- Check headers: Use
X-RateLimit-Remainingto proactively slow down before hitting the limit. - Respect 429s: Always implement backoff. Continuing to send requests after a 429 will not speed up delivery.
Higher limits
If you consistently need higher rate limits, contact us to discuss your use case. We can adjust limits for production workloads that need higher throughput.
For AI agents & LLMs
If you're an AI agent making multiple API calls, be aware of these limits:
- Sending: Max 30 emails/minute. Batch recipients in the
toarray (up to 50) instead of making separate calls. - Reading: Max 60 requests/minute for logs, stats, and domain endpoints.
If you receive a 429 response, wait 2^attempt seconds before retrying (max 3 retries). Check the X-RateLimit-Remaining header to pace your requests proactively.