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.
eventIdstringrequireduuid
eventType"contact.created"requiredoccurredAtstringrequireddate-time
dataobjectrequired3 child attributes
contactIdstringrequireduuid
emailstring | nullrequiredexternalIdstring | nullrequired
{
"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.
eventIdstringrequireduuid
eventType"contact.unsubscribed"requiredoccurredAtstringrequireddate-time
dataobjectrequired5 child attributes
contactIdstringrequireduuid
channel"email"requiredmessageIdstring | nullrequireduuid
campaignIdstring | nullrequireduuid
topicIdstring | nullrequireduuid
{
"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
}
}contact.consent_changed
Consent was granted or withdrawn, with where it came from: on a channel, or on one topic (topicId, and channel null).
eventIdstringrequireduuid
eventType"contact.consent_changed"requiredoccurredAtstringrequireddate-time
dataobjectrequired5 child attributes
contactIdstringrequireduuid
channelstring | nullrequiredone of
email,pushtopicIdstring | nullrequireduuid
grantedbooleanrequiredsourcestringrequiredone of
dashboard,api,import,form,unsubscribe,system,sdk
{
"eventId": "01a0f2cf-4444-7555-8666-777788889999",
"eventType": "contact.consent_changed",
"occurredAt": "2026-09-30T09:00:00.000Z",
"data": {
"contactId": "01a0f2c4-5b6d-7e8f-9a0b-1c2d3e4f5a6b",
"channel": "email",
"topicId": null,
"granted": true,
"source": "form"
}
}form.submitted
A hosted form was submitted.
eventIdstringrequireduuid
eventType"form.submitted"requiredoccurredAtstringrequireddate-time
dataobjectrequired5 child attributes
eventIdstringrequireduuid
contactIdstringrequireduuid
formIdstringrequireduuid
outcomestringrequiredone of
created,updated,honeypot,pendingsourcestringrequired
{
"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.
eventIdstringrequireduuid
eventType"campaign.sent"requiredoccurredAtstringrequireddate-time
dataobjectrequired2 child attributes
campaignIdstringrequireduuid
namestringrequired
{
"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.
eventIdstringrequireduuid
eventType"journey.enrolled"requiredoccurredAtstringrequireddate-time
dataobjectrequired3 child attributes
journeyIdstringrequireduuid
contactIdstringrequireduuid
triggerEventIdstringrequireduuid
{
"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.
eventIdstringrequireduuid
eventType"message.delivered"requiredoccurredAtstringrequireddate-time
dataobjectrequired6 child attributes
messageIdstringrequireduuid
contactIdstringrequireduuid
channelstringrequiredone of
email,pushmessageTypestringrequiredone of
marketing,transactionalcorrelationIdstring | nullrequiredproviderMessageIdstringrequired
{
"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.
eventIdstringrequireduuid
eventType"message.bounced"requiredoccurredAtstringrequireddate-time
dataobjectrequired7 child attributes
messageIdstringrequireduuid
contactIdstringrequireduuid
channelstringrequiredone of
email,pushmessageTypestringrequiredone of
marketing,transactionalcorrelationIdstring | nullrequiredproviderMessageIdstringrequiredreasonstring | nullrequired
{
"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.
eventIdstringrequireduuid
eventType"message.complained"requiredoccurredAtstringrequireddate-time
dataobjectrequired6 child attributes
messageIdstringrequireduuid
contactIdstringrequireduuid
channelstringrequiredone of
email,pushmessageTypestringrequiredone of
marketing,transactionalcorrelationIdstring | nullrequiredproviderMessageIdstringrequired
{
"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).
eventIdstringrequireduuid
eventType"message.opened"requiredoccurredAtstringrequireddate-time
dataobjectrequired5 child attributes
messageIdstringrequireduuid
contactIdstringrequireduuid
channelstringrequiredone of
email,pushmessageTypestringrequiredone of
marketing,transactionalcorrelationIdstring | nullrequired
{
"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.
eventIdstringrequireduuid
eventType"message.clicked"requiredoccurredAtstringrequireddate-time
dataobjectrequired6 child attributes
messageIdstringrequireduuid
contactIdstringrequireduuid
channelstringrequiredone of
email,pushmessageTypestringrequiredone of
marketing,transactionalcorrelationIdstring | nullrequiredurlstring | nullrequired
{
"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.
eventIdstringrequireduuid
eventType"message.failed"requiredoccurredAtstringrequireddate-time
dataobjectrequired6 child attributes
messageIdstringrequireduuid
contactIdstringrequireduuid
channelstringrequiredone of
email,pushmessageTypestringrequiredone of
marketing,transactionalcorrelationIdstring | nullrequiredfailureReasonstring | nullrequired
{
"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.
eventIdstringrequireduuid
eventType"message.skipped"requiredoccurredAtstringrequireddate-time
dataobjectrequired6 child attributes
messageIdstringrequireduuid
contactIdstringrequireduuid
channelstringrequiredone of
email,pushmessageTypestringrequiredone of
marketing,transactionalcorrelationIdstring | nullrequiredfailureReasonstring | nullrequired
{
"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.
eventIdstringrequireduuid
eventType"message.sent"requiredoccurredAtstringrequireddate-time
dataobjectrequired6 child attributes
messageIdstringrequireduuid
contactIdstringrequireduuid
channelstringrequiredone of
email,pushmessageTypestringrequiredone of
marketing,transactionalcorrelationIdstring | nullrequiredproviderMessageIdstring | nullrequired
{
"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"
}
}