> ## Documentation Index
> Fetch the complete documentation index at: https://docs.anyreach.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Delivery status

> Track sent, delivered, opened, clicked, and bounced for each email turn.

Every outbound email turn carries its own delivery status. As your provider sends
webhook events, Anyreach advances the turn along a fixed ladder and records when
the recipient opened the message, clicked a link, or bounced. The status shows on
the turn in the conversation detail view.

## The delivery ladder

Each outbound turn moves through a monotonic ladder. A new event only advances the
status if it outranks the current one, so out-of-order webhooks never regress a
turn (an `opened` event arriving before its `delivered` event cannot pull the turn
backward). The terminal negative states always win, regardless of the current rank.

```
queued  <  sent  <  delivered  <  opened  <  clicked
                  bounced / complaint / failed  (terminal)
```

| State       | Rank     | Meaning                                                                       |
| ----------- | -------- | ----------------------------------------------------------------------------- |
| `queued`    | 1        | Accepted by the provider; not yet sent. A delayed delivery also reports here. |
| `sent`      | 2        | Handed off to the recipient's mail server.                                    |
| `delivered` | 3        | Accepted by the recipient's mailbox.                                          |
| `opened`    | 4        | The recipient opened the message.                                             |
| `clicked`   | 5        | The recipient clicked a link in the message.                                  |
| `bounced`   | terminal | The message hard-bounced. Auto-suppresses the recipient.                      |
| `complaint` | terminal | The recipient marked it as spam. Auto-suppresses the recipient.               |
| `failed`    | terminal | The provider could not process the message.                                   |

<Note>
  `opened` and `clicked` require open and click tracking enabled at the provider.
  Without it, a turn may stop at `delivered`.
</Note>

## What gets recorded

When a status event arrives, Anyreach patches the matching outbound turn (located
by the provider's message ID) with the new status and any engagement details the
event carries:

| Field                 | Set by               | Description                            |
| --------------------- | -------------------- | -------------------------------------- |
| `delivery_status`     | every event          | The current ladder state for the turn. |
| `opened_at`           | `opened`             | Provider timestamp of the open.        |
| `clicked_at`          | `clicked`            | Provider timestamp of the click.       |
| `clicked_link`        | `clicked`            | The exact URL the recipient clicked.   |
| `delivery_error_code` | `bounced` / `failed` | Provider error or bounce type.         |

These are written atomically alongside the underlying delivery row, so the turn and
the delivery record never disagree.

## Auto-suppression on bounce and complaint

A `bounced` or `complaint` event is terminal and also adds the recipient to your
unsubscribe ledger so future turns are not sent to that address. The reason is
recorded as `bounce` for a hard bounce and `complaint` for a spam complaint.
Suppression is idempotent: a repeat event for an already-suppressed address is a
no-op.

<Warning>
  Suppression is automatic and account-wide for the channel. To send to a recipient
  again, remove them from the ledger as described in
  [/email/unsubscribes-and-compliance](/email/unsubscribes-and-compliance).
</Warning>

## Where it surfaces

Open a conversation in the detail view to see a status badge on each outbound email
turn. The badge label matches the ladder state:

| State       | Badge         |
| ----------- | ------------- |
| `queued`    | **Queued**    |
| `sent`      | **Sent**      |
| `delivered` | **Delivered** |
| `opened`    | **Opened**    |
| `clicked`   | **Clicked**   |
| `bounced`   | **Bounced**   |
| `complaint` | **Complaint** |
| `failed`    | **Failed**    |

Hover the badge for a tooltip with the open time, click time, and any error code.
When a turn reaches `clicked`, the clicked link is shown on the turn itself.

<CardGroup cols={2}>
  <Card title="Conversation detail" icon="messages" href="/conversations/conversation-detail">
    Read a full transcript and inspect each turn, including email delivery badges.
  </Card>

  <Card title="Unsubscribes and compliance" icon="ban" href="/email/unsubscribes-and-compliance">
    Manage the suppression ledger and the keywords that add or remove addresses.
  </Card>
</CardGroup>
