# Rate limits

How many requests you can make, what happens past the limit, and how to need fewer.

Limits are per account and shared by the REST API and MCP, so an agent and your app draw from the same budget.

| What | Limit |
| --- | --- |
| All requests | 120 every 60 seconds |
| AI campaign drafts | 10 an hour |
| Test emails | 30 an hour |
| Image uploads | 60 an hour |

The tighter limits count on top of the first one.

## When you hit a limit

The answer is `429` with a `retry-after` header in seconds:

```json 429 Too Many Requests
{
  "type": "rate_limited",
  "message": "Too many requests. Try again in 12 seconds.",
  "retry_after": 12
}
```

## Work in fewer requests

- Create or update up to 1,000 contacts in one batch request.
- Use `limit` up to 200 when you page through a list.
- Subscribe a [webhook endpoint](https://sendocado.com/docs/webhooks) instead of polling for replies, bounces and unsubscribes.

## Plan limits

Plans cap contacts, emails a month and projects. Going over is `402 plan_limit_reached`, never a silent drop. The Free plan allows 1,000 contacts and 5,000 emails a month; see [Pricing](https://sendocado.com/pricing) for the others. Your usage is on the [account route](https://sendocado.com/docs/api/account).

## Sending pace

Emails go out at the pace your provider allows and never faster than the hourly cap you set on the sender (`max_sends_per_hour`). Transactional and test emails skip that cap, so a password reset never waits behind a broadcast.
