Appearance
Rate Limits & Quotas
SendAPI applies rate limits and monthly quotas to keep the platform stable and fair for all users.
Rate Limits
Rate limits are enforced per API key using a sliding-window token bucket algorithm.
| Plan | Requests per minute |
|---|---|
| Starter | 60 |
| Growth | 300 |
| Business | 1,000 |
| Enterprise | 2,000 |
Rate Limit Headers
Every API response includes these headers:
| Header | Description |
|---|---|
X-RateLimit-Limit | Maximum requests allowed in the current window |
X-RateLimit-Remaining | Requests remaining in the current window |
X-RateLimit-Reset | Unix timestamp when the window resets |
429 Response
When you exceed the rate limit, the API returns 429 Too Many Requests:
json
{
"success": false,
"error": {
"type": "rate_limit_exceeded",
"message": "Rate limit exceeded. Try again in 12 seconds.",
"code": 4029
}
}Additional headers on the 429 response:
| Header | Description |
|---|---|
Retry-After | Seconds to wait before retrying |
X-RateLimit-Limit | Your plan's per-minute cap |
X-RateLimit-Remaining | 0 (you're rate-limited) |
X-RateLimit-Reset | Unix timestamp when the window resets |
Best practice: Implement exponential backoff when receiving 429. Start at 1s, double each retry, cap at 60s.
Monthly Quotas
Quotas reset on the first day of each billing period.
| Feature | Starter | Growth | Business | Enterprise |
|---|---|---|---|---|
| WhatsApp sessions | 1 | 3 | 10 | Unlimited |
| SMS messages | 100 | 500 | 2,000 | Unlimited |
| Emails | 5,000 | 25,000 | 100,000 | Unlimited |
| OTP sends | 200 | 1,000 | 5,000 | Unlimited |
Trial users get reduced quotas: 100 emails, $0.15 SMS credit (~10 messages), regardless of plan.
Quota Exceeded Response
When you exceed your monthly email quota, the API returns 402 Payment Required:
json
{
"success": false,
"error": {
"type": "email_quota_exceeded",
"message": "Monthly email quota exceeded (5000/5000). Upgrade your plan for more.",
"code": 402
}
}OTP Limits
OTP send limits are enforced per phone number to prevent abuse:
| Limit | Window |
|---|---|
| 5 sends | per hour |
| 20 sends | per day |
Hitting these returns 429 with type rate_limit_exceeded (code 4291) or daily_limit_exceeded (code 4292).