Skip to content
Reference

Rate limits

Two separate things limit how fast you can go: request rate limits on the API, and sending caps on email. The first protects the API; the second protects your deliverability.

Request limits#

Per second10 requests
Short bursts, per API key.
Per minute600 requests
Sustained traffic, per API key, on Essentials, Standard and Pro.
Per minute (Free)10 requests
For the whole workspace on the Free plan.

On paid plans limits count per key, so separate integrations with separate keys don't slow each other down. For bulk work, use the endpoints built for it: batch sending sends 100 emails in one request.

Headers#

Every authenticated response tells you where you stand, for whichever window is closer to running out:

HTTP
HTTP/1.1 200 OKX-RateLimit-Limit: 10X-RateLimit-Remaining: 7X-RateLimit-Reset: 1X-Request-Id: req_4f1c9a0e2b7d4c8e9a6b3d2f1e0c5a7b
X-RateLimit-Limitnumber
Requests allowed in the current window.
X-RateLimit-Remainingnumber
Requests left in it.
X-RateLimit-Resetseconds
Seconds until the window resets.
Retry-Afterseconds
On 429 responses only: how long to wait.
Response429 Too Many RequestsHTTP
HTTP/1.1 429 Too Many RequestsRetry-After: 1{  "statusCode": 429,  "name": "rate_limit_exceeded",  "message": "Too many requests. Retry in 1s.",  "details": { "retry_after": 1 }}

Plan limits#

Every plan includes the API and the SDK. Free is for trying it out and small projects; paid plans have a monthly API allowance of their own, starting with 10,000 emails a month on Essentials (from $9 a month).

API emails a day100
One per recipient in to. Resets at 00:00 UTC.
Emails a month1,000
Shared by campaigns and the API. Resets on the 1st (UTC).
API keys1
Audience-restricted keys need a paid plan. Keys you made on a paid plan keep working.
Templates push and eventsPaid
PUT /templates (mailmanny templates push) needs Essentials, POST /events needs Standard: both answer 402 plan_required on Free.

Over a limit, the API answers 429 quota_exceeded with Retry-After set to when it resets. Nothing is dropped silently: the email in that request isn't accepted, so you know to send it later. The SDK returns these errors to you instead of waiting hours to retry.

Response429 quota_exceededHTTP
HTTP/1.1 429 Too Many RequestsRetry-After: 18720{  "statusCode": 429,  "name": "quota_exceeded",  "message": "Free includes 100 API emails a day, and today's are used up (100 of 100). They reset at 00:00 UTC, in 5h 12m. Essentials ($9 a month) includes 10,000 API emails a month with no daily cap.",  "details": { "period": "day", "limit": 100, "used": 100, "requested": 1, "plan": "free", "required_plan": "essentials", "retry_after": 18720 }}

Sending caps#

Separately, every workspace has a daily and an hourly sending cap. New workspaces start small and the caps grow as your bounce and complaint rates stay healthy. This is how Mailmanny keeps one sender's bad list from hurting everyone's delivery.

  • When a cap is reached, API emails aren't rejected. They wait (last_event: "delivery_delayed") and go out automatically when capacity frees up.
  • Transactional email gets a reserved share of capacity, so a big campaign can't hold up your password resets.
  • You can see today's usage in Settings → Sending. Need more? Contact support with your expected volume.