OpenAPI Specification
openapi: 3.0.3
info:
title: Tidio OpenAPI (REST) Contacts Lyro 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: Lyro
description: Lyro AI data sources and ticket answering
paths:
/lyro/data-sources:
get:
operationId: getLyroDataSources
tags:
- Lyro
summary: Get Lyro data sources
description: 'Returns a paginated list of data sources used by the Lyro AI Agent. Supports filtering by kind (qa/folder) and parent_id.
'
parameters:
- name: cursor
in: query
required: false
schema:
type: string
nullable: true
- name: kind
in: query
required: false
description: Filter by kind (qa or folder).
schema:
type: array
items:
type: string
enum:
- qa
- folder
- name: parent_id
in: query
required: false
description: Filter by parent data source UUID.
schema:
type: string
format: uuid
- name: order
in: query
required: false
description: Sort direction (asc or desc, defaults to desc).
schema:
type: string
enum:
- asc
- desc
default: desc
responses:
'200':
description: Paginated list of Lyro data sources
content:
application/json:
schema:
$ref: '#/components/schemas/LyroDataSourceList'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/lyro/data-sources/qa:
post:
operationId: createLyroQaDataSource
tags:
- Lyro
summary: Create Lyro QA data source
description: Creates a QA (question-answer) data source for the Lyro AI Agent.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/LyroQaCreate'
responses:
'201':
description: QA data source created
'422':
description: Validation error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/lyro/data-sources/website:
put:
operationId: upsertLyroWebsiteDataSource
tags:
- Lyro
summary: Upsert Lyro data source
description: 'Uploads or updates an HTML-based data source for the Lyro AI Agent. If a source with the same URL exists, it is updated; otherwise a new one is created.
'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/LyroWebsiteUpsert'
responses:
'200':
description: Data source upserted
'422':
description: Validation error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/lyro/data-sources/website/scrape:
post:
operationId: scrapeWebsiteLyroDataSource
tags:
- Lyro
summary: Add website as Lyro data source (scraping)
description: 'Submits a website URL to be scraped and used as a knowledge data source for the Lyro AI Agent. Each URL must be unique per project.
'
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- url
properties:
url:
type: string
format: uri
description: Website URL to scrape.
responses:
'201':
description: Website scraping initiated
'409':
description: URL already exists as a data source
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'422':
description: Validation error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/lyro/tickets:
post:
operationId: askLyroToAnswerTicket
tags:
- Lyro
summary: Ask Lyro to answer ticket
description: 'Asks Lyro AI to generate an answer for a ticket. Processing can take up to 40 seconds. Currently supports only the first message of a ticket.
'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/LyroTicketRequest'
responses:
'200':
description: Lyro answer generated (may be null if Lyro cannot answer)
content:
application/json:
schema:
type: object
properties:
message_content:
type: string
nullable: true
description: Answer generated by Lyro, or null if unable to answer.
'409':
description: Quota exceeded or Lyro disabled
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'422':
description: Validation error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
components:
schemas:
LyroWebsiteUpsert:
type: object
required:
- url
- title
- content
properties:
url:
type: string
format: uri
title:
type: string
content:
type: string
description: HTML content to be processed by Lyro.
LyroTicketMessage:
type: object
required:
- created_at
- message_id
- author_type
- message_type
- message_content
properties:
created_at:
type: string
format: date-time
message_id:
type: string
author_type:
type: string
enum:
- contact
message_type:
type: string
enum:
- public
attachments:
type: array
items:
type: string
format: uri
message_content:
type: string
PaginationMeta:
type: object
properties:
cursor:
type: string
nullable: true
description: Token for the next page; null when on the last page.
limit:
type: integer
LyroDataSourceList:
type: object
properties:
data_sources:
type: array
items:
$ref: '#/components/schemas/LyroDataSource'
meta:
$ref: '#/components/schemas/PaginationMeta'
LyroTicketRequest:
type: object
required:
- ticket_id
- subject
- contact_email
- contact_name
- recipient_email
- messages
properties:
ticket_id:
type: integer
subject:
type: string
contact_email:
type: string
format: email
contact_name:
type: string
recipient_email:
type: string
format: email
messages:
type: array
items:
$ref: '#/components/schemas/LyroTicketMessage'
ErrorResponse:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ErrorItem'
ErrorItem:
type: object
properties:
code:
type: string
message:
type: string
LyroDataSource:
type: object
properties:
id:
type: string
format: uuid
parent_id:
type: string
format: uuid
nullable: true
title:
type: string
type:
type: string
enum:
- qa
- website
- zendesk_hc
- external_html
- pdf_file
kind:
type: string
enum:
- qa
- folder
origin:
type: string
enum:
- manual
- inbox
- industry
- website
- csv_file
- pdf_file
- zendesk_hc
- external_html
status:
type: string
enum:
- in progress
- error
- used
used_by_lyro:
type: boolean
used_by_copilot:
type: boolean
sync_status:
type: string
enum:
- in progress
- error
- success
nullable: true
content:
type: string
nullable: true
source_url:
type: string
format: uri
nullable: true
skip_auto_sync:
type: boolean
nullable: true
manual_sync_available_at:
type: string
format: date-time
nullable: true
next_auto_sync_at:
type: string
format: date-time
nullable: true
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
LyroQaCreate:
type: object
required:
- title
- content
properties:
title:
type: string
content:
type: string
securitySchemes:
clientId:
type: apiKey
in: header
name: X-Tidio-Openapi-Client-Id
clientSecret:
type: apiKey
in: header
name: X-Tidio-Openapi-Client-Secret