Skip to content
simailDocsv0

Reference

Rate limits

Request-rate limits for the API, MCP, WebSocket, sign-up and the console, and how to handle 429 and Retry-After.

docs.simail.ai/rate-limits

Rate limits stop runaway loops and abuse. Quotas on how much mail you can send or receive are on Usage, limits & breakers.

WhatLimitCounted per
Requests with an API key (REST and MCP)600 per minute (burst)key
Requests without a key120 per minuteIP address
API calls per dayby planorganization
POST /v0/agent/sign-up10 per hour per network range. Refused codes also pause sign-up for the rest of the hour: per network operator (50 refused codes per hour from one ASN) and globally (200 per hour from all sources); a paused sign-up answers 503 with Retry-After. A network range whose last successful sign-up was less than 7 days ago and that has had no refused code this hour is not pausednetwork range / ASN / global
POST /v0/waitlist5 per day per network range, 50 per day per network operator, plus a global daily capnetwork range / ASN
MCP OAuth client registration10 per daynetwork range
WebSocket50 connections per organization, 10 per key, 10 handshakes per minute, 1 hour per connectionorganization / key
Webhook deliveries60 per minute (extra deliveries are delayed, never dropped)endpoint

A network range is an IPv4 /24 or an IPv6 /48. Burst limits are enforced close to you and are approximate; quotas (per day) are exact.

WhatLimit
Email sign-in codes sent3 per 15 minutes and 10 per day per email address and network range together; 30 per day per email address across all ranges; 20 per hour per network range
Code attempts3 per code; 30 verifications per hour per network range
Failed codes10 failed codes per hour from one network range lock code sign-in for that address and range for an hour; 50 failed codes per hour from anywhere lock the address for an hour. Passkey sign-in is never locked.
Re-verification codessent 3 per 15 minutes and 10 per day per session (20 per hour per network range, counted separately from sign-in); 3 attempts per code; 10 failures per hour lock re-verification codes for that session for an hour
Adding or removing passkeys5 per day per user
Invite code redemption5 per hour per user, 20 per hour per IP; 5 failures in a row lock redemption for an hour
Console requests300 per minute per signed-in session; 60 per minute per network range without a session (requests that carry a session cookie first pass a looser 600 per minute per network range check)

Responses never reveal whether an email address is registered: the limits and the messages are the same either way.

Every 429 has a Retry-After header (seconds) and a problem+json body with retryable: true:

{
"type": "https://docs.simail.ai/errors#rate_limited",
"title": "RateLimitedError",
"status": 429,
"code": "rate_limited",
"message": "Too many requests.",
"fix": "Wait for Retry-After seconds, then retry.",
"retryable": true,
"request_id": "req_…"
}
  • Wait at least Retry-After seconds, then retry the same request (with the same Idempotency-Key for sends).
  • Add jitter and back off exponentially if you hit the limit again.
  • Do not spread load over more keys to get around a limit; limits that matter are per organization.
  • Prefer events (polling, webhooks, WebSocket) to tight polling loops over messages.

429 daily_limit_exceeded means a daily quota, not a burst: Retry-After points at the next window.