Tidio Tickets API

Manage email tickets and replies

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-tickets-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-tickets-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Tidio OpenAPI (REST) Contacts Tickets 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: Tickets
  description: Manage email tickets and replies
paths:
  /tickets:
    get:
      operationId: getTickets
      tags:
      - Tickets
      summary: Get tickets
      description: Returns a paginated list of tickets without messages.
      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
      responses:
        '200':
          description: Paginated list of tickets
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TicketList'
        '400':
          description: Invalid cursor
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /tickets/as-contact:
    post:
      operationId: createTicketAsContact
      tags:
      - Tickets
      summary: Create ticket (as Contact)
      description: Creates a ticket on behalf of a contact.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TicketCreateAsContact'
      responses:
        '201':
          description: Ticket created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UuidResponse'
        '422':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /tickets/{ticketId}:
    get:
      operationId: getTicket
      tags:
      - Tickets
      summary: Get ticket details
      description: Returns full details of a single ticket including all messages.
      parameters:
      - $ref: '#/components/parameters/ticketId'
      responses:
        '200':
          description: Ticket with messages
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TicketWithMessages'
        '400':
          description: Bad request
        '404':
          description: Ticket not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
    patch:
      operationId: updateTicket
      tags:
      - Tickets
      summary: Update ticket
      description: Updates status, priority, or assignment of a ticket.
      parameters:
      - $ref: '#/components/parameters/ticketId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TicketUpdate'
      responses:
        '204':
          description: Ticket updated successfully
        '422':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
    delete:
      operationId: deleteTicket
      tags:
      - Tickets
      summary: Delete ticket
      description: Permanently deletes a ticket. This action cannot be undone.
      parameters:
      - $ref: '#/components/parameters/ticketId'
      responses:
        '204':
          description: Ticket deleted
        '404':
          description: Ticket not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /tickets/{ticketId}/reply:
    post:
      operationId: replyToTicket
      tags:
      - Tickets
      summary: Reply to a ticket
      description: Adds a reply message to an existing ticket from an operator or contact.
      parameters:
      - $ref: '#/components/parameters/ticketId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TicketReply'
      responses:
        '201':
          description: Reply created
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                    description: ULID identifier of the created message
                    example: 01HAVMVKF90KH3EC0HK2T6QYP6
        '400':
          description: Bad request
        '404':
          description: Ticket not found
        '422':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    Ticket:
      type: object
      properties:
        id:
          type: integer
        link:
          type: string
          format: uri
        subject:
          type: string
        contact_id:
          type: string
          format: uuid
        contact_email:
          type: string
          nullable: true
        priority:
          type: string
          enum:
          - low
          - normal
          - urgent
        status:
          type: string
          enum:
          - open
          - pending
          - solved
        assigned_operator_id:
          type: string
          format: uuid
          nullable: true
        assigned_department_id:
          type: string
          format: uuid
        custom_channel_id:
          type: string
          nullable: true
    UuidResponse:
      type: object
      properties:
        id:
          type: string
          format: uuid
    TicketList:
      type: object
      properties:
        tickets:
          type: array
          items:
            $ref: '#/components/schemas/Ticket'
        meta:
          $ref: '#/components/schemas/PaginationMeta'
    ErrorResponse:
      type: object
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ErrorItem'
    PaginationMeta:
      type: object
      properties:
        cursor:
          type: string
          nullable: true
          description: Token for the next page; null when on the last page.
        limit:
          type: integer
    TicketWithMessages:
      allOf:
      - $ref: '#/components/schemas/Ticket'
      - type: object
        properties:
          messages:
            type: array
            items:
              $ref: '#/components/schemas/TicketMessage'
    ErrorItem:
      type: object
      properties:
        code:
          type: string
        message:
          type: string
    TicketMessage:
      type: object
      properties:
        message_id:
          type: string
          description: ULID format identifier.
        created_at:
          type: string
          format: date-time
        author_type:
          type: string
          enum:
          - operator
          - contact
        author_id:
          type: string
          format: uuid
        message_type:
          type: string
          enum:
          - internal
          - public
        attachments:
          type: array
          items:
            type: string
            format: uri
    TicketUpdate:
      type: object
      properties:
        status:
          type: string
          enum:
          - open
          - pending
          - solved
        priority:
          type: string
          enum:
          - low
          - normal
          - urgent
        assigned:
          type: object
          nullable: true
          properties:
            type:
              type: string
              enum:
              - department
              - operator
            id:
              type: string
              format: uuid
    TicketCreateAsContact:
      type: object
      properties:
        subject:
          type: string
        contact_id:
          type: string
          format: uuid
        content:
          type: string
    TicketReply:
      type: object
      required:
      - author_type
      - content
      properties:
        author_type:
          type: string
          enum:
          - contact
          - operator
        content:
          type: string
        operator_id:
          type: string
          format: uuid
          description: Required when author_type is operator.
        message_type:
          type: string
          enum:
          - public
          - internal
  parameters:
    ticketId:
      name: ticketId
      in: path
      required: true
      description: Integer identifying the ticket.
      schema:
        type: integer
        example: 10000
  securitySchemes:
    clientId:
      type: apiKey
      in: header
      name: X-Tidio-Openapi-Client-Id
    clientSecret:
      type: apiKey
      in: header
      name: X-Tidio-Openapi-Client-Secret