Export events

🚫

You must be on our CXDP account package to access this feature.


📢

Public preview

This feature is in Public preview and should be considered a beta feature. It may be subject to service disruption and short notice changes or improvements.



How it works

The Events API allows you to define up to five subscriptions that specify which events you would like capturing for retrieval to facilitate data synchronization with one or more systems.

Once subscriptions are made active, we start capturing and storing the specified events, so that you can then retrieve these events by calling the Retrieve events call on a regular basis to sync the captured events to your platform(s).

🚫

We can't sync historic events

We can only capture events that occur after a subscription is made active. It might take up to 5 minutes before we start capturing events.


Subscriptions

To get started, you must register a subscription using the Create subscription call. Each subscription must have a unique name and by default is created as inactive unless you specify otherwise.

ℹ️

There is a limit of 5 subscriptions per account.

Event subscriptions

You must specify which event types you want to capture for the subscription, and use optional filters to narrow these events down further.

🚧

Only subscribe to what you need

To minimize processing overhead, ensure that you only subscribe to those events you require, and, where possible, further refine the selection using filters.

Subscription status

The status of a subscription is returned and set using the status field. The field can have the following values and subsequent effects on the subscription:

Status valueEffect
inactiveEvents are not captured for this subscription whilst inactive; this can result in data loss.
activeEvents are captured; might take up to 5 minutes for capture to start after setting this status.

❗️

We suspend inactive subscriptions after 30 days

We monitor the calls to Retrieve events for each subscription to establish if they are still being used or not. If we don't see any calls to Retrieve events for a subscription within 30 days then we automatically set the status to inactive for that subscription.

This means events capture stops and data loss will likely occur.

Event filters

When subscribing to events, you should use filters to further refine what events are captured for your subscription.

You can add up to five filters per event.

Filters are comprised of:

  • field, which is a JSON path to the field you want to match the value for, where $. is the eventData field in the event.

  • matchPattern, the literal value or pattern to match against the value of the field. You use the following syntax to define the match pattern:

    * matches any number of any characters including none, ? matches any single character, [abc] matches one character given in the brackets, [a-z] matches one character from the range given in the brackets. [!abc] matches one character that is not given in the brackets. [!a-z] matches one character that is not from the range given in the brackets.

🚧

Filters use the Unicode character set and ranges must be from lower to higher code points to be valid. For example, [a-z] is valid but [z-a] is invalid.

All filters must match (logical AND) for the event to be captured.

If you want to match the same event type on multiple different sets of filters (logical OR) then add the event type multiple times to the subscription with differing filters.

Examples using filters:

{
  "status": "active",
  "subscribedEventTypes": [
    {
      "filters": [
        {
          "caseSensitive": false,
          "field": "$.status",
          "matchPattern": "read"
        },
        {
          "caseSensitive": true,
          "field": "$.campaignDetails.name",
          "matchPattern": "new_customer*"
        }
      ],
      "eventType": "message.status"
    }
  ],
  "alertsConfiguration": {
    "alertChannels": "none"
  },
  "name": "SMS and email"
}
{
  "status": "active",
  "subscribedEventTypes": [
    {
      "filters": [
        {
          "caseSensitive": false,
          "field": "$.channel",
          "matchPattern": "sms"
        }
      ],
      "eventType": "message.sent"
    },
    {
      "filters": [
        {
          "caseSensitive": false,
          "field": "$.channel",
          "matchPattern": "email"
        }
      ],
      "eventType": "message.sent"
    }
  ],
  "alertsConfiguration": {
    "alertChannels": "none"
  },
  "name": "SMS and email"
}

Retrieve events

You must periodically call Retrieve events for each active subscription.

The system uses checkpoints to track when events have been synced.

  1. For a subscription, first call Retrieve events without the checkPoint parameter. This retrieves the earliest events captured for the subscription and returns a checkPoint which you must store.
  2. Store the retrieved events for processing later.
  3. On subsequent calls to Retrieve events, you must pass the previous checkPoint value so we know to retrieve events since the last successful call.

If we return no events in the events array then you have received all the currently queued events. Store the checkPoint and back off for a period of time. Use the stored checkPoint next time you want to sync to resume from where you left off.

Retrieving files and other large content

Our events are limited to 900KB in size to ensure they remain a manageable size for processing and handling.

If the content of a field, such as an attached file or a large message, can exceed this limit then instead of passing the data in the event itself we pass a LOB ID (Large OBject Identifier). This LOB ID can be used with the Retrieve large object call to retrieve the actual data.


Events

Event families

The following families of events exist:

The event envelope

Each event is placed in a standardized envelope to provide common attributes such as ID, type, account, and event date.

Envelope schema:

FieldTypeRequiredDescription
idstringYesUnique identifier for the event.
accountIdintegerYesDotdigital account ID.
processedDatestringYesDate-time when the event was processed by the Events API.
In ISO 8601 format based on UTC.
eventDatestringYesDate-time when the event occurred.
In ISO 8601 format based on UTC.
typestringYesThe type of event contained in the data field.
dataobjectYesThe events data as a object.
{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "contact.created",
  "data": {
    EVENT DATA HERE    
  }
}
{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "contact.created",
  "data": {
    "contactId": 321332,
    "identifiers": {
      "email": "[email protected]",
      "mobileNumber": "447123123123",
      "customId1": "1234dcf"
    },
    "channelProperties": {
      "email": {
        "emailType": "Html",
        "optInType": "Double",
        "status": "notSubscribed"
      },
      "sms/mms/rcs": {
        "countryCode": "GB",
        "status": "notSubscribed"
      },
      "whatsApp": {
        "status": "notSubscribed"
      }
    },
    "dataFields": {
      "firstName": "John",
      "lastName": "Doe",
      "gender": "male",
      "brandFan": true,
      "age": 21,
      "lastPurchasedDate": null
    }
  }
}

Contact events

Contact events inform you about all activity relating to contacts within Dotdigital. This includes creations, updates, deletions, channel status updates, preference updates, and consent.

contact.created

Triggered when a new contact is created/added to the account.

  • All identifiers are sent to allow correlation.
  • All data fields are included.
  • All channel properties are included.
  • null values are sent for fields that have no value.

Event data fields

These are the fields in the data field of the event envelope.

FieldRequiredData typeDescription
contactIdYesintegerThe immutable identifier for the contact.
identifiersYesobjectAny identifiers for the contact. We include the standard identifiers email and mobileNumber as well as any defined custom IDs. If an identifier is not set then a null is returned.
channelPropertiesYesobject, see below:Current channel statuses.
  • email
Noobject, see below:Email channel properties.
    º optInTypeYesstring, enum:
  • unknown
  • single
  • double
  • verifiedDouble
Channel opt-in type for the contact.
    º statusYesstring, enum:
  • subscribed
  • unsubscribed
  • softBounced
  • hardBounced
  • ispComplained
  • pendingOptIn
  • directComplaint
  • spamTrap
  • deleted
  • blockedlocalpart
  • sharedsuppression
  • sharedDomainSuppression
  • suppressed
  • binned
  • domainSuppressed
Current marketing status of the channel for the contact.
  • sms/mms/rcs
Noobject, see below:SMS channel properties.
    º countryCodeYesstringISO 3166-1 alpha-2 country code for the contact's mobileNumber.
    º statusYesstring, enum:
  • subscribed
  • unsubscribed
  • softBounced
  • hardBounced
  • deleted
  • suppressed
  • binned
Current marketing status of the channel for the contact.
  • whatsApp
Noobject, see below:WhatsApp channel properties.
    º statusYesstring, enum:
  • subscribed
  • unsubscribed
  • suppressed
  • notSubscribed
  • deleted
  • binned
Current marketing status of the channel for the contact.
dataFieldsYesobjectThe data fields for the contact.

Example

{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "contact.created",
  "data": {
    "contactId": 321332,
    "identifiers": {
      "email": "[email protected]",
      "mobileNumber": "447123123123",
      "customId1": "1234dcf"
    },
    "channelProperties": {
      "email": {
        "emailType": "Html",
        "optInType": "Double",
        "status": "notSubscribed"
      },
      "sms/mms/rcs": {
        "countryCode": "GB",
        "status": "notSubscribed"
      },
      "whatsApp": {
        "status": "notSubscribed"
      }
    },
    "dataFields": {
      "firstName": "John",
      "lastName": "Doe",
      "gender": "male",
      "brandFan": true,
      "age": 21,
      "lastPurchasedDate": null
    }
  }
}

contact.removed

Triggered when a contact is permanently removed from the account when an API request or manual action deletes a contact.

  • All identifiers are sent to allow correlation.
ℹ️

When deleting contacts in Dotdigital the contact will be moved to the recycle bin initially which will cause a contact.updatedevent with the email channel status of binned to be raised. When the recycle bin is emptied or after 30 days the contact.removed event is raised.

Event data fields

These are the fields in the data field of the event envelope.

FieldRequiredData typeDescription
contactIdYesintegerThe immutable identifier for the contact.
identifiersYesobjectAny identifiers for the contact. We include the standard identifiers email and mobileNumber as well as any defined custom IDs. If an identifier is not set then a null is returned.

Example

{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "contact.removed",
  "data": {
    "contactId": 321332,
    "identifiers": {
      "email": "[email protected]",
      "mobileNumber": "447123123123",
      "customId1": "1234dcf"
    }
  }
}

contact.updated

Triggered when a contact is updated; changes included relate to identifiers, data fields, and channel properties.

  • All identifiers are sent to allow correlation.
  • All data fields are included.
  • All channel properties are included.
  • null values are sent for fields that have no value.

Event data fields

These are the fields in the data field of the event envelope.

FieldRequiredData typeDescription
contactIdYesintegerThe immutable identifier for the contact.
identifiersYesobjectAny identifiers for the contact. We include the standard identifiers email and mobileNumber as well as any defined custom IDs. If an identifier is not set then a null is returned.
channelPropertiesYesobject, see below:Current channel statuses.
  • email
Noobject, see below:Email channel properties.
    º emailTypeYesstring, enum:
  • plainText
  • html
The format the contact expects emails in.
    º optInTypeYesstring, enum:
  • unknown
  • single
  • double
  • verifiedDouble
Channel opt-in type for the contact.
    º statusYesstring, enum:
  • subscribed
  • unsubscribed
  • softBounced
  • hardBounced
  • ispComplained
  • pendingOptIn
  • directComplaint
  • spamTrap
  • deleted
  • blockedlocalpart
  • sharedsuppression
  • sharedDomainSuppression
  • suppressed
  • purchased
  • knownComplainer
  • knownLitigator
  • binned
  • domainSuppressed
Current marketing status of the channel for the contact.
  • sms/mms/rcs
Noobject, see below:SMS channel properties.
    º countryCodeYesstringISO 3166-1 alpha-2 country code of the contact's mobileNumber.
    º statusYesstring, enum:
  • subscribed
  • unsubscribed
  • softBounced
  • hardBounced
  • deleted
  • suppressed
  • binned
Current marketing status of the channel for the contact.
  • whatsApp
Noobject, see below:WhatsApp channel properties.
    º statusYesstring, enum:
  • subscribed
  • unsubscribed
  • suppressed
  • notSubscribed
  • deleted
  • binned
Current marketing status of the channel for the contact.
dataFieldsYesobjectThe data fields for the contact.

Example

{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "contact.updated",
  "data": {
    "contactId": 321332,
    "identifiers": {
      "email": "[email protected]",
      "mobileNumber": "447123123123",
      "customId1": "1234dcf"
    },
    "channelProperties": {
      "email": {
        "emailType": "Html",
        "optInType": "Double",
        "status": "notSubscribed"
      },
      "sms/mms/rcs": {
        "countryCode": "GB",
        "status": "notSubscribed"
      },
      "whatsApp": {
        "status": "notSubscribed"
      }
    },
    "dataFields": {
      "firstName": "John",
      "lastName": "Doe",
      "gender": "male",
      "brandFan": true,
      "age": 21,
      "lastPurchasedDate": null
    }
  }
}

contact.membershipUpdated

Triggered when a contact is added, removed, subscribed, or unsubscribed to a list or segment.

For simplicity the actions added and subscribed are amalgamated to added, and removed and unsubscribed to removed.

  • All identifiers are sent to allow correlation.

Event data fields

These are the fields in the data field of the event envelope.

FieldRequiredData typeDescription
contactIdYesintegerThe immutable identifier for the contact.
identifiersYesobjectAny identifiers for the contact.
idYesintegerThe identifier for the list or segment.
typeYesstring, enum:
  • list
  • segment
The type of membership change.
nameYesstringThe name of the list or segment.
actionYesstring, enum:
  • added
  • removed
Whether the contact is being added or removed.

Example

{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "contact.membershipUpdated",
  "data": {
    "contactId": 321332,
    "identifiers": {
      "email": "[email protected]",
      "mobileNumber": "447123123123",
      "customId1": "1234dcf"
    },
    "id": 1234,
    "type": "list",
    "name": "VIP customers",
    "action": "added"
  }
}
{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "contact.membershipUpdated",
  "data": {
    "contactId": 321332,
    "identifiers": {
      "email": "[email protected]",
      "mobileNumber": "447123123123",
      "customId1": "1234dcf"
    },
    "id": 4321,
    "type": "segment",
    "name": "Big spenders",
    "action": "removed"
  }
}

contact.consentAdded

Triggered when a contact has a consent record added.

  • All identifiers are sent to allow correlation.

Event data fields

These are the fields in the data field of the event envelope.

FieldsRequiredData typeDescription
contactIdYesintegerThe immutable identifier for the contact.
identifiersYesobjectAny identifiers for the contact. We include the standard identifiers email and mobileNumber as well as any defined custom IDs. If an identifier is not set then a null is returned.
recordYesobject (see below)The consent record.
  • text
YesstringConsent text displayed to the contact.
  • consented
YesstringISO 8601 UTC timestamp for when the consent was obtained.
  • url
YesstringURL the consent was obtained with.
  • ipAddress
YesstringIP v4/v6 address of the contact the consent was obtained for.
  • userAgent
YesstringUser agent header of the browser used by the contact the consent was obtained for.
  • created
YesstringISO 8601 UTC timestamp for when the consent record was created.

Example

{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "contact.consentAdded",
  "data": {
    "contactId": 321332,
    "identifiers": {
      "email": "[email protected]",
      "mobileNumber": "447123123123",
      "customId1": "1234dcf"
    },
    "record": {
      "text": "Yes, I would like to receive a monthly newsletter",
      "consented": "2025-04-29T15:32:43.300Z",
      "url": "http://www.example.com/signup",
      "ipAddress": "129.168.0.2",
      "userAgent": "Mozilla/5.0 (X11; OpenBSD i386) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36",
      "created": "2025-04-29T15:32:43.300Z"
    }
  }
}

contact.preferenceUpdated

Triggered when a contact has changed a preference.

  • All identifiers are sent to allow correlation.

Event data fields

These are the fields in the data field of the event envelope.

FieldsRequiredData typeDescription
contactIdYesintegerThe immutable identifier for the contact.
identifiersYesobjectAny identifiers for the contact. We include the standard identifiers email and mobileNumber as well as any defined custom IDs. If an identifier is not set then a null is returned.
preferenceYesobject, see below:The changed preferences.
  • id
YesintegerID of the preference.
  • isOptedIn
YesBooleanIndicates whether the contact is opted into this preference.
  • publicName
YesstringPublic name of the preference.
  • privateName
YesstringPrivate name of the preference.

Example

{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "contact.preferenceUpdated",
  "data": {
    "contactId": 321332,
    "identifiers": {
      "email": "[email protected]",
      "mobileNumber": "447123123123",
      "customId1": "1234dcf"
    },
    "preference": {
      "id": 1,
      "isOptedIn": true,
      "publicName": "Mens fashion",
      "privateName": "mensFashion01"
    }
  }
}

Interaction events

Interaction events inform you when a contact has performed a specific interaction such as clicking a button or link, unsubscribing, opening a push message and other similar interactions.

interaction.unsubscribe

Triggered when a contact tries to unsubscribe, whether or not this actually changes the status for the channel.

  • All identifiers are sent to allow correlation.
  • Only channel properties sent for those that have changed.

Only events that can be directly attributed to an end-user action like clicking a link, or tapping a button trigger this event.

For example:

  • Clicking an email unsubscribe link.
  • Clicking a link to open a preference center.
  • Replying “STOP” to an SMS/MMS/RCS.
  • Clicking on an SMS unsubscribe link.
  • WhatsApp user unsubscribe, replying “STOP”.

Event data fields

These are the fields in the data field of the event envelope

FieldsRequiredData typeDescription
contactIdYesintegerThe immutable identifier for the contact.
identifiersYesobjectAny identifiers for the contact. We include the standard identifiers email and mobileNumber as well as any defined custom IDs. If an identifier is not set then a null is returned.
channelYesstring, enum:
  • email
  • sms/mms/rcs
  • push
  • whatsapp
Channel affected.
statusYesstring, enum:
  • unsubscribed
  • suppressed
Current status for the channel.
reasonYesstring, enum:
  • unsubscribeClick
  • response
  • ispComplaint
  • other
Reason for channel update.
If available.
  • unsubscribeClick
    Contact has clicked a link to unsubscribe.
  • response
    Contact has sent an inbound message requesting to be unsubscribed.
  • ispComplaint
    Contact complained to their ISP about messages received.
  • other
    Specific cause of subscription change can't be determined.
messageIdNostringThe message ID related to this unsubscribe.
If applicable.
campaignDetailsNoobject, see below:Details of the campaign the unsubscribe is associated with.
If applicable.
  • id
YesintegerThe campaign identifier.
  • name
YesstringThe campaign name.
  • type
Nostring, enum:
  • standard
  • triggered
The type of campaign.
additionalDataNoobjectAny additional event data.

Example

{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "interaction.unsubscribe",
  "data": {
    "contactId": 321332,
    "identifiers": {
      "email": "[email protected]",
      "mobileNumber": "447123123123",
      "customId1": "1234dcf"
    },
    "channel": "email",
    "status": "unsubscribed",
    "reason": "unsubscribeClick",
    "messageId": "12G8G3_A3PWN_4H35TY",
    "campaignDetails": {
      "id": 553355,
      "name": "Deal of the day",
      "type": "standard"
    }
  }
}
{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "interaction.unsubscribe",
  "data": {
    "contactId": 321332,
    "identifiers": {
      "email": "[email protected]",
      "mobileNumber": "447123123123",
      "customId1": "1234dcf"
    },
    "channel": "email",
    "status": "unsubscribed",
    "reason": "ispComplaint",
    "messageId": "12G8G3_A3PWN_4H35TY"
  }
}
{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "interaction.unsubscribe",
  "data": {
    "contactId": 321332,
    "identifiers": {
      "email": "[email protected]",
      "mobileNumber": "447123123123",
      "customId1": "1234dcf"
    },
    "channel": "sms",
    "status": "unsubscribed",
    "reason": "response",
    "campaignDetails": {
      "id": 434232,
      "name": "Deal of the day",
      "type": "standard"
    }
  }
}

interaction.click

Triggered when a page is viewed and tracked.

  • All identifiers are sent to allow correlation.

Event data fields

These are the fields in the data field of the event envelope.

FieldsRequiredData typeDescription
urlYesstringThe URL viewed.
linkTypeYesstring, enum:
  • link
  • landingPage
  • smsLink
The type of link being viewed.
shorteningDetailsNoobject, see below:Link shortening details.
If shortened.
  • originalUrl
YesstringURL prior to shortening.
pageNostringThe page title, or landing page name.
pageIdNointegerThe landing page ID.
If known.
contactIdYesintegerThe immutable identifier for the contact.
identifiersYesobjectAny identifiers for the contact. We include the standard identifiers email and mobileNumber as well as any defined custom IDs. If an identifier is not set then a null is returned.
usedCookieNoBooleanIndicates whether tracking cookie was used or not.
ipAddressNostringIP address of viewer, if known.
userAgentNostringThe user agent string of the browser.
messageIdNostringThe message ID related to this interaction.
If applicable.
campaignDetailsNoobject, see below:Details of the campaign.
If applicable.
  • id
YesintegerThe campaign identifier.
  • name
YesstringThe campaign name.
  • type
Nostring, enum:
  • standard
  • triggered
The type of campaign.
programNoobject, see below:Automation program details.
If applicable.
  • id
YesintAutomation program ID.
If applicable.
  • name
YesstringAutomation program name.
productRecommendationNoobject, see below:Details of the product recommendation that referred to this page.
If applicable.
  • id
YesintegerProduct recommendation ID.
  • name
YesstringProduct recommendation name.
  • type
YesstringProduct recommendation type.
roiMarkersNoarray of objects, see below:ROI tracking.
If applicable.
  • name
YesstringName of ROI marker.
  • type
Yesstring, enum:
  • string
  • numeric
  • date
  • Boolean
Data type of maker.
  • value
YesstringValue of marker.
  • isOverridable
YesBooleanOverridable indicator.
additionalDataNoobjectAny additional event data that is specific to the linkType.

Example

{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "interaction.click",
  "data": {
    "url": "https://somebrand.com/offers/123",
    "linkType": "link",
    "page": "Weeks best deals",
    "usedCookie": false,
    "contactId": 12345,
    "identifiers": {
      "email": "[email protected]"
    },
    "ipAddress": "192.168.1.2",
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36",
    "campaignDetails": {
      "id": 553355,
      "name": "Deal of the day",
      "type": "standard"
    },
    "roiMarkers": [
      {
        "name": "marker1",
        "type": "string",
        "value": "7557da5e-a28b-4870-b270-f0ba973a28eb",
        "isOverridable": false
      }
    ]
  }
}
{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "interaction.click",
  "data": {
    "url": "https://r1.dotdigital-pages.com/p/57GV-CLE",
    "linkType": "landingPage",
    "page": "test",
    "contactId": 12345,
    "identifiers": {
      "email": "[email protected]"
    },
    "ipAddress": "192.168.1.2",
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36",
    "campaignDetails": {
      "id": 553355,
      "name": "Deal of the day",
      "type": "standard"
    }
  }
}
{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "interaction.click",
  "data": {
    "url": "https://r1.dotdigital-pages.com/p/57GV-CLE",
    "linkType": "smsLink",
    "shorteningDetails": {
      "originalUrl": "https://www.dotdigital.com/"
    },
    "page": "Dotdigital",
    "contactId": 12345,
    "identifiers": {
      "email": "[email protected]"
    },
    "ipAddress": "192.168.1.2",
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36",
    "campaignDetails": {
      "id": 553355,
      "name": "Deal of the day",
      "type": "standard"
    }
  }
}

interaction.pushClick

Triggered when a push notification with a link or deep link is clicked.

  • All identifiers are sent to allow correlation.

Event data fields

These are the fields in the data field of the event envelope.

FieldsRequiredData typeDescription
messageIdYesstringUnique ID for message.
sentYesstringISO 8601 UTC time of the push send.
programNoobject see below:Automation program details.
If applicable.
  • id
YesintAutomation program ID.
If applicable.
  • name
YesstringAutomation program name.
contactIdYesintegerThe immutable identifier for the contact.
identifiersYesobjectAny identifiers for the contact. We include the standard identifiers email and mobileNumber as well as any defined custom IDs. If an identifier is not set then a null is returned.
additionalDataNoobjectAny additional event data.

Example

{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "interaction.pushClick",
  "data": {
    "messageId": "20762495-2c44-4409-b301-31b66e5cc89c",
    "sent": "2025-05-01T11:23:00.000Z",
    "program": {
      "id": 4321,
      "name": "welcome_2025"
    },
    "contactId": 12345,
    "identifiers": {
      "email": "[email protected]"
    }
  }
}

interaction.socialShare

Triggered when a link in an email campaign is shared to a social network.

  • All identifiers are sent to allow correlation.

Event data fields

These are the fields in the data field of the event envelope.

FieldsRequiredData typeDescription
contactIdYesintegerThe immutable identifier for the contact.
identifiersYesobjectAny identifiers for the contact. We include the standard identifiers email and mobileNumber as well as any defined custom IDs. If an identifier is not set then a null is returned.
messageIdNostringThe message ID related to this interaction.
If applicable.
campaignDetailsNoobject, see below:Details of the campaign.
If applicable.
  • id
YesintegerThe campaign identifier.
  • name
YesstringThe campaign name.
  • type
Nostring, enum:
  • standard
  • triggered
The type of campaign.
ipAddressYesstringIP address of clicker.
bookmarkNameYesstringBookmark name clicked.
viewTypeYesstring, enum:
  • bookmark
  • view
  • share
The type of link being viewed.
additionalDataNoobjectAny additional event data.

Example

{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "interaction.socialShare",
  "data": {
    "contactId": 12345,
    "identifiers": {
      "email": "[email protected]"
    },
    "campaignDetails": {
      "id": 553355,
      "name": "Deal of the day",
      "type": "standard"
    },
    "ipAddress": "192.168.0.1",
    "bookmarkName": "xyz",
    "viewType": "share"
  }
}

Message events

🚫

Coming soon

Message events are not yet available to be subscribed to, but we are working to make them available soon.

Message events inform you of all messaging activity across all channels.

We recommend using event filters to limit the events to only those channels you want events for.

message.sent

Triggered when a message is attempted to be sent on any channel, and followed usually by a message.status event to report on the outcome of the send attempt.

  • All identifiers are sent to allow correlation.

The message content can be found in the message field, but, depending on the size and type of content, the way we make it available in the event can vary.

We support passing the message content as:

  • text
    Where the message can be represented by text and is less than 800KB is size.
  • lobId
    If the message content is over 800KB it is stored as a LOB (Large Object) and the ID to retrieve that passed back to you. You need to call the Retrieve large object call with the id to retrieve the message contents.
  • object
    For some channels, we can't give you the exact message sent to the contact. Instead, we return an object describing what message was sent. For instance, with WhatsApp template-based messages we pass you the details of what template was sent, with what personalization.
🚧

Note, the message content for campaign emails is not provided via the message.sent event.

Event data fields

These are the fields in the data field of the event envelope.

FieldsRequiredData typeDescription
messageIdYesstringUnique ID for message.
channelYesstring, enum:
  • email
  • transactionalEmail
  • sms
  • mms
  • whatsapp
  • push
  • appMessaging
The channel the message was sent on.
toYesobject, see below:Any identifiers for the recipient.
  • contactId
NointegerThe immutable identifier for the contact.
  • recipient
YesstringThe recipient's identifier, so email or phone number.
  • identifiers
NoobjectAny identifiers for the contact. We include all the standard identifiers email and mobileNumber as well as any defined custom IDs. If an identifier is not set then a null is returned.
fromYesstringAny identifiers for the sender; email, phone number, or for push, the app ID from the push profile.
campaignDetailsNoobject, see below:Details of the campaign sent.
If applicable.
  • id
YesintegerThe campaign identifier.
  • name
YesstringThe campaign name.
  • type
Nostring, enum:
  • standard
  • triggered
The type of campaign.
programNoobject, see below:Automation program details.
If applicable.
  • id
YesintAutomation program ID.
If applicable.
  • name
YesstringAutomation program name.
messageNoobjectThe message content.
If applicable.
  • text
NostringThe message content as a string.
If it can fit in the event and be converted to a string.
  • lobId
NostringIf the message content is too large to fit in the event, then this field has a LOB (Large Object) ID where the contents can be downloaded using the Retrieve large object call.
  • object
NoobjectFor channels that have structured messages, such as WhatsApp templates, we return a JSON object describing the content of the message.
attachmentsNoArray of objects, see below:Any attachments to the message.
  • name
YesstringThe name/filename of the attachment.
  • mimeType
YesstringMIME type of the attachment.
  • fileLobId
YesstringThe files contents can be retrieved using this ID and the Retrieve Lob call.
channelDataNoobjectAny additional channel data we want to pass back to the customer; see here for more details.
metaDataNoobjectAny customer metadata associated with the send, used for correlation.

Examples

{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "message.sent",
  "data": {
    "messageId": "12G8G3_A3PWN_4H35TY",
    "channel": "email",
    "to": {
      "contactId": 12345,
      "recipient": "[email protected]",
      "identifiers": {
        "email": "[email protected]",
        "mobileNumber": "447123123123",
        "customId1": "1234dcf"
      }
    },
    "from": "[email protected]",
    "campaignDetails": {
      "id": 245334,
      "name": "Special offer promo",
      "type": "standard"
    },
    "channelData": {
      "sendId": 47474874,
      "subject": "Don't miss out of this great offer!",
      "sendStatus": "sent",
      "sendStatusReason": ""
    }
  }
}
{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "message.sent",
  "data": {
    "messageId": "3343556",
    "channel": "sms",
    "to": {
      "contactId": 12345,
      "recipient": "447123123123",
      "identifiers": {
        "email": "[email protected]",
        "mobileNumber": "447123123123",
        "customId1": "1234dcf"
      }
    },
    "from": "60006",
    "campaignDetails": {
      "id": 553355,
      "name": "Deal of the day",
      "type": "standard"
    },
    "message": {
      "text": "Don't miss out on the deal of the day, https://brand.com/deal"
    },
    "channelData": {
      "splitTestVariant": "A"
    }
  }
}
{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "message.sent",
  "data": {
    "messageId": "3343556",
    "channel": "transactionalEmail",
    "to": {
      "recipient": "[email protected]"
    },
    "from": "[email protected]",
    "message": {
      "lobId": "<LOB Id>"
    },
    "metaData": {
      "myCorrelationId": "gh485858"
    }
  }
}
{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "message.sent",
  "data": {
    "messageId": "20762495-2c44-4409-b301-31b66e5cc89c",
    "channel": "push",
    "to": {
      "contactId": 12345,
      "recipient": "447123123123",
      "identifiers": {
        "email": "[email protected]",
        "mobileNumber": "447123123123",
        "customId1": "1234dcf"
      }
    },
    "from": "com.dotdigital.demopush",
    "message": {
      "text": "Don't miss out on the deal of the day"
    },
    "program": {
      "id": 1233,
      "name": "Welcome"
    }
  }
}
{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "message.sent",
  "data": {
    "messageId": "3343556",
    "channel": "whatsapp",
    "to": {
      "contactId": 12345,
      "recipient": "447123123123",
      "identifiers": {
        "email": "[email protected]",
        "mobileNumber": "447123123123",
        "customId1": "1234dcf"
      }
    },
    "from": "447321321321",
    "campaignDetails": {
      "id": 553355,
      "name": "Deal of the day",
      "type": "standard"
    },
    "message": {
      "object": {
        "templateName": "deal_of_day",
        "languageCode": "en",
        "parameters": [
          {
            "type": "text",
            "text": "1234"
          }
        ]
      }
    },
    "channelData": {
      "virtualDeviceNumber": "447860003600",
      "originatorPhoneNumber": "447860003600",
      "isTemplateMessage": true,
      "templateCategory": "UTILITY",
      "isWithinConversationWindow": true,
      "phoneNumberCountryCode": "GB",
      "isCloudOriginator": true
    }
  }
}
{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "message.sent",
  "data": {
    "messageId": "3343556",
    "channel": "whatsapp",
    "to": {
      "contactId": 12345,
      "recipient": "447123123123",
      "identifiers": {
        "email": "[email protected]",
        "mobileNumber": "447123123123",
        "customId1": "1234dcf"
      }
    },
    "from": "447321321321",
    "message": {
      "text": "Can you please provide some more details"
    },
    "channelData": {
      "virtualDeviceNumber": "447860003600",
      "originatorPhoneNumber": "447860003600",
      "isTemplateMessage": false,
      "isWithinConversationWindow": true,
      "phoneNumberCountryCode": "GB",
      "isCloudOriginator": true
    }
  }
}

Additional channel data

The channelData field is designed to hold any additional useful channel specific details, below are the fields that are populated in the channelData field on a per channel basis:

message.status

Triggered when a message status is updated, such as delivered, read, or failed.

  • All identifiers are sent to allow correlation.

Event data fields

These are the fields in the data field of the event envelope.

FieldsRequiredData typeDescription
messageIdYesstringUnique ID for message, used to correlate all message events together on a per send basis.
channelYesstring, enum:
  • email
  • transactionalEmail
  • sms
  • mms
  • whatsapp
  • push
The channel the message was sent on.
statusYesstring, enum:
  • delivered
  • read
  • failed
  • expired
  • deleted
  • soft bounce
  • hard bounce
  • skipped
  • blocked
Status of message.
subStatusNostringAdditional sub-status information.
If applicable.
toYesobject, see below:Any identifiers for the recipient.
  • contactId
NointegerThe immutable identifier for the contact.
  • recipient
YesstringThe recipient's identifier; email or phone number.
  • identifiers
NoobjectAny identifiers for the contact. We include the standard identifiers email and mobileNumber as well as any defined custom IDs. If an identifier is not set then a null is returned.
campaignDetailsNoobject (see below)Details of the campaign.
If a reply to a campaign message.
  • id
YesintegerThe campaign identifier.
  • name
YesstringThe campaign name.
  • type
Nostring, enum:
  • standard
  • triggered
The type of campaign.
programNoobject, see below:Automation program details.
If applicable.
  • id
YesintAutomation program ID.
If applicable.
  • name
YesstringAutomation program name.
channelDataNoobjectAny additional channel data we want to pass back to the customer.
metaDataNoobjectAny customer metadata associated with the original send, used for correlation.

Examples

{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "message.status",
  "data": {
    "messageId": "12G8G3_A3PWN_4H35TY",
    "channel": "email",
    "status": "read",
    "to": {
      "contactId": 12345,
      "recipient": "[email protected]",
      "identifiers": {
        "email": "[email protected]"
      }
    },
    "campaignDetails": {
      "id": 553355,
      "name": "Deal of the day",
      "type": "standard"
    },
    "channelData": {
      "emailType": "html",
      "ipAddress": "192.168.1.1",
      "userAgent": "Mozila/5.0 (Linux; Android 14; SM-S928W) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.6099.230 Mobile Safari/537.36",
      "mailClient": "Outlook",
      "mailClientVersion": "v1.03",
      "isBot": false
    }
  }
}
{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "message.status",
  "data": {
    "messageId": "12G8G3_A3PWN_4H35TY",
    "channel": "email",
    "status": "failed",
    "subStatus": "HardBounce",
    "to": {
      "contactId": 12345,
      "recipient": "[email protected]",
      "identifiers": {
        "email": "[email protected]",
        "mobileNumber": "447123123123",
        "myCustomId": "djdj434x32"
      }
    },
    "campaignDetails": {
      "id": 553355,
      "name": "Deal of the day",
      "type": "standard"
    }
  }
}
{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "message.status",
  "data": {
    "messageId": "45685514",
    "channel": "sms",
    "status": "delivered",
    "to": {
      "contactId": 12345,
      "recipient": "447123123123",
      "identifiers": {
        "mobileNumber": "447123123123"
      }
    },
    "campaignDetails": {
      "id": 553355,
      "name": "Deal of the day",
      "type": "standard"
    }
  }
}
{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "message.status",
  "data": {
    "messageId": "45685514",
    "channel": "sms",
    "status": "failed",
    "subStatus": "RejectedSmsc",
    "to": {
      "contactId": 12345,
      "recipient": "447123123123",
      "identifiers": {
        "mobileNumber": "447123123123"
      }
    },
    "campaignDetails": {
      "id": 553355,
      "name": "Deal of the day",
      "type": "standard"
    }
  }
}
{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "message.status",
  "data": {
    "messageId": "20762495-2c44-4409-b301-31b66e5cc89c",
    "channel": "push",
    "status": "failed",
    "subStatus": "fcmFailure",
    "to": {
      "contactId": 12345,
      "recipient": "[email protected]",
      "identifiers": {
        "mobileNumber": "[email protected]"
      }
    },
    "channelData": {
      "externalMessageId": "f76bf2c9-f8d2-46c6-b13b-cfe3477aa92a",
      "system": "fcm",
      "deviceId": "0618efd2-c56a-4599-b5c5-833aca805d56",
      "errorCode": 33,
      "errorDateTime": "2025-05-01T13:44:12.000Z"
    }
  }
}

message.received

Triggered when an inbound message is received.

  • All identifiers are sent to allow correlation.

The message content can be found in the message field, but, depending on the size and type of content, the way we make it available in the event can vary.

We support passing the message content as:

  • text
    Where the message can be represented by text and is less than 800KB is size.
  • lobId
    If the message content is over 800KB it is stored as a LOB (Large OBject) and the id to retrieve that passed back to you. You need to call the Retrieve large object call with the id to retrieve the message contents.
  • object
    For some channels, we can't give you the exact message sent to the contact. Instead we return an object describing what message was sent. For instance, with WhatsApp template-based messages we pass you the details of what template was sent with what personalization.

Event data fields

These are the fields in the data field of the event envelope.

FieldsRequiredData typeDescription
messageIdYesstringUnique ID for message.
channelYesstring, enum:
  • email
  • transactionalEmail
  • sms
  • mms
  • whatsapp
The channel the message was sent on.
fromYesobject, see below:Any identifiers for the sender of the message.
  • contactId
NointegerThe immutable identifier for the contact.
  • sender
YesstringThe sender's identifier; email or phone number.
  • identifiers
NoobjectAny identifiers for the contact. We include the standard identifiers email and mobileNumber as well as any defined custom IDs. If an identifier is not set then a null is returned.
toYesstringAny identifiers for the email or phone number that the message was sent to.
campaignDetailsNoobject (see below)Details of the campaign.
If a reply to a campaign message.
  • id
YesintegerThe campaign identifier.
  • name
YesstringThe campaigns name
  • type
Nostring, enum:
  • standard
  • triggered
The type of campaign.
programNoobject, see below:Automation program details if applicable.
  • id
YesintAutomation program ID.
If applicable.
  • name
YesstringAutomation program name.
messageNoobjectThe message content.
If available.
  • text
NostringThe message content as a string.
If it can fit in the event and be converted to a string.
  • lobId
NostringIf the message content is too large to fit in the event, then this field has a LOB (Large Object) ID where the contents can be downloaded using the Retrieve large object call.
  • object
NoobjectFor channels that have structured messages such as WhatsApp templates, we return a JSON object describing the content of the message.
attachmentsNoArray of objects, see below:Any attachments to the message.
  • name
YesstringThe name/filename of the attachment.
  • mimeType
YesstringMIME type of the attachment.
  • fileLobId
YesstringThe files contents can be retrieved using this ID and the Retrieve large object call.
channelDataNoobjectAny additional channel data we want to pass back to the customer, such as keywords and other channel-specific data.
metaDataNoobjectAny customer metadata associated with the original send, used for correlation.

Examples

{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "message.received",
  "data": {
    "messageId": "3343556",
    "channel": "email",
    "to": "[email protected]",
    "from": {
      "contactId": 12345,
      "sender": "[email protected]",
      "identifiers": {
        "email": "[email protected]",
        "mobileNumber": "447123123123",
        "customId1": "1234dcf"
      }
    },
    "campaignDetails": {
      "id": 553355,
      "name": "Deal of the day",
      "type": "standard"
    },
    "message": {
      "text": "I already unsubscribed!"
    },
    "channelData": {
      "isHtml": true,
      "replyType": "REPLY",
      "subject": "Latest special offers",
      "forwardedAddress": null,
      "ccAddresses": null,
      "customReplyToAddress": null
    }
  }
}
{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "message.received",
  "data": {
    "messageId": "3343556",
    "channel": "sms",
    "to": "60006",
    "from": {
      "contactId": 12345,
      "sender": "447123123123",
      "identifiers": {
        "email": "[email protected]",
        "mobileNumber": "447123123123",
        "customId1": "1234dcf"
      }
    },
    "campaignDetails": {
      "id": 553355,
      "name": "Deal of the day",
      "type": "standard"
    },
    "message": {
      "text": "STOP"
    }
  }
}
{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "message.received",
  "data": {
    "messageId": "45685514",
    "channel": "sms",
    "to": "60006",
    "from": {
      "contactId": 12345,
      "sender": "447123123123",
      "identifiers": {
        "mobileNumber": "447123123123"
      }
    },
    "message": {
      "text": "OPTIN"
    },
    "channelData": {
      "keyword": "OFFERS"
    }
  }
}

Insight data events

Insight data events allow you track all activity across an account's Insight data collections. Insight data collections can be scoped at account level or contact level. If they are contact-level scoped then the contactid and identifiers fields are populated.

🚧

The volume of Insight data changes can be extensive, so we strongly recommend using event filters to limit events to just the collectionType you are interested in, or by collectionName.

insightData.collectionCreated

Triggered when an Insight data collection is created.

Event data fields

These are the fields in the data field of the event envelope.

FieldsRequiredData typeDescription
collectionNameYesstringInsight data collection name.
collectionTypeYesstring, enum:
  • cartInsight
  • catalog
  • consentInsight
  • custom
  • easyEditorExtensions
  • nostoEmailCampaigns
  • orders
  • productCategories
  • signal
  • webInsight
  • wishList
The type of collection.
collectionScopeYesstring, enum:
  • account
  • contact
The collection's scope.

Examples

{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "insightData.collectionCreated",
  "data": {
    "collectionName": "Catalog-1",
    "collectionType": "catalog",
    "collectionScope": "account"
  }
}

insightData.collectionRemoved

Triggered when an Insight Data collection is removed.

Event data fields

These are the fields in the data field of the event envelope

FieldsRequiredData typeDescription
collectionNameYesstringInsight data collection name.
collectionTypeYesstring, enum:
  • cartInsight
  • catalog
  • consentInsight
  • custom
  • easyEditorExtensions
  • nostoEmailCampaigns
  • orders
  • productCategories
  • signal
  • webInsight
  • wishList
The type of collection.
collectionScopeYesstring, enum:
  • account
  • contact
The collection's scope.

Examples

{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "insightData.collectionRemoved",
  "data": {
    "collectionName": "Catalog-1",
    "collectionType": "catalog",
    "collectionScope": "account"
  }
}

insightData.set

Triggered when an Insight data record's value is created or updated.

🚧

The volume of Insight data changes can be extensive, so we strongly recommend using event filters to limit events to just the collectionType you are interested in, or by collectionName.

  • If the Insight data collection is contact-level scoped then the contactid and identifiers fields are populated, otherwise not.
  • All identifiers are sent to allow correlation when related to a contact-scoped collection.
  • Depending on the byte size of the record's JSON (<= 800KB), it will be either be put directly into the event in the json field, or if too large it will be stored as a LOB and to retrieve it you use the jsonLobId with the Retrieve large object call.

Event data fields

These are the fields in the data field of the event envelope

FieldsRequiredData typeDescription
collectionNameYesstringInsight data collection name.
collectionTypeYesstring, enum:
  • cartInsight
  • catalog
  • consentInsight
  • custom
  • easyEditorExtensions
  • event
  • nostoEmailCampaigns
  • orders
  • productCategories
  • signal
  • webInsight
  • wishList
The type of collection.
collectionScopeYesstring, enum:
  • account
  • contact
The collection's scope.
contactIdNointegerThe immutable identifier for the contact.
If contact-scoped collection.
identifiersNoobject

Any identifiers for the contact.
If contact-scoped collection.

We include the standard identifiers email and mobileNumber as well as any defined custom IDs. If an identifier is not set then a null is returned.

recordIdYesstringThe unique identifier for the record.
jsonNoobjectThe record's data.
If less than 800KB.
jsonLobIdNostringIf the message content is too large to fit in the event, then this field has a LOB (Large Object) ID where the contents can be downloaded using the Retrieve large object call.

Examples

{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "insightData.set",
  "data": {
    "collectionName": "Catalog-1",
    "collectionType": "catalog",
    "collectionScope": "account",
    "recordId": "CD001",
    "json": {
      "id": "898989",
      "name": "Greatest 80s hits",
      "price": 9.99,
      "url": "https://fakeshop.com/cd001",
      "image_path": "https://fakeshop.com/cd001/img",
      "sku": "CD001"
    }
  }
}
{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "insightData.set",
  "data": {
    "collectionName": "orders",
    "collectionType": "orders",
    "collectionScope": "contact",
    "contactId": 321332,
    "identifiers": {
      "email": "[email protected]",
      "mobileNumber": "447123123123",
      "customId1": "1234dcf"
    },
    "recordId": "GB123464-90",
    "json": {
      "order_total": 9.99,
      "order_subtotal": 9.99,
      "currency": "USD",
      "purchase_date": "2025-05-01T09:01:01Z",
      "products": [
        {
          "name": "Greatest 80s hits",
          "price": 9.99,
          "sku": "CD001",
          "qty": 1
        }
      ]
    }
  }
}
{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "insightData.set",
  "data": {
    "collectionName": "orders",
    "collectionType": "orders",
    "collectionScope": "contact",
    "contactId": 321332,
    "identifiers": {
      "email": "[email protected]",
      "mobileNumber": "447123123123",
      "customId1": "1234dcf"
    },
    "recordId": "GB123464-90",
    "jsonLobId": "d4699dd5-c7fb-4313-a62e-a81998180da0"
  }
}

insightData.removed

Triggered when an Insight data records is removed.

🚧

The volume of Insight data changes can be extensive, so we strongly recommend using event filters to limit events to just the collectionType you are interested in, or by collectionName

  • If the Insight data collection is contact-level scoped then the contactid and identifiers fields are populated, otherwise not.
  • All identifiers are sent to allow correlation when related to a contact-scoped collection.

Event data fields

These are the fields in the data field of the event envelope.

FieldsRequiredData typeDescription
collectionNameYesstringInsight data collection name.
collectionTypeYesstring, enum:
  • cartInsight
  • catalog
  • consentInsight
  • custom
  • easyEditorExtensions
  • nostoEmailCampaigns
  • orders
  • productCategories
  • signal
  • webInsight
  • wishList
The type of collection.
collectionScopeYesstring, enum:
  • account
  • contact
The collection's scope.
contactIdNointegerThe immutable identifier for the contact.
If contact-scoped collection.
identifiersNoobject

Any identifiers for the contact.
If contact-scoped collection.

We include the standard identifiers email and mobileNumber as well as any defined custom IDs. If an identifier is not set then a null is returned.

recordIdYesstringThe unique identifier for the record.

Examples

{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "insightData.removed",
  "data": {
    "collectionName": "Catalog-1",
    "collectionType": "catalog",
    "collectionScope": "account",
    "recordId": "CD001"
  }
}
{
  "id": "701180ae-c6ef-4cf5-8ed1-d1007e38298c",
  "accountId": 12345,
  "processedDate": "2025-11-06T15:29:49Z",
  "eventDate": "2025-11-06T15:29:48Z",
  "type": "insightData.removed",
  "data": {
    "collectionName": "orders",
    "collectionType": "orders",
    "collectionScope": "contact",
    "contactId": 321332,
    "identifiers": {
      "email": "[email protected]",
      "mobileNumber": "447123123123",
      "customId1": "1234dcf"
    },
    "recordId": "GB123464-90"
  }
}