# Limits

> Plan limits, rate limits and size limits enforced by the API.

Source: https://mueslimail.com/docs/limits/

## Plan limits

| Plan | Inboxes | Custom domains | Sends per day | Sends per month | Footer |
| --- | --- | --- | --- | --- | --- |
| Free | 3 | 1 | 100 | 3,000 | Yes |
| Builder | 10 | 5 | 1,000 | 10,000 | No |
| Growth | 50 | 20 | 2,500 | 40,000 | No |
| Team | 150 | 50 | 15,000 | 150,000 | No |
| Enterprise | Custom | Custom | Custom | Custom | No |

Inbox and domain limits return `403 limit_exceeded`; send limits return `429 limit_exceeded`. Receiving mail is not counted against send limits. See [Pricing](https://mueslimail.com/pricing).

Every refused limit also carries `resolution`, the action that unblocks it, and `resolution_endpoint`, the call that performs it: `upgrade` with `POST /v1/billing/checkout` for a plan limit, `delete` with the call that removes one of the things the limit counts (a rule, a blocklist entry), `retry` when the only answer is to wait. The code and the status do not change, so an integration that branched on `limit_exceeded` keeps working and one that reads `resolution` can act instead of asking a person.

## Request limits

| Limit | Value |
| --- | --- |
| API requests | Per organization token bucket, 20 requests per second with bursts up to 40 by default. Over the limit: `429 rate_limit_exceeded` with `Retry-After`. |
| Send burst | 10% of the daily send limit per 5 minutes: Free 10, Builder 100, Team 1,500. Over the limit: `429 rate_limited` with `Retry-After`. |
| Failed authentications | Throttled per client address. |
| JSON request body | 8 MB |
| Attachments per sent message | 6 MB in total |
| Recipients per sent message | 50 across `to`, `cc` and `bcc` |
| Inbound message size | 25 MB |
| Page size | `limit` from 1 to 100, default 20 |
| Idempotency-Key | Up to 256 characters, remembered for 24 hours |
| Webhook `inbox_ids` | Up to 10 per webhook |
| Open event streams | 5 per API key |
| Draft `send_at` | In the future, at most 365 days ahead |
| MCP `get_attachment` | 5 MB; use REST for larger files |
| Inbox `display_name` | 200 characters |

> Note: These values reflect the current release and can change while the service is in staging. The API always reports the limit it applied in the error message.
