# Receive email as parsed JSON with its verdicts

> Mail to your receiving domain arrives as `email.received`: headers, text, HTML and attachments, with up to 256 KB of it in the webhook.

Canonical: https://minket.com/inbound. Updated: 2026-10-28.

*A received message in the console.* A question about order 10452 with SPF, DKIM, DMARC, spam and virus all passing, the address it was sent to, and its routing: received, matched by the support+ rule, posted as email.received.

## Two records turn receiving on

Publish both and mail to the domain starts arriving as events.

**Receiving on inbound.fernbank.example**

- MX: `10 inbound-smtp.<region>.amazonaws.com`
- TXT: the key that signs mail forwarded from it

## Route by address, plus-address or catch-all

The most specific rule wins; mail no rule takes goes to every endpoint subscribed to `email.received`.

**Rules on inbound.fernbank.example**

| Matches | Rule | Then |
| --- | --- | --- |
| `support@` | the address | post to the support endpoint |
| `support+*@` | the plus base | post with the token |
| `*@` | the catch-all | forward to a confirmed address |

## Verdicts a sender cannot write

They come from the receiving servers' own checks, never from the message's headers.

**In the data of email.received**

```json
"verdicts": {
  "spf": "pass", "dkim": "pass", "dmarc": "pass",
  "spam": "pass", "virus": "pass"
}
```

## The envelope says who it was really for

`received_for` lists the addresses the mail was delivered for, Bcc and catch-all included.

**A plus-address keeps its token**

```json
"received_for": ["support+ticket4471@inbound.fernbank.example"]
```

## Forwarding goes only to confirmed addresses

Only clean mail, sealed so the next server can trust it, and never more than 3 hops on.

**Confirming a forwarding address**

- Added: `desk@fernbank.example`, in the console
- Replied: from that mailbox, within 72 hours
- Confirmed: mail may now be forwarded to it

## Limits, keys and downloads

- **Limits**: A message that breaks one is kept, with what was cut listed in `issues`.
- **Read-only keys**: An `inbound_read` key reads received mail and nothing else.
- **Downloads**: Attachments and the raw message, by links valid for an hour.
- **[Guide](https://docs.minket.com/inbound/)**: Routing, verdicts, forwarding and limits.

## Questions

### Can I read mail without a webhook?

Yes: the API returns received mail in the same shape.

### How large can a message be?

Up to 40 MB, with up to 100 attachments.

More: Read the inbound guide, https://docs.minket.com/inbound/
