Zum Hauptinhalt springen

Rate Limits

All API requests are subject to rate limits based on your plan.

Free Plan Limits

LimitValue
Monthly requests10,000
Daily requests1,000
Requests per minute (RPM)60
API tokens5

Rate Limit Headers

Every API response includes rate limit headers:

HeaderDescription
X-RateLimit-LimitMaximum requests per minute
X-RateLimit-RemainingRequests remaining in current window
X-RateLimit-ResetUnix timestamp when the window resets

When Redis is unavailable, the API fails open and returns:

HeaderDescription
X-RateLimit-StatusSet to degraded when rate limiting is unavailable

Handling 429 Errors

When you exceed the rate limit, the API returns 429 Too Many Requests with the ErrorInfo format:

{
"requestId": "a1b2c3d4-...",
"path": "/api/v1/email",
"code": "RATE_LIMIT_EXCEEDED",
"message": "Rate limit exceeded. Try again later.",
"details": []
}

The response includes a Retry-After header with the number of seconds to wait before retrying.

Best practices:

  • Implement exponential backoff on 429 responses
  • Use the Retry-After header to know when to retry
  • Use the X-RateLimit-Remaining header to throttle proactively
  • Cache responses when possible to reduce API calls

Quota Headers

Every API response includes quota headers:

HeaderDescription
X-Quota-LimitMonthly request quota
X-Quota-RemainingRemaining monthly requests
X-Quota-Daily-LimitDaily request quota (if applicable)
X-Quota-Daily-RemainingRemaining daily requests (if applicable)

Monthly Quota

When your monthly quota is exhausted, requests return 429:

{
"requestId": "a1b2c3d4-...",
"path": "/api/v1/email",
"code": "QUOTA_EXCEEDED",
"message": "Monthly quota exceeded. Upgrade your plan.",
"details": []
}

Daily Quota

When your daily quota is exhausted, requests return 429:

{
"requestId": "a1b2c3d4-...",
"path": "/api/v1/email",
"code": "DAILY_QUOTA_EXCEEDED",
"message": "Daily quota exceeded. Try again tomorrow.",
"details": []
}

Paid plans with higher limits are coming soon.