Rate Limits
Emitlo enforces rate limits per organization to ensure fair usage and protect deliverability.
Send limits
Rate limits are configured per organization based on your plan:
| Limit | Description |
|---|---|
| Per-minute | Maximum emails per minute |
| Per-hour | Maximum emails per hour |
| Daily | Maximum emails per day |
Your current limits are visible in the Dashboard → Overview under Sending Limits.
Rate limit headers
When you approach or exceed a limit, the API returns:
HTTP 429 Too Many Requests
HTTP/1.1 429 Too Many RequestsRetry-After: 47Content-Type: application/json
{ "status": "error", "error": { "code": "RATE_LIMITED", "message": "Per-minute rate limit exceeded. Retry after 47 seconds." }}Handling rate limits
Always implement retry logic with the Retry-After header:
async function sendWithRetry(payload, maxRetries = 3) { for (let attempt = 0; attempt < maxRetries; attempt++) { const response = await fetch('https://api.emitlo.com/api/v1/messages', { method: 'POST', headers: { 'Authorization': 'Bearer YOUR_API_KEY', 'Content-Type': 'application/json' }, body: JSON.stringify(payload), });
if (response.status === 429) { const retryAfter = parseInt(response.headers.get('Retry-After') || '60'); await new Promise(resolve => setTimeout(resolve, retryAfter * 1000)); continue; }
return response.json(); } throw new Error('Max retries exceeded');}High-volume sending
For high-volume use cases (newsletters, bulk notifications), use batch send to maximize throughput — up to 500 messages per API call.
If you need higher rate limits, contact support to discuss your requirements.