openapi: 3.2.0
info:
title: Events Subscriptions API
description: 'Send and receive events with Dotdigital. Use this API to import batches of
contact-associated events, manage event subscriptions (create, retrieve, update,
and delete), retrieve queued events for a subscription using checkpoint-based
pagination, and download large objects referenced in event data.'
version: 3.1.1-Events-in-out
servers:
- url: https://{region}-api.dotdigital.com
variables:
region:
description: The Dotdigital region id your account belongs to
enum:
- r1
- r2
- r3
default: r1
security:
- basicAuth: []
tags:
- name: Subscriptions
paths:
/events/v3/export/subscriptions:
get:
tags:
- Subscriptions
summary: List subscriptions
description: Lists all events subscriptions and their details.
operationId: listSubscriptions
parameters:
- name: x-ddg-integration-token
in: header
description: If you are a partner of Dotdigital and have a [verified integration](https://developer.dotdigital.com/docs/partner-integration-verification) then include your [integration tracking token](https://developer.dotdigital.co/docs/verified-integration-tracking) here.
required: false
schema:
pattern: /^(?:\{{0,1}(?:[0-9a-fA-F]){8}-(?:[0-9a-fA-F]){4}-(?:[0-9a-fA-F]){4}-(?:[0-9a-fA-F]){4}-(?:[0-9a-fA-F]){12}\}{0,1})$/
type: string
example: 5a96bc79-19a7-4544-973b-e2da0c9136f9
- name: limit
in: query
description: The maximum number of records to return in the results, note it could be fewer.
required: false
schema:
maximum: 5000
minimum: 1
type: integer
example: 2000
default: 2000
- name: marker
in: query
description: Pagination marker to retrieve the data from
schema:
type: string
example: RXhhbXBsZSBhbXJrZXIgdmFsdWU=
responses:
'200':
description: Subscriptions
content:
application/json:
schema:
$ref: '#/components/schemas/inline_response_200_1'
examples:
Example:
value:
_links:
self:
marker: ''
link: https://r1-api.dotdigital.com/events/v3/export/subscriptions
first:
marker: ''
link: https://r1-api.dotdigital.com/events/v3/export/subscriptions
_items:
- id: 10
name: Contact events
status: active
subscribedEventTypes:
- eventType: contact.created
- eventType: contact.preferenceUpdated
- eventType: contact.removed
- eventType: contact.updated
- eventType: contact.membershipUpdated
- eventType: contact.consentAdded
- eventType: interaction.click
- eventType: interaction.unsubscribe
alertsConfiguration:
alertChannels: emailAndInApp
email: someone@emailsim.io
created: '2026-01-14T10:36:56.931Z'
updated: '2026-02-17T15:42:25.836Z'
- id: 12
name: Insight events
status: active
subscribedEventTypes:
- eventType: insightData.collectionCreated
- eventType: insightData.collectionRemoved
- eventType: insightData.removed
- eventType: insightData.set
alertsConfiguration:
alertChannels: emailAndInApp
email: someone@emailsim.io
created: '2026-01-14T14:23:02.280Z'
updated: '2026-01-14T14:23:02.280Z'
'401':
description: Unauthorized
'403':
description: Forbidden
'500':
description: Internal Server Error
post:
tags:
- Subscriptions
summary: Create subscription
description: "Creates a events subscription. \n\nThe `name` passed must be unique within the accounts subscriptions\n\nIf you apply filters to your event subscription then **all filters must match** (logical AND) for the event to be captured.\n\nIf you want to match the same event type on multiple different sets of filters (logical OR) then add the event type multiple time to the subscription with differing filters."
operationId: createSubscription
parameters:
- name: x-ddg-integration-token
in: header
description: If you are a partner of Dotdigital and have a [verified integration](https://developer.dotdigital.com/docs/partner-integration-verification) then include your [integration tracking token](https://developer.dotdigital.co/docs/verified-integration-tracking) here.
required: false
schema:
pattern: /^(?:\{{0,1}(?:[0-9a-fA-F]){8}-(?:[0-9a-fA-F]){4}-(?:[0-9a-fA-F]){4}-(?:[0-9a-fA-F]){4}-(?:[0-9a-fA-F]){12}\}{0,1})$/
type: string
example: 5a96bc79-19a7-4544-973b-e2da0c9136f9
- name: x-ddg-calling-system
in: header
description: _Dotdigital use only_ The calling systems identifier
required: false
schema:
maxLength: 60
type: string
default: customer
requestBody:
description: Subscription details
content:
application/json:
schema:
$ref: '#/components/schemas/subscriptionRequest'
examples:
Event subscription:
description: Example of subscribing to multiple events.
value:
name: Campaign events
status: active
subscribedEventTypes:
- eventType: message.sent
- eventType: message.status
filters:
- field: $.channel
matchPattern: sms
- field: $.status
matchPattern: failed
alertsConfiguration:
alertChannels: emailAndInApp
email: alerts@emailsim.io
An OR event subscription:
description: Subscribing to the same event multiple times to create a logical OR. This example includes all `message.sent` events sent on the `sms` or `whatsApp` channel.
value:
name: Campaign events
status: active
subscribedEventTypes:
- eventType: message.sent
filters:
- field: $.channel
matchPattern: sms
- eventType: message.sent
filters:
- field: $.channel
matchPattern: whatsApp
alertsConfiguration:
alertChannels: emailAndInApp
email: alerts@emailsim.io
required: true
responses:
'201':
description: Subscription created
content:
application/json:
schema:
$ref: '#/components/schemas/subscription'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
examples:
unknownEventType:
value:
errorCode: events:invalidEventType
description: The type value 'example.unknownType' is invalid.
'401':
description: Unauthorized
'403':
description: Forbidden
'409':
description: Name conflict
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
example:
errorCode: events:nameAlreadyExists
description: The name value 'Camapign events' already exists. All names must be unique!
'500':
description: Internal Server Error
/events/v3/export/subscriptions/{subscriptionId}:
get:
tags:
- Subscriptions
summary: Gets subscription
description: Gets a events subscription details.
operationId: getSubscription
parameters:
- name: subscriptionId
in: path
description: The events subscription id you want to interact with.
required: true
schema:
type: integer
example: 1234
- name: x-ddg-integration-token
in: header
description: If you are a partner of Dotdigital and have a [verified integration](https://developer.dotdigital.com/docs/partner-integration-verification) then include your [integration tracking token](https://developer.dotdigital.co/docs/verified-integration-tracking) here.
required: false
schema:
pattern: /^(?:\{{0,1}(?:[0-9a-fA-F]){8}-(?:[0-9a-fA-F]){4}-(?:[0-9a-fA-F]){4}-(?:[0-9a-fA-F]){4}-(?:[0-9a-fA-F]){12}\}{0,1})$/
type: string
example: 5a96bc79-19a7-4544-973b-e2da0c9136f9
responses:
'200':
description: Subscription details
content:
application/json:
schema:
$ref: '#/components/schemas/subscription'
examples:
Example:
value:
id: 95
created: '2025-02-07T16:23:33.741Z'
updated: '2025-02-11T01:33:00.000Z'
name: Campaign events
status: inactive
subscribedEventTypes:
- eventType: message.sent
- eventType: message.status
filters:
- field: $.channel
matchPattern: sms
alertsConfiguration:
alertChannels: none
'401':
description: Unauthorized
'403':
description: Forbidden
'404':
$ref: '#/components/responses/subscriptionNotFound'
'500':
description: Internal Server Error
put:
tags:
- Subscriptions
summary: Update subscription
description: 'Updates a events subscription with new details.
If you apply filters to your event subscription then **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 time to the subscription with differing filters.'
operationId: updateSubscription
parameters:
- name: subscriptionId
in: path
description: The events subscription id you want to interact with.
required: true
schema:
type: integer
example: 1234
- name: x-ddg-integration-token
in: header
description: If you are a partner of Dotdigital and have a [verified integration](https://developer.dotdigital.com/docs/partner-integration-verification) then include your [integration tracking token](https://developer.dotdigital.co/docs/verified-integration-tracking) here.
required: false
schema:
pattern: /^(?:\{{0,1}(?:[0-9a-fA-F]){8}-(?:[0-9a-fA-F]){4}-(?:[0-9a-fA-F]){4}-(?:[0-9a-fA-F]){4}-(?:[0-9a-fA-F]){12}\}{0,1})$/
type: string
example: 5a96bc79-19a7-4544-973b-e2da0c9136f9
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/subscriptionRequest'
responses:
'200':
description: Subscription details
content:
application/json:
schema:
$ref: '#/components/schemas/subscription'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
examples:
unknownEventType:
value:
errorCode: events:invalidEventType
description: The type value 'example.unknownType' is invalid.
'401':
description: Unauthorized
'403':
description: Forbidden
'404':
$ref: '#/components/responses/subscriptionNotFound'
'409':
description: Name conflict
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
example:
errorCode: events:nameAlreadyExists
description: The name value 'Camapign events' already exists. All names must be unique!
'500':
description: Internal Server Error
delete:
tags:
- Subscriptions
summary: Deletes subscription
description: "Deletes a events subscription.
\n**Note:** once deleted it cannot be restored, this is a destructive call."
operationId: deleteSubscription
parameters:
- name: subscriptionId
in: path
description: The events subscription id you want to interact with.
required: true
schema:
type: integer
example: 1234
- name: x-ddg-integration-token
in: header
description: If you are a partner of Dotdigital and have a [verified integration](https://developer.dotdigital.com/docs/partner-integration-verification) then include your [integration tracking token](https://developer.dotdigital.co/docs/verified-integration-tracking) here.
required: false
schema:
pattern: /^(?:\{{0,1}(?:[0-9a-fA-F]){8}-(?:[0-9a-fA-F]){4}-(?:[0-9a-fA-F]){4}-(?:[0-9a-fA-F]){4}-(?:[0-9a-fA-F]){12}\}{0,1})$/
type: string
example: 5a96bc79-19a7-4544-973b-e2da0c9136f9
responses:
'204':
description: Subscription deleted
'401':
description: Unauthorized
'404':
$ref: '#/components/responses/subscriptionNotFound'
components:
responses:
subscriptionNotFound:
description: Subscription not found
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
example:
errorCode: events:subscriptionNotFound
description: The following subscription could not be found
details:
- item: zf0f945b36ad8
description: Not found.
schemas:
eventType:
required:
- eventType
type: object
properties:
eventType:
type: string
description: The event type
example: email.read
filters:
maxItems: 5
minItems: 1
type: array
description: 'Capture only events that match these filters.
All filters will be accessed and **all must match for the event to be captured!**
'
items:
$ref: '#/components/schemas/filter'
additionalProperties: false
description: An event type and any inclusive filters that should be applied.
paginationLinksPrevNext_self:
required:
- link
- marker
type: object
properties:
marker:
type: string
description: Pagination marker to be passed to API calls to retrieve this data page
link:
type: string
description: Link to retrieve the data page
description: Details for accessing this data page via pagination
paginationLinksPrevNext_prev:
required:
- link
- marker
type: object
properties:
marker:
type: string
description: Pagination marker to be passed to API calls to retrieve this data page
link:
type: string
description: Link to retrieve the data page
description: Details for accessing the previous pagea worth of data
paginationLinksPrevNext:
required:
- first
- self
type: object
properties:
self:
$ref: '#/components/schemas/paginationLinksPrevNext_self'
prev:
$ref: '#/components/schemas/paginationLinksPrevNext_prev'
next:
$ref: '#/components/schemas/paginationLinksPrevNext_next'
description: Pagination links
paginationLinksPrevNext_next:
required:
- link
- marker
type: object
properties:
marker:
type: string
description: Pagination marker to be passed to API calls to retrieve this data page
link:
type: string
description: Link to retrieve the data page
description: Details for accessing the next pages worth of data
subscriptionStatus:
type: string
description: The subscription status.
enum:
- active
- inactive
default: inactive
subscriptionRequest:
required:
- alertsConfiguration
- name
- status
- subscribedEventTypes
type: object
properties:
name:
maxLength: 50
minLength: 1
type: string
description: Descriptive name for the subscription.
example: Campaign events
status:
$ref: '#/components/schemas/subscriptionStatus'
subscribedEventTypes:
maxItems: 100
minItems: 1
type: array
description: The event types this subscription collects.
example:
- eventType: message.sent
- eventType: message.status
filters:
- field: $.channel
matchPattern: sms
items:
$ref: '#/components/schemas/eventType'
alertsConfiguration:
description: Alert options to use if we detect issues with the subscription.
oneOf:
- title: No alerts
required:
- alertChannels
type: object
properties:
alertChannels:
type: string
description: The type(s) of channels to be alerted on.
enum:
- none
description: No alerts
- title: In app alerts only
required:
- alertChannels
type: object
properties:
alertChannels:
type: string
description: The type(s) of channels to be alerted on.
enum:
- inApp
description: In app alerts only
- title: Email alerts only
required:
- alertChannels
- email
type: object
properties:
alertChannels:
type: string
description: The type(s) of channels to be alerted on.
enum:
- email
email:
type: string
description: The email address to send alerts regarding this subscription to.
format: email
example: alerts@emailsim.io
description: Email alerts only
- title: Email and in-app alerts
required:
- alertChannels
- email
type: object
properties:
alertChannels:
type: string
description: The type(s) of channels to be alerted on.
enum:
- emailAndInApp
email:
type: string
description: The email address to send alerts regarding this subscription to.
format: email
example: alerts@emailsim.io
description: Email and in-app alerts
additionalProperties: false
errorResponse_details:
required:
- description
- item
type: object
properties:
item:
type: string
description: Item the error is associated with, for example, field name, unique identifier for an entity or item in batch
description:
type: string
description: Description of the error
filter:
required:
- field
- matchPattern
type: object
properties:
field:
type: string
description: 'The [JSON path](https://en.wikipedia.org/wiki/JSONPath) to the field to match against.
Note: The base ($) is the `eventData` field.
'
example: $.channel
matchPattern:
maxLength: 1024
minLength: 1
type: string
description: '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
_Note: 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_
'
example: http?://*
caseSensitive:
type: boolean
description: Whether the matching should be case sensitive.
default: true
additionalProperties: false
description: 'An inclusive filter that must be matched to include the event.
'
inline_response_200_1:
required:
- _items
- _links
type: object
properties:
_links:
$ref: '#/components/schemas/paginationLinksPrevNext'
_items:
type: array
description: Returned program extensions
items:
$ref: '#/components/schemas/subscription'
errorResponse:
required:
- description
- errorCode
type: object
properties:
errorCode:
type: string
description: Unique error code
description:
type: string
description: Description of the issue
details:
type: array
items:
$ref: '#/components/schemas/errorResponse_details'
subscription:
allOf:
- required:
- created
- id
- updated
type: object
properties:
id:
type: integer
description: The subscriptions unique identifier.
example: 95
created:
type: string
description: The UTC date time in ISO 8601 format when the subscription was created.
format: date-time
example: '2025-02-07T16:23:33.741Z'
updated:
type: string
description: The UTC date time in ISO 8601 format when the subscription was updated.
format: date-time
example: '2025-02-11T01:33:00Z'
additionalProperties: false
- $ref: '#/components/schemas/subscriptionRequest'
securitySchemes:
basicAuth:
type: http
scheme: basic
externalDocs:
description: Learn more about Dotdigital APIs
url: https://developer.dotdigital.com
x-samples-languages:
- curl
- csharp
- java
- javascript
- node
- python
- php
- ruby