Rate limits

Rate limits protect the API and ensure fair usage.

Every API-key request counts against a per-account, per-minute sliding window (the limit is shown in the Console and can be raised on paid plans). When the window is exhausted the API returns 429 — back off and retry after a short delay.

Data retention

Message history and the event log (GET /v3/events) are retained for 30 days on Free and 12 months on paid plans; the free workspace inside a paid organisation inherits the organisation’s window. Aggregated metrics accept windows up to 366 days. Suppression lists and unsubscribe records never expire. Downgrading from a paid plan keeps the paid window for a 30-day grace period so you can export first.

Message-shape limits: up to 1,000 recipients combined across to/cc/bcc per single send (larger audiences use POST /v3/messages.batch, up to 5,000 personalized recipients), up to 1,000 addresses in any one field, and messages up to 20 MB via SMTP.

What can return 429

ParameterTypeRequiredDescription
Account request rateper minute · all endpointsOptionalThe sliding-window limit above. Applies to every authenticated request made with an API key.
Verification route limitsper minuteOptionalPOST /v3/validate is additionally capped at 100 requests/min and POST /v3/validate/bulk at 10 jobs/min per account.
Sending quotasper month / per dayOptionalLive sends reserve against your monthly plan volume (including any overage policy) and daily ceiling. When a quota is reached the send is rejected with 429.
Test allowancesper monthOptionalTest keys draw from the free monthly test send/verify allowance (see Test keys) and return 429 when it's exhausted.

Rate-limit response headers

Every API response reports the current window state, and a 429 additionally tells you exactly how long to wait before retrying:

Headers
ParameterTypeRequiredDescription
X-RateLimit-LimitintegerOptionalThe size of your per-account request window (requests per minute).
X-RateLimit-RemainingintegerOptionalRequests remaining in the current per-account window.
X-RateLimit-ResetintegerOptionalSeconds until the current window resets.
Retry-Afterinteger · on 429OptionalSeconds to wait before retrying the request. Honour this before applying your own backoff.

Data retention

Retention windows
ParameterTypeRequiredDescription
Events (GET /v3/events)30 days Free · 12 months paidOptionalMessage lifecycle events queryable through the API and the Console Activity grid.
Webhook delivery history30 days Free · 12 months paidOptionalEvery delivery attempt with response code, latency and outcome (Console → Webhooks → Activity).
Webhook resend window90 daysOptionalHow far back POST /v3/webhooks/deliveries/resend can re-deliver, bounded by your plan’s history retention.

Retention is enforced daily: data older than your plan’s window is deleted permanently. The same numbers are stated on the events, webhooks and resend pages.