Dotdigital CPaaS API

The Communications Platform as a Service estate under /cpaas — omnichannel outbound and inbound messaging across SMS, MMS, WhatsApp, push, Facebook Messenger and app messaging, plus chat, conversations, sessions, profiles, message rules, message history, phone number validation, content, templates, analytics and the webhook registration service.

Documentation

Specifications

OpenAPI
https://raw.githubusercontent.com/api-evangelist/dotdigital/refs/heads/main/openapi/dotdigital-omnichannel-openapi.yml
OpenAPI
https://raw.githubusercontent.com/api-evangelist/dotdigital/refs/heads/main/openapi/dotdigital-cpaas-openapi.yml
OpenAPI
https://raw.githubusercontent.com/api-evangelist/dotdigital/refs/heads/main/openapi/dotdigital-whatsapp-channel-openapi.yml
OpenAPI
https://raw.githubusercontent.com/api-evangelist/dotdigital/refs/heads/main/openapi/dotdigital-message-rules-openapi.yml
OpenAPI
https://raw.githubusercontent.com/api-evangelist/dotdigital/refs/heads/main/openapi/dotdigital-message-history-openapi.yml
OpenAPI
https://raw.githubusercontent.com/api-evangelist/dotdigital/refs/heads/main/openapi/dotdigital-phone-number-validation-openapi.yml
OpenAPI
https://raw.githubusercontent.com/api-evangelist/dotdigital/refs/heads/main/openapi/dotdigital-profile-openapi.yml
OpenAPI
https://raw.githubusercontent.com/api-evangelist/dotdigital/refs/heads/main/openapi/dotdigital-session-openapi.yml
OpenAPI
https://raw.githubusercontent.com/api-evangelist/dotdigital/refs/heads/main/openapi/dotdigital-chat-openapi.yml
OpenAPI
https://raw.githubusercontent.com/api-evangelist/dotdigital/refs/heads/main/openapi/dotdigital-chat-config-openapi.yml
OpenAPI
https://raw.githubusercontent.com/api-evangelist/dotdigital/refs/heads/main/openapi/dotdigital-chat-message-openapi.yml
OpenAPI
https://raw.githubusercontent.com/api-evangelist/dotdigital/refs/heads/main/openapi/dotdigital-chat-presence-openapi.yml
OpenAPI
https://raw.githubusercontent.com/api-evangelist/dotdigital/refs/heads/main/openapi/dotdigital-conversation-openapi.yml
OpenAPI
https://raw.githubusercontent.com/api-evangelist/dotdigital/refs/heads/main/openapi/dotdigital-conversation-message-openapi.yml
OpenAPI
https://raw.githubusercontent.com/api-evangelist/dotdigital/refs/heads/main/openapi/dotdigital-content-openapi.yml
OpenAPI
https://raw.githubusercontent.com/api-evangelist/dotdigital/refs/heads/main/openapi/dotdigital-templates-openapi.yml
OpenAPI
https://raw.githubusercontent.com/api-evangelist/dotdigital/refs/heads/main/openapi/dotdigital-analytics-openapi.yml
OpenAPI
https://raw.githubusercontent.com/api-evangelist/dotdigital/refs/heads/main/openapi/dotdigital-webhook-openapi.yml

Other Resources

OpenAPI Specification

dotdigital-omnichannel-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Omnichannel API
  description: 'Provides methods for sending single and batched outbound messages to any

    configured channel, as well as posting inbound messages and message or

    inbound status updates. Also supports retrieval, patching, and deletion of

    individual messages, enabling full lifecycle management of omnichannel

    communications.'
  version: 1.3.1
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: []
paths:
  /cpaas/messages/{messageId}/statuses/{status}:
    post:
      tags:
      - Omnichannel API
      summary: Posts a status for a message
      parameters:
      - name: messageId
        in: path
        description: The id of the message
        required: true
        style: simple
        explode: false
        schema:
          type: string
      - name: status
        in: path
        description: The status of the message
        required: true
        style: simple
        explode: false
        schema:
          type: string
          enum:
          - failed
          - delivered
          - read
          - expired
          - sent
          - filtered
      requestBody:
        description: The status details
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MessageStatus'
        required: true
      responses:
        '200':
          description: The status was received
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MessageStatus'
        '400':
          description: Validation issues were found
          content: {}
        '404':
          description: The message was not found
          content: {}
      x-codegen-request-body-name: details
  /cpaas/messages/{messageId}:
    get:
      tags:
      - Omnichannel API
      summary: Retrieves the current state of a specific message.
      parameters:
      - name: messageId
        in: path
        description: The id of the message
        required: true
        style: simple
        explode: false
        schema:
          type: string
      responses:
        '200':
          description: The message details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Message'
        '404':
          description: The message was not found
          content: {}
    delete:
      tags:
      - Omnichannel API
      summary: Deletes a Message
      parameters:
      - name: messageId
        in: path
        description: The id of the message
        required: true
        style: simple
        explode: false
        schema:
          type: string
      responses:
        '204':
          description: Indicates successful deletetion of a Message
          content: {}
        '404':
          description: The Message was not found
          content: {}
        '409':
          description: A concurrency issue occured deleting the Message
          content: {}
    patch:
      tags:
      - Omnichannel API
      summary: Patches a Message
      parameters:
      - name: messageId
        in: path
        description: The id of the message
        required: true
        style: simple
        explode: false
        schema:
          type: string
      requestBody:
        description: Patch options
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MessagePatchBase'
        required: true
      responses:
        '202':
          description: Indicates successful patch of a Message
          content: {}
        '400':
          description: Validation issues were found
          content: {}
        '404':
          description: The Message was not found
          content: {}
        '409':
          description: A concurrency issue occured
          content: {}
      x-codegen-request-body-name: message
  /cpaas/messages:
    post:
      tags:
      - Omnichannel API
      summary: Send a new message
      requestBody:
        description: The message details and options
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MessageBase'
        required: true
      responses:
        '201':
          description: The message was accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Message'
        '400':
          description: Validation issues were found
          content: {}
      x-codegen-request-body-name: message
  /cpaas/messages/batch:
    post:
      tags:
      - Omnichannel API
      summary: Send a batch of new messages
      requestBody:
        description: The message details and options
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/MessageBase'
        required: true
      responses:
        '202':
          description: The batch was accepted
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/inline_response_202'
        '400':
          description: Validation issues were found
          content: {}
      x-codegen-request-body-name: message
  /cpaas/messages/inbounds:
    post:
      tags:
      - Omnichannel API
      summary: Posts an inbound message
      requestBody:
        description: The inbound message details and options
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InboundMessage'
        required: true
      responses:
        '201':
          description: The message was accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InboundMessage'
        '400':
          description: Validation issues were found
          content: {}
      x-codegen-request-body-name: inbound
  /cpaas/messages/inbounds/{inboundMessageId}/statuses/{status}:
    post:
      tags:
      - Omnichannel API
      summary: Posts a status for an inbound
      parameters:
      - name: inboundMessageId
        in: path
        description: The id of the inbound message
        required: true
        style: simple
        explode: false
        schema:
          type: string
      - name: status
        in: path
        description: The status of the inbound message
        required: true
        style: simple
        explode: false
        schema:
          type: string
          enum:
          - delivered
          - read
      requestBody:
        description: The inbound message status detail
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InboundMessageStatus'
        required: true
      responses:
        '200':
          description: The inbound message status was received
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InboundMessage'
        '400':
          description: Validation issues were found
          content: {}
        '404':
          description: The inbound message was not found
          content: {}
      x-codegen-request-body-name: details
components:
  schemas:
    Message:
      type: object
      properties:
        messageId:
          type: string
          description: Unique id for this message
          readOnly: true
        sentOn:
          type: string
          description: Date/Time (in UTC, ISO 8601 format) that the message sent was accepted
          format: date-time
          readOnly: true
        status:
          type: string
          description: Current status of the message
          readOnly: true
          enum:
          - processing
          - retrying
          - sent
          - delivered
          - read
          - expired
          - failed
          - filtered
        statusDetails:
          type: object
          properties: {}
          description: Specific details related to the current status
        _createdOn:
          type: string
          description: The date (in UTC, ISO 8601 format) that the message was created
          format: date-time
          readOnly: true
        _createdBy:
          type: string
          description: The identity that created the message
        _updatedOn:
          type: string
          description: The date (in UTC, ISO 8601 format) that the message was last updated
          format: date-time
          readOnly: true
        _updatedBy:
          type: string
          description: The identity that created the message
          readOnly: true
        metadata:
          type: object
          additionalProperties: true
          description: 'Custom metadata relating to the message. Profile data can be substituted anywhere by using the syntax {{profile.fieldName}} - example: {{profile.forename}}'
        to:
          $ref: '#/components/schemas/to'
        title:
          type: string
          description: 'The title to use to describe the message (if supported by the channel). Profile data can be substituted anywhere by using the syntax {{profile.fieldName}} - example: Hello {{profile.forename}}'
        body:
          type: string
          description: 'This is the default text based body to be used, if no body override is declared for a channel. Profile data can be substituted anywhere by using the syntax {{profile.fieldName}} - example: Hello {{profile.forename}}'
        customBody:
          $ref: '#/components/schemas/customBody'
        overrides:
          $ref: '#/components/schemas/Message_overrides'
        channelOptions:
          $ref: '#/components/schemas/channelOptions'
        conversationId:
          type: string
          description: Optional conversationId, used to correlate messages within the platform and on any external channels, if supported.
        expiresOn:
          type: string
          description: Date/Time (in UTC, ISO 8601 format) that the should expire (if supported by the selected channel).
          format: date-time
        rules:
          type: array
          description: The channels to attempt for this message, in order of priority
          items:
            type: string
            example: sms
        messageParts:
          type: array
          description: (Additional) parts to be sent with the message, as native components where supported, or attachments / links.
          items:
            $ref: '#/components/schemas/MessagePart'
    MessagePart:
      required:
      - type
      type: object
      properties:
        channels:
          type: array
          description: A list of channels to which this message part applies
          items:
            type: string
        name:
          type: string
          description: A name for the part
        type:
          type: string
          description: The mime type (if applicable) sof the part
        url:
          type: string
          description: A url associated with the message part
        data:
          oneOf:
          - title: Text based content
            type: string
          - title: Binary data in Base64
            type: string
            format: binary
          - title: Object representing the content
            type: object
        size:
          type: integer
          description: Size of the message part in bytes
      description: Details of a single part that makes up a message
    MessageStatus:
      required:
      - channel
      type: object
      properties:
        channel:
          type: string
          description: The id of the channel the status is for.
        channelStatus:
          type: object
          additionalProperties: true
          description: Status data from the channel.
        timestamp:
          type: string
          description: The date (in UTC, ISO 8601 format) of the message status
          format: date-time
        failureReason:
          type: string
          description: A plain-english description of the reason for failure
    InboundMessage:
      required:
      - channel
      - from
      type: object
      properties:
        messageId:
          type: string
          description: Unique id for this inbound message
          readOnly: true
        receivedOn:
          type: string
          description: Date/Time (in UTC, ISO 8601 format) that the message sent was received
          format: date-time
          readOnly: true
        status:
          type: string
          description: Current status of the inbound message
          readOnly: true
          enum:
          - received
          - delivered
          - read
        from:
          type: object
          additionalProperties: true
          description: Any id fields to help identify the sender (fbmessengerId, phoneNumber)
        channel:
          type: string
          description: The id of the channel the inbound is being sent to.
        to:
          type: object
          additionalProperties: true
          description: Any id fields to help identify the recipient (pageId, phoneNumber)
        title:
          type: string
          description: Optional title field for the message.
        body:
          type: string
          description: A simple string representation of the message.
        conversationId:
          type: string
          description: Optional string containing a correlation id for the message.
        metadata:
          type: object
          additionalProperties: true
          description: Custom metadata relating to the message.
        channelData:
          $ref: '#/components/schemas/InboundMessage_channelData'
        messageParts:
          type: array
          description: Additional inbound message parts / attachments
          items:
            $ref: '#/components/schemas/MessagePart'
        correlation:
          $ref: '#/components/schemas/InboundMessage_correlation'
        _createdOn:
          type: string
          description: The date (in UTC, ISO 8601 format) that the inbound message was created
          format: date-time
          readOnly: true
        _createdBy:
          type: string
          description: The identity that created the inbound message
        _updatedOn:
          type: string
          description: The date (in UTC, ISO 8601 format) that the inbound message was last updated
          format: date-time
          readOnly: true
        _updatedBy:
          type: string
          description: The identity that created the inbound message
          readOnly: true
    InboundMessageStatus:
      required:
      - timestamp
      type: object
      properties:
        channelStatus:
          type: object
          additionalProperties: true
          description: Status data from the receiving channel.
        timestamp:
          type: string
          description: The date (in UTC, ISO 8601 format) of the inbound message status
          format: date-time
    to:
      type: object
      properties:
        phoneNumber:
          type: string
          description: Phone number, international format
        email:
          type: string
          description: Email address
        profileId:
          type: string
          description: Profile Id, used for App Messaging or to resolve other details from saved profiles.
        fbMessengerId:
          type: string
          description: Facebook Messenger Id
      additionalProperties:
        type: string
      description: Set of identifiers for the message recipient.
    customBody:
      type: object
      properties:
        appMessaging:
          type: object
          additionalProperties: true
          description: Configuration for the app messaging send.
        sms:
          type: object
          additionalProperties: true
          description: Specific details for the SMS channel
        mms:
          type: object
          additionalProperties: true
          description: Specific details for the MMS channel
        fbMessenger:
          type: object
          additionalProperties: true
          description: Specific details for the Facebook Messenger channel
        nativePush:
          type: object
          additionalProperties: true
          description: Specific details for the Native Push channel
        whatsApp:
          type: object
          additionalProperties: true
          description: Specific details for the What's App channel
        rcs:
          type: object
          additionalProperties: true
          description: Specific details for the RCS channel
      additionalProperties: true
      description: 'Custom body for specific channels.  All values specified will be copied onto the payload at the point of sending. Profile data can be substituted anywhere by using the syntax {{profile.fieldName}} - example: {{profile.forename}}'
    channelOptions:
      type: object
      properties:
        appMessaging:
          $ref: '#/components/schemas/channelOptions_appMessaging'
        sms:
          $ref: '#/components/schemas/channelOptions_sms'
        mms:
          $ref: '#/components/schemas/channelOptions_mms'
        fbMessenger:
          $ref: '#/components/schemas/channelOptions_fbMessenger'
        whatsApp:
          $ref: '#/components/schemas/channelOptions_whatsApp'
        rcs:
          $ref: '#/components/schemas/channelOptions_rcs'
        nativePush:
          $ref: '#/components/schemas/channelOptions_nativePush'
      additionalProperties:
        type: object
        properties: {}
        description: Configuration for other channels.
      description: 'Configuration switches for specific channels. If a channel has a customBody as well as values in here, it will return a validation failure. Profile data can be substituted anywhere by using the syntax {{profile.fieldName}} - example: Hello {{profile.forename}}'
    MessageBase:
      required:
      - rules
      - to
      type: object
      properties:
        metadata:
          type: object
          additionalProperties: true
          description: 'Custom metadata relating to the message. Profile data can be substituted anywhere by using the syntax {{profile.fieldName}} - example: {{profile.forename}}'
        to:
          $ref: '#/components/schemas/to'
        title:
          type: string
          description: 'The title to use to describe the message (if supported by the channel). Profile data can be substituted anywhere by using the syntax {{profile.fieldName}} - example: Hello {{profile.forename}}'
        body:
          type: string
          description: 'This is the default text based body to be used, if no body override is declared for a channel. Profile data can be substituted anywhere by using the syntax {{profile.fieldName}} - example: Hello {{profile.forename}}'
        templateId:
          type: string
          description: This is the template id to be used to generate messageParts for this message
        customBody:
          $ref: '#/components/schemas/customBody'
        overrides:
          $ref: '#/components/schemas/Message_overrides'
        channelOptions:
          $ref: '#/components/schemas/channelOptions'
        conversationId:
          type: string
          description: Optional conversationId, used to correlate messages within the platform and on any external channels, if supported.
        expiresOn:
          type: string
          description: Date/Time (in UTC, ISO 8601 format) that the should expire (if supported by the selected channel).
          format: date-time
        rules:
          type: array
          description: The channels to attempt for this message, in order of priority
          items:
            type: string
            example: sms
        messageParts:
          type: array
          description: (Additional) parts to be sent with the message, as native components where supported, or attachments / links.
          items:
            $ref: '#/components/schemas/MessagePart'
        requireOptIn:
          type: boolean
          description: If requireOptIn is set to true, the message will be rejected if the target profile has not opted-in to any of the specified channels
    MessagePatchBase:
      required:
      - redact
      type: object
      properties:
        redact:
          type: boolean
        redactSource:
          type: string
          description: The source of the message redacting
          enum:
          - message
          - chat
    inline_response_202:
      required:
      - index
      - messageId
      type: object
      properties:
        index:
          type: number
          description: The 0-based index of the message in the batch
        messageId:
          type: string
          description: The id of the message
    Message_overrides_appMessaging:
      type: object
      properties:
        conversation:
          type: object
          additionalProperties: true
          description: Overrides for any conversation created for the message send
      description: Overrides for the app messaging send.
    Message_overrides:
      type: object
      properties:
        appMessaging:
          $ref: '#/components/schemas/Message_overrides_appMessaging'
      description: Details of any overrides allowed for the message send on any of the channels
    InboundMessage_channelData:
      type: object
      properties:
        body:
          type: object
          additionalProperties: true
          description: Data relating to the inbound message.
    InboundMessage_correlation:
      required:
      - messageId
      type: object
      properties:
        messageId:
          type: string
          description: The outbound message id
        metadata:
          type: object
          additionalProperties: true
          description: The outbound metadata
          readOnly: true
      description: Data relating to the outbound this inbound is in reply to
    channelOptions_appMessaging_from:
      type: object
      properties:
        profileId:
          type: string
          description: The id of the profile to send from
        name:
          type: string
          description: Name to display
        avatarUrl:
          type: string
          description: URL for an avatar to display with this message
      description: Set of identifiers for the message sender.
    channelOptions_appMessaging:
      type: object
      properties:
        from:
          $ref: '#/components/schemas/channelOptions_appMessaging_from'
      description: Options for the app messaging send.
    channelOptions_sms_unicodeConversion_customReplacements:
      type: object
      properties:
        from:
          type: string
          description: Character that should be replaced
        to:
          type: string
          description: Character that will be replaced
    channelOptions_sms_unicodeConversion:
      type: object
      properties:
        convertUnicodeToGsm:
          type: boolean
          description: Enables automatic conversion of some Unicode characters to their GSM equivalents
        customReplacements:
          type: array
          description: Describe custom unicode replacements for picked signs
          items:
            $ref: '#/components/schemas/channelOptions_sms_unicodeConversion_customReplacements'
      description: Unicode conversion settings
    channelOptions_sms:
      type: object
      properties:
        from:
          minLength: 3
          type: string
          description: An alpha or long number to send from
        allowUnicode:
          type: boolean
          description: Allows unicode characters to be sent over SMS
        unicodeConversion:
          $ref: '#/components/schemas/channelOptions_sms_unicodeConversion'
      description: Options for the SMS channel
    channelOptions_mms:
      type: object
      properties:
        from:
          minLength: 3
          type: string
          description: An alpha or long number to send from
        allowUnicode:
          type: boolean
          description: Allows unicode characters to be sent over MMS
        unicodeConversion:
          $ref: '#/components/schemas/channelOptions_sms_unicodeConversion'
      description: Options for the MMS channel
    channelOptions_fbMessenger:
      type: object
      properties:
        messageTag:
          type: string
          description: Send message with one of predefined tag specified by facebook
        messagingType:
          type: string
          description: The Facebook messaging_type value
      description: Options for the Facebook Messenger channel
    channelOptions_whatsApp:
      type: object
      properties:
        phoneNumber:
          type: string
          description: The phoneNumber to send the message from. Default from channel configuration will be used if not specified.
        enableUrlPreview:
          type: boolean
          description: If set for true and url provided in message body, WhatsApp will display url preview
      description: Options for the WhatsApp channel
    channelOptions_rcs:
      type: object
      properties:
        agentId:
          type: string
          description: The agentId for the RCS Channel.
      description: Options for the RCS channel
    channelOptions_nativePush_data:
      type: object
      properties:
        fcm:
          type: object
          properties: {}
          description: Json object that will be sent in the push message for the app to use
        apns:
          type: object
          properties: {}
          description: Json object that will be sent in the push message for the app to use
        isSilent:
          type: boolean
          description: Should the push message trigger UI notification on the device. The default is true.
      description: Additional data passed to push message
    channelOptions_nativePush_deepLink_fcm:
      required:
      - url
      type: object
      properties:
        url:
          type: string
          description: Deep link URL that should be opened when the push notification is clicked
      description: ''
    channelOptions_nativePush_deepLink:
      type: object
      properties:
        trackingLink:
          type: string
          description: URL to be called by the SDK to report push notification click.
        fcm:
          $ref: '#/components/schemas/channelOptions_nativePush_deepLink_fcm'
        apns:
          $ref: '#/components/schemas/channelOptions_nativePush_deepLink_fcm'
      description: Deep link details
    channelOptions_nativePush:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/channelOptions_nativePush_data'
        deepLink:
          $ref: '#/components/schemas/channelOptions_nativePush_deepLink'
      description: Options for the native push channel
  parameters:
    apiSpacePathParameter:
      name: apiSpaceId
      in: path
      description: The api space id
      required: true
      schema:
        pattern: ^([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})|[a-f0-9]{32}$
        type: string
    messageIdPathParameter:
      name: messageId
      in: path
      description: The id of the message
      required: true
      schema:
        type: string
    statusPathParameter:
      name: status
      in: path
      description: The status of the message
      required: true
      schema:
        type: string
        enum:
        - failed
        - delivered
        - read
        - expired
        - sent
        - filtered
    mirrorChannelPathParameter:
      name: channel
      in: path
      description: The channel being mirrored
      required: true
      schema:
        type: string
        enum:
        - sms
    inboundMessageIdPathParameter:
      name: inboundMessageId
      in: path
      description: The id of the inbound message
      required: true
      schema:
        type: string
    inboundStatusPathParameter:
      name: status
      in: path
      description: The status of the inbound message
      required: true
      schema:
        type: string
        enum:
        - delivered
        - read
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
x-readme.samples-languages:
- curl
- csharp
- java
- node
- php
- python
- ruby
x-readme:
  explorer-enabled: true
  proxy-enabled: true
  samples-enabled: true