Core concepts
Rate limits
How throttling works and how to handle a 429.
The API is rate-limited per key to keep the platform fast and fair. When you exceed the limit you get a 429 rate_limited; back off and retry.
A resilient client retries 429s with exponential backoff and jitter:
retry.ts
async function withRetry<T>(fn: () => Promise<T>, tries = 5): Promise<T> {
for (let i = 0; ; i++) {
try {
return await fn();
} catch (e) {
if (i >= tries || !(e instanceof RootMailError) || e.status !== 429) throw e;
await new Promise((r) => setTimeout(r, 2 ** i * 200 + Math.random() * 100));
}
}
}noteSend volume itself is governed by your plan's blocks and daily caps, not the request rate limit — the two are separate.