Tidio Contacts API

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

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 email required.

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

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