Tidio Contacts API

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

Operations 10

GET /contacts Get contacts #
POST /contacts Create contact #
POST /contacts/batch Create multiple contacts #
PATCH /contacts/batch Update multiple contacts #
GET /contacts/{contactId} Get single contact #
PATCH /contacts/{contactId} Update contact properties #
DELETE /contacts/{contactId} Delete contact #
GET /contacts/{contactId}/messages Get contact messages #
GET /contacts/{contactId}/viewed-pages Get viewed pages history #
GET /contact-properties Get contact properties #

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/tidio-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

tidio-contacts-api-openapi.yml Raw ↑
openapi: 3.2.0
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
          - 'null'
      - 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:
  parameters:
    contactId:
      name: contactId
      in: path
      required: true
      description: UUID identifying the contact.
      schema:
        type: string
        format: uuid
        example: a1b4ca4c-1108-4432-b256-1e4cf2bf6f9e
  schemas:
    ErrorItem:
      type: object
      properties:
        code:
          type: string
        message:
          type: string
    ContactList:
      type: object
      properties:
        contacts:
          type: array
          items:
            $ref: '#/components/schemas/Contact'
        meta:
          $ref: '#/components/schemas/PaginationMeta'
    ContactProperty:
      type: object
      properties:
        name:
          type: string
          maxLength: 128
        value:
          type: string
          maxLength: 1000
    PaginationMeta:
      type: object
      properties:
        cursor:
          type:
          - string
          - 'null'
          description: Token for the next page; null when on the last page.
        limit:
          type: integer
    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
    ErrorResponse:
      type: object
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ErrorItem'
    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'
    ContactPatch:
      type: object
      properties:
        email:
          type:
          - string
          - 'null'
          format: email
        first_name:
          type:
          - string
          - 'null'
          maxLength: 127
        last_name:
          type:
          - string
          - 'null'
          maxLength: 127
        phone:
          type:
          - string
          - 'null'
          maxLength: 155
        email_consent:
          type: string
          enum:
          - subscribed
          - unsubscribed
        distinct_id:
          type:
          - string
          - 'null'
          maxLength: 55
        properties:
          type: array
          items:
            $ref: '#/components/schemas/ContactProperty'
    ContactPropertyDefinition:
      type: object
      properties:
        name:
          type: string
        type:
          type: string
          enum:
          - text
          - email
          - number
          - phone
          - url
    Contact:
      type: object
      properties:
        id:
          type: string
          format: uuid
        distinct_id:
          type:
          - string
          - 'null'
        first_name:
          type:
          - string
          - 'null'
        last_name:
          type:
          - string
          - 'null'
        email:
          type:
          - string
          - 'null'
          format: email
        phone:
          type:
          - string
          - 'null'
        language:
          type:
          - string
          - 'null'
          description: ISO 639-1 language code.
        country:
          type:
          - string
          - 'null'
          description: ISO 3166 Alpha-2 country code.
        city:
          type:
          - string
          - 'null'
        created_at:
          type: string
          format: date-time
        email_consent:
          type: string
          enum:
          - subscribed
          - unsubscribed
        properties:
          type: array
          items:
            $ref: '#/components/schemas/ContactProperty'
    UuidResponse:
      type: object
      properties:
        id:
          type: string
          format: uuid
  securitySchemes:
    clientId:
      type: apiKey
      in: header
      name: X-Tidio-Openapi-Client-Id
    clientSecret:
      type: apiKey
      in: header
      name: X-Tidio-Openapi-Client-Secret