Tidio Contacts API
Manage contacts (website visitors identified by name, email, or phone)
Manage contacts (website visitors identified by name, email, or phone)
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