Rate limits & plans

Limits protect your sender reputation and keep billing predictable. Every limit is enforced by the API and reported with enough detail to react programmatically.

Send windows

Email sending is limited over three rolling windows, sized by your plan:

WindowBehavior when exceeded
Per minute429 with retryAfter in seconds. Also applies per API key across all requests.
Per hour429 until the window rolls over.
Per day429 until the window rolls over.

Monthly volume & overage

Each plan includes a monthly email allowance. What happens at the cap depends on your plan:

  • Overage disabled — sends beyond the allowance are rejected with 429 until the month resets.
  • Overage enabled— sends continue and the excess is billed automatically per 1,000 emails at your plan's overage rate. Current usage and accrued overage are visible in Dashboard → Billing.

Contact limits

Plans include a total contact allowance summed across all lists. Adding a contact beyond it returns 429; the response names the limit so you can surface it to your team.

Handling 429s

All limit responses share one shape — branch on the status code and honor retryAfter when present:

{
  "status": "fail",
  "message": "Rate limit exceeded. Try again in 42 seconds.",
  "limit": 60,
  "retryAfter": 42
}

Plan features

Some capabilities are plan-gated: broadcasts, webhooks, segments, funnels, forms, custom sender domains, and dedicated IPs. Calling a gated endpoint on a plan without the feature returns 403 with a message naming the feature.

The full tier-by-tier comparison lives on the billing page — limits shown there are the exact values the API enforces.