---
title: email.sent
description: The message was handed to the mail provider — acceptance, not delivery.
sidebar:
  label: email.sent
  icon: send
---

The message was handed to the provider. Acceptance, not delivery.

## Payload

| Prop | Type | Default | Description |
| - | - | - | - |
| `email_id` | `string` | - | eml_… |
| `thread_id` | `string` | - | The conversation. |
| `domain_id` | `string \| null` | - | The domain it was sent from, or null when sent through a mailbox. |
| `mailbox_id` | `string \| null` | - | The mailbox it was sent through, or null when sent from a domain. |
| `suppression_key` | `string \| null` | - | The list the send named, when it named one. |
| `from` | `string` | - | Sender address. |
| `to` | `string[]` | - | Recipients. |
| `subject` | `string` | - | The subject line. |
| `snippet` | `string` | - | A short preview. |
| `attachments?` | `object[]` | - | Attachment metadata. |

## Handling it

This is the event to record in an outbox or an audit log. It is *not* evidence the message arrived — wait for [`email.delivered`](/webhooks/events/email-delivered) for that, and expect [`email.bounced`](/webhooks/events/email-bounced) instead when it didn't.

A [scheduled send](/guides/scheduling) fires this at the moment it actually goes out, not when you scheduled it.
