Emailens
REST API

Rate Limiting

Rate limits, daily quotas, and how to handle 429 responses.

Rate limits

Emailens enforces per-minute rate limits and daily usage quotas.

Per-minute limits

Auth statusLimitWindow
Anonymous30 req/minPer IP address
Authenticated60 req/minPer user account

Daily quotas

PlanPreviews/day
Anonymous (no account)15, counted per IP
Free30
Dev ($9/mo)100
Pro ($19/mo)Unlimited

Quotas are counted per UTC calendar day and reset at midnight UTC.

Response headers

Rate limit information is included in response headers:

HeaderDescription
X-RateLimit-RemainingRequests remaining in current window
Retry-AfterSeconds to wait before retrying (on 429 responses)

Handling 429 responses

When you hit a rate limit, the API returns HTTP 429:

{
  "error": "Rate limit exceeded. Try again later."
}

For daily quota limits:

{
  "error": "Daily preview limit reached (100). Upgrade your plan for more.",
  "limit": 100,
  "plan": "dev"
}

Retry strategy

  1. Read the Retry-After header
  2. Wait the specified number of seconds
  3. Retry the request

Retry-After is sent on per-minute rate limits and on the anonymous daily cap. It is not sent when a plan quota is exhausted: that resets at midnight UTC rather than after a short window, so retrying sooner will not help.

Retry-After is sent on per-minute rate limits and on the anonymous daily cap. It is not sent when a plan quota is exhausted: that resets at midnight UTC rather than after a short window, so retrying sooner will not help.

For automated pipelines, use exponential backoff starting from the Retry-After value.

On this page