# Why do I get 429 Rate limit exceeded?

> Handle 429 responses from the Emailit API. Learn the per-second and daily sending limits, the rate-limit headers and how to request higher limits.

This article explains why `POST /v2/emails` returns `429` and how to pace your sending so it doesn't happen. The same limits apply to SMTP, where they show up as `452` replies.

## Symptoms

The API responds with `429` and one of these bodies:

```json
{
  "error": "Rate limit exceeded",
  "message": "Too many requests. Maximum 2 messages per second allowed.",
  "limit": 2,
  "current": 2,
  "retry_after": 1
}
```

```json
{
  "error": "Daily limit exceeded",
  "message": "Daily sending limit of 5000 messages has been reached.",
  "limit": 5000,
  "current": 5000,
  "retry_after": 41200
}
```

Over SMTP, the `MAIL FROM` command fails with `452 4.4.5 Messages per second limit exceeded` or `452 4.5.3 Daily message limit exceeded`.

## Cause

Each workspace has two sending limits, shared by every API key and by SMTP:

- **Per second.** New workspaces start at 2 emails per second.
- **Per day.** New workspaces start at 5,000 emails per day. The counter resets at midnight UTC.

The API counts every recipient as one email, so a request with three addresses in `to`, `cc` and `bcc` uses three. Bursts from parallel workers, retry loops without backoff, and batch jobs that start at the same time are the usual triggers.

Every send response includes headers that tell you where you stand:

| Header | Meaning |
| --- | --- |
| `ratelimit-limit` / `ratelimit-remaining` | Per-second limit and what's left in the current second |
| `ratelimit-daily-limit` / `ratelimit-daily-remaining` | Daily limit and what's left today |
| `ratelimit-daily-reset` | Seconds until midnight UTC |
| `retry-after` | Seconds to wait before retrying (on `429` only) |

## Fix

1. **Wait and retry.** Honor `retry-after` (or `retry_after` in the body) before you send again. A `429` request isn't sent and isn't charged, so retrying is safe. Add an [`Idempotency-Key`](/docs/email-api/idempotency/) to guard against network-level retries.

2. **Pace your sender.** Use a queue with a concurrency limit that matches `ratelimit-limit`, and back off exponentially after a `429` instead of retrying in a tight loop.

3. **Spread large sends.** If you hit the daily limit, schedule the rest with [`scheduled_at`](/docs/email-api/scheduling/) for after midnight UTC, or use a [campaign](/docs/campaigns/) for marketing mail.

4. **Check your current limits.** The **Sending Limits** card on the **Dashboard** shows your per-second and per-day limits and today's usage.

5. **Request higher limits.** Select **Request Increase** on the Sending Limits card, enter the limits you need, where your recipients come from and why. The team usually replies within 24 hours. On Pro and Business, limits also rise automatically as your sending health stays good.

See [Rate limits](/docs/api-reference/rate-limits/) for the full reference and [Limits](/docs/limits/) for every plan quota.

## Still stuck?

[Contact support](/contact/) or ask in [Discord](https://discord.emailit.com). Include your expected volume per day and per second and a sample `429` response.

---
Source: https://emailit.com/docs/kb/429-rate-limit-exceeded/
