Tidio Lyro API

Lyro AI data sources and ticket answering

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