---
title: "Live sending is refused"
description: "Six refusals block a live send because of your domain or your account state. Match the error type to its cause, from an unverified domain to a suspended account."
---

> **For AI agents:** the complete documentation index is at [llms.txt](/docs/llms.txt). Append `.md` to any page URL for its markdown version.

Six checks refuse a send because of the sending domain or the account's state. The status and error `type` together identify which one:

| Status | `type` | Cause |
|---|---|---|
| 403 | `unverified_domain_required` | The org has no verified domain at all |
| 422 | `validation_error`, `param: "from"` | The `from` domain is not itself verified |
| 403 | `account_suspended` | Setup was never completed |
| 403 | `account_rejected` | A staff member declined the account |
| 403 | `forbidden` | The account is paused |
| 429 | `account_under_review` | A new account's live sending is bounded during review |

## 403 unverified_domain_required

The org-level gate: your organization has no verified domain at all.

```json
{
  "error": {
    "type": "unverified_domain_required",
    "message": "Your organization has no verified sending domain. Add and verify a domain before sending live email, or use test mode."
  }
}
```

Fix: [verify a domain](/guides/verify-a-domain), or send in [test mode](/guides/test-mode), which is exempt from this check.

## 422 on the from field

The per-send check: the `from` domain itself is not verified, even if some other domain on the org is. `param` is `"from"`:

```json
{
  "error": {
    "type": "validation_error",
    "message": "The request was invalid.",
    "param": "from"
  }
}
```

Fix: verify that exact domain.

## Why a parent domain is not enough

`orders@mail.acme.com` needs `mail.acme.com` itself verified. A verified `acme.com` does not cover it. See [Subdomain or root domain](/deliverability/subdomain-or-root-domain) for why the check works this way.

## Check which domains are verified

`GET /v1/domains` returns each domain on the org alongside its current `status`:

```bash
curl https://api.mailfully.com/v1/domains \
  -H "Authorization: Bearer mf_live_xxxxxxxxxxxx"
```

Read `status` per row; only `verified` domains pass the `from` check. See [`GET /v1/domains`](/api-reference/domains/list).

## 403 account_suspended

Setup was never completed. Verify a sending domain; this clears itself, no ticket needed.

## 403 account_rejected

A staff member declined the account. Only a human can undo this; contact support rather than retrying.

## 403 forbidden

The account is paused. Sending stays refused until the pause is lifted; do not retry automatically.

## 429 account_under_review

A new account's live sending is bounded while staff review it, and this is a review state rather than a quota. See [New accounts](/concepts/rate-limits#new-accounts) for how long the review takes and why retrying on a timer doesn't help.

## Test mode is exempt from the domain checks

[Test mode](/guides/test-mode) skips both the org-level and per-send domain checks, so you can build and test your integration before DNS is in place.
