Menu

API reference

Webhook events

Keep your systems updated with 14 event types. Subscribe an HTTPS endpoint to the events you need. Deliveries are signed, with retries on failure; thewebhooks guide shows how to verify the signature.

contact.created

A contact is created, by any route.

eventIdstringrequired

uuid

eventType"contact.created"required
occurredAtstringrequired

date-time

dataobjectrequired
3 child attributes
contactIdstringrequired

uuid

emailstring | nullrequired
externalIdstring | nullrequired
Example payload
{
  "eventId": "01a0f2cf-4444-7555-8666-777788889999",
  "eventType": "contact.created",
  "occurredAt": "2026-09-30T09:00:00.000Z",
  "data": {
    "contactId": "01a0f2c4-5b6d-7e8f-9a0b-1c2d3e4f5a6b",
    "email": "ada@example.com",
    "externalId": "customer-1042"
  }
}

contact.unsubscribed

A recipient opted out through an email's link. messageId and campaignId are set when the link names them; topicId when they left only that topic, their email consent then unchanged.

eventIdstringrequired

uuid

eventType"contact.unsubscribed"required
occurredAtstringrequired

date-time

dataobjectrequired
5 child attributes
contactIdstringrequired

uuid

channel"email"required
messageIdstring | nullrequired

uuid

campaignIdstring | nullrequired

uuid

topicIdstring | nullrequired

uuid

Example payload
{
  "eventId": "01a0f2cf-4444-7555-8666-777788889999",
  "eventType": "contact.unsubscribed",
  "occurredAt": "2026-09-30T09:00:00.000Z",
  "data": {
    "contactId": "01a0f2c4-5b6d-7e8f-9a0b-1c2d3e4f5a6b",
    "channel": "email",
    "messageId": "01a0f2c9-1111-7222-8333-444455556666",
    "campaignId": "01a0f2c8-aaaa-7bbb-8ccc-ddddeeeeffff",
    "topicId": null
  }
}

form.submitted

A hosted form was submitted.

eventIdstringrequired

uuid

eventType"form.submitted"required
occurredAtstringrequired

date-time

dataobjectrequired
5 child attributes
eventIdstringrequired

uuid

contactIdstringrequired

uuid

formIdstringrequired

uuid

outcomestringrequired

one of created, updated, honeypot, pending

sourcestringrequired
Example payload
{
  "eventId": "01a0f2cf-4444-7555-8666-777788889999",
  "eventType": "form.submitted",
  "occurredAt": "2026-09-30T09:00:00.000Z",
  "data": {
    "eventId": "01a0f2ca-0000-7111-8222-333344445555",
    "contactId": "01a0f2c4-5b6d-7e8f-9a0b-1c2d3e4f5a6b",
    "formId": "01a0f2cb-6666-7777-8888-999900001111",
    "outcome": "created",
    "source": "form"
  }
}

campaign.sent

A campaign finished queueing its messages.

eventIdstringrequired

uuid

eventType"campaign.sent"required
occurredAtstringrequired

date-time

dataobjectrequired
2 child attributes
campaignIdstringrequired

uuid

namestringrequired
Example payload
{
  "eventId": "01a0f2cf-4444-7555-8666-777788889999",
  "eventType": "campaign.sent",
  "occurredAt": "2026-09-30T09:00:00.000Z",
  "data": {
    "campaignId": "01a0f2c8-aaaa-7bbb-8ccc-ddddeeeeffff",
    "name": "October sale"
  }
}

journey.enrolled

A contact entered a journey.

eventIdstringrequired

uuid

eventType"journey.enrolled"required
occurredAtstringrequired

date-time

dataobjectrequired
3 child attributes
journeyIdstringrequired

uuid

contactIdstringrequired

uuid

triggerEventIdstringrequired

uuid

Example payload
{
  "eventId": "01a0f2cf-4444-7555-8666-777788889999",
  "eventType": "journey.enrolled",
  "occurredAt": "2026-09-30T09:00:00.000Z",
  "data": {
    "journeyId": "01a0f2cc-2222-7333-8444-555566667777",
    "contactId": "01a0f2c4-5b6d-7e8f-9a0b-1c2d3e4f5a6b",
    "triggerEventId": "01a0f2ca-0000-7111-8222-333344445555"
  }
}

message.delivered

The provider confirmed delivery.

eventIdstringrequired

uuid

eventType"message.delivered"required
occurredAtstringrequired

date-time

dataobjectrequired
6 child attributes
messageIdstringrequired

uuid

contactIdstringrequired

uuid

channelstringrequired

one of email, push

messageTypestringrequired

one of marketing, transactional

correlationIdstring | nullrequired
providerMessageIdstringrequired
Example payload
{
  "eventId": "01a0f2cf-4444-7555-8666-777788889999",
  "eventType": "message.delivered",
  "occurredAt": "2026-09-30T09:00:00.000Z",
  "data": {
    "messageId": "01a0f2c9-1111-7222-8333-444455556666",
    "contactId": "01a0f2c4-5b6d-7e8f-9a0b-1c2d3e4f5a6b",
    "channel": "email",
    "messageType": "transactional",
    "correlationId": "order-1042",
    "providerMessageId": "0100019290c1a2b3-example-000000"
  }
}

message.bounced

Delivery failed permanently (a hard bounce); the address is now suppressed. reason is the provider's subtype, such as no_email, mailbox_full or general. A soft bounce is message.failed with failureReason transient_bounce.

eventIdstringrequired

uuid

eventType"message.bounced"required
occurredAtstringrequired

date-time

dataobjectrequired
7 child attributes
messageIdstringrequired

uuid

contactIdstringrequired

uuid

channelstringrequired

one of email, push

messageTypestringrequired

one of marketing, transactional

correlationIdstring | nullrequired
providerMessageIdstringrequired
reasonstring | nullrequired
Example payload
{
  "eventId": "01a0f2cf-4444-7555-8666-777788889999",
  "eventType": "message.bounced",
  "occurredAt": "2026-09-30T09:00:00.000Z",
  "data": {
    "messageId": "01a0f2c9-1111-7222-8333-444455556666",
    "contactId": "01a0f2c4-5b6d-7e8f-9a0b-1c2d3e4f5a6b",
    "channel": "email",
    "messageType": "transactional",
    "correlationId": "order-1042",
    "providerMessageId": "0100019290c1a2b3-example-000000",
    "reason": "no_email"
  }
}

message.complained

The recipient marked it as spam; the address is now suppressed.

eventIdstringrequired

uuid

eventType"message.complained"required
occurredAtstringrequired

date-time

dataobjectrequired
6 child attributes
messageIdstringrequired

uuid

contactIdstringrequired

uuid

channelstringrequired

one of email, push

messageTypestringrequired

one of marketing, transactional

correlationIdstring | nullrequired
providerMessageIdstringrequired
Example payload
{
  "eventId": "01a0f2cf-4444-7555-8666-777788889999",
  "eventType": "message.complained",
  "occurredAt": "2026-09-30T09:00:00.000Z",
  "data": {
    "messageId": "01a0f2c9-1111-7222-8333-444455556666",
    "contactId": "01a0f2c4-5b6d-7e8f-9a0b-1c2d3e4f5a6b",
    "channel": "email",
    "messageType": "transactional",
    "correlationId": "order-1042",
    "providerMessageId": "0100019290c1a2b3-example-000000"
  }
}

message.opened

The recipient opened it (first open only).

eventIdstringrequired

uuid

eventType"message.opened"required
occurredAtstringrequired

date-time

dataobjectrequired
5 child attributes
messageIdstringrequired

uuid

contactIdstringrequired

uuid

channelstringrequired

one of email, push

messageTypestringrequired

one of marketing, transactional

correlationIdstring | nullrequired
Example payload
{
  "eventId": "01a0f2cf-4444-7555-8666-777788889999",
  "eventType": "message.opened",
  "occurredAt": "2026-09-30T09:00:00.000Z",
  "data": {
    "messageId": "01a0f2c9-1111-7222-8333-444455556666",
    "contactId": "01a0f2c4-5b6d-7e8f-9a0b-1c2d3e4f5a6b",
    "channel": "email",
    "messageType": "transactional",
    "correlationId": "order-1042"
  }
}

message.clicked

The recipient clicked (first click only). url is the email link followed; null for a push tap.

eventIdstringrequired

uuid

eventType"message.clicked"required
occurredAtstringrequired

date-time

dataobjectrequired
6 child attributes
messageIdstringrequired

uuid

contactIdstringrequired

uuid

channelstringrequired

one of email, push

messageTypestringrequired

one of marketing, transactional

correlationIdstring | nullrequired
urlstring | nullrequired
Example payload
{
  "eventId": "01a0f2cf-4444-7555-8666-777788889999",
  "eventType": "message.clicked",
  "occurredAt": "2026-09-30T09:00:00.000Z",
  "data": {
    "messageId": "01a0f2c9-1111-7222-8333-444455556666",
    "contactId": "01a0f2c4-5b6d-7e8f-9a0b-1c2d3e4f5a6b",
    "channel": "email",
    "messageType": "transactional",
    "correlationId": "order-1042",
    "url": "https://example.com/orders/1042"
  }
}

message.failed

Sending broke and will not be retried: the provider rejected it, or its outcome is unknown.

eventIdstringrequired

uuid

eventType"message.failed"required
occurredAtstringrequired

date-time

dataobjectrequired
6 child attributes
messageIdstringrequired

uuid

contactIdstringrequired

uuid

channelstringrequired

one of email, push

messageTypestringrequired

one of marketing, transactional

correlationIdstring | nullrequired
failureReasonstring | nullrequired
Example payload
{
  "eventId": "01a0f2cf-4444-7555-8666-777788889999",
  "eventType": "message.failed",
  "occurredAt": "2026-09-30T09:00:00.000Z",
  "data": {
    "messageId": "01a0f2c9-1111-7222-8333-444455556666",
    "contactId": "01a0f2c4-5b6d-7e8f-9a0b-1c2d3e4f5a6b",
    "channel": "email",
    "messageType": "transactional",
    "correlationId": "order-1042",
    "failureReason": "provider_exhausted"
  }
}

message.skipped

A guard stopped it before sending: no consent, a suppressed address, no device, a message limit, or a suspended workspace.

eventIdstringrequired

uuid

eventType"message.skipped"required
occurredAtstringrequired

date-time

dataobjectrequired
6 child attributes
messageIdstringrequired

uuid

contactIdstringrequired

uuid

channelstringrequired

one of email, push

messageTypestringrequired

one of marketing, transactional

correlationIdstring | nullrequired
failureReasonstring | nullrequired
Example payload
{
  "eventId": "01a0f2cf-4444-7555-8666-777788889999",
  "eventType": "message.skipped",
  "occurredAt": "2026-09-30T09:00:00.000Z",
  "data": {
    "messageId": "01a0f2c9-1111-7222-8333-444455556666",
    "contactId": "01a0f2c4-5b6d-7e8f-9a0b-1c2d3e4f5a6b",
    "channel": "email",
    "messageType": "transactional",
    "correlationId": "order-1042",
    "failureReason": "suppressed"
  }
}

message.sent

The message was handed to the email provider or the push service, for every kind of message (messageType says which). providerMessageId is the email provider's id; null for push.

eventIdstringrequired

uuid

eventType"message.sent"required
occurredAtstringrequired

date-time

dataobjectrequired
6 child attributes
messageIdstringrequired

uuid

contactIdstringrequired

uuid

channelstringrequired

one of email, push

messageTypestringrequired

one of marketing, transactional

correlationIdstring | nullrequired
providerMessageIdstring | nullrequired
Example payload
{
  "eventId": "01a0f2cf-4444-7555-8666-777788889999",
  "eventType": "message.sent",
  "occurredAt": "2026-09-30T09:00:00.000Z",
  "data": {
    "messageId": "01a0f2c9-1111-7222-8333-444455556666",
    "contactId": "01a0f2c4-5b6d-7e8f-9a0b-1c2d3e4f5a6b",
    "channel": "email",
    "messageType": "transactional",
    "correlationId": "order-1042",
    "providerMessageId": "0100019290c1a2b3-example-000000"
  }
}