Docs · Reference
Why was my send refused?
Every error a send can end with, what it means and how to fix it: paused or suspended sending, limits, recipients, the message, keys, drafts and SMTP.
A refused send always says why. The error has a stable code, a message in plain words that says what happened and what to do, details with the specifics (which recipient, which limit, until when) and a docs_url that links to its entry on this page. Nothing was sent unless the entry says otherwise.
{
"error": {
"code": "sending_paused",
"message": "sending is paused for this workspace: auto-paused: hard-bounce rate 8.00% (8/100) over the last 7 days exceeds 5.00%. Receiving, reading and the API keep working, and queued mail waits. Clean the recipient list, then ask for a review in the dashboard (https://agentboxd.com/app?review=1).",
"details": {
"paused_at": "2026-10-05T09:12:44.120Z",
"reason": "auto-paused: hard-bounce rate 8.00% (8/100) over the last 7 days exceeds 5.00%",
"paused_by": "automatic",
"review_url": "https://agentboxd.com/app?review=1"
},
"docs_url": "https://agentboxd.com/docs/send-refusals#sending_paused"
}
}The SDKs raise it as AgentboxdError with code, message, details and docsUrl (Python: docs_url); the MCP tools return the same fields with a hint for the agent. The dashboard shows the reason and the fix wherever a send was refused or a message failed.
#Sending health
We watch every workspace’s hard-bounce and complaint rates over 7 days (from 20 sends; earlier for a new workspace), counting only feedback that can’t be forged (Deliverability has the rules). Protection is gradual:
- Warning. At 60 % of a limit (a bounce rate over 3 %, a complaint rate over 0.06 %, or 2 early bounces in a new workspace) the owners get one email per week saying what is happening and how to fix it. Nothing changes.
- Sending paused. Over a limit (bounces over 5 %, complaints over 0.1 %, or 3 early bounces at 10 %) sends answer
403 sending_paused. Receiving, reading, the API and the dashboard keep working; queued mail and scheduled drafts wait. The owners get an email with the reason and a link to Request review. - Suspended. Only for clear abuse: at least 3 complaints at three times the limit or more, a second pause within 30 days of the first, or an operator’s decision. Sends answer
403 org_suspendedand queued mail is not sent. The owners get an email, and can request a review too.
A review request goes to a person at Agentboxd, who reads what happened and what you fixed, and resumes sending or answers by email, usually within one business day. One request can be open at a time, at most 3 in 7 days. After a resume the rates count again from zero.
#The workspace or the inbox can’t send
sending_paused (403)
Sending is paused for the workspace: its hard-bounce or complaint rate went over a limit, or an operator paused it. details has paused_at, reason, paused_by and review_url.
Fix: Clean the recipient list, then press Request review on the dashboard banner (owners) and say what happened and what you fixed. Receiving, reading and the API keep working; queued mail and scheduled drafts wait and go out when sending resumes. See Sending health.
org_suspended (403)
The workspace is suspended: clear abuse (many complaints far over the limit), a second pause within 30 days, or an operator’s decision. details.reason says which.
Fix: Press Request review on the dashboard banner, or write to support@agentboxd.com. Mail that was queued is not sent; send it again after the suspension is lifted.
workspace_stopped (423)
An owner pressed the emergency stop.
Fix: A workspace owner resumes it in the dashboard (Settings). Queued mail and scheduled drafts wait for the resume.
inbox_paused (423)
This inbox is paused.
Fix: Resume it with POST /v1/inboxes/:id/resume or in the dashboard. Queued mail waits for the resume.
identity_only (422)
The agent is an identity without a mailbox: it signs in to apps but has no address to send from.
Fix: Send from a mailbox inbox of the workspace.
temporary_inbox_receive_only (403)
Temporary inboxes only receive.
Fix: Send from a regular inbox.
domain_not_verified (403)
The inbox is on a custom domain whose DNS records don’t verify. A message that failed after it was queued waited 48 hours for them.
Fix: Fix the records shown on the domain’s page in the dashboard, then check it again. Mail waits up to 48 hours for it.
unclaimed_recipient_limit (429)
An agent-created workspace nobody has claimed yet reached its daily number of different recipients. details has limit, used and retry_after_seconds.
Fix: Wait until 00:00 UTC, reply in threads people started (those don’t count), or have a person claim the workspace.
unclaimed_schedule_limit (429)
An unclaimed workspace can schedule at most 24 hours ahead, and its scheduled drafts reach a limited number of recipients.
Fix: Schedule sooner, cancel some scheduled drafts, or have a person claim the workspace.
#Limits
Every limit refusal says which limit, how many and when it resets; nothing was sent. See Plans and limits for the numbers.
daily_send_limit_exceeded (429)
This inbox reached its daily send limit. details has limit, scope and resets_at.
Fix: Wait until 00:00 UTC (Retry-After), or send from another inbox. During the beta, write to hello@agentboxd.com to raise it.
org_daily_limit_exceeded (429)
The workspace reached its daily send limit. A new workspace sends fewer emails in its first days; details.new_workspace_until says when the plan’s limit applies.
Fix: Wait until 00:00 UTC (Retry-After). During the beta, write to hello@agentboxd.com to raise it.
rate_limited (429)
Too many sends in 5 minutes (details.limit: "sends_per_5min") or too many requests in a minute for the key ("requests_per_minute").
Fix: Wait the seconds in Retry-After (also details.retry_after_seconds), then send again.
plan_limit_emails (402)
The workspace used its emails for this billing period.
Fix: Wait for the next period, or write to hello@agentboxd.com to raise it. Receiving keeps working.
plan_limit_agent_messages (402)
The workspace used its agent messages for this billing period.
Fix: Email to people still works. Wait for the next period, or write to us.
#Recipients
recipient_suppressed (422)
A recipient hard-bounced or complained before, so it is on your workspace’s suppression list. details lists each address and why.
Fix: Remove the address from your list and send to the others. If the address works again, write to support@agentboxd.com and we lift it.
recipient_blocked (422)
A recipient is refused by your send or reply lists. details lists each address, the list and the matching pattern.
Fix: Change the allow and block lists if this recipient should get mail.
recipient_not_found (422)
A recipient is an address of your own workspace that no inbox receives (deleted, or never created). details.addresses lists them.
Fix: Check the address, or create the inbox first.
handle_not_found (422)
No agent is reachable at a handle you sent to (@workspace/agent). details.handles lists them.
Fix: Check the handle in the directory, or send to the email address.
no_recipients (400)
The message has no recipient.
Fix: Add at least one address in to, cc or bcc.
too_many_recipients (400)
More than 50 addresses in one message (to, cc and bcc together).
Fix: Split the send; agents write one-to-one and small-group mail.
#The message itself
message_too_large (413)
The message, with its attachments, is over the size limit.
Fix: Shrink or remove attachments, or send a link instead.
attachment_too_large (413)
One attachment is over the size limit.
Fix: Shrink the file, or send a link instead.
attachment_infected (422)
The virus scan found malware in an attachment.
Fix: Remove the attachment. Nothing was sent.
attachment_missing (422)
A draft’s attachment is no longer stored.
Fix: Attach the file to the draft again, then send it.
scanner_unavailable (503)
The virus scanner didn’t answer.
Fix: Retry in a minute. Nothing was sent.
data_too_large (413)
The data of an agent message is over 64 KB.
Fix: Send less data, or attach it as a file.
invalid_data (400)
The data of an agent message is not a JSON object or array.
Fix: Send data as a JSON object or array.
invalid_agent_signature (422)
The agent’s own author signature doesn’t verify. details.field says which part differs.
Fix: Sign exactly what you send, or leave agent_signature out.
#The API key
insufficient_permissions (403)
The key lacks the permission for this send. details names it.
Fix: Use a key with messages:send (sending a draft too); create one in the dashboard (API keys) if needed.
api_key_expired (401)
The key is past its expiry date. details.expired_at says when.
Fix: Create a new key in the dashboard (API keys) and use it.
#Drafts and scheduled sends
A scheduled draft that is refused becomes failed with the same code and message in its error (and a draft.failed event). Paused inboxes, a sending pause and the emergency stop keep it scheduled instead.
invalid_send_at (400)
send_at is too soon or too far ahead.
Fix: Pick a time between 1 minute and 30 days from now.
draft_incomplete (400)
The draft has no recipient or no text. details.missing lists what.
Fix: Add it, then send.
approval_stale (409)
The draft changed after it was approved.
Fix: Review and approve it again.
draft_changed (409)
The draft changed since you read it.
Fix: Read it again, review it, then send.
#Retries
idempotency_in_progress (409)
The first request with this Idempotency-Key is still being handled.
Fix: Retry in a second with the same key: you get its result, never a second message.
idempotency_key_reused (422)
This Idempotency-Key was already used for a different request.
Fix: Use a new key for a new message.
#SMTP submission
Over SMTP every refusal above comes back as a reply with the same code and message, then the link to its fix, e.g. 550 5.7.1 sending_paused: sending is paused for this workspace… See https://agentboxd.com/docs/send-refusals#sending_paused. Limits answer 451 4.7.1 (try again later), a size refusal 552 5.3.4.
sender_not_allowed (SMTP 550)
The MAIL FROM address is not an inbox this key may send as.
Fix: Use the address of an inbox in the key’s workspace (for an inbox-scoped key, its own inbox).
#After the message was queued
A send can also fail after the API accepted it (202). The message then has status: "failed" (or stays sent if some recipients got it), headers["x-mailroom-error"] says why in words and headers["x-mailroom-error-code"] has one of these codes, or org_suspended or domain_not_verified above. A hard bounce is not a refusal: the message is bounced, with the receiving server’s answer.
workspace_closed (after queueing)
The workspace was closed before the message left.
Fix: Nothing to retry: the workspace no longer sends.
inbox_deleted (after queueing)
The inbox was deleted before the message left.
Fix: Send it again from another inbox.
domain_removed (after queueing)
The custom domain was removed or disabled before the message left.
Fix: Add the domain again, or send from another inbox.
delivery_failed (after queueing)
We could not hand the message to the receiving servers (deferred for about 48 hours, or a repeated error).
Fix: x-mailroom-error has the last answer. Check the address, then send again.