Search the docs
Find a page, a section, or an endpoint.
Event types
Every event you can subscribe to, and what causes each one.
There are 18 event types you can subscribe to. An endpoint
with no events gets all of them; naming them is how your endpoint is called
for the three you act on rather than for every one of these.
Every event carries ids and never a body — fetch the message when you want it. The envelope's shape, the signature and the retry schedule are on Webhooks.
What fires
| Fires when | |
|---|---|
message.received | Mail arrived at one of your addresses and is in the mailbox. |
message.sent | We accepted a message from you and handed it to the network. |
message.delivered | The receiving server accepted it. This can be minutes after it was sent. |
message.bounced | The receiving server refused it permanently. The address is wrong or gone. |
message.rejected | We refused to send it — a send rule, a quota, or an address that may not send. |
message.complained | Somebody you mailed pressed their provider’s spam button. This costs reputation. |
message.spam | Mail arriving for you was classified as spam and filed there. |
message.archived | A message was taken out of the inbox, by a person or by your software. |
message.deleted | A message was moved to Trash. Deleting for good does not fire an event. |
| Conversations | Fires when |
|---|---|
thread.created | The first message of a new conversation. Every later one updates it. |
thread.updated | A message joined the conversation, or its labels, status or assignee changed. |
thread.assigned | Somebody took the conversation, or was given it. |
thread.unassigned | The conversation went back to nobody. |
| Addresses and domains | Fires when |
|---|---|
identity.created | An address was created, by a person or through the API. |
identity.updated | An address’s name, capabilities or send policy changed. |
identity.suspended | An address stopped accepting and sending mail. Its mail is kept. |
identity.transferred | A mailbox moved to another workspace, with its mail. |
domain.verified | A domain’s DNS checks passed and it can carry mail. Subscribe instead of polling. |
Two you cannot subscribe to
These are written to the event log and never delivered. The reason is a loop:
an endpoint subscribed to everything would be sent webhook.failed, the
attempt to send it could fail, and that failure would emit another one. The
log is where you watch your webhooks; a webhook is not.
| Log only | Fires when |
|---|---|
webhook.delivered | Your endpoint answered 2xx. Written to the log; never delivered — it would loop. |
webhook.failed | Your endpoint did not answer, or answered an error. Also log-only. |
A type you do not recognise
The log is immutable, so a message written last year keeps the type it was
written with even after we stop emitting it. message.failed is the one that
has happened — it was split into message.rejected and message.complained,
which are the two different things it was being used for.
Match on the types you handle and ignore the rest. An integration that switches exhaustively over this list breaks the day we add to it, which we will.