Event catalogue
51 event types. Each is an envelope with id, type, occurred_at, account_id and data, snake_case on the wire, and each can be subscribed to on a webhook endpoint.
Under each type: when it fires, and the keys its data always carries. Other keys appear on some payloads and new ones can be added at any time, so ignore what you do not recognise. Signing, retries and replay are in the webhooks guide.
- email.queued
- A send is accepted for delivery now, or a scheduled send reaches its time; a second one carrying the content scan’s warnings follows when the scan raised any.
- data
email_idtagsresource_typeresource_id - email.sent
- AgentiSend hands the message off for delivery, or a send to a simulator address is answered without leaving AgentiSend.
- data
email_idtagsresource_typeresource_id - email.delivered
- The receiving mail server accepts the message.
- data
email_idtagsresource_typeresource_id - email.delivery_delayed
- A delivery attempt is deferred by the receiving server, a temporary sending error or a pause on all sending, and the message will be tried again.
- data
email_idtagsresource_typeresource_id - email.bounced
- The receiving server rejects the message for a recipient, during delivery or in a bounce report mailed back afterwards.
- data
email_idtagsresource_typeresource_id - email.complained
- A recipient marks the message as spam and their mailbox provider reports it back.
- data
email_idtagsresource_typeresource_id - email.opened
- The tracking image in the message loads, which needs open tracking on for the sending domain.
- data
email_idtagsresource_typeresource_iduser_agent - email.clicked
- A recipient follows a tracked link in the message, on its way to the original address.
- data
email_idtagsresource_typeresource_idurl - email.failed
- The message will never be delivered: it hit a permanent error or ran out of retries, expired before it could go out, was a scheduled send to a blocked recipient, or lost its sending domain.
- data
email_idtagsresource_typeresource_id - email.scheduled
- A send is accepted with a future send time, or a scheduled or canceled send is given a new one.
- data
email_idtagsresource_typeresource_idscheduled_at - email.canceled
- A scheduled or queued send is canceled, on its own or in a bulk cancel.
- data
email_idtagsresource_typeresource_idprevious_status - email.suppressed
- One recipient is dropped from a send because the address is suppressed, failed address verification or unsubscribed from the send’s topic, one event per dropped address.
- data
email_idtagsresource_typeresource_idemailorigin
email.queued data
| Field | Type | Required | Notes |
|---|---|---|---|
| email_id | string | no | The message this event is about. |
| message_id | string | no | The same message. email_id is the name a webhook subscriber reads. |
| from | string | no | The From address on the message. |
| to | any | no | The To addresses on the message. One address, or a list. |
| subject | string | no | The subject on the message. |
| created_at | string | no | When the message was accepted, in UTC. |
| recipient | any | no | The recipient this event is about, when the event is about one address. Null when the report hid it. |
| tags | object | no | Tags stored on the message. |
| template_id | any | no | The template the message was rendered from, when it used one. |
| template_version | any | no | The template version the message was rendered from, when it used one. |
| scheduled_at | string | no | When a scheduled message will send, in UTC. |
| scan | any | no | Content-scan findings recorded with the queued event, when the scan warned. |
| headers | any | no | Headers stored on the message. |
| recipients | array<string> | no | Addresses this event is about, when it names more than one. |
| response | any | no | The receiving server reply, when one was recorded. |
| reason | string | no | Why the event happened, when the emitter recorded a reason. |
| string | no | The address this event is about, when it names one. | |
| level | string | no | address or domain, on a suppression. |
| origin | string | no | Why the address was suppressed: bounce, complaint, or an account list. |
| code | string | no | A machine token recorded with the event, when there is one. |
| addresses | array<string> | no | Addresses named by this event. |
| simulated | boolean | no | True when every recipient was a simulator address. |
| topic_id | any | no | The subscription topic, when the event is about one. |
| click | any | no | The link, time, address and client, on email.clicked. |
| review_sandbox | boolean | no | True when the event is from the review sandbox. |
| mail_system | string | no | The receiving system that asked for a later try. |
| retry_at | string | no | When a delayed delivery will be tried again, in UTC. |
| provider_message_id | string | no | The mail server id for this message, when one was assigned. |
| refused_recipients | array<object> | no | Recipients the mail server refused at hand-off while it took the others, on email.sent. They were not sent and not charged. |
| url | string | no | The link that was followed, on email.clicked. |
| ip_address | string | no | The client address recorded with a click or open. |
| user_agent | string | no | The client recorded with a click or open. |
| bounce | object | no | Why the message bounced. |
| permanent | boolean | no | Whether a bounce is permanent. |
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
| bounce_class | string | no | hard, soft or block: how the bounce was classed, on a bounce or a delay. |
| block_cause | any | no | On a block: sender when the receiver refused the message or its content, infrastructure when it named our sending address or signing. Null on other bounces. |
| bounce_classification | string | no | The receiving side’s own class for the bounce, as reported. |
| diagnostic | any | no | The receiving server reply text, on a bounce. |
| peer_name | string | no | The receiving mail server that answered. |
| site | string | no | The receiving site the message was queued for. |
| queue | string | no | The delivery queue the message was in. |
| egress_pool | string | no | The pool of sending addresses that carried the message. |
| egress_source | string | no | The sending address that carried the message. |
| smtp_response | string | no | The receiving server reply, when the delivery report carried one. |
| attempt | number | no | How many tries have been made, on email.delivery_delayed. |
| complaint_type | string | no | What kind of complaint it was, when known. |
| complaint_feedback_type | any | no | The mailbox provider’s feedback type for the complaint, such as abuse. |
| feedback_type | any | no | The feedback type in the complaint report. |
| source | string | no | Where the complaint came from, such as feedback_loop. |
| reported_by | any | no | The mailbox provider that sent the complaint report. |
| source_ip | any | no | The sending address named in the complaint report. |
| received_at | string | no | When the report reached us, in UTC. |
| via | string | no | How the event was recorded. |
| previous_status | string | no | The message status before this change. |
| bulk | boolean | no | True when this message was canceled together with others. |
| size_bytes | number | no | The size of the received message, in bytes. |
{
"email_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"message_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"from": "billing@yourdomain.com",
"to": [
"customer@example.com"
],
"subject": "Your receipt",
"created_at": "2026-09-04T09:14:00.000Z",
"recipient": "billing@yourdomain.com",
"tags": {},
"template_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"template_version": 1,
"scheduled_at": "2026-09-04T09:14:00.000Z",
"scan": "example",
"headers": [],
"recipients": [
"customer@example.com"
],
"response": "example",
"reason": "example",
"email": "customer@example.com",
"level": "example",
"origin": "example",
"code": "example",
"addresses": [
"customer@example.com"
],
"simulated": false,
"topic_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"click": "example",
"review_sandbox": false,
"mail_system": "example",
"retry_at": "2026-09-04T09:14:00.000Z",
"provider_message_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"refused_recipients": [],
"url": "example",
"ip_address": "example",
"user_agent": "example",
"bounce": {
"type": "Permanent",
"sub_type": "example",
"diagnostic_code": "example"
},
"permanent": false,
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"bounce_class": "example",
"block_cause": "sender",
"bounce_classification": "example",
"diagnostic": "example",
"peer_name": "example",
"site": "example",
"queue": "example",
"egress_pool": "example",
"egress_source": "example",
"smtp_response": "example",
"attempt": 1,
"complaint_type": "example",
"complaint_feedback_type": "example",
"feedback_type": "example",
"source": "example",
"reported_by": "example",
"source_ip": "example",
"received_at": "2026-09-04T09:14:00.000Z",
"via": "example",
"previous_status": "example",
"bulk": false,
"size_bytes": 1
}email.sent data
| Field | Type | Required | Notes |
|---|---|---|---|
| email_id | string | no | The message this event is about. |
| message_id | string | no | The same message. email_id is the name a webhook subscriber reads. |
| from | string | no | The From address on the message. |
| to | any | no | The To addresses on the message. One address, or a list. |
| subject | string | no | The subject on the message. |
| created_at | string | no | When the message was accepted, in UTC. |
| recipient | any | no | The recipient this event is about, when the event is about one address. Null when the report hid it. |
| tags | object | no | Tags stored on the message. |
| template_id | any | no | The template the message was rendered from, when it used one. |
| template_version | any | no | The template version the message was rendered from, when it used one. |
| scheduled_at | string | no | When a scheduled message will send, in UTC. |
| scan | any | no | Content-scan findings recorded with the queued event, when the scan warned. |
| headers | any | no | Headers stored on the message. |
| recipients | array<string> | no | Addresses this event is about, when it names more than one. |
| response | any | no | The receiving server reply, when one was recorded. |
| reason | string | no | Why the event happened, when the emitter recorded a reason. |
| string | no | The address this event is about, when it names one. | |
| level | string | no | address or domain, on a suppression. |
| origin | string | no | Why the address was suppressed: bounce, complaint, or an account list. |
| code | string | no | A machine token recorded with the event, when there is one. |
| addresses | array<string> | no | Addresses named by this event. |
| simulated | boolean | no | True when every recipient was a simulator address. |
| topic_id | any | no | The subscription topic, when the event is about one. |
| click | any | no | The link, time, address and client, on email.clicked. |
| review_sandbox | boolean | no | True when the event is from the review sandbox. |
| mail_system | string | no | The receiving system that asked for a later try. |
| retry_at | string | no | When a delayed delivery will be tried again, in UTC. |
| provider_message_id | string | no | The mail server id for this message, when one was assigned. |
| refused_recipients | array<object> | no | Recipients the mail server refused at hand-off while it took the others, on email.sent. They were not sent and not charged. |
| url | string | no | The link that was followed, on email.clicked. |
| ip_address | string | no | The client address recorded with a click or open. |
| user_agent | string | no | The client recorded with a click or open. |
| bounce | object | no | Why the message bounced. |
| permanent | boolean | no | Whether a bounce is permanent. |
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
| bounce_class | string | no | hard, soft or block: how the bounce was classed, on a bounce or a delay. |
| block_cause | any | no | On a block: sender when the receiver refused the message or its content, infrastructure when it named our sending address or signing. Null on other bounces. |
| bounce_classification | string | no | The receiving side’s own class for the bounce, as reported. |
| diagnostic | any | no | The receiving server reply text, on a bounce. |
| peer_name | string | no | The receiving mail server that answered. |
| site | string | no | The receiving site the message was queued for. |
| queue | string | no | The delivery queue the message was in. |
| egress_pool | string | no | The pool of sending addresses that carried the message. |
| egress_source | string | no | The sending address that carried the message. |
| smtp_response | string | no | The receiving server reply, when the delivery report carried one. |
| attempt | number | no | How many tries have been made, on email.delivery_delayed. |
| complaint_type | string | no | What kind of complaint it was, when known. |
| complaint_feedback_type | any | no | The mailbox provider’s feedback type for the complaint, such as abuse. |
| feedback_type | any | no | The feedback type in the complaint report. |
| source | string | no | Where the complaint came from, such as feedback_loop. |
| reported_by | any | no | The mailbox provider that sent the complaint report. |
| source_ip | any | no | The sending address named in the complaint report. |
| received_at | string | no | When the report reached us, in UTC. |
| via | string | no | How the event was recorded. |
| previous_status | string | no | The message status before this change. |
| bulk | boolean | no | True when this message was canceled together with others. |
| size_bytes | number | no | The size of the received message, in bytes. |
{
"email_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"message_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"from": "billing@yourdomain.com",
"to": [
"customer@example.com"
],
"subject": "Your receipt",
"created_at": "2026-09-04T09:14:00.000Z",
"recipient": "billing@yourdomain.com",
"tags": {},
"template_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"template_version": 1,
"scheduled_at": "2026-09-04T09:14:00.000Z",
"scan": "example",
"headers": [],
"recipients": [
"customer@example.com"
],
"response": "example",
"reason": "example",
"email": "customer@example.com",
"level": "example",
"origin": "example",
"code": "example",
"addresses": [
"customer@example.com"
],
"simulated": false,
"topic_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"click": "example",
"review_sandbox": false,
"mail_system": "example",
"retry_at": "2026-09-04T09:14:00.000Z",
"provider_message_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"refused_recipients": [],
"url": "example",
"ip_address": "example",
"user_agent": "example",
"bounce": {
"type": "Permanent",
"sub_type": "example",
"diagnostic_code": "example"
},
"permanent": false,
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"bounce_class": "example",
"block_cause": "sender",
"bounce_classification": "example",
"diagnostic": "example",
"peer_name": "example",
"site": "example",
"queue": "example",
"egress_pool": "example",
"egress_source": "example",
"smtp_response": "example",
"attempt": 1,
"complaint_type": "example",
"complaint_feedback_type": "example",
"feedback_type": "example",
"source": "example",
"reported_by": "example",
"source_ip": "example",
"received_at": "2026-09-04T09:14:00.000Z",
"via": "example",
"previous_status": "example",
"bulk": false,
"size_bytes": 1
}email.delivered data
| Field | Type | Required | Notes |
|---|---|---|---|
| email_id | string | no | The message this event is about. |
| message_id | string | no | The same message. email_id is the name a webhook subscriber reads. |
| from | string | no | The From address on the message. |
| to | any | no | The To addresses on the message. One address, or a list. |
| subject | string | no | The subject on the message. |
| created_at | string | no | When the message was accepted, in UTC. |
| recipient | any | no | The recipient this event is about, when the event is about one address. Null when the report hid it. |
| tags | object | no | Tags stored on the message. |
| template_id | any | no | The template the message was rendered from, when it used one. |
| template_version | any | no | The template version the message was rendered from, when it used one. |
| scheduled_at | string | no | When a scheduled message will send, in UTC. |
| scan | any | no | Content-scan findings recorded with the queued event, when the scan warned. |
| headers | any | no | Headers stored on the message. |
| recipients | array<string> | no | Addresses this event is about, when it names more than one. |
| response | any | no | The receiving server reply, when one was recorded. |
| reason | string | no | Why the event happened, when the emitter recorded a reason. |
| string | no | The address this event is about, when it names one. | |
| level | string | no | address or domain, on a suppression. |
| origin | string | no | Why the address was suppressed: bounce, complaint, or an account list. |
| code | string | no | A machine token recorded with the event, when there is one. |
| addresses | array<string> | no | Addresses named by this event. |
| simulated | boolean | no | True when every recipient was a simulator address. |
| topic_id | any | no | The subscription topic, when the event is about one. |
| click | any | no | The link, time, address and client, on email.clicked. |
| review_sandbox | boolean | no | True when the event is from the review sandbox. |
| mail_system | string | no | The receiving system that asked for a later try. |
| retry_at | string | no | When a delayed delivery will be tried again, in UTC. |
| provider_message_id | string | no | The mail server id for this message, when one was assigned. |
| refused_recipients | array<object> | no | Recipients the mail server refused at hand-off while it took the others, on email.sent. They were not sent and not charged. |
| url | string | no | The link that was followed, on email.clicked. |
| ip_address | string | no | The client address recorded with a click or open. |
| user_agent | string | no | The client recorded with a click or open. |
| bounce | object | no | Why the message bounced. |
| permanent | boolean | no | Whether a bounce is permanent. |
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
| bounce_class | string | no | hard, soft or block: how the bounce was classed, on a bounce or a delay. |
| block_cause | any | no | On a block: sender when the receiver refused the message or its content, infrastructure when it named our sending address or signing. Null on other bounces. |
| bounce_classification | string | no | The receiving side’s own class for the bounce, as reported. |
| diagnostic | any | no | The receiving server reply text, on a bounce. |
| peer_name | string | no | The receiving mail server that answered. |
| site | string | no | The receiving site the message was queued for. |
| queue | string | no | The delivery queue the message was in. |
| egress_pool | string | no | The pool of sending addresses that carried the message. |
| egress_source | string | no | The sending address that carried the message. |
| smtp_response | string | no | The receiving server reply, when the delivery report carried one. |
| attempt | number | no | How many tries have been made, on email.delivery_delayed. |
| complaint_type | string | no | What kind of complaint it was, when known. |
| complaint_feedback_type | any | no | The mailbox provider’s feedback type for the complaint, such as abuse. |
| feedback_type | any | no | The feedback type in the complaint report. |
| source | string | no | Where the complaint came from, such as feedback_loop. |
| reported_by | any | no | The mailbox provider that sent the complaint report. |
| source_ip | any | no | The sending address named in the complaint report. |
| received_at | string | no | When the report reached us, in UTC. |
| via | string | no | How the event was recorded. |
| previous_status | string | no | The message status before this change. |
| bulk | boolean | no | True when this message was canceled together with others. |
| size_bytes | number | no | The size of the received message, in bytes. |
{
"email_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"message_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"from": "billing@yourdomain.com",
"to": [
"customer@example.com"
],
"subject": "Your receipt",
"created_at": "2026-09-04T09:14:00.000Z",
"recipient": "billing@yourdomain.com",
"tags": {},
"template_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"template_version": 1,
"scheduled_at": "2026-09-04T09:14:00.000Z",
"scan": "example",
"headers": [],
"recipients": [
"customer@example.com"
],
"response": "example",
"reason": "example",
"email": "customer@example.com",
"level": "example",
"origin": "example",
"code": "example",
"addresses": [
"customer@example.com"
],
"simulated": false,
"topic_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"click": "example",
"review_sandbox": false,
"mail_system": "example",
"retry_at": "2026-09-04T09:14:00.000Z",
"provider_message_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"refused_recipients": [],
"url": "example",
"ip_address": "example",
"user_agent": "example",
"bounce": {
"type": "Permanent",
"sub_type": "example",
"diagnostic_code": "example"
},
"permanent": false,
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"bounce_class": "example",
"block_cause": "sender",
"bounce_classification": "example",
"diagnostic": "example",
"peer_name": "example",
"site": "example",
"queue": "example",
"egress_pool": "example",
"egress_source": "example",
"smtp_response": "example",
"attempt": 1,
"complaint_type": "example",
"complaint_feedback_type": "example",
"feedback_type": "example",
"source": "example",
"reported_by": "example",
"source_ip": "example",
"received_at": "2026-09-04T09:14:00.000Z",
"via": "example",
"previous_status": "example",
"bulk": false,
"size_bytes": 1
}email.delivery_delayed data
| Field | Type | Required | Notes |
|---|---|---|---|
| email_id | string | no | The message this event is about. |
| message_id | string | no | The same message. email_id is the name a webhook subscriber reads. |
| from | string | no | The From address on the message. |
| to | any | no | The To addresses on the message. One address, or a list. |
| subject | string | no | The subject on the message. |
| created_at | string | no | When the message was accepted, in UTC. |
| recipient | any | no | The recipient this event is about, when the event is about one address. Null when the report hid it. |
| tags | object | no | Tags stored on the message. |
| template_id | any | no | The template the message was rendered from, when it used one. |
| template_version | any | no | The template version the message was rendered from, when it used one. |
| scheduled_at | string | no | When a scheduled message will send, in UTC. |
| scan | any | no | Content-scan findings recorded with the queued event, when the scan warned. |
| headers | any | no | Headers stored on the message. |
| recipients | array<string> | no | Addresses this event is about, when it names more than one. |
| response | any | no | The receiving server reply, when one was recorded. |
| reason | string | no | Why the event happened, when the emitter recorded a reason. |
| string | no | The address this event is about, when it names one. | |
| level | string | no | address or domain, on a suppression. |
| origin | string | no | Why the address was suppressed: bounce, complaint, or an account list. |
| code | string | no | A machine token recorded with the event, when there is one. |
| addresses | array<string> | no | Addresses named by this event. |
| simulated | boolean | no | True when every recipient was a simulator address. |
| topic_id | any | no | The subscription topic, when the event is about one. |
| click | any | no | The link, time, address and client, on email.clicked. |
| review_sandbox | boolean | no | True when the event is from the review sandbox. |
| mail_system | string | no | The receiving system that asked for a later try. |
| retry_at | string | no | When a delayed delivery will be tried again, in UTC. |
| provider_message_id | string | no | The mail server id for this message, when one was assigned. |
| refused_recipients | array<object> | no | Recipients the mail server refused at hand-off while it took the others, on email.sent. They were not sent and not charged. |
| url | string | no | The link that was followed, on email.clicked. |
| ip_address | string | no | The client address recorded with a click or open. |
| user_agent | string | no | The client recorded with a click or open. |
| bounce | object | no | Why the message bounced. |
| permanent | boolean | no | Whether a bounce is permanent. |
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
| bounce_class | string | no | hard, soft or block: how the bounce was classed, on a bounce or a delay. |
| block_cause | any | no | On a block: sender when the receiver refused the message or its content, infrastructure when it named our sending address or signing. Null on other bounces. |
| bounce_classification | string | no | The receiving side’s own class for the bounce, as reported. |
| diagnostic | any | no | The receiving server reply text, on a bounce. |
| peer_name | string | no | The receiving mail server that answered. |
| site | string | no | The receiving site the message was queued for. |
| queue | string | no | The delivery queue the message was in. |
| egress_pool | string | no | The pool of sending addresses that carried the message. |
| egress_source | string | no | The sending address that carried the message. |
| smtp_response | string | no | The receiving server reply, when the delivery report carried one. |
| attempt | number | no | How many tries have been made, on email.delivery_delayed. |
| complaint_type | string | no | What kind of complaint it was, when known. |
| complaint_feedback_type | any | no | The mailbox provider’s feedback type for the complaint, such as abuse. |
| feedback_type | any | no | The feedback type in the complaint report. |
| source | string | no | Where the complaint came from, such as feedback_loop. |
| reported_by | any | no | The mailbox provider that sent the complaint report. |
| source_ip | any | no | The sending address named in the complaint report. |
| received_at | string | no | When the report reached us, in UTC. |
| via | string | no | How the event was recorded. |
| previous_status | string | no | The message status before this change. |
| bulk | boolean | no | True when this message was canceled together with others. |
| size_bytes | number | no | The size of the received message, in bytes. |
{
"email_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"message_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"from": "billing@yourdomain.com",
"to": [
"customer@example.com"
],
"subject": "Your receipt",
"created_at": "2026-09-04T09:14:00.000Z",
"recipient": "billing@yourdomain.com",
"tags": {},
"template_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"template_version": 1,
"scheduled_at": "2026-09-04T09:14:00.000Z",
"scan": "example",
"headers": [],
"recipients": [
"customer@example.com"
],
"response": "example",
"reason": "example",
"email": "customer@example.com",
"level": "example",
"origin": "example",
"code": "example",
"addresses": [
"customer@example.com"
],
"simulated": false,
"topic_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"click": "example",
"review_sandbox": false,
"mail_system": "example",
"retry_at": "2026-09-04T09:14:00.000Z",
"provider_message_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"refused_recipients": [],
"url": "example",
"ip_address": "example",
"user_agent": "example",
"bounce": {
"type": "Permanent",
"sub_type": "example",
"diagnostic_code": "example"
},
"permanent": false,
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"bounce_class": "example",
"block_cause": "sender",
"bounce_classification": "example",
"diagnostic": "example",
"peer_name": "example",
"site": "example",
"queue": "example",
"egress_pool": "example",
"egress_source": "example",
"smtp_response": "example",
"attempt": 1,
"complaint_type": "example",
"complaint_feedback_type": "example",
"feedback_type": "example",
"source": "example",
"reported_by": "example",
"source_ip": "example",
"received_at": "2026-09-04T09:14:00.000Z",
"via": "example",
"previous_status": "example",
"bulk": false,
"size_bytes": 1
}email.bounced data
| Field | Type | Required | Notes |
|---|---|---|---|
| email_id | string | no | The message this event is about. |
| message_id | string | no | The same message. email_id is the name a webhook subscriber reads. |
| from | string | no | The From address on the message. |
| to | any | no | The To addresses on the message. One address, or a list. |
| subject | string | no | The subject on the message. |
| created_at | string | no | When the message was accepted, in UTC. |
| recipient | any | no | The recipient this event is about, when the event is about one address. Null when the report hid it. |
| tags | object | no | Tags stored on the message. |
| template_id | any | no | The template the message was rendered from, when it used one. |
| template_version | any | no | The template version the message was rendered from, when it used one. |
| scheduled_at | string | no | When a scheduled message will send, in UTC. |
| scan | any | no | Content-scan findings recorded with the queued event, when the scan warned. |
| headers | any | no | Headers stored on the message. |
| recipients | array<string> | no | Addresses this event is about, when it names more than one. |
| response | any | no | The receiving server reply, when one was recorded. |
| reason | string | no | Why the event happened, when the emitter recorded a reason. |
| string | no | The address this event is about, when it names one. | |
| level | string | no | address or domain, on a suppression. |
| origin | string | no | Why the address was suppressed: bounce, complaint, or an account list. |
| code | string | no | A machine token recorded with the event, when there is one. |
| addresses | array<string> | no | Addresses named by this event. |
| simulated | boolean | no | True when every recipient was a simulator address. |
| topic_id | any | no | The subscription topic, when the event is about one. |
| click | any | no | The link, time, address and client, on email.clicked. |
| review_sandbox | boolean | no | True when the event is from the review sandbox. |
| mail_system | string | no | The receiving system that asked for a later try. |
| retry_at | string | no | When a delayed delivery will be tried again, in UTC. |
| provider_message_id | string | no | The mail server id for this message, when one was assigned. |
| refused_recipients | array<object> | no | Recipients the mail server refused at hand-off while it took the others, on email.sent. They were not sent and not charged. |
| url | string | no | The link that was followed, on email.clicked. |
| ip_address | string | no | The client address recorded with a click or open. |
| user_agent | string | no | The client recorded with a click or open. |
| bounce | object | no | Why the message bounced. |
| permanent | boolean | no | Whether the bounce is permanent. |
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
| bounce_class | string | no | hard, soft or block: how the bounce was classed, on a bounce or a delay. |
| block_cause | any | no | On a block: sender when the receiver refused the message or its content, infrastructure when it named our sending address or signing. Null on other bounces. |
| bounce_classification | string | no | The receiving side’s own class for the bounce, as reported. |
| diagnostic | any | no | The receiving server reply text, on a bounce. |
| peer_name | string | no | The receiving mail server that answered. |
| site | string | no | The receiving site the message was queued for. |
| queue | string | no | The delivery queue the message was in. |
| egress_pool | string | no | The pool of sending addresses that carried the message. |
| egress_source | string | no | The sending address that carried the message. |
| smtp_response | string | no | The receiving server reply, when the delivery report carried one. |
| attempt | number | no | How many tries have been made, on email.delivery_delayed. |
| complaint_type | string | no | What kind of complaint it was, when known. |
| complaint_feedback_type | any | no | The mailbox provider’s feedback type for the complaint, such as abuse. |
| feedback_type | any | no | The feedback type in the complaint report. |
| source | string | no | Where the complaint came from, such as feedback_loop. |
| reported_by | any | no | The mailbox provider that sent the complaint report. |
| source_ip | any | no | The sending address named in the complaint report. |
| received_at | string | no | When the report reached us, in UTC. |
| via | string | no | How the event was recorded. |
| previous_status | string | no | The message status before this change. |
| bulk | boolean | no | True when this message was canceled together with others. |
| size_bytes | number | no | The size of the received message, in bytes. |
| diagnostic_code | any | no | The reply from the receiving server, or null when it gave none. |
| bounce_type | string | no | Permanent, Transient, or Undetermined, when bounce is not set yet. |
| bounce_sub_type | string | no | The finer bounce reason, when bounce is not set yet. |
{
"email_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"message_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"from": "billing@yourdomain.com",
"to": [
"customer@example.com"
],
"subject": "Your receipt",
"created_at": "2026-09-04T09:14:00.000Z",
"recipient": "billing@yourdomain.com",
"tags": {},
"template_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"template_version": 1,
"scheduled_at": "2026-09-04T09:14:00.000Z",
"scan": "example",
"headers": [],
"recipients": [
"customer@example.com"
],
"response": "example",
"reason": "example",
"email": "customer@example.com",
"level": "example",
"origin": "example",
"code": "example",
"addresses": [
"customer@example.com"
],
"simulated": false,
"topic_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"click": "example",
"review_sandbox": false,
"mail_system": "example",
"retry_at": "2026-09-04T09:14:00.000Z",
"provider_message_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"refused_recipients": [],
"url": "example",
"ip_address": "example",
"user_agent": "example",
"bounce": {
"type": "Permanent",
"sub_type": "example",
"diagnostic_code": "example"
},
"permanent": false,
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"bounce_class": "example",
"block_cause": "sender",
"bounce_classification": "example",
"diagnostic": "example",
"peer_name": "example",
"site": "example",
"queue": "example",
"egress_pool": "example",
"egress_source": "example",
"smtp_response": "example",
"attempt": 1,
"complaint_type": "example",
"complaint_feedback_type": "example",
"feedback_type": "example",
"source": "example",
"reported_by": "example",
"source_ip": "example",
"received_at": "2026-09-04T09:14:00.000Z",
"via": "example",
"previous_status": "example",
"bulk": false,
"size_bytes": 1,
"diagnostic_code": "example",
"bounce_type": "example",
"bounce_sub_type": "example"
}email.complained data
| Field | Type | Required | Notes |
|---|---|---|---|
| email_id | string | no | The message this event is about. |
| message_id | string | no | The same message. email_id is the name a webhook subscriber reads. |
| from | string | no | The From address on the message. |
| to | any | no | The To addresses on the message. One address, or a list. |
| subject | string | no | The subject on the message. |
| created_at | string | no | When the message was accepted, in UTC. |
| recipient | any | no | The recipient this event is about, when the event is about one address. Null when the report hid it. |
| tags | object | no | Tags stored on the message. |
| template_id | any | no | The template the message was rendered from, when it used one. |
| template_version | any | no | The template version the message was rendered from, when it used one. |
| scheduled_at | string | no | When a scheduled message will send, in UTC. |
| scan | any | no | Content-scan findings recorded with the queued event, when the scan warned. |
| headers | any | no | Headers stored on the message. |
| recipients | array<string> | no | Addresses this event is about, when it names more than one. |
| response | any | no | The receiving server reply, when one was recorded. |
| reason | string | no | Why the event happened, when the emitter recorded a reason. |
| string | no | The address this event is about, when it names one. | |
| level | string | no | address or domain, on a suppression. |
| origin | string | no | Why the address was suppressed: bounce, complaint, or an account list. |
| code | string | no | A machine token recorded with the event, when there is one. |
| addresses | array<string> | no | Addresses named by this event. |
| simulated | boolean | no | True when every recipient was a simulator address. |
| topic_id | any | no | The subscription topic, when the event is about one. |
| click | any | no | The link, time, address and client, on email.clicked. |
| review_sandbox | boolean | no | True when the event is from the review sandbox. |
| mail_system | string | no | The receiving system that asked for a later try. |
| retry_at | string | no | When a delayed delivery will be tried again, in UTC. |
| provider_message_id | string | no | The mail server id for this message, when one was assigned. |
| refused_recipients | array<object> | no | Recipients the mail server refused at hand-off while it took the others, on email.sent. They were not sent and not charged. |
| url | string | no | The link that was followed, on email.clicked. |
| ip_address | string | no | The client address recorded with a click or open. |
| user_agent | string | no | The client recorded with a click or open. |
| bounce | object | no | Why the message bounced. |
| permanent | boolean | no | Whether a bounce is permanent. |
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
| bounce_class | string | no | hard, soft or block: how the bounce was classed, on a bounce or a delay. |
| block_cause | any | no | On a block: sender when the receiver refused the message or its content, infrastructure when it named our sending address or signing. Null on other bounces. |
| bounce_classification | string | no | The receiving side’s own class for the bounce, as reported. |
| diagnostic | any | no | The receiving server reply text, on a bounce. |
| peer_name | string | no | The receiving mail server that answered. |
| site | string | no | The receiving site the message was queued for. |
| queue | string | no | The delivery queue the message was in. |
| egress_pool | string | no | The pool of sending addresses that carried the message. |
| egress_source | string | no | The sending address that carried the message. |
| smtp_response | string | no | The receiving server reply, when the delivery report carried one. |
| attempt | number | no | How many tries have been made, on email.delivery_delayed. |
| complaint_type | string | no | What kind of complaint it was, when known. |
| complaint_feedback_type | any | no | The mailbox provider’s feedback type for the complaint, such as abuse. |
| feedback_type | any | no | The feedback type in the complaint report. |
| source | string | no | Where the complaint came from, such as feedback_loop. |
| reported_by | any | no | The mailbox provider that sent the complaint report. |
| source_ip | any | no | The sending address named in the complaint report. |
| received_at | string | no | When the report reached us, in UTC. |
| via | string | no | How the event was recorded. |
| previous_status | string | no | The message status before this change. |
| bulk | boolean | no | True when this message was canceled together with others. |
| size_bytes | number | no | The size of the received message, in bytes. |
{
"email_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"message_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"from": "billing@yourdomain.com",
"to": [
"customer@example.com"
],
"subject": "Your receipt",
"created_at": "2026-09-04T09:14:00.000Z",
"recipient": "billing@yourdomain.com",
"tags": {},
"template_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"template_version": 1,
"scheduled_at": "2026-09-04T09:14:00.000Z",
"scan": "example",
"headers": [],
"recipients": [
"customer@example.com"
],
"response": "example",
"reason": "example",
"email": "customer@example.com",
"level": "example",
"origin": "example",
"code": "example",
"addresses": [
"customer@example.com"
],
"simulated": false,
"topic_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"click": "example",
"review_sandbox": false,
"mail_system": "example",
"retry_at": "2026-09-04T09:14:00.000Z",
"provider_message_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"refused_recipients": [],
"url": "example",
"ip_address": "example",
"user_agent": "example",
"bounce": {
"type": "Permanent",
"sub_type": "example",
"diagnostic_code": "example"
},
"permanent": false,
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"bounce_class": "example",
"block_cause": "sender",
"bounce_classification": "example",
"diagnostic": "example",
"peer_name": "example",
"site": "example",
"queue": "example",
"egress_pool": "example",
"egress_source": "example",
"smtp_response": "example",
"attempt": 1,
"complaint_type": "example",
"complaint_feedback_type": "example",
"feedback_type": "example",
"source": "example",
"reported_by": "example",
"source_ip": "example",
"received_at": "2026-09-04T09:14:00.000Z",
"via": "example",
"previous_status": "example",
"bulk": false,
"size_bytes": 1
}email.opened data
| Field | Type | Required | Notes |
|---|---|---|---|
| email_id | string | no | The message this event is about. |
| message_id | string | no | The same message. email_id is the name a webhook subscriber reads. |
| from | string | no | The From address on the message. |
| to | any | no | The To addresses on the message. One address, or a list. |
| subject | string | no | The subject on the message. |
| created_at | string | no | When the message was accepted, in UTC. |
| recipient | any | no | The recipient this event is about, when the event is about one address. Null when the report hid it. |
| tags | object | no | Tags stored on the message. |
| template_id | any | no | The template the message was rendered from, when it used one. |
| template_version | any | no | The template version the message was rendered from, when it used one. |
| scheduled_at | string | no | When a scheduled message will send, in UTC. |
| scan | any | no | Content-scan findings recorded with the queued event, when the scan warned. |
| headers | any | no | Headers stored on the message. |
| recipients | array<string> | no | Addresses this event is about, when it names more than one. |
| response | any | no | The receiving server reply, when one was recorded. |
| reason | string | no | Why the event happened, when the emitter recorded a reason. |
| string | no | The address this event is about, when it names one. | |
| level | string | no | address or domain, on a suppression. |
| origin | string | no | Why the address was suppressed: bounce, complaint, or an account list. |
| code | string | no | A machine token recorded with the event, when there is one. |
| addresses | array<string> | no | Addresses named by this event. |
| simulated | boolean | no | True when every recipient was a simulator address. |
| topic_id | any | no | The subscription topic, when the event is about one. |
| click | any | no | The link, time, address and client, on email.clicked. |
| review_sandbox | boolean | no | True when the event is from the review sandbox. |
| mail_system | string | no | The receiving system that asked for a later try. |
| retry_at | string | no | When a delayed delivery will be tried again, in UTC. |
| provider_message_id | string | no | The mail server id for this message, when one was assigned. |
| refused_recipients | array<object> | no | Recipients the mail server refused at hand-off while it took the others, on email.sent. They were not sent and not charged. |
| url | string | no | The link that was followed, on email.clicked. |
| ip_address | string | no | The client address recorded with a click or open. |
| user_agent | string | no | The client recorded with a click or open. |
| bounce | object | no | Why the message bounced. |
| permanent | boolean | no | Whether a bounce is permanent. |
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
| bounce_class | string | no | hard, soft or block: how the bounce was classed, on a bounce or a delay. |
| block_cause | any | no | On a block: sender when the receiver refused the message or its content, infrastructure when it named our sending address or signing. Null on other bounces. |
| bounce_classification | string | no | The receiving side’s own class for the bounce, as reported. |
| diagnostic | any | no | The receiving server reply text, on a bounce. |
| peer_name | string | no | The receiving mail server that answered. |
| site | string | no | The receiving site the message was queued for. |
| queue | string | no | The delivery queue the message was in. |
| egress_pool | string | no | The pool of sending addresses that carried the message. |
| egress_source | string | no | The sending address that carried the message. |
| smtp_response | string | no | The receiving server reply, when the delivery report carried one. |
| attempt | number | no | How many tries have been made, on email.delivery_delayed. |
| complaint_type | string | no | What kind of complaint it was, when known. |
| complaint_feedback_type | any | no | The mailbox provider’s feedback type for the complaint, such as abuse. |
| feedback_type | any | no | The feedback type in the complaint report. |
| source | string | no | Where the complaint came from, such as feedback_loop. |
| reported_by | any | no | The mailbox provider that sent the complaint report. |
| source_ip | any | no | The sending address named in the complaint report. |
| received_at | string | no | When the report reached us, in UTC. |
| via | string | no | How the event was recorded. |
| previous_status | string | no | The message status before this change. |
| bulk | boolean | no | True when this message was canceled together with others. |
| size_bytes | number | no | The size of the received message, in bytes. |
{
"email_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"message_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"from": "billing@yourdomain.com",
"to": [
"customer@example.com"
],
"subject": "Your receipt",
"created_at": "2026-09-04T09:14:00.000Z",
"recipient": "billing@yourdomain.com",
"tags": {},
"template_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"template_version": 1,
"scheduled_at": "2026-09-04T09:14:00.000Z",
"scan": "example",
"headers": [],
"recipients": [
"customer@example.com"
],
"response": "example",
"reason": "example",
"email": "customer@example.com",
"level": "example",
"origin": "example",
"code": "example",
"addresses": [
"customer@example.com"
],
"simulated": false,
"topic_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"click": "example",
"review_sandbox": false,
"mail_system": "example",
"retry_at": "2026-09-04T09:14:00.000Z",
"provider_message_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"refused_recipients": [],
"url": "example",
"ip_address": "example",
"user_agent": "example",
"bounce": {
"type": "Permanent",
"sub_type": "example",
"diagnostic_code": "example"
},
"permanent": false,
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"bounce_class": "example",
"block_cause": "sender",
"bounce_classification": "example",
"diagnostic": "example",
"peer_name": "example",
"site": "example",
"queue": "example",
"egress_pool": "example",
"egress_source": "example",
"smtp_response": "example",
"attempt": 1,
"complaint_type": "example",
"complaint_feedback_type": "example",
"feedback_type": "example",
"source": "example",
"reported_by": "example",
"source_ip": "example",
"received_at": "2026-09-04T09:14:00.000Z",
"via": "example",
"previous_status": "example",
"bulk": false,
"size_bytes": 1
}email.clicked data
| Field | Type | Required | Notes |
|---|---|---|---|
| email_id | string | no | The message this event is about. |
| message_id | string | no | The same message. email_id is the name a webhook subscriber reads. |
| from | string | no | The From address on the message. |
| to | any | no | The To addresses on the message. One address, or a list. |
| subject | string | no | The subject on the message. |
| created_at | string | no | When the message was accepted, in UTC. |
| recipient | any | no | The recipient this event is about, when the event is about one address. Null when the report hid it. |
| tags | object | no | Tags stored on the message. |
| template_id | any | no | The template the message was rendered from, when it used one. |
| template_version | any | no | The template version the message was rendered from, when it used one. |
| scheduled_at | string | no | When a scheduled message will send, in UTC. |
| scan | any | no | Content-scan findings recorded with the queued event, when the scan warned. |
| headers | any | no | Headers stored on the message. |
| recipients | array<string> | no | Addresses this event is about, when it names more than one. |
| response | any | no | The receiving server reply, when one was recorded. |
| reason | string | no | Why the event happened, when the emitter recorded a reason. |
| string | no | The address this event is about, when it names one. | |
| level | string | no | address or domain, on a suppression. |
| origin | string | no | Why the address was suppressed: bounce, complaint, or an account list. |
| code | string | no | A machine token recorded with the event, when there is one. |
| addresses | array<string> | no | Addresses named by this event. |
| simulated | boolean | no | True when every recipient was a simulator address. |
| topic_id | any | no | The subscription topic, when the event is about one. |
| click | any | no | The link, time, address and client, on email.clicked. |
| review_sandbox | boolean | no | True when the event is from the review sandbox. |
| mail_system | string | no | The receiving system that asked for a later try. |
| retry_at | string | no | When a delayed delivery will be tried again, in UTC. |
| provider_message_id | string | no | The mail server id for this message, when one was assigned. |
| refused_recipients | array<object> | no | Recipients the mail server refused at hand-off while it took the others, on email.sent. They were not sent and not charged. |
| url | string | no | The link that was followed, on email.clicked. |
| ip_address | string | no | The client address recorded with a click or open. |
| user_agent | string | no | The client recorded with a click or open. |
| bounce | object | no | Why the message bounced. |
| permanent | boolean | no | Whether a bounce is permanent. |
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
| bounce_class | string | no | hard, soft or block: how the bounce was classed, on a bounce or a delay. |
| block_cause | any | no | On a block: sender when the receiver refused the message or its content, infrastructure when it named our sending address or signing. Null on other bounces. |
| bounce_classification | string | no | The receiving side’s own class for the bounce, as reported. |
| diagnostic | any | no | The receiving server reply text, on a bounce. |
| peer_name | string | no | The receiving mail server that answered. |
| site | string | no | The receiving site the message was queued for. |
| queue | string | no | The delivery queue the message was in. |
| egress_pool | string | no | The pool of sending addresses that carried the message. |
| egress_source | string | no | The sending address that carried the message. |
| smtp_response | string | no | The receiving server reply, when the delivery report carried one. |
| attempt | number | no | How many tries have been made, on email.delivery_delayed. |
| complaint_type | string | no | What kind of complaint it was, when known. |
| complaint_feedback_type | any | no | The mailbox provider’s feedback type for the complaint, such as abuse. |
| feedback_type | any | no | The feedback type in the complaint report. |
| source | string | no | Where the complaint came from, such as feedback_loop. |
| reported_by | any | no | The mailbox provider that sent the complaint report. |
| source_ip | any | no | The sending address named in the complaint report. |
| received_at | string | no | When the report reached us, in UTC. |
| via | string | no | How the event was recorded. |
| previous_status | string | no | The message status before this change. |
| bulk | boolean | no | True when this message was canceled together with others. |
| size_bytes | number | no | The size of the received message, in bytes. |
{
"email_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"message_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"from": "billing@yourdomain.com",
"to": [
"customer@example.com"
],
"subject": "Your receipt",
"created_at": "2026-09-04T09:14:00.000Z",
"recipient": "billing@yourdomain.com",
"tags": {},
"template_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"template_version": 1,
"scheduled_at": "2026-09-04T09:14:00.000Z",
"scan": "example",
"headers": [],
"recipients": [
"customer@example.com"
],
"response": "example",
"reason": "example",
"email": "customer@example.com",
"level": "example",
"origin": "example",
"code": "example",
"addresses": [
"customer@example.com"
],
"simulated": false,
"topic_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"click": "example",
"review_sandbox": false,
"mail_system": "example",
"retry_at": "2026-09-04T09:14:00.000Z",
"provider_message_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"refused_recipients": [],
"url": "example",
"ip_address": "example",
"user_agent": "example",
"bounce": {
"type": "Permanent",
"sub_type": "example",
"diagnostic_code": "example"
},
"permanent": false,
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"bounce_class": "example",
"block_cause": "sender",
"bounce_classification": "example",
"diagnostic": "example",
"peer_name": "example",
"site": "example",
"queue": "example",
"egress_pool": "example",
"egress_source": "example",
"smtp_response": "example",
"attempt": 1,
"complaint_type": "example",
"complaint_feedback_type": "example",
"feedback_type": "example",
"source": "example",
"reported_by": "example",
"source_ip": "example",
"received_at": "2026-09-04T09:14:00.000Z",
"via": "example",
"previous_status": "example",
"bulk": false,
"size_bytes": 1
}email.failed data
| Field | Type | Required | Notes |
|---|---|---|---|
| email_id | string | no | The message this event is about. |
| message_id | string | no | The same message. email_id is the name a webhook subscriber reads. |
| from | string | no | The From address on the message. |
| to | any | no | The To addresses on the message. One address, or a list. |
| subject | string | no | The subject on the message. |
| created_at | string | no | When the message was accepted, in UTC. |
| recipient | any | no | The recipient this event is about, when the event is about one address. Null when the report hid it. |
| tags | object | no | Tags stored on the message. |
| template_id | any | no | The template the message was rendered from, when it used one. |
| template_version | any | no | The template version the message was rendered from, when it used one. |
| scheduled_at | string | no | When a scheduled message will send, in UTC. |
| scan | any | no | Content-scan findings recorded with the queued event, when the scan warned. |
| headers | any | no | Headers stored on the message. |
| recipients | array<string> | no | Addresses this event is about, when it names more than one. |
| response | any | no | The receiving server reply, when one was recorded. |
| reason | string | no | Why the event happened, when the emitter recorded a reason. |
| string | no | The address this event is about, when it names one. | |
| level | string | no | address or domain, on a suppression. |
| origin | string | no | Why the address was suppressed: bounce, complaint, or an account list. |
| code | string | no | A machine token recorded with the event, when there is one. |
| addresses | array<string> | no | Addresses named by this event. |
| simulated | boolean | no | True when every recipient was a simulator address. |
| topic_id | any | no | The subscription topic, when the event is about one. |
| click | any | no | The link, time, address and client, on email.clicked. |
| review_sandbox | boolean | no | True when the event is from the review sandbox. |
| mail_system | string | no | The receiving system that asked for a later try. |
| retry_at | string | no | When a delayed delivery will be tried again, in UTC. |
| provider_message_id | string | no | The mail server id for this message, when one was assigned. |
| refused_recipients | array<object> | no | Recipients the mail server refused at hand-off while it took the others, on email.sent. They were not sent and not charged. |
| url | string | no | The link that was followed, on email.clicked. |
| ip_address | string | no | The client address recorded with a click or open. |
| user_agent | string | no | The client recorded with a click or open. |
| bounce | object | no | Why the message bounced. |
| permanent | boolean | no | Whether a bounce is permanent. |
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
| bounce_class | string | no | hard, soft or block: how the bounce was classed, on a bounce or a delay. |
| block_cause | any | no | On a block: sender when the receiver refused the message or its content, infrastructure when it named our sending address or signing. Null on other bounces. |
| bounce_classification | string | no | The receiving side’s own class for the bounce, as reported. |
| diagnostic | any | no | The receiving server reply text, on a bounce. |
| peer_name | string | no | The receiving mail server that answered. |
| site | string | no | The receiving site the message was queued for. |
| queue | string | no | The delivery queue the message was in. |
| egress_pool | string | no | The pool of sending addresses that carried the message. |
| egress_source | string | no | The sending address that carried the message. |
| smtp_response | string | no | The receiving server reply, when the delivery report carried one. |
| attempt | number | no | How many tries have been made, on email.delivery_delayed. |
| complaint_type | string | no | What kind of complaint it was, when known. |
| complaint_feedback_type | any | no | The mailbox provider’s feedback type for the complaint, such as abuse. |
| feedback_type | any | no | The feedback type in the complaint report. |
| source | string | no | Where the complaint came from, such as feedback_loop. |
| reported_by | any | no | The mailbox provider that sent the complaint report. |
| source_ip | any | no | The sending address named in the complaint report. |
| received_at | string | no | When the report reached us, in UTC. |
| via | string | no | How the event was recorded. |
| previous_status | string | no | The message status before this change. |
| bulk | boolean | no | True when this message was canceled together with others. |
| size_bytes | number | no | The size of the received message, in bytes. |
{
"email_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"message_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"from": "billing@yourdomain.com",
"to": [
"customer@example.com"
],
"subject": "Your receipt",
"created_at": "2026-09-04T09:14:00.000Z",
"recipient": "billing@yourdomain.com",
"tags": {},
"template_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"template_version": 1,
"scheduled_at": "2026-09-04T09:14:00.000Z",
"scan": "example",
"headers": [],
"recipients": [
"customer@example.com"
],
"response": "example",
"reason": "example",
"email": "customer@example.com",
"level": "example",
"origin": "example",
"code": "example",
"addresses": [
"customer@example.com"
],
"simulated": false,
"topic_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"click": "example",
"review_sandbox": false,
"mail_system": "example",
"retry_at": "2026-09-04T09:14:00.000Z",
"provider_message_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"refused_recipients": [],
"url": "example",
"ip_address": "example",
"user_agent": "example",
"bounce": {
"type": "Permanent",
"sub_type": "example",
"diagnostic_code": "example"
},
"permanent": false,
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"bounce_class": "example",
"block_cause": "sender",
"bounce_classification": "example",
"diagnostic": "example",
"peer_name": "example",
"site": "example",
"queue": "example",
"egress_pool": "example",
"egress_source": "example",
"smtp_response": "example",
"attempt": 1,
"complaint_type": "example",
"complaint_feedback_type": "example",
"feedback_type": "example",
"source": "example",
"reported_by": "example",
"source_ip": "example",
"received_at": "2026-09-04T09:14:00.000Z",
"via": "example",
"previous_status": "example",
"bulk": false,
"size_bytes": 1
}email.scheduled data
| Field | Type | Required | Notes |
|---|---|---|---|
| email_id | string | no | The message this event is about. |
| message_id | string | no | The same message. email_id is the name a webhook subscriber reads. |
| from | string | no | The From address on the message. |
| to | any | no | The To addresses on the message. One address, or a list. |
| subject | string | no | The subject on the message. |
| created_at | string | no | When the message was accepted, in UTC. |
| recipient | any | no | The recipient this event is about, when the event is about one address. Null when the report hid it. |
| tags | object | no | Tags stored on the message. |
| template_id | any | no | The template the message was rendered from, when it used one. |
| template_version | any | no | The template version the message was rendered from, when it used one. |
| scheduled_at | string | no | When a scheduled message will send, in UTC. |
| scan | any | no | Content-scan findings recorded with the queued event, when the scan warned. |
| headers | any | no | Headers stored on the message. |
| recipients | array<string> | no | Addresses this event is about, when it names more than one. |
| response | any | no | The receiving server reply, when one was recorded. |
| reason | string | no | Why the event happened, when the emitter recorded a reason. |
| string | no | The address this event is about, when it names one. | |
| level | string | no | address or domain, on a suppression. |
| origin | string | no | Why the address was suppressed: bounce, complaint, or an account list. |
| code | string | no | A machine token recorded with the event, when there is one. |
| addresses | array<string> | no | Addresses named by this event. |
| simulated | boolean | no | True when every recipient was a simulator address. |
| topic_id | any | no | The subscription topic, when the event is about one. |
| click | any | no | The link, time, address and client, on email.clicked. |
| review_sandbox | boolean | no | True when the event is from the review sandbox. |
| mail_system | string | no | The receiving system that asked for a later try. |
| retry_at | string | no | When a delayed delivery will be tried again, in UTC. |
| provider_message_id | string | no | The mail server id for this message, when one was assigned. |
| refused_recipients | array<object> | no | Recipients the mail server refused at hand-off while it took the others, on email.sent. They were not sent and not charged. |
| url | string | no | The link that was followed, on email.clicked. |
| ip_address | string | no | The client address recorded with a click or open. |
| user_agent | string | no | The client recorded with a click or open. |
| bounce | object | no | Why the message bounced. |
| permanent | boolean | no | Whether a bounce is permanent. |
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
| bounce_class | string | no | hard, soft or block: how the bounce was classed, on a bounce or a delay. |
| block_cause | any | no | On a block: sender when the receiver refused the message or its content, infrastructure when it named our sending address or signing. Null on other bounces. |
| bounce_classification | string | no | The receiving side’s own class for the bounce, as reported. |
| diagnostic | any | no | The receiving server reply text, on a bounce. |
| peer_name | string | no | The receiving mail server that answered. |
| site | string | no | The receiving site the message was queued for. |
| queue | string | no | The delivery queue the message was in. |
| egress_pool | string | no | The pool of sending addresses that carried the message. |
| egress_source | string | no | The sending address that carried the message. |
| smtp_response | string | no | The receiving server reply, when the delivery report carried one. |
| attempt | number | no | How many tries have been made, on email.delivery_delayed. |
| complaint_type | string | no | What kind of complaint it was, when known. |
| complaint_feedback_type | any | no | The mailbox provider’s feedback type for the complaint, such as abuse. |
| feedback_type | any | no | The feedback type in the complaint report. |
| source | string | no | Where the complaint came from, such as feedback_loop. |
| reported_by | any | no | The mailbox provider that sent the complaint report. |
| source_ip | any | no | The sending address named in the complaint report. |
| received_at | string | no | When the report reached us, in UTC. |
| via | string | no | How the event was recorded. |
| previous_status | string | no | The message status before this change. |
| bulk | boolean | no | True when this message was canceled together with others. |
| size_bytes | number | no | The size of the received message, in bytes. |
{
"email_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"message_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"from": "billing@yourdomain.com",
"to": [
"customer@example.com"
],
"subject": "Your receipt",
"created_at": "2026-09-04T09:14:00.000Z",
"recipient": "billing@yourdomain.com",
"tags": {},
"template_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"template_version": 1,
"scheduled_at": "2026-09-04T09:14:00.000Z",
"scan": "example",
"headers": [],
"recipients": [
"customer@example.com"
],
"response": "example",
"reason": "example",
"email": "customer@example.com",
"level": "example",
"origin": "example",
"code": "example",
"addresses": [
"customer@example.com"
],
"simulated": false,
"topic_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"click": "example",
"review_sandbox": false,
"mail_system": "example",
"retry_at": "2026-09-04T09:14:00.000Z",
"provider_message_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"refused_recipients": [],
"url": "example",
"ip_address": "example",
"user_agent": "example",
"bounce": {
"type": "Permanent",
"sub_type": "example",
"diagnostic_code": "example"
},
"permanent": false,
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"bounce_class": "example",
"block_cause": "sender",
"bounce_classification": "example",
"diagnostic": "example",
"peer_name": "example",
"site": "example",
"queue": "example",
"egress_pool": "example",
"egress_source": "example",
"smtp_response": "example",
"attempt": 1,
"complaint_type": "example",
"complaint_feedback_type": "example",
"feedback_type": "example",
"source": "example",
"reported_by": "example",
"source_ip": "example",
"received_at": "2026-09-04T09:14:00.000Z",
"via": "example",
"previous_status": "example",
"bulk": false,
"size_bytes": 1
}email.canceled data
| Field | Type | Required | Notes |
|---|---|---|---|
| email_id | string | no | The message this event is about. |
| message_id | string | no | The same message. email_id is the name a webhook subscriber reads. |
| from | string | no | The From address on the message. |
| to | any | no | The To addresses on the message. One address, or a list. |
| subject | string | no | The subject on the message. |
| created_at | string | no | When the message was accepted, in UTC. |
| recipient | any | no | The recipient this event is about, when the event is about one address. Null when the report hid it. |
| tags | object | no | Tags stored on the message. |
| template_id | any | no | The template the message was rendered from, when it used one. |
| template_version | any | no | The template version the message was rendered from, when it used one. |
| scheduled_at | string | no | When a scheduled message will send, in UTC. |
| scan | any | no | Content-scan findings recorded with the queued event, when the scan warned. |
| headers | any | no | Headers stored on the message. |
| recipients | array<string> | no | Addresses this event is about, when it names more than one. |
| response | any | no | The receiving server reply, when one was recorded. |
| reason | string | no | Why the event happened, when the emitter recorded a reason. |
| string | no | The address this event is about, when it names one. | |
| level | string | no | address or domain, on a suppression. |
| origin | string | no | Why the address was suppressed: bounce, complaint, or an account list. |
| code | string | no | A machine token recorded with the event, when there is one. |
| addresses | array<string> | no | Addresses named by this event. |
| simulated | boolean | no | True when every recipient was a simulator address. |
| topic_id | any | no | The subscription topic, when the event is about one. |
| click | any | no | The link, time, address and client, on email.clicked. |
| review_sandbox | boolean | no | True when the event is from the review sandbox. |
| mail_system | string | no | The receiving system that asked for a later try. |
| retry_at | string | no | When a delayed delivery will be tried again, in UTC. |
| provider_message_id | string | no | The mail server id for this message, when one was assigned. |
| refused_recipients | array<object> | no | Recipients the mail server refused at hand-off while it took the others, on email.sent. They were not sent and not charged. |
| url | string | no | The link that was followed, on email.clicked. |
| ip_address | string | no | The client address recorded with a click or open. |
| user_agent | string | no | The client recorded with a click or open. |
| bounce | object | no | Why the message bounced. |
| permanent | boolean | no | Whether a bounce is permanent. |
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
| bounce_class | string | no | hard, soft or block: how the bounce was classed, on a bounce or a delay. |
| block_cause | any | no | On a block: sender when the receiver refused the message or its content, infrastructure when it named our sending address or signing. Null on other bounces. |
| bounce_classification | string | no | The receiving side’s own class for the bounce, as reported. |
| diagnostic | any | no | The receiving server reply text, on a bounce. |
| peer_name | string | no | The receiving mail server that answered. |
| site | string | no | The receiving site the message was queued for. |
| queue | string | no | The delivery queue the message was in. |
| egress_pool | string | no | The pool of sending addresses that carried the message. |
| egress_source | string | no | The sending address that carried the message. |
| smtp_response | string | no | The receiving server reply, when the delivery report carried one. |
| attempt | number | no | How many tries have been made, on email.delivery_delayed. |
| complaint_type | string | no | What kind of complaint it was, when known. |
| complaint_feedback_type | any | no | The mailbox provider’s feedback type for the complaint, such as abuse. |
| feedback_type | any | no | The feedback type in the complaint report. |
| source | string | no | Where the complaint came from, such as feedback_loop. |
| reported_by | any | no | The mailbox provider that sent the complaint report. |
| source_ip | any | no | The sending address named in the complaint report. |
| received_at | string | no | When the report reached us, in UTC. |
| via | string | no | How the event was recorded. |
| previous_status | string | no | The message status before this change. |
| bulk | boolean | no | True when this message was canceled together with others. |
| size_bytes | number | no | The size of the received message, in bytes. |
{
"email_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"message_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"from": "billing@yourdomain.com",
"to": [
"customer@example.com"
],
"subject": "Your receipt",
"created_at": "2026-09-04T09:14:00.000Z",
"recipient": "billing@yourdomain.com",
"tags": {},
"template_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"template_version": 1,
"scheduled_at": "2026-09-04T09:14:00.000Z",
"scan": "example",
"headers": [],
"recipients": [
"customer@example.com"
],
"response": "example",
"reason": "example",
"email": "customer@example.com",
"level": "example",
"origin": "example",
"code": "example",
"addresses": [
"customer@example.com"
],
"simulated": false,
"topic_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"click": "example",
"review_sandbox": false,
"mail_system": "example",
"retry_at": "2026-09-04T09:14:00.000Z",
"provider_message_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"refused_recipients": [],
"url": "example",
"ip_address": "example",
"user_agent": "example",
"bounce": {
"type": "Permanent",
"sub_type": "example",
"diagnostic_code": "example"
},
"permanent": false,
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"bounce_class": "example",
"block_cause": "sender",
"bounce_classification": "example",
"diagnostic": "example",
"peer_name": "example",
"site": "example",
"queue": "example",
"egress_pool": "example",
"egress_source": "example",
"smtp_response": "example",
"attempt": 1,
"complaint_type": "example",
"complaint_feedback_type": "example",
"feedback_type": "example",
"source": "example",
"reported_by": "example",
"source_ip": "example",
"received_at": "2026-09-04T09:14:00.000Z",
"via": "example",
"previous_status": "example",
"bulk": false,
"size_bytes": 1
}email.suppressed data
| Field | Type | Required | Notes |
|---|---|---|---|
| email_id | string | no | The message this event is about. |
| message_id | string | no | The same message. email_id is the name a webhook subscriber reads. |
| from | string | no | The From address on the message. |
| to | any | no | The To addresses on the message. One address, or a list. |
| subject | string | no | The subject on the message. |
| created_at | string | no | When the message was accepted, in UTC. |
| recipient | any | no | The recipient this event is about, when the event is about one address. Null when the report hid it. |
| tags | object | no | Tags stored on the message. |
| template_id | any | no | The template the message was rendered from, when it used one. |
| template_version | any | no | The template version the message was rendered from, when it used one. |
| scheduled_at | string | no | When a scheduled message will send, in UTC. |
| scan | any | no | Content-scan findings recorded with the queued event, when the scan warned. |
| headers | any | no | Headers stored on the message. |
| recipients | array<string> | no | Addresses this event is about, when it names more than one. |
| response | any | no | The receiving server reply, when one was recorded. |
| reason | string | no | Why the event happened, when the emitter recorded a reason. |
| string | no | The address this event is about, when it names one. | |
| level | string | no | address or domain, on a suppression. |
| origin | string | no | Why the address was suppressed: bounce, complaint, or an account list. |
| code | string | no | A machine token recorded with the event, when there is one. |
| addresses | array<string> | no | Addresses named by this event. |
| simulated | boolean | no | True when every recipient was a simulator address. |
| topic_id | any | no | The subscription topic, when the event is about one. |
| click | any | no | The link, time, address and client, on email.clicked. |
| review_sandbox | boolean | no | True when the event is from the review sandbox. |
| mail_system | string | no | The receiving system that asked for a later try. |
| retry_at | string | no | When a delayed delivery will be tried again, in UTC. |
| provider_message_id | string | no | The mail server id for this message, when one was assigned. |
| refused_recipients | array<object> | no | Recipients the mail server refused at hand-off while it took the others, on email.sent. They were not sent and not charged. |
| url | string | no | The link that was followed, on email.clicked. |
| ip_address | string | no | The client address recorded with a click or open. |
| user_agent | string | no | The client recorded with a click or open. |
| bounce | object | no | Why the message bounced. |
| permanent | boolean | no | Whether a bounce is permanent. |
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
| bounce_class | string | no | hard, soft or block: how the bounce was classed, on a bounce or a delay. |
| block_cause | any | no | On a block: sender when the receiver refused the message or its content, infrastructure when it named our sending address or signing. Null on other bounces. |
| bounce_classification | string | no | The receiving side’s own class for the bounce, as reported. |
| diagnostic | any | no | The receiving server reply text, on a bounce. |
| peer_name | string | no | The receiving mail server that answered. |
| site | string | no | The receiving site the message was queued for. |
| queue | string | no | The delivery queue the message was in. |
| egress_pool | string | no | The pool of sending addresses that carried the message. |
| egress_source | string | no | The sending address that carried the message. |
| smtp_response | string | no | The receiving server reply, when the delivery report carried one. |
| attempt | number | no | How many tries have been made, on email.delivery_delayed. |
| complaint_type | string | no | What kind of complaint it was, when known. |
| complaint_feedback_type | any | no | The mailbox provider’s feedback type for the complaint, such as abuse. |
| feedback_type | any | no | The feedback type in the complaint report. |
| source | string | no | Where the complaint came from, such as feedback_loop. |
| reported_by | any | no | The mailbox provider that sent the complaint report. |
| source_ip | any | no | The sending address named in the complaint report. |
| received_at | string | no | When the report reached us, in UTC. |
| via | string | no | How the event was recorded. |
| previous_status | string | no | The message status before this change. |
| bulk | boolean | no | True when this message was canceled together with others. |
| size_bytes | number | no | The size of the received message, in bytes. |
{
"email_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"message_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"from": "billing@yourdomain.com",
"to": [
"customer@example.com"
],
"subject": "Your receipt",
"created_at": "2026-09-04T09:14:00.000Z",
"recipient": "billing@yourdomain.com",
"tags": {},
"template_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"template_version": 1,
"scheduled_at": "2026-09-04T09:14:00.000Z",
"scan": "example",
"headers": [],
"recipients": [
"customer@example.com"
],
"response": "example",
"reason": "example",
"email": "customer@example.com",
"level": "example",
"origin": "example",
"code": "example",
"addresses": [
"customer@example.com"
],
"simulated": false,
"topic_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"click": "example",
"review_sandbox": false,
"mail_system": "example",
"retry_at": "2026-09-04T09:14:00.000Z",
"provider_message_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"refused_recipients": [],
"url": "example",
"ip_address": "example",
"user_agent": "example",
"bounce": {
"type": "Permanent",
"sub_type": "example",
"diagnostic_code": "example"
},
"permanent": false,
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"bounce_class": "example",
"block_cause": "sender",
"bounce_classification": "example",
"diagnostic": "example",
"peer_name": "example",
"site": "example",
"queue": "example",
"egress_pool": "example",
"egress_source": "example",
"smtp_response": "example",
"attempt": 1,
"complaint_type": "example",
"complaint_feedback_type": "example",
"feedback_type": "example",
"source": "example",
"reported_by": "example",
"source_ip": "example",
"received_at": "2026-09-04T09:14:00.000Z",
"via": "example",
"previous_status": "example",
"bulk": false,
"size_bytes": 1
}Domain
- domain.created
- A sending domain is added to the account.
- data
resource_typeresource_idnameregion - domain.verified
- A verification check finds every required record in place and the domain moves to verified.
- data
resource_typeresource_idnameregionstatusreasonrecords - domain.failed
- A verification check moves the domain to failed because required records are missing or wrong.
- data
resource_typeresource_idnameregionstatusreasonrecords - domain.updated
- A domain’s tracking settings change, or a verification check moves it to partially verified or partially failed.
- data
resource_typeresource_idname - domain.deleted
- A domain is removed from the account, and any send still waiting on it fails with its own email.failed.
- data
resource_typeresource_idnameregion - domain.blocklisted
- The daily blocklist check finds a verified domain newly listed on a domain blocklist (Spamhaus DBL); it fires again only after a check has found the domain clean on that list.
- data
resource_typeresource_idnamelistlist_namelisted_sincedelisting_url - inbound.refused_by_rule
- Mail for this domain is not stored because a block rule matched the envelope sender or the From header, or because the domain accepts only senders on its allow list and neither address matched.
- data
namereasonmatchedmail_fromheader_fromresource_typeresource_id
domain.created data
| Field | Type | Required | Notes |
|---|---|---|---|
| domain_id | string | no | The domain this event is about. |
| name | string | no | The domain name. |
| region | string | no | The region recorded on the domain. |
| status | string | no | The domain status after the change. |
| reason | string | no | Why the domain event was recorded. |
| records | any | no | The DNS records observed, when the event includes them. |
| click_tracking | boolean | no | Whether click tracking is on after the change. |
| open_tracking | boolean | no | Whether open tracking is on after the change. |
| tracking_subdomain | string | no | The tracking host label after the change. |
| inbound_policy | string | no | Whether anyone may write to this domain, or only senders on the allow list. |
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
{
"domain_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"name": "example",
"region": "example",
"status": "example",
"reason": "example",
"records": "example",
"click_tracking": false,
"open_tracking": false,
"tracking_subdomain": "example",
"inbound_policy": "example",
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42"
}domain.verified data
| Field | Type | Required | Notes |
|---|---|---|---|
| domain_id | string | no | The domain this event is about. |
| name | string | no | The domain name. |
| region | string | no | The region recorded on the domain. |
| status | string | no | The domain status after the change. |
| reason | string | no | Why the domain event was recorded. |
| records | any | no | The DNS records observed, when the event includes them. |
| click_tracking | boolean | no | Whether click tracking is on after the change. |
| open_tracking | boolean | no | Whether open tracking is on after the change. |
| tracking_subdomain | string | no | The tracking host label after the change. |
| inbound_policy | string | no | Whether anyone may write to this domain, or only senders on the allow list. |
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
{
"domain_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"name": "example",
"region": "example",
"status": "example",
"reason": "example",
"records": "example",
"click_tracking": false,
"open_tracking": false,
"tracking_subdomain": "example",
"inbound_policy": "example",
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42"
}domain.failed data
| Field | Type | Required | Notes |
|---|---|---|---|
| domain_id | string | no | The domain this event is about. |
| name | string | no | The domain name. |
| region | string | no | The region recorded on the domain. |
| status | string | no | The domain status after the change. |
| reason | string | no | Why the domain event was recorded. |
| records | any | no | The DNS records observed, when the event includes them. |
| click_tracking | boolean | no | Whether click tracking is on after the change. |
| open_tracking | boolean | no | Whether open tracking is on after the change. |
| tracking_subdomain | string | no | The tracking host label after the change. |
| inbound_policy | string | no | Whether anyone may write to this domain, or only senders on the allow list. |
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
{
"domain_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"name": "example",
"region": "example",
"status": "example",
"reason": "example",
"records": "example",
"click_tracking": false,
"open_tracking": false,
"tracking_subdomain": "example",
"inbound_policy": "example",
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42"
}domain.updated data
| Field | Type | Required | Notes |
|---|---|---|---|
| domain_id | string | no | The domain this event is about. |
| name | string | no | The domain name. |
| region | string | no | The region recorded on the domain. |
| status | string | no | The domain status after the change. |
| reason | string | no | Why the domain event was recorded. |
| records | any | no | The DNS records observed, when the event includes them. |
| click_tracking | boolean | no | Whether click tracking is on after the change. |
| open_tracking | boolean | no | Whether open tracking is on after the change. |
| tracking_subdomain | string | no | The tracking host label after the change. |
| inbound_policy | string | no | Whether anyone may write to this domain, or only senders on the allow list. |
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
{
"domain_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"name": "example",
"region": "example",
"status": "example",
"reason": "example",
"records": "example",
"click_tracking": false,
"open_tracking": false,
"tracking_subdomain": "example",
"inbound_policy": "example",
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42"
}domain.deleted data
| Field | Type | Required | Notes |
|---|---|---|---|
| domain_id | string | no | The domain this event is about. |
| name | string | no | The domain name. |
| region | string | no | The region recorded on the domain. |
| status | string | no | The domain status after the change. |
| reason | string | no | Why the domain event was recorded. |
| records | any | no | The DNS records observed, when the event includes them. |
| click_tracking | boolean | no | Whether click tracking is on after the change. |
| open_tracking | boolean | no | Whether open tracking is on after the change. |
| tracking_subdomain | string | no | The tracking host label after the change. |
| inbound_policy | string | no | Whether anyone may write to this domain, or only senders on the allow list. |
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
{
"domain_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"name": "example",
"region": "example",
"status": "example",
"reason": "example",
"records": "example",
"click_tracking": false,
"open_tracking": false,
"tracking_subdomain": "example",
"inbound_policy": "example",
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42"
}domain.blocklisted data
| Field | Type | Required | Notes |
|---|---|---|---|
| name | string | no | The domain name. |
| list | string | no | The list key, e.g. spamhaus_dbl. |
| list_name | string | no | The list as people name it, e.g. Spamhaus DBL. |
| listed_since | string | no | When the daily check first found this listing, in UTC. |
| delisting_url | string | no | The list’s own page for checking and removing a listing. |
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The domain this event is about. |
{
"name": "example",
"list": "example",
"list_name": "example",
"listed_since": "example",
"delisting_url": "example",
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42"
}inbound.refused_by_rule data
| Field | Type | Required | Notes |
|---|---|---|---|
| name | string | no | The domain the message was addressed to. |
| reason | string | no | Why the message was not stored. |
| matched | string | no | Which address matched: envelope, from_header, both, or none. |
| mail_from | string | no | The envelope sender, lower-cased, or empty when there was none. |
| header_from | string | no | The address in the From header, lower-cased, or empty when there was none. |
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The domain this event is about. |
{
"name": "example",
"reason": "example",
"matched": "example",
"mail_from": "example",
"header_from": "example",
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42"
}Suppression
- suppression.added
- An address or domain is added to the suppression list through the API, the console or an agent tool; addresses suppressed automatically after a bounce or complaint do not fire it.
- data
resource_typeresource_idemaillevel - suppression.removed
- A suppression is lifted, one at a time or in a batch.
- data
resource_typeresource_idemaillevel
suppression.added data
| Field | Type | Required | Notes |
|---|---|---|---|
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The suppression row this event is about. |
| string | no | The suppressed address, or the domain for a domain-level row. | |
| level | string | no | address, domain or global. |
| origin | string | no | How it was added: manual, bounce or complaint. |
| stream | any | no | The stream it applies to, or absent for every stream. |
| batch | boolean | no | True when the row came from a batch call. |
{
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"email": "customer@example.com",
"level": "example",
"origin": "example",
"stream": "example",
"batch": false
}suppression.removed data
| Field | Type | Required | Notes |
|---|---|---|---|
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The suppression row this event is about. |
| string | no | The suppressed address, or the domain for a domain-level row. | |
| level | string | no | address, domain or global. |
| origin | string | no | How it was added: manual, bounce or complaint. |
| stream | any | no | The stream it applies to, or absent for every stream. |
| batch | boolean | no | True when the row came from a batch call. |
{
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"email": "customer@example.com",
"level": "example",
"origin": "example",
"stream": "example",
"batch": false
}Limit
- limit.warning
- A key’s budget, or the plan’s included emails, passes 80% for the current period, once per period.
- data
resource_typeresource_idapi_key_idusedbudgetfractionperiod_started_at - limit.exceeded
- A key’s budget refuses a send, once per key per period, on the first refusal.
- data
resource_typeresource_idapi_key_idusedbudgetperiodperiod_started_atresets_at
limit.warning data
| Field | Type | Required | Notes |
|---|---|---|---|
| api_key_id | any | no | The key whose budget moved, or null for the plan inclusion. |
| used | number | no | How much of the budget is spent. |
| budget | number | no | The budget for the period. |
| fraction | number | no | The fraction of the budget that raises a warning. |
| period_started_at | string | no | When the current period started, in UTC. |
| period | string | no | hourly, daily or monthly. |
| resets_at | string | no | When the budget starts again, in UTC. |
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
{
"api_key_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"used": 1,
"budget": 1,
"fraction": 1,
"period_started_at": "2026-09-04T09:14:00.000Z",
"period": "example",
"resets_at": "2026-09-04T09:14:00.000Z",
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42"
}limit.exceeded data
| Field | Type | Required | Notes |
|---|---|---|---|
| api_key_id | any | no | The key whose budget moved, or null for the plan inclusion. |
| used | number | no | How much of the budget is spent. |
| budget | number | no | The budget for the period. |
| fraction | number | no | The fraction of the budget that raises a warning. |
| period_started_at | string | no | When the current period started, in UTC. |
| period | string | no | hourly, daily or monthly. |
| resets_at | string | no | When the budget starts again, in UTC. |
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
{
"api_key_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"used": 1,
"budget": 1,
"fraction": 1,
"period_started_at": "2026-09-04T09:14:00.000Z",
"period": "example",
"resets_at": "2026-09-04T09:14:00.000Z",
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42"
}Agent
- agent.approval_requested
- A send is held for a person to approve, because loop detection stopped it or an agent asked for approval.
- data
resource_typeresource_idaction_idapi_key_idreason - agent.approved
- A person approves a held send and it is accepted as a new email.
- data
resource_typeresource_idaction_idmessage_idemail_id - agent.rejected
- A person rejects a held send, with their reason when they gave one.
- data
resource_typeresource_idaction_idreason - agent.killed
- The account-wide kill switch pauses every key at once; pausing a single key, pressing it again while engaged, or resuming does not fire it.
- data
resource_typeresource_idreasonaffected_key_ids
agent.approval_requested data
| Field | Type | Required | Notes |
|---|---|---|---|
| action_id | string | no | The held action a person decides. |
| message_id | string | no | The message the decision is about, when one was created. |
| email_id | string | no | The same message, under the name a webhook subscriber reads. |
| reason | any | no | Why the action was rejected, when a reason was given. |
| affected_key_ids | array<string> | no | Keys the kill switch paused. |
| api_key_id | any | no | The key whose send was held. |
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
{
"action_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"message_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"email_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"reason": "example",
"affected_key_ids": [
"customer@example.com"
],
"api_key_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42"
}agent.approved data
| Field | Type | Required | Notes |
|---|---|---|---|
| action_id | string | no | The held action a person decides. |
| message_id | string | no | The message the decision is about, when one was created. |
| email_id | string | no | The same message, under the name a webhook subscriber reads. |
| reason | any | no | Why the action was rejected, when a reason was given. |
| affected_key_ids | array<string> | no | Keys the kill switch paused. |
| api_key_id | any | no | The key whose send was held. |
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
{
"action_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"message_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"email_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"reason": "example",
"affected_key_ids": [
"customer@example.com"
],
"api_key_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42"
}agent.rejected data
| Field | Type | Required | Notes |
|---|---|---|---|
| action_id | string | no | The held action a person decides. |
| message_id | string | no | The message the decision is about, when one was created. |
| email_id | string | no | The same message, under the name a webhook subscriber reads. |
| reason | any | no | Why the action was rejected, when a reason was given. |
| affected_key_ids | array<string> | no | Keys the kill switch paused. |
| api_key_id | any | no | The key whose send was held. |
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
{
"action_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"message_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"email_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"reason": "example",
"affected_key_ids": [
"customer@example.com"
],
"api_key_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42"
}agent.killed data
| Field | Type | Required | Notes |
|---|---|---|---|
| action_id | string | no | The held action a person decides. |
| message_id | string | no | The message the decision is about, when one was created. |
| email_id | string | no | The same message, under the name a webhook subscriber reads. |
| reason | any | no | Why the action was rejected, when a reason was given. |
| affected_key_ids | array<string> | no | Keys the kill switch paused. |
| api_key_id | any | no | The key whose send was held. |
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
{
"action_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"message_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"email_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"reason": "example",
"affected_key_ids": [
"customer@example.com"
],
"api_key_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42"
}Audience and campaigns
- contact.created
- Declared; nothing emits it today.
- contact.updated
- A contact is created or changed, or unsubscribes from all broadcast mail; a new contact fires this, not contact.created.
- data
resource_typeresource_id - contact.deleted
- A contact is deleted through the API.
- data
resource_typeresource_id - segment.joined
- A contact matches a segment’s rules on a contact write and enters it.
- data
resource_typeresource_idsegment_idsegment_namecontact_idemail - segment.left
- A contact stops matching a segment’s rules on a contact write and leaves it.
- data
resource_typeresource_idsegment_idsegment_namecontact_idemail - segment.created
- A segment is created.
- data
resource_typeresource_idnamerules - segment.updated
- A segment’s name or rules change.
- data
resource_typeresource_id - segment.deleted
- A segment is deleted.
- data
resource_typeresource_id - broadcast.scheduled
- A broadcast is created, edited or sent with a future time, and its status becomes scheduled.
- data
resource_typeresource_idstatusscheduled_at - broadcast.sent
- A broadcast finishes sending and reached at least one contact.
- data
resource_typeresource_idstatussentskipped - broadcast.updated
- A broadcast is created, edited, canceled back to a draft, held for review by AgentiSend, or ends failed because it reached no contact.
- data
resource_typeresource_id - automation.triggered
- A named event is posted for a contact; fired is how many automations it started.
- data
resource_typeresource_idevent_namefired - email.received
- A message addressed to one of your domains arrives and is stored for you to read. data.inbound_verdict is the label.
- data
email_idresource_typeresource_idcreated_atfromtoccbccreceived_formessage_idsubjectsize_bytesattachmentsextracted_textextracted_htmlinbound_verdict - email.received.held
- A message labeled review arrived on a domain that holds suspect mail, and the arrival webhook waits until a person releases it.
- data
email_idresource_typeresource_idcreated_atfromtoccbccreceived_formessage_idsubjectsize_bytesattachmentsextracted_textextracted_htmlinbound_verdict - topic.created
- A subscription topic is created.
- data
resource_typeresource_idnamedefault_subscribed - topic.updated
- A subscription topic’s name, description or default changes.
- data
resource_typeresource_id - topic.deleted
- A subscription topic is deleted, with every answer recorded about it.
- data
resource_typeresource_idname - contact.subscribed
- A contact is opted in to a topic through the API.
- data
resource_typeresource_idtopic_idsubscribedvia - contact.unsubscribed
- A contact is opted out of a topic, through the API or the unsubscribe link in a message sent under that topic.
- data
resource_typeresource_idtopic_idsubscribedvia
contact.created data
| Field | Type | Required | Notes |
|---|---|---|---|
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
| name | string | no | The name of the topic, segment, or broadcast. |
| string | no | The contact address, when the event names one. | |
| default_subscribed | boolean | no | Whether a new contact starts subscribed to this topic. |
| status | string | no | The status after the change. |
| topic_id | any | no | The topic, when the event is about one. |
| subscribed | boolean | no | Whether the contact is subscribed after the change. |
| via | string | no | How the subscription changed. |
| stream | any | no | The stream an unsubscribe applies to, or absent for every stream. |
| fields | array<string> | no | The contact fields that changed. |
| consent_source | string | no | Where the person opted back in. |
| consent_at | string | no | When the person opted back in, in UTC. |
| rules | any | no | The segment rules at the time of the change. |
| sent | number | no | Messages the broadcast sent. |
| skipped | number | no | Recipients the broadcast skipped. |
| scheduled_at | string | no | When the broadcast will send, in UTC. |
| canceled_from | string | no | The broadcast status before it was canceled. |
| reason | string | no | Why the change happened, when one was recorded. |
| code | string | no | A machine token recorded with the change, when there is one. |
| event_name | string | no | The event that started the automation. |
| fired | any | no | What the automation started for this event. |
{
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"name": "example",
"email": "customer@example.com",
"default_subscribed": false,
"status": "example",
"topic_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"subscribed": false,
"via": "example",
"stream": "example",
"fields": [
"customer@example.com"
],
"consent_source": "example",
"consent_at": "2026-09-04T09:14:00.000Z",
"rules": "example",
"sent": 1,
"skipped": 1,
"scheduled_at": "2026-09-04T09:14:00.000Z",
"canceled_from": "example",
"reason": "example",
"code": "example",
"event_name": "example",
"fired": "example"
}contact.updated data
| Field | Type | Required | Notes |
|---|---|---|---|
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
| name | string | no | The name of the topic, segment, or broadcast. |
| string | no | The contact address, when the event names one. | |
| default_subscribed | boolean | no | Whether a new contact starts subscribed to this topic. |
| status | string | no | The status after the change. |
| topic_id | any | no | The topic, when the event is about one. |
| subscribed | boolean | no | Whether the contact is subscribed after the change. |
| via | string | no | How the subscription changed. |
| stream | any | no | The stream an unsubscribe applies to, or absent for every stream. |
| fields | array<string> | no | The contact fields that changed. |
| consent_source | string | no | Where the person opted back in. |
| consent_at | string | no | When the person opted back in, in UTC. |
| rules | any | no | The segment rules at the time of the change. |
| sent | number | no | Messages the broadcast sent. |
| skipped | number | no | Recipients the broadcast skipped. |
| scheduled_at | string | no | When the broadcast will send, in UTC. |
| canceled_from | string | no | The broadcast status before it was canceled. |
| reason | string | no | Why the change happened, when one was recorded. |
| code | string | no | A machine token recorded with the change, when there is one. |
| event_name | string | no | The event that started the automation. |
| fired | any | no | What the automation started for this event. |
{
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"name": "example",
"email": "customer@example.com",
"default_subscribed": false,
"status": "example",
"topic_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"subscribed": false,
"via": "example",
"stream": "example",
"fields": [
"customer@example.com"
],
"consent_source": "example",
"consent_at": "2026-09-04T09:14:00.000Z",
"rules": "example",
"sent": 1,
"skipped": 1,
"scheduled_at": "2026-09-04T09:14:00.000Z",
"canceled_from": "example",
"reason": "example",
"code": "example",
"event_name": "example",
"fired": "example"
}contact.deleted data
| Field | Type | Required | Notes |
|---|---|---|---|
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
| name | string | no | The name of the topic, segment, or broadcast. |
| string | no | The contact address, when the event names one. | |
| default_subscribed | boolean | no | Whether a new contact starts subscribed to this topic. |
| status | string | no | The status after the change. |
| topic_id | any | no | The topic, when the event is about one. |
| subscribed | boolean | no | Whether the contact is subscribed after the change. |
| via | string | no | How the subscription changed. |
| stream | any | no | The stream an unsubscribe applies to, or absent for every stream. |
| fields | array<string> | no | The contact fields that changed. |
| consent_source | string | no | Where the person opted back in. |
| consent_at | string | no | When the person opted back in, in UTC. |
| rules | any | no | The segment rules at the time of the change. |
| sent | number | no | Messages the broadcast sent. |
| skipped | number | no | Recipients the broadcast skipped. |
| scheduled_at | string | no | When the broadcast will send, in UTC. |
| canceled_from | string | no | The broadcast status before it was canceled. |
| reason | string | no | Why the change happened, when one was recorded. |
| code | string | no | A machine token recorded with the change, when there is one. |
| event_name | string | no | The event that started the automation. |
| fired | any | no | What the automation started for this event. |
{
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"name": "example",
"email": "customer@example.com",
"default_subscribed": false,
"status": "example",
"topic_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"subscribed": false,
"via": "example",
"stream": "example",
"fields": [
"customer@example.com"
],
"consent_source": "example",
"consent_at": "2026-09-04T09:14:00.000Z",
"rules": "example",
"sent": 1,
"skipped": 1,
"scheduled_at": "2026-09-04T09:14:00.000Z",
"canceled_from": "example",
"reason": "example",
"code": "example",
"event_name": "example",
"fired": "example"
}segment.joined data
| Field | Type | Required | Notes |
|---|---|---|---|
| segment_id | string | no | The segment the contact entered or left. |
| segment_name | string | no | The segment name at the time of the change. |
| contact_id | string | no | The contact. |
| string | no | The contact address. | |
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
{
"segment_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"segment_name": "example",
"contact_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"email": "customer@example.com",
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42"
}segment.left data
| Field | Type | Required | Notes |
|---|---|---|---|
| segment_id | string | no | The segment the contact entered or left. |
| segment_name | string | no | The segment name at the time of the change. |
| contact_id | string | no | The contact. |
| string | no | The contact address. | |
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
{
"segment_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"segment_name": "example",
"contact_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"email": "customer@example.com",
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42"
}segment.created data
| Field | Type | Required | Notes |
|---|---|---|---|
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
| name | string | no | The name of the topic, segment, or broadcast. |
| string | no | The contact address, when the event names one. | |
| default_subscribed | boolean | no | Whether a new contact starts subscribed to this topic. |
| status | string | no | The status after the change. |
| topic_id | any | no | The topic, when the event is about one. |
| subscribed | boolean | no | Whether the contact is subscribed after the change. |
| via | string | no | How the subscription changed. |
| stream | any | no | The stream an unsubscribe applies to, or absent for every stream. |
| fields | array<string> | no | The contact fields that changed. |
| consent_source | string | no | Where the person opted back in. |
| consent_at | string | no | When the person opted back in, in UTC. |
| rules | any | no | The segment rules at the time of the change. |
| sent | number | no | Messages the broadcast sent. |
| skipped | number | no | Recipients the broadcast skipped. |
| scheduled_at | string | no | When the broadcast will send, in UTC. |
| canceled_from | string | no | The broadcast status before it was canceled. |
| reason | string | no | Why the change happened, when one was recorded. |
| code | string | no | A machine token recorded with the change, when there is one. |
| event_name | string | no | The event that started the automation. |
| fired | any | no | What the automation started for this event. |
{
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"name": "example",
"email": "customer@example.com",
"default_subscribed": false,
"status": "example",
"topic_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"subscribed": false,
"via": "example",
"stream": "example",
"fields": [
"customer@example.com"
],
"consent_source": "example",
"consent_at": "2026-09-04T09:14:00.000Z",
"rules": "example",
"sent": 1,
"skipped": 1,
"scheduled_at": "2026-09-04T09:14:00.000Z",
"canceled_from": "example",
"reason": "example",
"code": "example",
"event_name": "example",
"fired": "example"
}segment.updated data
| Field | Type | Required | Notes |
|---|---|---|---|
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
| name | string | no | The name of the topic, segment, or broadcast. |
| string | no | The contact address, when the event names one. | |
| default_subscribed | boolean | no | Whether a new contact starts subscribed to this topic. |
| status | string | no | The status after the change. |
| topic_id | any | no | The topic, when the event is about one. |
| subscribed | boolean | no | Whether the contact is subscribed after the change. |
| via | string | no | How the subscription changed. |
| stream | any | no | The stream an unsubscribe applies to, or absent for every stream. |
| fields | array<string> | no | The contact fields that changed. |
| consent_source | string | no | Where the person opted back in. |
| consent_at | string | no | When the person opted back in, in UTC. |
| rules | any | no | The segment rules at the time of the change. |
| sent | number | no | Messages the broadcast sent. |
| skipped | number | no | Recipients the broadcast skipped. |
| scheduled_at | string | no | When the broadcast will send, in UTC. |
| canceled_from | string | no | The broadcast status before it was canceled. |
| reason | string | no | Why the change happened, when one was recorded. |
| code | string | no | A machine token recorded with the change, when there is one. |
| event_name | string | no | The event that started the automation. |
| fired | any | no | What the automation started for this event. |
{
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"name": "example",
"email": "customer@example.com",
"default_subscribed": false,
"status": "example",
"topic_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"subscribed": false,
"via": "example",
"stream": "example",
"fields": [
"customer@example.com"
],
"consent_source": "example",
"consent_at": "2026-09-04T09:14:00.000Z",
"rules": "example",
"sent": 1,
"skipped": 1,
"scheduled_at": "2026-09-04T09:14:00.000Z",
"canceled_from": "example",
"reason": "example",
"code": "example",
"event_name": "example",
"fired": "example"
}segment.deleted data
| Field | Type | Required | Notes |
|---|---|---|---|
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
| name | string | no | The name of the topic, segment, or broadcast. |
| string | no | The contact address, when the event names one. | |
| default_subscribed | boolean | no | Whether a new contact starts subscribed to this topic. |
| status | string | no | The status after the change. |
| topic_id | any | no | The topic, when the event is about one. |
| subscribed | boolean | no | Whether the contact is subscribed after the change. |
| via | string | no | How the subscription changed. |
| stream | any | no | The stream an unsubscribe applies to, or absent for every stream. |
| fields | array<string> | no | The contact fields that changed. |
| consent_source | string | no | Where the person opted back in. |
| consent_at | string | no | When the person opted back in, in UTC. |
| rules | any | no | The segment rules at the time of the change. |
| sent | number | no | Messages the broadcast sent. |
| skipped | number | no | Recipients the broadcast skipped. |
| scheduled_at | string | no | When the broadcast will send, in UTC. |
| canceled_from | string | no | The broadcast status before it was canceled. |
| reason | string | no | Why the change happened, when one was recorded. |
| code | string | no | A machine token recorded with the change, when there is one. |
| event_name | string | no | The event that started the automation. |
| fired | any | no | What the automation started for this event. |
{
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"name": "example",
"email": "customer@example.com",
"default_subscribed": false,
"status": "example",
"topic_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"subscribed": false,
"via": "example",
"stream": "example",
"fields": [
"customer@example.com"
],
"consent_source": "example",
"consent_at": "2026-09-04T09:14:00.000Z",
"rules": "example",
"sent": 1,
"skipped": 1,
"scheduled_at": "2026-09-04T09:14:00.000Z",
"canceled_from": "example",
"reason": "example",
"code": "example",
"event_name": "example",
"fired": "example"
}broadcast.scheduled data
| Field | Type | Required | Notes |
|---|---|---|---|
| scheduled_at | string | no | When the broadcast will send, in UTC. |
| status | string | no | The broadcast status after the change. |
| name | string | no | The broadcast name. |
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
{
"scheduled_at": "2026-09-04T09:14:00.000Z",
"status": "example",
"name": "example",
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42"
}broadcast.sent data
| Field | Type | Required | Notes |
|---|---|---|---|
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
| name | string | no | The name of the topic, segment, or broadcast. |
| string | no | The contact address, when the event names one. | |
| default_subscribed | boolean | no | Whether a new contact starts subscribed to this topic. |
| status | string | no | The status after the change. |
| topic_id | any | no | The topic, when the event is about one. |
| subscribed | boolean | no | Whether the contact is subscribed after the change. |
| via | string | no | How the subscription changed. |
| stream | any | no | The stream an unsubscribe applies to, or absent for every stream. |
| fields | array<string> | no | The contact fields that changed. |
| consent_source | string | no | Where the person opted back in. |
| consent_at | string | no | When the person opted back in, in UTC. |
| rules | any | no | The segment rules at the time of the change. |
| sent | number | no | Messages the broadcast sent. |
| skipped | number | no | Recipients the broadcast skipped. |
| scheduled_at | string | no | When the broadcast will send, in UTC. |
| canceled_from | string | no | The broadcast status before it was canceled. |
| reason | string | no | Why the change happened, when one was recorded. |
| code | string | no | A machine token recorded with the change, when there is one. |
| event_name | string | no | The event that started the automation. |
| fired | any | no | What the automation started for this event. |
{
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"name": "example",
"email": "customer@example.com",
"default_subscribed": false,
"status": "example",
"topic_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"subscribed": false,
"via": "example",
"stream": "example",
"fields": [
"customer@example.com"
],
"consent_source": "example",
"consent_at": "2026-09-04T09:14:00.000Z",
"rules": "example",
"sent": 1,
"skipped": 1,
"scheduled_at": "2026-09-04T09:14:00.000Z",
"canceled_from": "example",
"reason": "example",
"code": "example",
"event_name": "example",
"fired": "example"
}broadcast.updated data
| Field | Type | Required | Notes |
|---|---|---|---|
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
| name | string | no | The name of the topic, segment, or broadcast. |
| string | no | The contact address, when the event names one. | |
| default_subscribed | boolean | no | Whether a new contact starts subscribed to this topic. |
| status | string | no | The status after the change. |
| topic_id | any | no | The topic, when the event is about one. |
| subscribed | boolean | no | Whether the contact is subscribed after the change. |
| via | string | no | How the subscription changed. |
| stream | any | no | The stream an unsubscribe applies to, or absent for every stream. |
| fields | array<string> | no | The contact fields that changed. |
| consent_source | string | no | Where the person opted back in. |
| consent_at | string | no | When the person opted back in, in UTC. |
| rules | any | no | The segment rules at the time of the change. |
| sent | number | no | Messages the broadcast sent. |
| skipped | number | no | Recipients the broadcast skipped. |
| scheduled_at | string | no | When the broadcast will send, in UTC. |
| canceled_from | string | no | The broadcast status before it was canceled. |
| reason | string | no | Why the change happened, when one was recorded. |
| code | string | no | A machine token recorded with the change, when there is one. |
| event_name | string | no | The event that started the automation. |
| fired | any | no | What the automation started for this event. |
{
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"name": "example",
"email": "customer@example.com",
"default_subscribed": false,
"status": "example",
"topic_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"subscribed": false,
"via": "example",
"stream": "example",
"fields": [
"customer@example.com"
],
"consent_source": "example",
"consent_at": "2026-09-04T09:14:00.000Z",
"rules": "example",
"sent": 1,
"skipped": 1,
"scheduled_at": "2026-09-04T09:14:00.000Z",
"canceled_from": "example",
"reason": "example",
"code": "example",
"event_name": "example",
"fired": "example"
}automation.triggered data
| Field | Type | Required | Notes |
|---|---|---|---|
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
| name | string | no | The name of the topic, segment, or broadcast. |
| string | no | The contact address, when the event names one. | |
| default_subscribed | boolean | no | Whether a new contact starts subscribed to this topic. |
| status | string | no | The status after the change. |
| topic_id | any | no | The topic, when the event is about one. |
| subscribed | boolean | no | Whether the contact is subscribed after the change. |
| via | string | no | How the subscription changed. |
| stream | any | no | The stream an unsubscribe applies to, or absent for every stream. |
| fields | array<string> | no | The contact fields that changed. |
| consent_source | string | no | Where the person opted back in. |
| consent_at | string | no | When the person opted back in, in UTC. |
| rules | any | no | The segment rules at the time of the change. |
| sent | number | no | Messages the broadcast sent. |
| skipped | number | no | Recipients the broadcast skipped. |
| scheduled_at | string | no | When the broadcast will send, in UTC. |
| canceled_from | string | no | The broadcast status before it was canceled. |
| reason | string | no | Why the change happened, when one was recorded. |
| code | string | no | A machine token recorded with the change, when there is one. |
| event_name | string | no | The event that started the automation. |
| fired | any | no | What the automation started for this event. |
{
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"name": "example",
"email": "customer@example.com",
"default_subscribed": false,
"status": "example",
"topic_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"subscribed": false,
"via": "example",
"stream": "example",
"fields": [
"customer@example.com"
],
"consent_source": "example",
"consent_at": "2026-09-04T09:14:00.000Z",
"rules": "example",
"sent": 1,
"skipped": 1,
"scheduled_at": "2026-09-04T09:14:00.000Z",
"canceled_from": "example",
"reason": "example",
"code": "example",
"event_name": "example",
"fired": "example"
}email.received data
| Field | Type | Required | Notes |
|---|---|---|---|
| email_id | string | no | The message this event is about. |
| message_id | any | no | The arriving message's own Message-ID header, or null when it had none. |
| from | string | no | The sender's bare address, from the message's From header. |
| to | array<string> | no | Addresses in the message's To header. |
| subject | string | no | The subject on the message. |
| created_at | string | no | When the message was accepted, in UTC. |
| recipient | any | no | The recipient this event is about, when the event is about one address. Null when the report hid it. |
| tags | object | no | Tags stored on the message. |
| template_id | any | no | The template the message was rendered from, when it used one. |
| template_version | any | no | The template version the message was rendered from, when it used one. |
| scheduled_at | string | no | When a scheduled message will send, in UTC. |
| scan | any | no | Content-scan findings recorded with the queued event, when the scan warned. |
| headers | any | no | Headers stored on the message. |
| recipients | array<string> | no | Addresses this event is about, when it names more than one. |
| response | any | no | The receiving server reply, when one was recorded. |
| reason | string | no | Why the event happened, when the emitter recorded a reason. |
| string | no | The address this event is about, when it names one. | |
| level | string | no | address or domain, on a suppression. |
| origin | string | no | Why the address was suppressed: bounce, complaint, or an account list. |
| code | string | no | A machine token recorded with the event, when there is one. |
| addresses | array<string> | no | Addresses named by this event. |
| simulated | boolean | no | True when every recipient was a simulator address. |
| topic_id | any | no | The subscription topic, when the event is about one. |
| click | any | no | The link, time, address and client, on email.clicked. |
| review_sandbox | boolean | no | True when the event is from the review sandbox. |
| mail_system | string | no | The receiving system that asked for a later try. |
| retry_at | string | no | When a delayed delivery will be tried again, in UTC. |
| provider_message_id | string | no | The mail server id for this message, when one was assigned. |
| refused_recipients | array<object> | no | Recipients the mail server refused at hand-off while it took the others, on email.sent. They were not sent and not charged. |
| url | string | no | The link that was followed, on email.clicked. |
| ip_address | string | no | The client address recorded with a click or open. |
| user_agent | string | no | The client recorded with a click or open. |
| bounce | object | no | Why the message bounced. |
| permanent | boolean | no | Whether a bounce is permanent. |
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The received message. |
| bounce_class | string | no | hard, soft or block: how the bounce was classed, on a bounce or a delay. |
| block_cause | any | no | On a block: sender when the receiver refused the message or its content, infrastructure when it named our sending address or signing. Null on other bounces. |
| bounce_classification | string | no | The receiving side’s own class for the bounce, as reported. |
| diagnostic | any | no | The receiving server reply text, on a bounce. |
| peer_name | string | no | The receiving mail server that answered. |
| site | string | no | The receiving site the message was queued for. |
| queue | string | no | The delivery queue the message was in. |
| egress_pool | string | no | The pool of sending addresses that carried the message. |
| egress_source | string | no | The sending address that carried the message. |
| smtp_response | string | no | The receiving server reply, when the delivery report carried one. |
| attempt | number | no | How many tries have been made, on email.delivery_delayed. |
| complaint_type | string | no | What kind of complaint it was, when known. |
| complaint_feedback_type | any | no | The mailbox provider’s feedback type for the complaint, such as abuse. |
| feedback_type | any | no | The feedback type in the complaint report. |
| source | string | no | Where the complaint came from, such as feedback_loop. |
| reported_by | any | no | The mailbox provider that sent the complaint report. |
| source_ip | any | no | The sending address named in the complaint report. |
| received_at | string | no | When the report reached us, in UTC. |
| via | string | no | How the event was recorded. |
| previous_status | string | no | The message status before this change. |
| bulk | boolean | no | True when this message was canceled together with others. |
| size_bytes | integer | no | Size of the message as received, in bytes. |
| cc | array<string> | no | Addresses in the message's Cc header. |
| bcc | array<string> | no | Always empty: a received message carries no Bcc list. |
| received_for | array<string> | no | The address on your domain this copy was delivered to (the SMTP envelope recipient). |
| attachments | array<object> | no | Attachment metadata. The bytes are read through the received-email API. |
| extracted_text | any | no | The reply with quoted history, signatures and footers removed. Null when extraction produced nothing; read the message for the full text. |
| extracted_html | any | no | The same cut, in HTML. Null when the message had no HTML or extraction produced nothing. |
| inbound_verdict | object | no | The label stored with the message. |
{
"email_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"message_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"from": "billing@yourdomain.com",
"to": [
"customer@example.com"
],
"subject": "Your receipt",
"created_at": "2026-09-04T09:14:00.000Z",
"recipient": "billing@yourdomain.com",
"tags": {},
"template_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"template_version": 1,
"scheduled_at": "2026-09-04T09:14:00.000Z",
"scan": "example",
"headers": [],
"recipients": [
"customer@example.com"
],
"response": "example",
"reason": "example",
"email": "customer@example.com",
"level": "example",
"origin": "example",
"code": "example",
"addresses": [
"customer@example.com"
],
"simulated": false,
"topic_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"click": "example",
"review_sandbox": false,
"mail_system": "example",
"retry_at": "2026-09-04T09:14:00.000Z",
"provider_message_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"refused_recipients": [],
"url": "example",
"ip_address": "example",
"user_agent": "example",
"bounce": {
"type": "Permanent",
"sub_type": "example",
"diagnostic_code": "example"
},
"permanent": false,
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"bounce_class": "example",
"block_cause": "sender",
"bounce_classification": "example",
"diagnostic": "example",
"peer_name": "example",
"site": "example",
"queue": "example",
"egress_pool": "example",
"egress_source": "example",
"smtp_response": "example",
"attempt": 1,
"complaint_type": "example",
"complaint_feedback_type": "example",
"feedback_type": "example",
"source": "example",
"reported_by": "example",
"source_ip": "example",
"received_at": "2026-09-04T09:14:00.000Z",
"via": "example",
"previous_status": "example",
"bulk": false,
"size_bytes": 1,
"cc": [
"customer@example.com"
],
"bcc": [
"customer@example.com"
],
"received_for": [
"customer@example.com"
],
"attachments": [],
"extracted_text": "example",
"extracted_html": "example",
"inbound_verdict": {
"verdict": "clear",
"reasons": [
"customer@example.com"
]
}
}email.received.held data
| Field | Type | Required | Notes |
|---|---|---|---|
| email_id | string | no | The message this event is about. |
| message_id | any | no | The arriving message's own Message-ID header, or null when it had none. |
| from | string | no | The sender's bare address, from the message's From header. |
| to | array<string> | no | Addresses in the message's To header. |
| subject | string | no | The subject on the message. |
| created_at | string | no | When the message was accepted, in UTC. |
| recipient | any | no | The recipient this event is about, when the event is about one address. Null when the report hid it. |
| tags | object | no | Tags stored on the message. |
| template_id | any | no | The template the message was rendered from, when it used one. |
| template_version | any | no | The template version the message was rendered from, when it used one. |
| scheduled_at | string | no | When a scheduled message will send, in UTC. |
| scan | any | no | Content-scan findings recorded with the queued event, when the scan warned. |
| headers | any | no | Headers stored on the message. |
| recipients | array<string> | no | Addresses this event is about, when it names more than one. |
| response | any | no | The receiving server reply, when one was recorded. |
| reason | string | no | Why the event happened, when the emitter recorded a reason. |
| string | no | The address this event is about, when it names one. | |
| level | string | no | address or domain, on a suppression. |
| origin | string | no | Why the address was suppressed: bounce, complaint, or an account list. |
| code | string | no | A machine token recorded with the event, when there is one. |
| addresses | array<string> | no | Addresses named by this event. |
| simulated | boolean | no | True when every recipient was a simulator address. |
| topic_id | any | no | The subscription topic, when the event is about one. |
| click | any | no | The link, time, address and client, on email.clicked. |
| review_sandbox | boolean | no | True when the event is from the review sandbox. |
| mail_system | string | no | The receiving system that asked for a later try. |
| retry_at | string | no | When a delayed delivery will be tried again, in UTC. |
| provider_message_id | string | no | The mail server id for this message, when one was assigned. |
| refused_recipients | array<object> | no | Recipients the mail server refused at hand-off while it took the others, on email.sent. They were not sent and not charged. |
| url | string | no | The link that was followed, on email.clicked. |
| ip_address | string | no | The client address recorded with a click or open. |
| user_agent | string | no | The client recorded with a click or open. |
| bounce | object | no | Why the message bounced. |
| permanent | boolean | no | Whether a bounce is permanent. |
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The received message. |
| bounce_class | string | no | hard, soft or block: how the bounce was classed, on a bounce or a delay. |
| block_cause | any | no | On a block: sender when the receiver refused the message or its content, infrastructure when it named our sending address or signing. Null on other bounces. |
| bounce_classification | string | no | The receiving side’s own class for the bounce, as reported. |
| diagnostic | any | no | The receiving server reply text, on a bounce. |
| peer_name | string | no | The receiving mail server that answered. |
| site | string | no | The receiving site the message was queued for. |
| queue | string | no | The delivery queue the message was in. |
| egress_pool | string | no | The pool of sending addresses that carried the message. |
| egress_source | string | no | The sending address that carried the message. |
| smtp_response | string | no | The receiving server reply, when the delivery report carried one. |
| attempt | number | no | How many tries have been made, on email.delivery_delayed. |
| complaint_type | string | no | What kind of complaint it was, when known. |
| complaint_feedback_type | any | no | The mailbox provider’s feedback type for the complaint, such as abuse. |
| feedback_type | any | no | The feedback type in the complaint report. |
| source | string | no | Where the complaint came from, such as feedback_loop. |
| reported_by | any | no | The mailbox provider that sent the complaint report. |
| source_ip | any | no | The sending address named in the complaint report. |
| received_at | string | no | When the report reached us, in UTC. |
| via | string | no | How the event was recorded. |
| previous_status | string | no | The message status before this change. |
| bulk | boolean | no | True when this message was canceled together with others. |
| size_bytes | integer | no | Size of the message as received, in bytes. |
| cc | array<string> | no | Addresses in the message's Cc header. |
| bcc | array<string> | no | Always empty: a received message carries no Bcc list. |
| received_for | array<string> | no | The address on your domain this copy was delivered to (the SMTP envelope recipient). |
| attachments | array<object> | no | Attachment metadata. The bytes are read through the received-email API. |
| extracted_text | any | no | The reply with quoted history, signatures and footers removed. Null when extraction produced nothing; read the message for the full text. |
| extracted_html | any | no | The same cut, in HTML. Null when the message had no HTML or extraction produced nothing. |
| inbound_verdict | object | no | The label stored with the message. |
{
"email_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"message_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"from": "billing@yourdomain.com",
"to": [
"customer@example.com"
],
"subject": "Your receipt",
"created_at": "2026-09-04T09:14:00.000Z",
"recipient": "billing@yourdomain.com",
"tags": {},
"template_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"template_version": 1,
"scheduled_at": "2026-09-04T09:14:00.000Z",
"scan": "example",
"headers": [],
"recipients": [
"customer@example.com"
],
"response": "example",
"reason": "example",
"email": "customer@example.com",
"level": "example",
"origin": "example",
"code": "example",
"addresses": [
"customer@example.com"
],
"simulated": false,
"topic_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"click": "example",
"review_sandbox": false,
"mail_system": "example",
"retry_at": "2026-09-04T09:14:00.000Z",
"provider_message_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"refused_recipients": [],
"url": "example",
"ip_address": "example",
"user_agent": "example",
"bounce": {
"type": "Permanent",
"sub_type": "example",
"diagnostic_code": "example"
},
"permanent": false,
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"bounce_class": "example",
"block_cause": "sender",
"bounce_classification": "example",
"diagnostic": "example",
"peer_name": "example",
"site": "example",
"queue": "example",
"egress_pool": "example",
"egress_source": "example",
"smtp_response": "example",
"attempt": 1,
"complaint_type": "example",
"complaint_feedback_type": "example",
"feedback_type": "example",
"source": "example",
"reported_by": "example",
"source_ip": "example",
"received_at": "2026-09-04T09:14:00.000Z",
"via": "example",
"previous_status": "example",
"bulk": false,
"size_bytes": 1,
"cc": [
"customer@example.com"
],
"bcc": [
"customer@example.com"
],
"received_for": [
"customer@example.com"
],
"attachments": [],
"extracted_text": "example",
"extracted_html": "example",
"inbound_verdict": {
"verdict": "clear",
"reasons": [
"customer@example.com"
]
}
}topic.created data
| Field | Type | Required | Notes |
|---|---|---|---|
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
| name | string | no | The name of the topic, segment, or broadcast. |
| string | no | The contact address, when the event names one. | |
| default_subscribed | boolean | no | Whether a new contact starts subscribed to this topic. |
| status | string | no | The status after the change. |
| topic_id | any | no | The topic, when the event is about one. |
| subscribed | boolean | no | Whether the contact is subscribed after the change. |
| via | string | no | How the subscription changed. |
| stream | any | no | The stream an unsubscribe applies to, or absent for every stream. |
| fields | array<string> | no | The contact fields that changed. |
| consent_source | string | no | Where the person opted back in. |
| consent_at | string | no | When the person opted back in, in UTC. |
| rules | any | no | The segment rules at the time of the change. |
| sent | number | no | Messages the broadcast sent. |
| skipped | number | no | Recipients the broadcast skipped. |
| scheduled_at | string | no | When the broadcast will send, in UTC. |
| canceled_from | string | no | The broadcast status before it was canceled. |
| reason | string | no | Why the change happened, when one was recorded. |
| code | string | no | A machine token recorded with the change, when there is one. |
| event_name | string | no | The event that started the automation. |
| fired | any | no | What the automation started for this event. |
{
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"name": "example",
"email": "customer@example.com",
"default_subscribed": false,
"status": "example",
"topic_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"subscribed": false,
"via": "example",
"stream": "example",
"fields": [
"customer@example.com"
],
"consent_source": "example",
"consent_at": "2026-09-04T09:14:00.000Z",
"rules": "example",
"sent": 1,
"skipped": 1,
"scheduled_at": "2026-09-04T09:14:00.000Z",
"canceled_from": "example",
"reason": "example",
"code": "example",
"event_name": "example",
"fired": "example"
}topic.updated data
| Field | Type | Required | Notes |
|---|---|---|---|
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
| name | string | no | The name of the topic, segment, or broadcast. |
| string | no | The contact address, when the event names one. | |
| default_subscribed | boolean | no | Whether a new contact starts subscribed to this topic. |
| status | string | no | The status after the change. |
| topic_id | any | no | The topic, when the event is about one. |
| subscribed | boolean | no | Whether the contact is subscribed after the change. |
| via | string | no | How the subscription changed. |
| stream | any | no | The stream an unsubscribe applies to, or absent for every stream. |
| fields | array<string> | no | The contact fields that changed. |
| consent_source | string | no | Where the person opted back in. |
| consent_at | string | no | When the person opted back in, in UTC. |
| rules | any | no | The segment rules at the time of the change. |
| sent | number | no | Messages the broadcast sent. |
| skipped | number | no | Recipients the broadcast skipped. |
| scheduled_at | string | no | When the broadcast will send, in UTC. |
| canceled_from | string | no | The broadcast status before it was canceled. |
| reason | string | no | Why the change happened, when one was recorded. |
| code | string | no | A machine token recorded with the change, when there is one. |
| event_name | string | no | The event that started the automation. |
| fired | any | no | What the automation started for this event. |
{
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"name": "example",
"email": "customer@example.com",
"default_subscribed": false,
"status": "example",
"topic_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"subscribed": false,
"via": "example",
"stream": "example",
"fields": [
"customer@example.com"
],
"consent_source": "example",
"consent_at": "2026-09-04T09:14:00.000Z",
"rules": "example",
"sent": 1,
"skipped": 1,
"scheduled_at": "2026-09-04T09:14:00.000Z",
"canceled_from": "example",
"reason": "example",
"code": "example",
"event_name": "example",
"fired": "example"
}topic.deleted data
| Field | Type | Required | Notes |
|---|---|---|---|
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
| name | string | no | The name of the topic, segment, or broadcast. |
| string | no | The contact address, when the event names one. | |
| default_subscribed | boolean | no | Whether a new contact starts subscribed to this topic. |
| status | string | no | The status after the change. |
| topic_id | any | no | The topic, when the event is about one. |
| subscribed | boolean | no | Whether the contact is subscribed after the change. |
| via | string | no | How the subscription changed. |
| stream | any | no | The stream an unsubscribe applies to, or absent for every stream. |
| fields | array<string> | no | The contact fields that changed. |
| consent_source | string | no | Where the person opted back in. |
| consent_at | string | no | When the person opted back in, in UTC. |
| rules | any | no | The segment rules at the time of the change. |
| sent | number | no | Messages the broadcast sent. |
| skipped | number | no | Recipients the broadcast skipped. |
| scheduled_at | string | no | When the broadcast will send, in UTC. |
| canceled_from | string | no | The broadcast status before it was canceled. |
| reason | string | no | Why the change happened, when one was recorded. |
| code | string | no | A machine token recorded with the change, when there is one. |
| event_name | string | no | The event that started the automation. |
| fired | any | no | What the automation started for this event. |
{
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"name": "example",
"email": "customer@example.com",
"default_subscribed": false,
"status": "example",
"topic_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"subscribed": false,
"via": "example",
"stream": "example",
"fields": [
"customer@example.com"
],
"consent_source": "example",
"consent_at": "2026-09-04T09:14:00.000Z",
"rules": "example",
"sent": 1,
"skipped": 1,
"scheduled_at": "2026-09-04T09:14:00.000Z",
"canceled_from": "example",
"reason": "example",
"code": "example",
"event_name": "example",
"fired": "example"
}contact.subscribed data
| Field | Type | Required | Notes |
|---|---|---|---|
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
| name | string | no | The name of the topic, segment, or broadcast. |
| string | no | The contact address, when the event names one. | |
| default_subscribed | boolean | no | Whether a new contact starts subscribed to this topic. |
| status | string | no | The status after the change. |
| topic_id | any | no | The topic, when the event is about one. |
| subscribed | boolean | no | Whether the contact is subscribed after the change. |
| via | string | no | How the subscription changed. |
| stream | any | no | The stream an unsubscribe applies to, or absent for every stream. |
| fields | array<string> | no | The contact fields that changed. |
| consent_source | string | no | Where the person opted back in. |
| consent_at | string | no | When the person opted back in, in UTC. |
| rules | any | no | The segment rules at the time of the change. |
| sent | number | no | Messages the broadcast sent. |
| skipped | number | no | Recipients the broadcast skipped. |
| scheduled_at | string | no | When the broadcast will send, in UTC. |
| canceled_from | string | no | The broadcast status before it was canceled. |
| reason | string | no | Why the change happened, when one was recorded. |
| code | string | no | A machine token recorded with the change, when there is one. |
| event_name | string | no | The event that started the automation. |
| fired | any | no | What the automation started for this event. |
{
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"name": "example",
"email": "customer@example.com",
"default_subscribed": false,
"status": "example",
"topic_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"subscribed": false,
"via": "example",
"stream": "example",
"fields": [
"customer@example.com"
],
"consent_source": "example",
"consent_at": "2026-09-04T09:14:00.000Z",
"rules": "example",
"sent": 1,
"skipped": 1,
"scheduled_at": "2026-09-04T09:14:00.000Z",
"canceled_from": "example",
"reason": "example",
"code": "example",
"event_name": "example",
"fired": "example"
}contact.unsubscribed data
| Field | Type | Required | Notes |
|---|---|---|---|
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The resource this event is about. |
| name | string | no | The name of the topic, segment, or broadcast. |
| string | no | The contact address, when the event names one. | |
| default_subscribed | boolean | no | Whether a new contact starts subscribed to this topic. |
| status | string | no | The status after the change. |
| topic_id | any | no | The topic, when the event is about one. |
| subscribed | boolean | no | Whether the contact is subscribed after the change. |
| via | string | no | How the subscription changed. |
| stream | any | no | The stream an unsubscribe applies to, or absent for every stream. |
| fields | array<string> | no | The contact fields that changed. |
| consent_source | string | no | Where the person opted back in. |
| consent_at | string | no | When the person opted back in, in UTC. |
| rules | any | no | The segment rules at the time of the change. |
| sent | number | no | Messages the broadcast sent. |
| skipped | number | no | Recipients the broadcast skipped. |
| scheduled_at | string | no | When the broadcast will send, in UTC. |
| canceled_from | string | no | The broadcast status before it was canceled. |
| reason | string | no | Why the change happened, when one was recorded. |
| code | string | no | A machine token recorded with the change, when there is one. |
| event_name | string | no | The event that started the automation. |
| fired | any | no | What the automation started for this event. |
{
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"name": "example",
"email": "customer@example.com",
"default_subscribed": false,
"status": "example",
"topic_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"subscribed": false,
"via": "example",
"stream": "example",
"fields": [
"customer@example.com"
],
"consent_source": "example",
"consent_at": "2026-09-04T09:14:00.000Z",
"rules": "example",
"sent": 1,
"skipped": 1,
"scheduled_at": "2026-09-04T09:14:00.000Z",
"canceled_from": "example",
"reason": "example",
"code": "example",
"event_name": "example",
"fired": "example"
}Trust
- trust.warning
- The account’s bounce or complaint rate over 7 days crosses the warning line, or AgentiSend staff set the account to warning or decide its appeal while it is there.
- data
resource_typeresource_id - trust.throttled
- AgentiSend staff set the account to throttled (10 sends a minute) or decide its appeal while it is there; the automatic ladder never moves an account here.
- data
resource_typeresource_id - trust.paused
- The account’s bounce or complaint rate over 7 days crosses the pause line, AgentiSend staff pause the account, or an appeal is decided and the account stays paused.
- data
resource_typeresource_id - trust.appealed
- The account files an appeal against its standing; sla_deadline_at is the deadline for a person’s answer, 24 hours after filing.
- data
resource_typeresource_idreason_lengthsla_deadline_at - trust.restored
- The account moves to a less restricted standing, because its rates recovered or AgentiSend staff restored, resumed or approved it.
- data
resource_typeresource_id
trust.warning data
| Field | Type | Required | Notes |
|---|---|---|---|
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The account this event is about. |
| reason | string | no | Why this event was recorded, when the emitter named one. |
| stream | any | no | The stream the standing is measured on. |
| metric | any | no | bounce or complaint: the rate that crossed a threshold. |
| value | any | no | The measured rate, as a fraction. |
| threshold | any | no | The threshold it crossed, as a fraction. |
| window_days | number | no | How many days the rates are measured over. |
| sent | number | no | Messages sent in that window. |
| previous_state | string | no | The standing before this change. |
| reason_length | number | no | Length of the appeal text, in characters. |
| sla_deadline_at | string | no | When a person must answer the appeal, in UTC. |
| state | string | no | The standing after this change. |
| status | string | no | The account status after a pause, resume or approval. |
| manual | boolean | no | True when AgentiSend staff set the standing by hand. |
| domain | string | no | The sending domain this standing change is about. Absent when it covers the whole account. |
| probation | boolean | no | True when a pause moved to a capped warning on its own. |
| decision | string | no | What a person decided on the appeal. |
| appeal_id | string | no | The appeal this decision answers. |
{
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"reason": "example",
"stream": "example",
"metric": "example",
"value": 1,
"threshold": 1,
"window_days": 1,
"sent": 1,
"previous_state": "example",
"reason_length": 1,
"sla_deadline_at": "2026-09-04T09:14:00.000Z",
"state": "example",
"status": "example",
"manual": false,
"domain": "example",
"probation": false,
"decision": "example",
"appeal_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42"
}trust.throttled data
| Field | Type | Required | Notes |
|---|---|---|---|
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The account this event is about. |
| reason | string | no | Why this event was recorded, when the emitter named one. |
| stream | any | no | The stream the standing is measured on. |
| metric | any | no | bounce or complaint: the rate that crossed a threshold. |
| value | any | no | The measured rate, as a fraction. |
| threshold | any | no | The threshold it crossed, as a fraction. |
| window_days | number | no | How many days the rates are measured over. |
| sent | number | no | Messages sent in that window. |
| previous_state | string | no | The standing before this change. |
| reason_length | number | no | Length of the appeal text, in characters. |
| sla_deadline_at | string | no | When a person must answer the appeal, in UTC. |
| state | string | no | The standing after this change. |
| status | string | no | The account status after a pause, resume or approval. |
| manual | boolean | no | True when AgentiSend staff set the standing by hand. |
| domain | string | no | The sending domain this standing change is about. Absent when it covers the whole account. |
| probation | boolean | no | True when a pause moved to a capped warning on its own. |
| decision | string | no | What a person decided on the appeal. |
| appeal_id | string | no | The appeal this decision answers. |
{
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"reason": "example",
"stream": "example",
"metric": "example",
"value": 1,
"threshold": 1,
"window_days": 1,
"sent": 1,
"previous_state": "example",
"reason_length": 1,
"sla_deadline_at": "2026-09-04T09:14:00.000Z",
"state": "example",
"status": "example",
"manual": false,
"domain": "example",
"probation": false,
"decision": "example",
"appeal_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42"
}trust.paused data
| Field | Type | Required | Notes |
|---|---|---|---|
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The account this event is about. |
| reason | string | no | Why this event was recorded, when the emitter named one. |
| stream | any | no | The stream the standing is measured on. |
| metric | any | no | bounce or complaint: the rate that crossed a threshold. |
| value | any | no | The measured rate, as a fraction. |
| threshold | any | no | The threshold it crossed, as a fraction. |
| window_days | number | no | How many days the rates are measured over. |
| sent | number | no | Messages sent in that window. |
| previous_state | string | no | The standing before this change. |
| reason_length | number | no | Length of the appeal text, in characters. |
| sla_deadline_at | string | no | When a person must answer the appeal, in UTC. |
| state | string | no | The standing after this change. |
| status | string | no | The account status after a pause, resume or approval. |
| manual | boolean | no | True when AgentiSend staff set the standing by hand. |
| domain | string | no | The sending domain this standing change is about. Absent when it covers the whole account. |
| probation | boolean | no | True when a pause moved to a capped warning on its own. |
| decision | string | no | What a person decided on the appeal. |
| appeal_id | string | no | The appeal this decision answers. |
{
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"reason": "example",
"stream": "example",
"metric": "example",
"value": 1,
"threshold": 1,
"window_days": 1,
"sent": 1,
"previous_state": "example",
"reason_length": 1,
"sla_deadline_at": "2026-09-04T09:14:00.000Z",
"state": "example",
"status": "example",
"manual": false,
"domain": "example",
"probation": false,
"decision": "example",
"appeal_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42"
}trust.appealed data
| Field | Type | Required | Notes |
|---|---|---|---|
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The account this event is about. |
| reason | string | no | Why this event was recorded, when the emitter named one. |
| stream | any | no | The stream the standing is measured on. |
| metric | any | no | bounce or complaint: the rate that crossed a threshold. |
| value | any | no | The measured rate, as a fraction. |
| threshold | any | no | The threshold it crossed, as a fraction. |
| window_days | number | no | How many days the rates are measured over. |
| sent | number | no | Messages sent in that window. |
| previous_state | string | no | The standing before this change. |
| reason_length | number | no | Length of the appeal text, in characters. |
| sla_deadline_at | string | no | When a person must answer the appeal, in UTC. |
| state | string | no | The standing after this change. |
| status | string | no | The account status after a pause, resume or approval. |
| manual | boolean | no | True when AgentiSend staff set the standing by hand. |
| domain | string | no | The sending domain this standing change is about. Absent when it covers the whole account. |
| probation | boolean | no | True when a pause moved to a capped warning on its own. |
| decision | string | no | What a person decided on the appeal. |
| appeal_id | string | no | The appeal this decision answers. |
{
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"reason": "example",
"stream": "example",
"metric": "example",
"value": 1,
"threshold": 1,
"window_days": 1,
"sent": 1,
"previous_state": "example",
"reason_length": 1,
"sla_deadline_at": "2026-09-04T09:14:00.000Z",
"state": "example",
"status": "example",
"manual": false,
"domain": "example",
"probation": false,
"decision": "example",
"appeal_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42"
}trust.restored data
| Field | Type | Required | Notes |
|---|---|---|---|
| resource_type | string | no | What resource_id points at. |
| resource_id | string | no | The account this event is about. |
| reason | string | no | Why this event was recorded, when the emitter named one. |
| stream | any | no | The stream the standing is measured on. |
| metric | any | no | bounce or complaint: the rate that crossed a threshold. |
| value | any | no | The measured rate, as a fraction. |
| threshold | any | no | The threshold it crossed, as a fraction. |
| window_days | number | no | How many days the rates are measured over. |
| sent | number | no | Messages sent in that window. |
| previous_state | string | no | The standing before this change. |
| reason_length | number | no | Length of the appeal text, in characters. |
| sla_deadline_at | string | no | When a person must answer the appeal, in UTC. |
| state | string | no | The standing after this change. |
| status | string | no | The account status after a pause, resume or approval. |
| manual | boolean | no | True when AgentiSend staff set the standing by hand. |
| domain | string | no | The sending domain this standing change is about. Absent when it covers the whole account. |
| probation | boolean | no | True when a pause moved to a capped warning on its own. |
| decision | string | no | What a person decided on the appeal. |
| appeal_id | string | no | The appeal this decision answers. |
{
"resource_type": "example",
"resource_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
"reason": "example",
"stream": "example",
"metric": "example",
"value": 1,
"threshold": 1,
"window_days": 1,
"sent": 1,
"previous_state": "example",
"reason_length": 1,
"sla_deadline_at": "2026-09-04T09:14:00.000Z",
"state": "example",
"status": "example",
"manual": false,
"domain": "example",
"probation": false,
"decision": "example",
"appeal_id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42"
}