Skip to the documentation
Knowledge base

Address limits

Cap what one address sends, receives and keeps, hold it, or choose who it may write to and hear from. With no limits set, the plan is the only cap.

How limits work

Every address starts with no limits of its own, and the plan of the workspace is the only cap until somebody sets one. Limits sit on top of the plan, so a message has to pass both. They hold on every way mail leaves the address: the app, the assistant, the API and the SDKs, MCP, mail apps over SMTP, sign-up forms, broadcasts, automations and booking pages. Receiving limits hold on mail that arrives here, which leaves out connected mailboxes, as Receiving explains.

An address an AI agent works from is the usual case. Allowed recipients set to client.com, a cap of 50 messages a day and allowed senders set to client.com mean the agent only writes to that client, never more than 50 times a day, and only hears from them.

  • An hour is the current clock hour in UTC, so it starts again on the hour.
  • A day is the last 24 clock hours, the current one included, so it lets go of one hour at a time.
  • A month is the calendar month in UTC.

Sending

LimitWhat it does
Hold: pausedA new message is refused with 429 address_sending_paused. Queued and scheduled mail waits and is tried again every 15 minutes until sending is resumed.
Hold: disabledA new message is refused with 403 address_sending_disabled. Queued and scheduled mail fails, each fires email.failed, and a message written in the app tells its sender.
Messages per hour, day or monthHow many messages the address may send in each window. Past one, a message is refused with 429 address_limit_reached.
Recipients per hour, day or monthHow many recipients its messages may go to in each window, counting every address in to, cc and bcc. Past one, 429 address_limit_reached.
Recipients per messageHow many recipients one message may have. More is a 403 too_many_recipients, and so is a message that no cap could ever let through, such as 60 recipients against 50 an hour.
Allowed recipientsThe only recipients it may send to. Anyone else is a 403 recipient_not_allowed that names up to five of them. Not set means anyone, and an empty list means nobody.
Blocked recipientsRecipients it may never send to, refused the same way. An empty list blocks nobody.

Receiving

LimitWhat it does
Hold: pausedMail is turned away with a temporary bounce, 4.2.1, so the sender knows to try again later.
Hold: disabledMail is turned away with a permanent bounce, 5.2.1.
Messages per hour, day or monthHow much mail it accepts in each window. Past one, mail is turned away with a temporary bounce, 4.2.2.
Storage quotaThe most mail it may keep, from 1 MiB to 1 TiB. A message that would take it past the quota is turned away with a permanent bounce, 5.2.2, and Storage quota below says what counts.
Allowed sendersThe only senders it accepts mail from, matched against the From header and the envelope sender. Anyone else gets a permanent bounce, 5.7.1. Not set means anyone, and an empty list means nobody.

Receiving limits never apply to a connected mailbox, such as a Gmail or Outlook address. Its mail arrives at the provider and syncs in from there, so it never passes the check that turns mail away. Sending limits apply to a connected mailbox like any other address.

Mail that is turned away is never filed, so the mailbox, its rules and the assistant never see it. A receiving cap is checked as each message arrives, so a burst of mail at the same moment can go a few messages over it.

Storage quota

A storage quota caps how much mail one address keeps. It is set in bytes, from 1 MiB (1,048,576) to 1 TiB (1,099,511,627,776), and the limits of the address report what it keeps now as usage.storage, with its bytes and its messages.

  • Each message the address receives counts once it is filed in its mailbox, at the size it arrived, together with its original when the address keeps originals. A plus tag counts toward the address it belongs to.
  • Counting began when storage quotas shipped. Mail an address held before then is not counted, so its total can be lower than what its mailbox holds.
  • Mail routed to a webhook is never stored in a mailbox, so it never counts. Sent copies, drafts and messages a mail app uploads do not count either.
  • Deleting mail for good makes room again: deleting a conversation forever, emptying the Bin, and the retention of temporary mail. Moving a conversation to the Bin keeps it, so it still counts.
  • Removing a domain stops counting what its addresses kept. Their conversations stay in the mailbox but no longer count toward any quota.
  • Moving a domain to another workspace takes what its addresses keep with it, and so does renaming the free address that follows a username.
  • In the web app, the Storage quota field sits in the Receiving section of the Limits tab, in megabytes or gigabytes, and the Usage section shows the stored mail with its number of messages. In the phone app, the Limits tab of the address screen sets the storage quota too.

The quota is checked as each message arrives, so messages that arrive at the same moment can take an address a little past it. Mail it turns away is never filed and never counts.

Writing a list or a cap

Allowed recipients, blocked recipients and allowed senders each hold up to 100 entries, and case does not matter:

  • [email protected] matches that address alone.
  • client.com matches every address at that domain, and not at its subdomains.
  • *.client.com matches every subdomain of it, such as mail.client.com. Add client.com as well to include the domain itself.

Caps take whole numbers from 1 to 10,000,000, and a storage quota takes bytes from 1 MiB to 1 TiB. To stop sending or receiving altogether, use the hold instead.

When a limit is reached

CodeStatusWhat it means
address_limit_reached429A cap is used up. param names it, such as sending.perDay, and retryAfterSeconds in the body, like the Retry-After header, says when it lifts. When several caps are used up, it names the one that lifts last.
address_sending_paused429Sending is paused. It lifts only when somebody resumes it, so waiting alone never clears it.
address_sending_disabled403Sending is disabled.
too_many_recipients403The message has more recipients than the address allows in one message, or than a cap could ever let through.
recipient_not_allowed403A recipient is outside the allowed recipients or on the blocked ones. The message names up to five.

A mail app that sends over SMTP gets the same answers as SMTP replies: 451 4.7.1 while sending is paused or a cap is used up, so the app tries again later, 550 5.7.1 when sending is disabled or a recipient is not allowed, and 452 4.5.3 for too many recipients. In the app, the composer says why the message was stopped.

How usage is counted

  • A message counts when it is accepted, so a scheduled message counts the moment it is scheduled. A message a limit refuses counts for nothing.
  • Recipients count every address in to, cc and bcc. A plus tag counts toward the address it belongs to.
  • Received mail counts once it is filed. Mail that is turned away does not count.
  • Usage is counted for every address, limited or not, so a new cap starts from what the address has already sent or received in that window.
  • Sends made with a test API key are never limited or counted.
  • Forwarding stays apart: mail an address forwards to other places does not count toward its sending caps and is not held by a sending hold. Mail the address turns away is never forwarded.
  • Counting started when address limits shipped, so nothing sent or received before then is in the totals. Stored mail is counted from when storage quotas shipped.
  • The limits of an address come with its usage for the current hour, the last 24 hours and the month, with the mail it keeps in usage.storage, and with resets: when the hour starts again, when the oldest counted hour drops out of the last 24, and when the month starts again.

Who can set limits

  • Reading the limits of an address needs domains:read, and changing them needs domains:write.
  • Changing them also needs reach of the address: the workspace owner, or a member whose role reaches it. Anyone else gets 403 insufficient_authority.
  • An API key or a connected app limited to some addresses only reaches the limits of those, and any other address answers 404.
  • A mailbox login can read the limits of its own address and cannot change them.
  • Moving a domain to another workspace takes the limits of its addresses with it, and what they keep.

Set limits

  • In the web app, on the Limits tab of the address page, under Settings → Addresses. In the phone app, on the Limits tab of the address screen.
  • Over REST, GET and PATCH /domains/{id}/addresses/{addressId}/limits. The patch takes sending and receiving: a field left out stays as it is, null clears it, and clearing every field brings the address back to no limits.
  • In the SDKs, domains.getAddressLimits(id, addressId) and domains.updateAddressLimits(id, addressId, patch), under the same names in Python, Ruby, PHP, Go, Java and C#, written the way each language writes names.
  • On the command line, nextmail domains get-address-limits and nextmail domains update-address-limits.
  • Over MCP and in the assistant, getAddressLimits and setAddressLimits. setAddressLimits changes what an address may do, so it asks before it runs, and whoAmI lists up to 20 addresses that have limits of their own.
Terminal
nextmail domains update-address-limits <domain-id> <address-id> --sending-per-day 50 --sending-allowed-recipients client.com --receiving-allowed-senders client.comnextmail domains update-address-limits <domain-id> <address-id> --receiving-storage-bytes 1073741824nextmail domains get-address-limits <domain-id> <address-id>