Dotdigital Contacts API

The Contacts API from Dotdigital — 6 operation(s) for contacts.

Operations 10

GET /contacts/v3 Get contacts based on your criteria #
POST /contacts/v3 Create a contact #
POST /contacts/v3/delete Delete multiple contacts #
GET /contacts/v3/delete/{deleteId} Get the status of a delete contacts job #
PUT /contacts/v3/import Import contact collection #
GET /contacts/v3/import/{importId} Get the status of a contacts import request #
GET /contacts/v3/{identifier}/{value} Get a contact by an identifier #
PUT /contacts/v3/{identifier}/{value} Replace a contact #
DELETE /contacts/v3/{identifier}/{value} Deletes a contact using a specific identifier #
PATCH /contacts/v3/{identifier}/{value} Import a single contact #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/dotdigital-contacts-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

dotdigital-contacts-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Contacts API
  description: 'Create, Get, update, and delete contacts. Use this API to look up contacts

    by identifier, perform full or partial updates on a single contact, bulk-import

    collections of contacts asynchronously, and bulk-delete contacts. When listing

    contacts you can filter by contact status, list subscription status, list

    membership, segment, or creation and modification date. Each contact can carry

    data fields, channel properties (email, SMS, WhatsApp), list memberships,

    marketing preferences, and consent records.'
  version: 3.4.3
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: Contacts
paths:
  /contacts/v3:
    get:
      summary: Get contacts based on your criteria
      description: 'Get contacts based on criteria you specify. Contacts are returned with full data, specified data fields, or key information and identifiers only.<br/><br/>


        *Note: All data is returned in ascending order*'
      operationId: getContacts
      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: data-fields
        in: query
        description: Contact data is returned with a minimum of **contactId** and any associated **identifiers**. Use this field to specify any additional data fields you want to return. Enter a pipe delimited string of the contact data fields required or **[[ALL]]** to Get all data fields.
        required: false
        style: pipeDelimited
        explode: false
        schema:
          type: array
          example:
          - FIRSTNAME
          - LASTNAME
          - FULLNAME
          - GENDER
          - POSTCODE
          items:
            type: string
      - name: include
        in: query
        description: Specify additional data sets associated with the contact to include in the returned data.
        required: false
        style: pipeDelimited
        explode: false
        schema:
          type: array
          example:
          - preferences
          - lists
          items:
            type: string
            enum:
            - channelProperties
            - lists
            - preferences
            - consentRecords
      - name: ~created
        in: query
        description: 'Filter by created date.<br/>

          ***Note:***

          * The date must be in ([ISO 8601 format](https://en.wikipedia.org/wiki/ISO_8601))

          * Can''t be used in conjunction with the **~modified** parameter.'
        schema:
          pattern: ^gte::\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{3})?Z$
          type: string
        examples:
          Greater than or equal to created date:
            value: gte::2021-12-17T00:00:00Z
      - name: ~modified
        in: query
        description: 'Filter by last modified date.<br/>

          ***Note:***

          * The date must be in ([ISO 8601 format](https://en.wikipedia.org/wiki/ISO_8601))'
        schema:
          pattern: ^gte::\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{3})?Z$
          type: string
        examples:
          Greater than or equal to modified date:
            value: gte::2021-12-17T00:00:00Z
      - name: ~listId
        in: query
        description: 'Filter by a specific list.<br/>

          ***Note:***

          * Can''t be used in conjunction with the **~segmentId** parameter.'
        schema:
          type: integer
        example: 54321
      - name: ~segmentId
        in: query
        description: 'Filter by a specific segment.<br/>

          ***Note:***

          * Can''t be used in conjunction with the **~listId** parameter.'
        schema:
          type: integer
        example: 12345
      - name: limit
        in: query
        description: Maximum number of records to retrieve per page
        schema:
          maximum: 5000
          minimum: 1
          type: integer
          format: int32
          example: 1000
      - name: marker
        in: query
        description: Pagination marker to retrieve the data from
        schema:
          type: string
          example: RXhhbXBsZSBhbXJrZXIgdmFsdWU=
      responses:
        '200':
          description: Contacts retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_200'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
              example:
                errorCode: contacts:invalidFilter
                description: The filter value '2022-08-01T00:00:00Z' is invalid
        '401':
          description: Unauthorized
      tags:
      - Contacts
    post:
      summary: Create a contact
      description: Creates a contact if the identifiers passed are unique in the account then a new contact will be created, otherwise it will fail the call with a 409.
      operationId: createContact
      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
      requestBody:
        description: Contact data
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/createContactRequest'
        required: true
      responses:
        '201':
          description: Contact created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/contact'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
              example:
                errorCode: contacts:invalidId
                description: The id value '123646' is invalid for the identifier 'email'
        '401':
          description: Unauthorized
        '409':
          description: Identifier conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
              example:
                errorCode: contacts:idAlreadyExists
                description: The id value 'jane.doe@emailsim.io for the identifier 'email' already exists. All identifiers must be unique!
      tags:
      - Contacts
  /contacts/v3/delete:
    post:
      summary: Delete multiple contacts
      description: Async deletes multiple contacts using whichever identifier you wish.
      operationId: deleteContacts
      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
      requestBody:
        description: The contact references you want to delete
        content:
          application/json:
            schema:
              maxItems: 5000
              minItems: 1
              type: array
              items:
                $ref: '#/components/schemas/contactIdentifier'
        required: true
      responses:
        '202':
          description: Delete request accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_202'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
              example:
                errorCode: contacts:noContactsSpecified
                description: You must specifiy 1 or more contacts to be deleted!
        '401':
          description: Unauthorized
        '429':
          description: Too many bulk delete jobs
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
              example:
                errorCode: contacts:tooManyBulkDeleteJobs
                description: Your bulk delete request cannot be accepted as too many bulk delete jobs are being processed for you account. Please wait for a bulk delete job to complete and then resubmit.
      tags:
      - Contacts
  /contacts/v3/delete/{deleteId}:
    get:
      summary: Get the status of a delete contacts job
      description: Gets the status of a delete contacts job and the results if complete.
      operationId: getDeleteStatus
      parameters:
      - name: deleteId
        in: path
        description: The delete job id you want the status for
        required: true
        schema:
          type: string
          example: c4920aee-3add-44e4-b8c0-dcbfacbfee40
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_200_1'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
              example:
                errorCode: contacts:invalidDeleteId
                description: The id value '123646' is not a recognized deletion job identifier
        '401':
          description: Unauthorized
        '404':
          description: Import request not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
              example:
                errorCode: contacts:importNotFound
                description: The import request 'd7de900d-d337-43f6-b1e1-c8ec73e1a434' could not be found!
      tags:
      - Contacts
  /contacts/v3/import:
    put:
      summary: Import contact collection
      description: Imports a collection of contacts. Creates contacts if they do not exist and updates contacts if they do. This is an async operation and you will need to check when it is complete by calling **getImportStatus** <br><br>**Note:** It isn't possible to specify the value for the **contactId** field when creating a contact, so it is only used to check for a matching contact when specified
      operationId: importContacts
      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
      requestBody:
        description: Contact data collection
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/v3_import_body'
            example:
              mergeOption: overwrite
              contacts:
              - matchIdentifier: email
                identifiers:
                  email: jane.doe@emailsim.io
                dataFields:
                  firstName: Jane
                  lastName: Doe
                  gender: female
              - matchIdentifier: mobileNumber
                identifiers:
                  email: john.doe@emailsim.io
                  mobileNumber: '447123123123'
                dataFields:
                  firstName: John
                  lastName: Doe
                  gender: male
                channelProperties:
                  email:
                    emailType: Html
              - matchIdentifier: contactId
                identifiers:
                  contactId: 123456
                  email: my-new-email@emailsim.io
        required: true
      responses:
        '202':
          description: Import processing
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_202_1'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
              example:
                errorCode: contacts:badJson
                description: The request JSON is badly formed
        '401':
          description: Unauthorized
        '429':
          description: Too many import requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
              example:
                errorCode: contacts:tooManyActiveImports
                description: Your import request cannot be accepted as too many imports are being processed for you account. Please wait for an import to complete and then resubmit.
      tags:
      - Contacts
  /contacts/v3/import/{importId}:
    get:
      summary: Get the status of a contacts import request
      description: Gets the status of a contacts import request and the results if available.<br><br>**Note:** When importing, contacts are created or updated but if any associated data sets fail to import then details of these are included in the **failures** results
      operationId: getImportStatus
      parameters:
      - name: importId
        in: path
        description: The import id you want the status for
        required: true
        schema:
          type: string
          example: d7de900d-d337-43f6-b1e1-c8ec73e1a434
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_200_2'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
              example:
                errorCode: contacts:invalidId
                description: The id value '123646' is invalid for the identifier 'email'
        '401':
          description: Unauthorized
        '404':
          description: Import request not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
              example:
                errorCode: contacts:importNotFound
                description: The import request 'd7de900d-d337-43f6-b1e1-c8ec73e1a434' could not be found!
      tags:
      - Contacts
  /contacts/v3/{identifier}/{value}:
    get:
      summary: Get a contact by an identifier
      description: Get a contact's details using a specific identifier
      operationId: getContact
      parameters:
      - name: identifier
        in: path
        description: The field to use to uniquely identify the contact. This can be a custom identifier or a contact identifer of **contactId**, **email** or **mobileNumber**
        required: true
        schema:
          maxLength: 50
          minLength: 1
          pattern: (^[-A-Za-z0-9_]{1,50}$)
          type: string
      - name: value
        in: path
        description: The unique value to identify the contact.<br>***Note:** Must be the same type as the **identifier***
        required: true
        schema:
          maxLength: 256
          minLength: 1
          type: string
      - 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: Successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/contact'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
              example:
                errorCode: contacts:invalidId
                description: The id value '123646' is invalid for the identifier 'email'
        '401':
          description: Unauthorized
        '404':
          description: Contact not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
              example:
                errorCode: contacts:contactNotFound
                description: The following contacts could not be found
                details:
                - item: unknown@emailsim.io
                  description: Not found using the identifier 'email'
      tags:
      - Contacts
    put:
      summary: Replace a contact
      description: "Replaces a contact entirly with the data passed in the request.<br><br>\n  **Note:**\n  * This call will **replace the entire contact** when updating with the data passed; if would like to change just select fields then use the PATCH call."
      operationId: replaceContact
      parameters:
      - name: identifier
        in: path
        description: The field to use to uniquely identify the contact. This can be a custom identifier or a contact identifer of **contactId**, **email** or **mobileNumber**
        required: true
        schema:
          maxLength: 50
          minLength: 1
          pattern: (^[-A-Za-z0-9_]{1,50}$)
          type: string
      - name: value
        in: path
        description: The unique value to identify the contact.<br>***Note:** Must be the same type as the **identifier***
        required: true
        schema:
          maxLength: 256
          minLength: 1
          type: string
      - 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:
        description: The contact data. **Note:** It is not possible to modify the **contactId** field
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/replaceContactRequest'
        required: true
      responses:
        '200':
          description: Contact replaced
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/contact'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
              example:
                errorCode: contacts:invalidId
                description: The id value '123646' is invalid for the identifier 'email'
        '401':
          description: Unauthorized
        '404':
          description: Contact not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
              example:
                errorCode: contacts:contactNotFound
                description: The following contacts could not be found
                details:
                - item: '354265'
                  description: Not found using the identifier 'contactId'
      tags:
      - Contacts
    delete:
      summary: Deletes a contact using a specific identifier
      description: Delete a contact using a specific identifier
      operationId: deleteContact
      parameters:
      - name: identifier
        in: path
        description: The field to use to uniquely identify the contact. This can be a custom identifier or a contact identifer of **contactId**, **email** or **mobileNumber**
        required: true
        schema:
          maxLength: 50
          minLength: 1
          pattern: (^[-A-Za-z0-9_]{1,50}$)
          type: string
      - name: value
        in: path
        description: The unique value to identify the contact.<br>***Note:** Must be the same type as the **identifier***
        required: true
        schema:
          maxLength: 256
          minLength: 1
          type: string
      - 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: Contact deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inline_response_200_3'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
              example:
                errorCode: contacts:invalidId
                description: The id value '123646' is invalid for the identifier 'email'
        '401':
          description: Unauthorized
        '404':
          description: Contact not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
              example:
                errorCode: contacts:contactNotFound
                description: The following contacts could not be found
                details:
                - item: '354265'
                  description: Not found using the identifier 'contactId'
      tags:
      - Contacts
    patch:
      summary: Import a single contact
      description: Imports a single contact; if it is an existing contact it updates the contact with just the fields passed in the request with a choice of how to handle the merging of data, otherwise it create a new contact.
      operationId: importContact
      parameters:
      - name: identifier
        in: path
        description: The field to use to uniquely identify the contact. This can be a custom identifier or a contact identifer of **contactId**, **email** or **mobileNumber**
        required: true
        schema:
          maxLength: 50
          minLength: 1
          pattern: (^[-A-Za-z0-9_]{1,50}$)
          type: string
      - name: value
        in: path
        description: The unique value to identify the contact.<br>***Note:** Must be the same type as the **identifier***
        required: true
        schema:
          maxLength: 256
          minLength: 1
          type: string
      - 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: merge-option
        in: query
        description: Set the behavior of how the new data should be merged into existing contacts.
        required: false
        schema:
          type: string
          example: overwrite
          enum:
          - overwrite
          - overwrite-if-not-empty
          - overwrite-if-empty
          default: overwrite
      requestBody:
        description: The contact fields to update. **Note:** It is not possible to modify the **contactId** field
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/updateContactRequest'
        required: true
      responses:
        '200':
          description: Contact updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/contact'
        '201':
          description: Contact created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/contact'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
              example:
                errorCode: contacts:invalidId
                description: The id value '123646' is invalid for the identifier 'email'
        '401':
          description: Unauthorized
        '409':
          description: Identifier conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
              example:
                errorCode: contacts:idAlreadyExists
                description: The id value 'jane.doe@emailsim.io for the identifier 'email' already exists. All identifiers must be unique!
      tags:
      - Contacts
components:
  schemas:
    inline_response_200_1_failures_1:
      required:
      - failures
      - identifier
      type: object
      properties:
        identifier:
          $ref: '#/components/schemas/contactIdentifier'
        failures:
          type: array
          description: The reasons the contact failed to import
          example:
          - failureCode: invalidEmail
            description: Invalid value for 'email'
          - failureCode: contactNotFound
            description: The contact could not be found
          items:
            $ref: '#/components/schemas/inline_response_200_1_failures'
      description: Contact delete failure summary
    paginationLinks:
      required:
      - first
      - self
      type: object
      properties:
        self:
          $ref: '#/components/schemas/paginationLinks_self'
        first:
          $ref: '#/components/schemas/paginationLinks_first'
        prev:
          $ref: '#/components/schemas/paginationLinks_prev'
        next:
          $ref: '#/components/schemas/paginationLinks_next'
        last:
          $ref: '#/components/schemas/paginationLinks_last'
      description: Pagination links
    channelProperties_channelProperties:
      type: object
      properties:
        email:
          $ref: '#/components/schemas/channelProperties_channelProperties_email'
        sms:
          $ref: '#/components/schemas/channelProperties_channelProperties_sms'
        whatsApp:
          $ref: '#/components/schemas/channelProperties_channelProperties_whatsApp'
      additionalProperties: false
      description: Properties associated with each channel for a contact. For example, message format or subscription status
    inline_response_200_2:
      required:
      - importId
      - status
      type: object
      properties:
        importId:
          type: string
          description: The import id you want the status for
          example: d7de900d-d337-43f6-b1e1-c8ec73e1a434
        status:
          type: string
          enum:
          - Finished
          - NotFinished
          - RejectedByWatchdog
          - Failed
          - ExceedsAllowedContactLimit
        summary:
          $ref: '#/components/schemas/inline_response_200_2_summary'
        created:
          type: array
          description: Contacts that were successfully created
          items:
            $ref: '#/components/schemas/contactReference'
        updated:
          type: array
          description: Contacts that were successfully updated
          items:
            $ref: '#/components/schemas/contactReference'
        failures:
          type: array
          description: Contacts that were not imported
          example:
          - contactId: 12345
            matchIdentifier: email
            identifiers:
              email: bob@emailsim@io.com
            failures:
            - failureCode: invalidEmail
              description: Invalid value for 'email'
          - matchIdentifier: email
            identifiers:
              email: bob@emailsim@io.com
            failures:
            - failureCode: invalidEmail
              description: Invalid value for 'email'
          - matchIdentifier: email
            identifiers:
              email: emma@emailsim.io
            failures:
            - failureCode: duplicateIdentifier
              description: Duplicate identifier detected for email 'emma@emailsim.io'
          - matchIdentifier: email
            identifiers:
              email: frank@emailsim.io
            failures:
            - failureCode: consentRecordsNotApplied
              description: The provided consent records could not be applied as they were incorrectly formatted
          items:
            $ref: '#/components/schemas/inline_response_200_2_failures_1'
    createContactRequest:
      allOf:
      - required:
        - identifiers
        type: object
        properties:
          identifiers:
            allOf:
            - description: Identifiers this contact can be referenced by
            - $ref: '#/components/schemas/identifiers'
      - $ref: '#/components/schemas/baseContactRequest'
    paginationLinks_last:
      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 last pages worth of data
    channelPropertiesWithResubscribe_channelProperties:
      type: object
      properties:
        email:
          $ref: '#/components/schemas/channelPropertiesWithResubscribe_channelProperties_email'
    inline_response_202:
      type: object
      properties:
        deleteId:
          type: string
          example: c4920aee-3add-44e4-b8c0-dcbfacbfee40
    channelStatusUpdate:
      type: string
      description: The subscription status for the channel; if not specified it remains unaltered for existing contacts, and for new contacts this defaults to values defined in _Settings > Contacts > Mobile subscrip

# --- truncated at 32 KB (57 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/dotdigital/refs/heads/main/openapi/dotdigital-contacts-api-openapi.yml