Rate Limits

Understand your request limits and how to handle throttling.

Limits by Plan

PlanRequests / secondEmails / month
Free103,000
Starter5010,000
Growth10050,000
Scale500200,000

Rate Limit Headers

Every API response includes these headers:

HeaderDescription
X-RateLimit-LimitMaximum requests allowed per second for your plan
X-RateLimit-RemainingNumber of requests remaining in the current window
X-RateLimit-ResetUnix timestamp when the rate limit window resets
Example Response Headers
HTTP/1.1 200 OK
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 97
X-RateLimit-Reset: 1712345678
Content-Type: application/json

Handling 429 Responses

When you exceed the rate limit, the API returns a 429 Too Many Requests response with a Retry-After header indicating how many seconds to wait.

429 Response
HTTP/1.1 429 Too Many Requests
Retry-After: 1
Content-Type: application/json

{
  "error": "Rate limit exceeded",
  "status": 429,
  "retry_after": 1
}
async function sendWithRetry(payload, maxRetries = 3) {
  for (let attempt = 0; attempt <= maxRetries; attempt++) {
    const res = await fetch("https://smtpfa.st/api/v1/emails", {
      method: "POST",
      headers: {
        Authorization: `Bearer ${API_KEY}`,
        "Content-Type": "application/json",
      },
      body: JSON.stringify(payload),
    });

    if (res.status !== 429) return res.json();

    const retryAfter = parseInt(res.headers.get("Retry-After") || "1");
    await new Promise((r) => setTimeout(r, retryAfter * 1000));
  }

  throw new Error("Max retries exceeded");
}

Best Practices

Use batch sending

The POST /v1/emails/batch endpoint lets you send up to 100 emails in a single request. This counts as one request toward your rate limit.

Monitor headers proactively

Check X-RateLimit-Remaining in your responses and slow down before hitting the limit instead of waiting for 429 errors.

Implement exponential backoff

When retrying after a 429, use exponential backoff with jitter to avoid thundering herd problems when multiple clients retry simultaneously.

Queue on your side

For high-volume sending, queue emails in your application and drain the queue at a steady rate below your limit. This prevents bursts from triggering throttling.