Master email API rate limiting and deliverability. Protect sender reputation, avoid ISP throttling, and ship production emails that land in inboxes.
You've built something great. Your product sends emails—transactional confirmations, lifecycle sequences, drip campaigns. Everything works in testing. Then you scale. Suddenly emails queue up. Some never arrive. Others land in spam. Your sender reputation tanks. ISPs throttle your IP. You're locked out.
This isn't a failure of your email provider. It's a failure to respect the rules that keep the email ecosystem functioning.
Rate limiting isn't a limitation. It's a contract between you and the internet's mail servers. Break it, and you lose deliverability. Respect it, and your emails land where they belong: the inbox.
When you send email at scale through an API—whether it's Mailable's headless email platform or any other provider—you're operating within constraints set by Internet Service Providers (ISPs), authentication systems, and reputation networks. Understanding those constraints isn't optional. It's the difference between emails that arrive and emails that disappear.
This guide walks you through the mechanics of rate limiting, how it connects to deliverability, and how to design client code that respects both without sacrificing speed.
A rate limit is a cap on how many emails you can send in a given time window. Simple concept. Critical execution.
Most email providers—including Mailable—enforce rate limits at multiple levels:
Per-second limits: How many emails your account can send in a single second. Typical range: 10–100 emails/second depending on your plan and sender reputation.
Per-minute limits: Total emails in a 60-second window. Usually 10x your per-second limit.
Per-hour and per-day limits: Cumulative caps that prevent you from blasting your entire subscriber list in one go, even if you stay within per-second limits.
Per-recipient limits: Some providers throttle how many emails can go to the same domain (Gmail, Outlook, Yahoo) in a time window. This prevents your IP from looking like it's hammering a single provider's servers.
Why these constraints exist:
Break rate limits, and you trigger throttling: ISPs slow your delivery, queue your mail, or reject it outright. Your bounce rates spike. Complaint rates rise. Your sender IP gets blocklisted. You're now fighting to recover reputation instead of shipping emails.
Deliverability—the percentage of emails that reach the inbox instead of spam or bounce—depends on sender reputation. Rate limiting directly impacts reputation.
ISPs use several signals to judge a sender:
Bounce rates: If you send to invalid addresses, bounces climb. High bounce rates signal poor list quality, which tanks reputation. Rate limiting forces you to validate addresses before sending and pace your sends so bounces don't spike.
Complaint rates: When recipients mark your email as spam, that complaint goes back to the ISP. If your complaint rate exceeds ~0.1%, ISPs throttle or block you. Sending too fast to unengaged subscribers increases complaints. Rate limiting prevents you from carpet-bombing inactive users.
Authentication alignment: SPF, DKIM, and DMARC require your sending infrastructure to prove ownership of the domain. If you send faster than your authentication system can handle, some emails fail authentication. Failed authentication = spam folder. Rate limiting gives authentication systems time to work.
IP warming: New sending IPs have no reputation. You can't send 100,000 emails from a new IP on day one. ISPs will reject most of them. You need to gradually increase volume—a process called IP warming. This is enforced rate limiting by reputation, not by the provider.
According to 2026 email deliverability trends and observations, ISPs are increasingly aggressive about filtering based on sender behavior patterns. Sudden spikes in volume, irregular sending patterns, and high bounce rates are immediate red flags. Rate limiting—when respected—prevents these patterns from forming.
Email deliverability best practices for high open rates consistently emphasize pacing and volume control as foundational. You can't outrun bad sending practices with a better subject line.
When you integrate with an email API—whether through Mailable's API, MCP, or headless interface—the provider enforces rate limits at the request level.
Typical enforcement:
HTTP 429 responses: When you exceed your rate limit, the API returns a 429 (Too Many Requests) status code. This is your signal to back off.
Retry-After headers: The 429 response includes a Retry-After header telling you how long to wait before retrying. Respect this. Don't retry immediately.
Queue-based systems: Some providers queue excess requests and process them as capacity opens up. Others reject them outright. Know which your provider does.
Distributed limits: If you're sending through multiple API keys or accounts, the provider may track limits across all of them to prevent workarounds.
Here's what a 429 response looks like:
HTTP/1.1 429 Too Many Requests
Retry-After: 60
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1640000000
{
"error": "rate_limit_exceeded",
"message": "You have exceeded your per-second limit of 100 requests."
}
The headers tell you:
Ignoring this and hammering the API with retries doesn't send more emails. It wastes bandwidth, increases latency, and can get your API key throttled further or revoked.
Your code needs to be rate-limit aware. This means implementing backoff, queueing, and monitoring.
When you hit a 429, don't retry immediately. Implement exponential backoff: wait a bit, then retry. If it fails again, wait longer. Keep doubling the wait until you succeed or give up.
Pseudocode:
function sendEmailWithBackoff(email, maxRetries = 5) {
let retries = 0;
let delay = 1000; // Start with 1 second
while (retries < maxRetries) {
try {
const response = await mailableAPI.send(email);
return response; // Success
} catch (error) {
if (error.status === 429) {
retries++;
const waitTime = delay * Math.pow(2, retries - 1); // Exponential backoff
console.log(`Rate limited. Waiting ${waitTime}ms before retry...`);
await sleep(waitTime);
} else {
throw error; // Non-rate-limit error, fail immediately
}
}
}
throw new Error(`Failed to send email after ${maxRetries} retries`);
}
This prevents thundering herd: if multiple requests hit the rate limit simultaneously, exponential backoff spreads them out instead of having them all retry at once.
Don't send emails synchronously. Queue them. Process the queue at a pace that respects your rate limit.
If your limit is 50 emails/second, send 50, wait 1 second, send 50 more. This is simple to implement and prevents bursts.
class EmailQueue {
constructor(emailsPerSecond) {
this.queue = [];
this.processing = false;
this.emailsPerSecond = emailsPerSecond;
}
add(email) {
this.queue.push(email);
this.process();
}
async process() {
if (this.processing) return;
this.processing = true;
while (this.queue.length > 0) {
const batch = this.queue.splice(0, this.emailsPerSecond);
const promises = batch.map(email => mailableAPI.send(email));
try {
await Promise.all(promises);
} catch (error) {
// Handle errors, potentially re-queue failed emails
console.error('Batch send failed:', error);
}
// Wait 1 second before next batch
await sleep(1000);
}
this.processing = false;
}
}
This queue processes emails in batches, respecting your per-second limit without complex logic.
Track your rate limit usage. Monitor how close you are to limits. Alert when you're approaching them.
function checkRateLimitHealth(headers) {
const remaining = parseInt(headers['x-ratelimit-remaining']);
const limit = parseInt(headers['x-ratelimit-limit']);
const percentUsed = ((limit - remaining) / limit) * 100;
if (percentUsed > 90) {
console.warn(`Rate limit at ${percentUsed.toFixed(1)}%. Consider slowing sends.`);
}
if (percentUsed === 100) {
console.error('Rate limit exhausted. Backing off.');
}
}
This gives you visibility into your sending patterns and lets you adjust before hitting hard limits.
If you're sending from a new IP or domain, ISPs don't trust you yet. You need to gradually build reputation through IP warming.
IP warming is enforced rate limiting by reputation:
Days 1–3: Send to your most engaged subscribers only. Small volume (100–1,000 emails/day).
Days 4–7: Expand to moderately engaged users. Increase volume slightly (1,000–5,000/day).
Days 8–14: Include less-engaged users. Ramp volume further (5,000–50,000/day).
Weeks 3–4: Full volume sends to your entire list.
The exact ramp depends on your list size and ISP policies, but the principle is consistent: prove you're a legitimate sender by starting small and growing gradually.
Skip IP warming, and ISPs will reject a large percentage of your mail, tanking your reputation before you've even started. You'll spend weeks recovering.
Email rate limiting solutions and authentication changes for 2026 emphasize that gradual scaling is non-negotiable. ISPs are more aggressive about filtering than ever, and sudden volume spikes are immediate rejection triggers.
When you get a 429, your code needs to handle it without losing emails or degrading user experience.
For transactional emails (order confirmations, password resets, etc.): These must arrive reliably. Queue them and retry with exponential backoff. Don't drop them. If your queue gets too large, scale up your sending infrastructure or upgrade your rate limit.
For marketing emails (campaigns, drips): These can tolerate slight delays. Queue them and process at a steady pace. If a batch fails, retry it. If it keeps failing, log it and investigate.
For lifecycle emails (onboarding sequences, re-engagement): These are time-sensitive but not critical. Queue them, respect rate limits, and let them send gradually. If a user's email arrives 5 minutes late, that's fine.
The key principle: never drop an email to avoid rate limiting. Always queue and retry. Rate limits are about pacing, not rejecting.
Behind every rate limit is a reputation system. Understanding reputation helps you understand why limits exist.
ISPs score senders on:
Bounce rate: Percentage of emails that bounce. Target: <5%. Above 10% and you're in trouble.
Complaint rate: Percentage of recipients who mark you as spam. Target: <0.1%. Above 0.3% and ISPs throttle you.
Engagement rate: Percentage of recipients who open or click. Low engagement signals poor list quality or irrelevant content. ISPs use this to filter.
Authentication: SPF, DKIM, DMARC pass rates. 100% is the goal. Below 95% and you're vulnerable to filtering.
List hygiene: How many invalid addresses you send to. Clean lists = good reputation.
Sending patterns: Consistency matters. Erratic volume, sudden spikes, or unusual timing patterns raise red flags.
Rate limiting forces you to maintain these metrics. If you send too fast, bounces spike. If you send to unengaged users, complaints rise. If you don't warm IPs, authentication fails. Rate limits are guardrails.
According to 2026 email deliverability statistics and critical data for GTM teams, senders who respect rate limits and maintain list hygiene achieve 95%+ inbox placement rates. Those who don't average 60–70%.
SPF, DKIM, and DMARC authentication systems have their own rate-related behaviors.
SPF (Sender Policy Framework): Your SPF record lists which servers can send mail from your domain. When you send an email, the receiving server checks your SPF record. If you're sending from too many different servers or IPs too quickly, some checks fail. Rate limiting prevents this.
DKIM (DomainKeys Identified Mail): Each email gets digitally signed with your domain's private key. If you send too many emails too fast, signature verification can lag, and some emails fail authentication. Pacing prevents this.
DMARC (Domain-based Message Authentication, Reporting, and Conformance): DMARC combines SPF and DKIM and tells ISPs what to do if authentication fails (quarantine, reject, or monitor). If your authentication rate is low due to sending too fast, DMARC policies can cause ISPs to reject your mail.
Rate limiting gives your authentication infrastructure time to keep up. You're not just respecting ISP limits; you're respecting your own infrastructure's capacity.
Different sending patterns need different limits.
Transactional emails (confirmations, notifications): These are event-driven and unpredictable. You need a high per-second limit (50–100+) but a reasonable per-day limit. If you hit your per-second limit, queue and retry. Transactional emails are critical, so invest in higher limits.
Drip campaigns and sequences: These are scheduled and predictable. You can use lower per-second limits (10–20) but need high per-day limits. Spread sends throughout the day to avoid spikes.
Bulk campaigns: These are one-time sends to large lists. You need high per-day limits but can use moderate per-second limits (20–50). Warm up the send over several hours.
Lifecycle emails (onboarding, re-engagement): These are predictable but volume can spike when events occur. Use moderate limits (20–50 per-second) and queue excess sends.
Most email providers, including Mailable, let you choose or upgrade your rate limits based on your plan. Start with a conservative limit, monitor your sending patterns, and upgrade as you scale.
You're running a SaaS product. Your signup flow sends a welcome email. You're getting 100 signups/hour. At 100 signups/hour, you're well within typical rate limits (which allow 50–100 emails/second).
Then you get featured in a newsletter. Signups spike to 1,000/hour. Your welcome email queue can't keep up. If you naively send all 1,000 emails as fast as possible, you'll hit rate limits and trigger backoff.
With proper queueing:
Without queueing:
The difference is one function: a queue that respects your rate limit.
Use tools to monitor your sending health. Most email providers, including Mailable, offer dashboards showing:
Set up alerts for:
Review logs regularly. If you see patterns of 429 errors, your queue isn't processing fast enough or your limit is too low. Adjust your code or upgrade your plan.
Best email deliverability tools for 2026 include built-in monitoring and alerting. Use them. Don't fly blind.
If you're building with Mailable's API, MCP, or headless email platform, rate limiting works the same way: respect the limits, queue requests, handle 429s gracefully.
API integration: Direct HTTP calls to send emails. Rate limits apply per API key. Queue requests in your application. Handle 429s with exponential backoff.
MCP (Model Context Protocol) integration: If you're using Mailable through an MCP server, the server handles rate limiting internally. Your code still needs to be queue-aware, but the MCP layer abstracts some complexity.
Headless integration: If you're using Mailable to generate templates and sending through your own infrastructure, you inherit the email provider's rate limits (Postmark, Resend, etc.). Respect those limits in your sending code.
In all cases, the principle is the same: understand your limit, queue requests, monitor usage, and handle errors gracefully.
Mistake 1: Ignoring 429 responses. Retrying immediately doesn't help. It makes things worse. Implement backoff.
Mistake 2: Sending without a queue. Every send request should go through a queue that respects rate limits. Synchronous sending at scale guarantees rate limit errors.
Mistake 3: Blasting unengaged subscribers. High complaint rates tank reputation. Segment your lists. Send only to engaged users. Gradually re-engage inactive users.
Mistake 4: Skipping IP warming. New IPs have no reputation. Warm them up gradually. Skipping this step means 50%+ of your mail gets rejected for weeks.
Mistake 5: Not monitoring. You can't fix what you don't measure. Set up dashboards and alerts. Review them weekly.
Mistake 6: Upgrading without understanding. If you hit rate limits, don't just upgrade your plan. First, understand why. Are you sending too fast? Is your list quality poor? Fix the root cause, then upgrade if needed.
Here's what production email systems do right:
Separate queues for different email types. Transactional emails get priority. Marketing emails get lower priority. This ensures critical emails arrive even if marketing campaigns are in progress.
Exponential backoff with jitter. When multiple requests hit rate limits simultaneously, jitter (randomness) prevents them from retrying at the same time, which would cause another spike.
Per-domain rate limiting. Track sends to each domain (Gmail, Outlook, Yahoo) separately. Don't hammer one domain even if you're within your overall limit.
List segmentation. Segment by engagement, domain, geography, or other factors. Send to engaged users first. Gradually include less-engaged users. This maintains reputation.
Regular list cleaning. Remove invalid addresses, hard bounces, and unengaged subscribers monthly. A clean list = high reputation.
Authentication setup. Ensure SPF, DKIM, and DMARC are configured correctly. Monitor authentication rates. Aim for 100%.
Scheduled sends. For bulk campaigns, spread sends throughout the day. Don't send your entire list at once.
Monitoring and alerting. Track metrics hourly. Alert on anomalies. Investigate immediately.
According to email deliverability basics and benchmarks for 2026, these practices are table-stakes. Senders who implement them achieve 95%+ inbox placement. Those who don't average 60%.
Rate limiting isn't a technical detail. It's a business lever.
When you respect rate limits:
When you ignore rate limits:
Respecting rate limits isn't a constraint. It's the foundation of reliable email delivery.
Rate limiting often feels like a limitation. It's not. It's a feature that keeps your emails deliverable and your reputation clean.
When you design client code that respects rate limits—through queuing, backoff, and monitoring—you're not fighting the email system. You're working with it. Your emails arrive faster, more reliably, and at lower cost.
If you're building transactional email, lifecycle sequences, or drip campaigns, Mailable's API and headless platform give you the tools to generate production-ready templates and send them at scale. But the code you write to send those emails needs to be rate-limit aware.
Start with a queue. Implement exponential backoff. Monitor your limits. Warm up new IPs gradually. Segment your lists. Clean your data. And respect the rate limits your provider sets.
Do that, and your emails will land in inboxes. Your reputation will stay clean. Your business will grow. That's the power of respecting rate limits.