Tidio Lyro API

Lyro AI data sources and ticket answering

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-lyro-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-lyro-api-openapi.yml Raw ↑
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