Skip to main content
The API allows 240 requests per minute per workspace (organization), enforced on every authenticated request. The window is rolling; when you exceed it you receive 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. Respect X-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.received rather than looping GET /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.