Tidio Contacts API
Manage contacts (website visitors identified by name, email, or phone)
Manage contacts (website visitors identified by name, email, or phone)
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/tidio-contacts-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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: 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