Export events

📢

This feature is in private preview

This feature is in private preview and therefore is subject to change. If you would like to preview this feature please contact your customer representative or our support team



The export events functionality is designed to allow integrators to call a single service to retrieve events for activity across the whole of Dotdigital instead of having to retrieve data from multiple services. This greatly simplifies getting data out of Dotdigital.


How it works

The Events API allows you to define one or more subscriptions, to a maximum of five, 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 cannot sync historic events

We can only capture events that occur after a subscription is made active. It may 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 if you don't specify otherwise.

Event subscriptions

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

đźš§

Only subscribe to what you need

To minimize processing overheads on all platforms involved, 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 affects on the subscription:

Status valueAffect
inactiveEvents are not captured for this subscription whilst inactive; this can result in data loss.
activeEvents are captured; may 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 can and should use filters to further refine the selectivity of what events are captured for your subscription.

You can add up to 5 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 bracket [!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 bracket

đźš§

Filters use the Unicode character set and ranges must be from lower to higher code points to be valid. e.g. [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.

The following are examples of creating a subscription by calling Create subscription with filters applied:

{
  "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"
}

Retrieving events

Periodically you must call Retrieve events for each active subscription.

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

  1. For a subscription, initially 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.
đźš§

Passing a checkPoint value clears data

Once you have sent the checkPoint for a page of events they are removed from the queue, so you must not try to retrieve the next page of events using the checkPoint value until you have successfully stored the retrieved page of events.

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 will instead pass a LOB Id (Large OBject Identifier). This LOB Id can be used in 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 will be placed in a standardized envelope to make handling the event simple by providing common attributes for events such as id, type, account and event date.

The envelope schema is:

FieldTypeRequiredDescription
idstringYesUnique identifier for the event.
accountIdintegerYesDotdigital account id
processedDatestringYesDate time in ISO 8601 format based on UTC when the event was processed by the Events API.
eventDatestringYesDate time in ISO 8601 format based on UTC when the event occurred.
typestringYesThe type of event contained with 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, deletes, channel status updates, preference updates and consent.

contact.created

Contact Created

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

Note

  • 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

Fields

Required

Data type

Description

contactId

Yes

integer

The immutable identifier for the contact

identifiers

Yes

object

Any 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.

channelProperties

Yes

object, see below:

Current channel statuses

  • email

No

object, see below:

Email channel properties

  • optInType

Yes

string, enum:

- unknown
- single
- double
- verifiedDouble

Channel opt-in type for the contact

  • status

Yes

string, 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

No

object, see below:

SMS channel properties

  • countryCode

Yes

string

ISO 3166-1 alpha-2 country code the contacts mobileNumber

  • status

Yes

string, enum:

- subscribed
- unsubscribed
- softBounced
- hardBounced
- deleted
- suppressed
- binned

Current marketing status of the channel for the contact

  • whatsApp

No

object, see below:

WhatsApp channel properties

  • status

Yes

string, enum:

- subscribed
- unsubscribed
- suppressed
- notSubscribed

Current marketing status of the channel for the contact

dataFields

Yes

object

The 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

Contact Removed

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

Note

  • 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 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.

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

Contact Updated

Triggered when a contact is updated; changes covered are with identifiers, data fields and channel properties.

Note

  • 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

Fields

Required

Data type

Description

contactId

Yes

integer

The immutable identifier for the contact

identifiers

Yes

object

Any 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.

channelProperties

Yes

object, see below:

Current channel statuses

  • email

No

object, see below:

Email channel properties

  • emailType

Yes

string, enum:

- plainText
- html

The format the contact expects emails in.

  • optInType

Yes

string, enum:

- unknown
- single
- souble
- verifiedDouble

Channel opt-in type for the contact

  • status

Yes

string, 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

No

object, see below:

SMS channel properties

  • countryCode

Yes

string

ISO 3166-1 alpha-2 country code the contacts mobileNumber

  • status

Yes

string, enum:

- subscribed
- unsubscribed
- softBounced
- hardBounced
- deleted
- suppressed
- binned

Current marketing status of the channel for the contact

  • whatsApp

No

object, see below:

WhatsApp channel properties

  • status

Yes

string, enum:

- subscribed
- unsubscribed
- suppressed
- notSubscribed

Current marketing status of the channel for the contact

dataFields

Yes

object

The 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

Contact list / segment membership changed

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 subscribed, and _removed _and _unsubscribed _to unsubscribed.

Note

  • All identifiers are sent to allow correlation.

Event data fields

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

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 / 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": "subscribed"
  }
}
{
  "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": "unsubscribed"
  }
}

contact.consentAdded

Contact consent added

Triggered when a contact has a consent record added.

Note

  • All identifiers are sent to allow correlation.

Event data fields

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

Fields

Required

Data type

Description

contactId

Yes

integer

The immutable identifier for the contact

identifiers

Yes

object

Any 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.

record

Yes

object (see below)

The consent record

  • text

Yes

string

Consent text displayed to the contact

  • consented

Yes

string

ISO 8601 UTC timestamp for when the consent was obtained

  • url

Yes

string

URL the consent was obtained with

  • ipAddress

Yes

string

IP v4/v6 address of the contact the consent was obtained for

  • userAgent

Yes

string

User agent header of the browser used by the contact the consent was obtained for

  • created

Yes

string

ISO 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

Contact preference updated

Triggered when a contact has changed a preference.

Note

  • All identifiers are sent to allow correlation.

Event data fields

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

Fields

Required

Data type

Description

contactId

Yes

integer

The immutable identifier for the contact

identifiers

Yes

object

Any 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.

preference

Yes

object (see below)

The changed preferences

  • id

Yes

integer

ID of the preference

  • isOptedIn

Yes

boolean

Indicates whether the contact is opted into this preference

  • publicName

Yes

string

Public name of the preference

  • privateName

Yes

string

Private 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 etc...

interaction.unsubscribe

Unsubscribe from a channel

Triggered when a contact tries to unsubscribe regardless of if this actually changes the status for the channel. Only events that can be directly attributed to a end user action like clicking a link, tapping a button etc… would trigger this event. For example this would be raised when:

  • Clicking an email unsubscribe link
  • Clicking a link to open a preference center
  • Replying “STOP” to an sms/mms/rcs
  • Click on the SMS unsubscribe link
  • WhatsApp user unsubscribe, replying “STOP”

Note

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

Event data fields

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

Fields

Required

Data type

Description

contactId

Yes

integer

The immutable identifier for the contact

identifiers

Yes

object

Any 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.

channel

Yes

string enum:

- email
- sms/mms/rcs
- push
- whatsapp

Channel affected

status

Yes

string enum:

- unsubscribed
- suppressed

Current status for the channel

reason

Yes

string enum:

- unsubscribeClick
- response
- ispComplaint
- other

Reason for channel update (if available)


- unsubscribeClick - Person has clicked a link to unsubscribe
- response - They have sent a message in requesting to be unsubscribed e.g. “STOP” message in SMS
- ispComplaint - They complained to their ISP about messages received.
- other - Specific cause of subscription change cannot be determined.

messageId

No

string

The message id related to this unsubscribe if applicable.

campaignDetails

No

object (see below)

Details of the campaign the unsubscribe is associated with if applicable

  • id

Yes

integer

The campaign identifier

  • name

Yes

string

The campaigns name

  • type

No

string enum:

- standard
- triggered

The type of campaign

additionalData

No

object

Any 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

Click interaction

Triggered when a page is viewed and tracked.

Note

  • All identifiers are sent to allow correlation.

Event data fields

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

Fields

Required

Data type

Description

url

Yes

string

The URL viewed

linkType

Yes

string enum:

- link
- landingPage
- smsLink

The type of link being viewed

shorteningDetails

No

object see below:

Link shortening details if shortened.

  • originalUrl

Yes

string

URL prior to shortening

page

No

string

The pages title, or landing pages name

pageId

No

integer

The landing page id if known

contactId

Yes

integer

The immutable identifier for the contact

identifiers

Yes

object

Any 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.

usedCookie

No

boolean

Indicates whether tracking cookie was used or not.

ipAddress

No

string

IP address of viewer, if known

userAgent

No

string

The user agent string of the browser.

messageId

No

string

The message id related to this interaction if applicable.

campaignDetails

No

object (see below)

Details of the campaign if applicable

  • id

Yes

integer

The campaign identifier

  • name

Yes

string

The campaigns name

  • type

No

string enum:

- standard
- triggered

The type of campaign

program

No

object see below:

Automation program details if applicable

  • id

Yes

int

Automation program id if applicable

  • name

Yes

string

Automation program name

productRecommendation

No

object see below:

Details of the product recommendation that referred to this page if applicable

  • id

Yes

integer

Product rec id

  • name

Yes

string

Product rec name

  • type

Yes

string

Product rec type

roiMarkers

No

array of object see below:

ROI tracking if applicable

  • name

Yes

string

Name of ROI marker

  • type

Yes

string enum:

- string
- numeric
- date
- boolean

Data type of maker

  • value

Yes

string

Value of marker

  • isOverridable

Yes

boolean

Overridable indicator

additionalData

No

object

Any 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,
    "by": {
      "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",
    "by": {
      "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",
    "by": {
      "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

Push click interaction

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

Note

  • All identifiers are sent to allow correlation.

Event data fields

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

Fields

Required

Data type

Description

messageId

Yes

string

Unique id for message

sent

Yes

string

ISO 8601 UTC time of the push send

program

No

object see below:

Automation program details if applicable

  • id

Yes

int

Automation program id if applicable

  • name

Yes

string

Automation program name

contactId

Yes

integer

The immutable identifier for the contact

identifiers

Yes

object

Any 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.

additionalData

No

object

Any 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

Social Share interaction

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

Note

  • All identifiers are sent to allow correlation.

Event data fields

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

Fields

Required

Data type

Description

contactId

Yes

integer

The immutable identifier for the contact

identifiers

Yes

object

Any 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.

messageId

No

string

The message id related to this interaction if applicable.

campaignDetails

No

object (see below)

Details of the campaign if applicable

  • id

Yes

integer

The campaign identifier

  • name

Yes

string

The campaigns name

  • type

No

string enum:

- standard
- triggered

The type of campaign

ipAddress

Yes

string

IP address of clicker

bookmarkName

Yes

string

Bookmark name clicked

viewType

Yes

string enum:

- bookmark
- view
- share

The type of link being viewed

additionalData

No

object

Any 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

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

Message sent

Triggered when a message is sent on any channel.

The messages content can be found in the message field, but depending on the type of content and size 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 will be 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 - Some channels we cannot give you the exact message sent to the contact but rather a object describing what message was sent. For instance with WhatsApp template based message we will pass you the details of what template was sent with what personalization.

  • All identifiers are sent to allow correlation.

Event data fields

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

Fields

Required

Data type

Description

messageId

Yes

string

Unique id for message

channel

Yes

string enum:

- email
- transactionalEmail
- sms
- mms
- whatsapp
- push

The channel the message was sent on.

to

Yes

object (see below)

Any identifiers for the recipient

  • contactId

No

integer

The immutable identifier for the contact

  • recipient

Yes

string

The recipients identifier, so email, phone number, etc…

  • identifiers

No

object

Any 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.

from

Yes

string

Any identifiers for the sender email, phone number etc… for push the app id from the push profile

campaignDetails

No

object (see below)

Details of the campaign that sent it if applicable

  • id

Yes

integer

The campaign identifier

  • name

Yes

string

The campaigns name

  • type

No

string enum:

- standard
- triggered

The type of campaign.

program

No

object see below:

Automation program details if applicable

  • id

Yes

int

Automation program id if applicable

  • name

Yes

string

Automation program name

message

No

object

The message content, if available

  • text

No

string

The message content as a string if it can fit in the event and be converted to a string.

  • lobId

No

string

If the message content is too large to fit in the event, then this field will have a LOB (Large Object) ID where the contents can be downloaded using the Retrieve large object call.

  • object

No

object

For channels that have structured messages such as WhatsApp templates we will return a JSON object describing the content of the message.

attachments

No

Array of objects (see below)

Any attachments to the message

  • name

Yes

string

The name/filename of the attachment

  • mimeType

Yes

string

MIME type of the attachment

  • fileLobId

Yes

string

The files contents can be retrieved using this ID and the Retrieve Lob call.

channelData

No

object

Any additional channel data we want to pass back to the customer

metaData

No

object

Any customer metadata associated with the send, used for correlation etc…

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"
    },
    "message": {
      "text": "<Email body>"
    },
    "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
    }
  }
}

message.status

Message status update

Triggered when a message status is updated, such as delivered, read, failed etc…

Note

  • All identifiers are sent to allow correlation.

Event data fields

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

Fields

Required

Data type

Description

messageId

Yes

string

Unique id for message, used to correlate all message events together on a per send basis.

channel

Yes

string enum:

- email
- transactionalEmail
- sms
- mms
- whatsapp
- push

The channel the message was sent on.

status

Yes

string enum:

- delivered
- read
- failed
- expired
- deleted
- soft bounce
- hard bounce
- skipped
- blocked

Status of message

subStatus

No

string

Additional sub-status information if relavent

to

Yes

object (see below)

Any identifiers for the recipient

  • contactId

No

integer

The immutable identifier for the contact

  • recipient

Yes

string

The recipients identifier, so email, phone number, etc…

  • identifiers

No

object

Any 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.

campaignDetails

No

object (see below)

Details of the campaign if a reply to a campaign message

  • id

Yes

integer

The campaign identifier

  • name

Yes

string

The campaigns name

  • type

No

string enum:

- standard
- triggered

The type of campaign

program

No

object see below:

Automation program details if applicable

  • id

Yes

int

Automation program id if applicable

  • name

Yes

string

Automation program name

channelData

No

object

Any additional channel data we want to pass back to the customer

metaData

No

object

Any customer metadata associated with the original send, used for correlation etc…

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

Inbound message received

Triggered when a message is received.

The messages content can be found in the message field, but depending on the type of content and size 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 will be 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 - Some channels we cannot give you the exact message sent to the contact but rather a object describing what message was sent. For instance with WhatsApp template based message we will pass you the details of what template was sent with what personalization.

  • All identifiers are sent to allow correlation.

Event data fields

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

Fields

Required

Data type

Description

messageId

Yes

string

Unique id for message

channel

Yes

string enum:

- email
- transactionalEmail
- sms
- mms
- whatsapp

The channel the message was sent on.

from

Yes

object (see below)

Any identifiers for the sender of the message

  • contactId

No

integer

The immutable identifier for the contact

  • sender

Yes

string

The senders identifier, so email, phone number, etc…

  • identifiers

No

object

Any 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.

to

Yes

string

Any identifiers for the email, phone number etc… that the message was sent to

campaignDetails

No

object (see below)

Details of the campaign if a reply to a campaign message

  • id

Yes

integer

The campaign identifier

  • name

Yes

string

The campaigns name

  • type

No

string enum:

- standard
- triggered

The type of campaign.

program

No

object see below:

Automation program details if applicable

  • id

Yes

int

Automation program id if applicable

  • name

Yes

string

Automation program name

message

No

object

The message content, if available

  • text

No

string

The message content as a string if it can fit in the event and be converted to a string.

  • lobId

No

string

If the message content is too large to fit in the event, then this field will have a LOB (Large Object) ID where the contents can be downloaded using the Retrieve large object call.

  • object

No

object

For channels that have structured messages such as WhatsApp templates we will return a JSON object describing the content of the message.

attachments

No

Array of objects (see below)

Any attachments to the message

  • name

Yes

string

The name/filename of the attachment

  • mimeType

Yes

string

MIME type of the attachment

  • fileLobId

Yes

string

The files contents can be retrieved using this ID and the Retrieve large object call.

channelData

No

object

Any additional channel data we want to pass back to the customer, such as keywords and other channel specific data

metaData

No

object

Any customer metadata associated with the original send, used for correlation etc…

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 accounts 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 will be 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

Insight Data collection created

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 collections 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

Insight Data collection removed

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 collections 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

Insight Data record set

Triggered when an Insight Data records value is set, so 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

Note

  • If the Insight Data collection the change occurred in is contact level scoped then the contactid and identifiers fields will be populated, otherwise not.
  • All identifiers are sent to allow correlation when related to a contact scoped collection.
  • Depending on the byte size of the records 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 collections scope
contactIdNointegerThe immutable identifier for the contact if contact scoped collection
identifiersNoobjectAny identifiers for the contact if contact scoped collection. 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.
recordIdYesstringThe unique recordId for the record.
jsonNoobjectThe records data if less than 800KB
jsonLobIdNostringIf the message content is too large to fit in the event, then this field will have 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

Insight Data record 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

Note

  • If the Insight Data collection the change occurred in is contact level scoped then the contactid and identifiers fields will be 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 collections scope
contactIdNointegerThe immutable identifier for the contact if contact scoped collection
identifiersNoobjectAny identifiers for the contact if contact scoped collection. 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.
recordIdYesstringThe unique recordId 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"
  }
}