Rate Limits

Sendbound's API and SMTP rate limits, response headers, and best practices for handling 429s.

Sendbound enforces per-project token-bucket rate limits to keep the platform stable for everyone. Limits are keyed to your API key / project — not to your IP address.

API rate limits

Endpoint groupSustained rateBurst
POST /v1/send20 req / sec50
POST /v1/track100 req / sec200
Contact writes — POST, PATCH, DELETE /v1/contacts50 req / sec100

Token buckets refill continuously at the sustained rate. A burst of up to the burst limit is allowed as long as the bucket has capacity, so short spikes are absorbed without immediately returning a 429.

Rate limit headers

Every API response includes:

HeaderDescription
RateLimit-LimitBurst capacity for this endpoint
RateLimit-RemainingTokens remaining in the bucket right now
RateLimit-ResetSeconds until the bucket is fully refilled
Retry-AfterSeconds to wait before retrying (429 responses only)

Handling 429 responses

HTTP/1.1 429 Too Many Requests
Retry-After: 3
RateLimit-Limit: 50
RateLimit-Remaining: 0
RateLimit-Reset: 3

{
  "error": {
    "code": "rate_limited",
    "message": "Rate limit exceeded for this endpoint (20/second sustained, 50 burst). Retry in 3s."
  }
}

SMTP connection limits

When sending via SMTP, the following limits apply per server session:

LimitValue
Max recipients per message100 (per DATA command)
Simultaneous connections per IP20
Global connection cap1,000
Idle connection timeout5 minutes

Best practices

  • Respect Retry-After — back off for at least the indicated number of seconds before retrying.
  • Batch contact upserts — import large lists via file upload rather than individual POST requests.
  • Cache list responses — index endpoints change infrequently; a short client-side cache reduces unnecessary calls.
  • Use webhooks — subscribe to email.delivered / email.bounced instead of polling delivery status.

Need higher limits? Contact us or upgrade your plan.

Select an endpoint
to see request details