rate_limit_exceeded (429) until the window resets.
Headers
Every API response carries the current budget:Response (429)
Handling 429s
Back off exponentially and retry. RespectX-RateLimit-Reset when present; otherwise start at ~1 second and double each attempt, with jitter.
Design guidance
- Cache reads. Inbox, thread, and domain metadata change rarely — store them instead of re-fetching per send.
- Use webhooks, not polling. Subscribe to
email.receivedrather than loopingGET /v1/messages. Polling burns budget on empty responses; a webhook costs you zero API calls. - Batch deliberately. The deliveries log (
GET /v1/webhooks/deliveries) and list endpoints cap at 100 rows per page — paginate instead of hammering with tight loops. - Separate keys per workload. The limit is per workspace, not per key — one runaway poller starves your sending path. Isolate bulk reads from latency-sensitive sends.