Tidio Contacts API

Manage contacts (website visitors identified by name, email, or phone)

OpenAPI Specification

tidio-contacts-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Tidio OpenAPI (REST) Contacts API
  description: 'REST API for managing contacts, conversations, tickets, operators, and Lyro AI data sources. Requires Plus or Premium plan for full access; Lyro AI plan grants access to Lyro-specific endpoints. Authentication uses paired X-Tidio-Openapi-Client-Id and X-Tidio-Openapi-Client-Secret headers. Rate limits range from 10 requests per minute (entry plans) to 120 requests per minute (Premium).

    '
  version: '1'
  contact:
    name: Tidio Developer Support
    url: https://developers.tidio.com/support
  termsOfService: https://www.tidio.com/terms/
  license:
    name: Proprietary
    url: https://www.tidio.com/terms/
servers:
- url: https://api.tidio.co
  description: Tidio REST API
security:
- clientId: []
  clientSecret: []
tags:
- name: Contacts
  description: Manage contacts (website visitors identified by name, email, or phone)
paths:
  /contacts:
    get:
      operationId: getContacts
      tags:
      - Contacts
      summary: Get contacts
      description: 'Returns a paginated list of contacts. Contacts are website visitors who have interacted with the Tidio widget and have been identified by their name, email address, or phone number.

        '
      parameters:
      - name: cursor
        in: query
        required: false
        description: Value from the previous page. Use null to fetch the first page.
        schema:
          type: string
          nullable: true
      - name: email
        in: query
        required: false
        description: Filter contacts by email address.
        schema:
          type: string
          format: email
      responses:
        '200':
          description: Paginated list of contacts
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactList'
        '400':
          description: Invalid cursor or bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
    post:
      operationId: createContact
      tags:
      - Contacts
      summary: Create contact
      description: 'Creates a new contact. At least one of email, first_name, last_name, or phone must be provided. Always adds a new contact — no deduplication.

        '
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ContactCreate'
      responses:
        '201':
          description: Contact created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UuidResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /contacts/batch:
    post:
      operationId: createContactsBatch
      tags:
      - Contacts
      summary: Create multiple contacts
      description: 'Creates up to 100 contacts in a single request using an all-or-nothing strategy — if any contact is invalid the entire request fails.

        '
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - contacts
              properties:
                contacts:
                  type: array
                  minItems: 1
                  maxItems: 100
                  items:
                    $ref: '#/components/schemas/ContactCreate'
      responses:
        '201':
          description: Contacts created
        '422':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
    patch:
      operationId: updateContactsBatch
      tags:
      - Contacts
      summary: Update multiple contacts
      description: 'Updates up to 100 contacts in a single request using an all-or-nothing strategy.

        '
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - contacts
              properties:
                contacts:
                  type: array
                  minItems: 1
                  maxItems: 100
                  items:
                    $ref: '#/components/schemas/ContactPatch'
      responses:
        '200':
          description: Contacts updated
        '422':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /contacts/{contactId}:
    get:
      operationId: getContact
      tags:
      - Contacts
      summary: Get single contact
      parameters:
      - $ref: '#/components/parameters/contactId'
      responses:
        '200':
          description: Contact details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Contact'
        '404':
          description: Contact not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
    patch:
      operationId: updateContact
      tags:
      - Contacts
      summary: Update contact properties
      parameters:
      - $ref: '#/components/parameters/contactId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ContactPatch'
      responses:
        '200':
          description: Contact updated
        '404':
          description: Contact not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
    delete:
      operationId: deleteContact
      tags:
      - Contacts
      summary: Delete contact
      description: Permanently deletes a contact. This action cannot be undone.
      parameters:
      - $ref: '#/components/parameters/contactId'
      responses:
        '204':
          description: Contact deleted successfully
        '404':
          description: Contact not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /contacts/{contactId}/messages:
    get:
      operationId: getContactMessages
      tags:
      - Contacts
      summary: Get contact messages
      description: Returns all messages in a contact's conversation history.
      parameters:
      - $ref: '#/components/parameters/contactId'
      responses:
        '200':
          description: Contact messages
          content:
            application/json:
              schema:
                type: object
                properties:
                  messages:
                    type: array
                    items:
                      $ref: '#/components/schemas/Message'
        '404':
          description: Contact not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /contacts/{contactId}/viewed-pages:
    get:
      operationId: getContactViewedPages
      tags:
      - Contacts
      summary: Get viewed pages history
      description: 'Returns a list of pages the contact has viewed on your website, covering the past 30 days.

        '
      parameters:
      - $ref: '#/components/parameters/contactId'
      responses:
        '200':
          description: Viewed pages
          content:
            application/json:
              schema:
                type: object
                properties:
                  pages:
                    type: array
                    items:
                      type: object
                      properties:
                        url:
                          type: string
                          format: uri
                        visited_at:
                          type: string
                          format: date-time
        '404':
          description: Contact not found
  /contact-properties:
    get:
      operationId: getContactProperties
      tags:
      - Contacts
      summary: Get contact properties
      description: 'Returns the complete list of contact property definitions (default and custom) configured in the Tidio panel.

        '
      responses:
        '200':
          description: Contact properties list
          content:
            application/json:
              schema:
                type: object
                properties:
                  properties:
                    type: array
                    items:
                      $ref: '#/components/schemas/ContactPropertyDefinition'
components:
  schemas:
    ContactList:
      type: object
      properties:
        contacts:
          type: array
          items:
            $ref: '#/components/schemas/Contact'
        meta:
          $ref: '#/components/schemas/PaginationMeta'
    Message:
      type: object
      properties:
        message_id:
          type: string
        created_at:
          type: string
          format: date-time
        author_type:
          type: string
          enum:
          - operator
          - contact
          - bot
        content:
          type: string
    UuidResponse:
      type: object
      properties:
        id:
          type: string
          format: uuid
    ErrorResponse:
      type: object
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ErrorItem'
    ContactPropertyDefinition:
      type: object
      properties:
        name:
          type: string
        type:
          type: string
          enum:
          - text
          - email
          - number
          - phone
          - url
    PaginationMeta:
      type: object
      properties:
        cursor:
          type: string
          nullable: true
          description: Token for the next page; null when on the last page.
        limit:
          type: integer
    ContactPatch:
      type: object
      properties:
        email:
          type: string
          format: email
          nullable: true
        first_name:
          type: string
          maxLength: 127
          nullable: true
        last_name:
          type: string
          maxLength: 127
          nullable: true
        phone:
          type: string
          maxLength: 155
          nullable: true
        email_consent:
          type: string
          enum:
          - subscribed
          - unsubscribed
        distinct_id:
          type: string
          maxLength: 55
          nullable: true
        properties:
          type: array
          items:
            $ref: '#/components/schemas/ContactProperty'
    ErrorItem:
      type: object
      properties:
        code:
          type: string
        message:
          type: string
    ContactProperty:
      type: object
      properties:
        name:
          type: string
          maxLength: 128
        value:
          type: string
          maxLength: 1000
    Contact:
      type: object
      properties:
        id:
          type: string
          format: uuid
        distinct_id:
          type: string
          nullable: true
        first_name:
          type: string
          nullable: true
        last_name:
          type: string
          nullable: true
        email:
          type: string
          format: email
          nullable: true
        phone:
          type: string
          nullable: true
        language:
          type: string
          nullable: true
          description: ISO 639-1 language code.
        country:
          type: string
          nullable: true
          description: ISO 3166 Alpha-2 country code.
        city:
          type: string
          nullable: true
        created_at:
          type: string
          format: date-time
        email_consent:
          type: string
          enum:
          - subscribed
          - unsubscribed
        properties:
          type: array
          items:
            $ref: '#/components/schemas/ContactProperty'
    ContactCreate:
      type: object
      description: At least one of email, first_name, last_name, or phone is required.
      properties:
        email:
          type: string
          format: email
        first_name:
          type: string
          maxLength: 127
        last_name:
          type: string
          maxLength: 127
        phone:
          type: string
          maxLength: 155
        email_consent:
          type: string
          enum:
          - subscribed
          - unsubscribed
        distinct_id:
          type: string
          maxLength: 55
        properties:
          type: array
          items:
            $ref: '#/components/schemas/ContactProperty'
  parameters:
    contactId:
      name: contactId
      in: path
      required: true
      description: UUID identifying the contact.
      schema:
        type: string
        format: uuid
        example: a1b4ca4c-1108-4432-b256-1e4cf2bf6f9e
  securitySchemes:
    clientId:
      type: apiKey
      in: header
      name: X-Tidio-Openapi-Client-Id
    clientSecret:
      type: apiKey
      in: header
      name: X-Tidio-Openapi-Client-Secret