PostHog conversations API

The conversations API from PostHog — 14 operation(s) for conversations.

Operations 23

GET /api/environments/{project_id}/conversations/ #
POST /api/environments/{project_id}/conversations/ #
GET /api/environments/{project_id}/conversations/{conversation}/ #
POST /api/environments/{project_id}/conversations/{conversation}/append_message/ #
PATCH /api/environments/{project_id}/conversations/{conversation}/cancel/ #
GET /api/environments/{project_id}/conversations/{conversation}/queue/ #
POST /api/environments/{project_id}/conversations/{conversation}/queue/ #
PATCH /api/environments/{project_id}/conversations/{conversation}/queue/{queue_id}/ #
DELETE /api/environments/{project_id}/conversations/{conversation}/queue/{queue_id}/ #
POST /api/environments/{project_id}/conversations/{conversation}/queue/clear/ #
GET /api/environments/{project_id}/conversations/views/ #
POST /api/environments/{project_id}/conversations/views/ #
GET /api/environments/{project_id}/conversations/views/{short_id}/ #
DELETE /api/environments/{project_id}/conversations/views/{short_id}/ #
GET /api/projects/{project_id}/conversations/tickets/ #
POST /api/projects/{project_id}/conversations/tickets/ #
GET /api/projects/{project_id}/conversations/tickets/{id}/ #
PUT /api/projects/{project_id}/conversations/tickets/{id}/ #
PATCH /api/projects/{project_id}/conversations/tickets/{id}/ #
DELETE /api/projects/{project_id}/conversations/tickets/{id}/ #
POST /api/projects/{project_id}/conversations/tickets/{id}/suggest_reply/ #
POST /api/projects/{project_id}/conversations/tickets/bulk_update_tags/ #
GET /api/projects/{project_id}/conversations/tickets/unread_count/ #

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/posthog-conversations-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 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 Specification

posthog-conversations-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: PostHog actions Conversations API
  version: 1.0.0
  description: ''
servers:
- url: https://app.posthog.com/api
  description: Base URL declared by the provider in apis.yml (roadmap#122).
tags:
- name: conversations
paths:
  /api/environments/{project_id}/conversations/:
    get:
      operationId: conversations_list
      parameters:
      - name: limit
        required: false
        in: query
        description: Number of results to return per page.
        schema:
          type: integer
      - name: offset
        required: false
        in: query
        description: The initial index from which to return the results.
        schema:
          type: integer
      - $ref: '#/components/parameters/ProjectIdPath'
      tags:
      - conversations
      security:
      - PersonalAPIKeyAuth:
        - conversation:read
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedConversationMinimalList'
          description: ''
      x-explicit-tags:
      - max
    post:
      operationId: conversations_create
      description: 'Unified endpoint that handles both conversation creation and streaming.


        - If message is provided: Start new conversation processing

        - If no message: Stream from existing conversation'
      parameters:
      - $ref: '#/components/parameters/ProjectIdPath'
      tags:
      - conversations
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Message'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/Message'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/Message'
        required: true
      security:
      - PersonalAPIKeyAuth:
        - conversation:write
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Message'
          description: ''
      x-explicit-tags:
      - max
  /api/environments/{project_id}/conversations/{conversation}/:
    get:
      operationId: conversations_retrieve
      parameters:
      - in: path
        name: conversation
        schema:
          type: string
          format: uuid
        description: A UUID string identifying this conversation.
        required: true
      - $ref: '#/components/parameters/ProjectIdPath'
      tags:
      - conversations
      security:
      - PersonalAPIKeyAuth:
        - conversation:read
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Conversation'
          description: ''
      x-explicit-tags:
      - max
  /api/environments/{project_id}/conversations/{conversation}/append_message/:
    post:
      operationId: conversations_append_message_create
      description: 'Appends a message to an existing conversation without triggering AI processing.

        This is used for client-side generated messages that need to be persisted

        (e.g., support ticket confirmation messages).'
      parameters:
      - in: path
        name: conversation
        schema:
          type: string
          format: uuid
        description: A UUID string identifying this conversation.
        required: true
      - $ref: '#/components/parameters/ProjectIdPath'
      tags:
      - conversations
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MessageMinimal'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/MessageMinimal'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/MessageMinimal'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MessageMinimal'
          description: ''
      x-explicit-tags:
      - max
  /api/environments/{project_id}/conversations/{conversation}/cancel/:
    patch:
      operationId: conversations_cancel_partial_update
      parameters:
      - in: path
        name: conversation
        schema:
          type: string
          format: uuid
        description: A UUID string identifying this conversation.
        required: true
      - $ref: '#/components/parameters/ProjectIdPath'
      tags:
      - conversations
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchedConversation'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/PatchedConversation'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/PatchedConversation'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Conversation'
          description: ''
      x-explicit-tags:
      - max
  /api/environments/{project_id}/conversations/{conversation}/queue/:
    get:
      operationId: conversations_queue_retrieve
      parameters:
      - in: path
        name: conversation
        schema:
          type: string
          format: uuid
        description: A UUID string identifying this conversation.
        required: true
      - $ref: '#/components/parameters/ProjectIdPath'
      tags:
      - conversations
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Conversation'
          description: ''
      x-explicit-tags:
      - max
    post:
      operationId: conversations_queue_create
      parameters:
      - in: path
        name: conversation
        schema:
          type: string
          format: uuid
        description: A UUID string identifying this conversation.
        required: true
      - $ref: '#/components/parameters/ProjectIdPath'
      tags:
      - conversations
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Conversation'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/Conversation'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/Conversation'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Conversation'
          description: ''
      x-explicit-tags:
      - max
  /api/environments/{project_id}/conversations/{conversation}/queue/{queue_id}/:
    patch:
      operationId: conversations_queue_partial_update
      parameters:
      - in: path
        name: conversation
        schema:
          type: string
          format: uuid
        description: A UUID string identifying this conversation.
        required: true
      - $ref: '#/components/parameters/ProjectIdPath'
      - in: path
        name: queue_id
        schema:
          type: string
        required: true
      tags:
      - conversations
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchedConversation'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/PatchedConversation'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/PatchedConversation'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Conversation'
          description: ''
      x-explicit-tags:
      - max
    delete:
      operationId: conversations_queue_destroy
      parameters:
      - in: path
        name: conversation
        schema:
          type: string
          format: uuid
        description: A UUID string identifying this conversation.
        required: true
      - $ref: '#/components/parameters/ProjectIdPath'
      - in: path
        name: queue_id
        schema:
          type: string
        required: true
      tags:
      - conversations
      responses:
        '204':
          description: No response body
      x-explicit-tags:
      - max
  /api/environments/{project_id}/conversations/{conversation}/queue/clear/:
    post:
      operationId: conversations_queue_clear_create
      parameters:
      - in: path
        name: conversation
        schema:
          type: string
          format: uuid
        description: A UUID string identifying this conversation.
        required: true
      - $ref: '#/components/parameters/ProjectIdPath'
      tags:
      - conversations
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Conversation'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/Conversation'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/Conversation'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Conversation'
          description: ''
      x-explicit-tags:
      - max
  /api/environments/{project_id}/conversations/views/:
    get:
      operationId: conversations_views_list
      parameters:
      - name: limit
        required: false
        in: query
        description: Number of results to return per page.
        schema:
          type: integer
      - name: offset
        required: false
        in: query
        description: The initial index from which to return the results.
        schema:
          type: integer
      - $ref: '#/components/parameters/ProjectIdPath'
      tags:
      - conversations
      security:
      - PersonalAPIKeyAuth:
        - conversation:read
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedTicketViewList'
          description: ''
      x-explicit-tags:
      - conversations
    post:
      operationId: conversations_views_create
      parameters:
      - $ref: '#/components/parameters/ProjectIdPath'
      tags:
      - conversations
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TicketView'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/TicketView'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/TicketView'
        required: true
      security:
      - PersonalAPIKeyAuth:
        - conversation:write
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TicketView'
          description: ''
      x-explicit-tags:
      - conversations
  /api/environments/{project_id}/conversations/views/{short_id}/:
    get:
      operationId: conversations_views_retrieve
      parameters:
      - $ref: '#/components/parameters/ProjectIdPath'
      - in: path
        name: short_id
        schema:
          type: string
        required: true
      tags:
      - conversations
      security:
      - PersonalAPIKeyAuth:
        - conversation:read
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TicketView'
          description: ''
      x-explicit-tags:
      - conversations
    delete:
      operationId: conversations_views_destroy
      parameters:
      - $ref: '#/components/parameters/ProjectIdPath'
      - in: path
        name: short_id
        schema:
          type: string
        required: true
      tags:
      - conversations
      security:
      - PersonalAPIKeyAuth:
        - conversation:write
      responses:
        '204':
          description: No response body
      x-explicit-tags:
      - conversations
  /api/projects/{project_id}/conversations/tickets/:
    get:
      operationId: conversations_tickets_list
      description: List tickets with person data attached.
      parameters:
      - in: query
        name: assignee
        schema:
          type: string
        description: Filter by assignee. Use `unassigned` for tickets with no assignee, `user:<user_id>` for a specific user, or `role:<role_uuid>` for a role.
      - in: query
        name: channel_detail
        schema:
          type: string
          enum:
          - slack_bot_mention
          - slack_channel_message
          - slack_emoji_reaction
          - teams_bot_mention
          - teams_channel_message
          - widget_api
          - widget_embedded
        description: Filter by the channel sub-type (e.g. `widget_embedded`, `slack_bot_mention`).
      - in: query
        name: channel_source
        schema:
          type: string
          enum:
          - email
          - slack
          - teams
          - widget
        description: Filter by the channel the ticket originated from.
      - in: query
        name: date_from
        schema:
          type: string
        description: Only include tickets updated on or after this date. Accepts absolute dates (`2026-01-01`) or relative ones (`-7d`, `-1mStart`). Pass `all` to disable the filter.
      - in: query
        name: date_to
        schema:
          type: string
        description: Only include tickets updated on or before this date. Same format as `date_from`.
      - in: query
        name: distinct_ids
        schema:
          type: string
        description: Comma-separated list of person `distinct_id`s to filter by (max 100).
      - name: limit
        required: false
        in: query
        description: Number of results to return per page.
        schema:
          type: integer
      - name: offset
        required: false
        in: query
        description: The initial index from which to return the results.
        schema:
          type: integer
      - in: query
        name: order_by
        schema:
          type: string
          enum:
          - -created_at
          - -sla_due_at
          - -ticket_number
          - -updated_at
          - created_at
          - sla_due_at
          - ticket_number
          - updated_at
        description: Sort order. Prefix with `-` for descending. Defaults to `-updated_at`.
      - in: query
        name: priority
        schema:
          type: string
        description: 'Filter by priority. Accepts a single value or a comma-separated list (e.g. `medium,high`). Valid values: `low`, `medium`, `high`.'
      - $ref: '#/components/parameters/ProjectIdPath'
      - in: query
        name: search
        schema:
          type: string
        description: Free-text search. A numeric value matches a ticket number exactly; otherwise matches against the customer's name or email (case-insensitive, partial match).
      - in: query
        name: sla
        schema:
          type: string
          enum:
          - at-risk
          - breached
          - on-track
        description: Filter by SLA state. `breached` = past `sla_due_at`, `at-risk` = due within the next hour, `on-track` = more than an hour remaining.
      - in: query
        name: status
        schema:
          type: string
        description: 'Filter by status. Accepts a single value or a comma-separated list (e.g. `new,open,pending`). Valid values: `new`, `open`, `pending`, `on_hold`, `resolved`.'
      - in: query
        name: tags
        schema:
          type: string
        description: JSON-encoded array of tag names to filter by, e.g. `["billing","urgent"]`.
      tags:
      - conversations
      security:
      - PersonalAPIKeyAuth:
        - ticket:read
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedTicketList'
          description: ''
      x-explicit-tags:
      - conversations
    post:
      operationId: conversations_tickets_create
      parameters:
      - $ref: '#/components/parameters/ProjectIdPath'
      tags:
      - conversations
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Ticket'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/Ticket'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/Ticket'
      security:
      - PersonalAPIKeyAuth:
        - ticket:write
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Ticket'
          description: ''
      x-explicit-tags:
      - conversations
  /api/projects/{project_id}/conversations/tickets/{id}/:
    get:
      operationId: conversations_tickets_retrieve
      description: Get single ticket and mark as read by team.
      parameters:
      - in: path
        name: id
        schema:
          type: string
          format: uuid
        description: A UUID string identifying this ticket.
        required: true
      - $ref: '#/components/parameters/ProjectIdPath'
      tags:
      - conversations
      security:
      - PersonalAPIKeyAuth:
        - ticket:read
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Ticket'
          description: ''
      x-explicit-tags: []
    put:
      operationId: conversations_tickets_update
      description: Handle ticket updates including assignee changes.
      parameters:
      - in: path
        name: id
        schema:
          type: string
          format: uuid
        description: A UUID string identifying this ticket.
        required: true
      - $ref: '#/components/parameters/ProjectIdPath'
      tags:
      - conversations
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Ticket'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/Ticket'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/Ticket'
      security:
      - PersonalAPIKeyAuth:
        - ticket:write
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Ticket'
          description: ''
      x-explicit-tags: []
    patch:
      operationId: conversations_tickets_partial_update
      parameters:
      - in: path
        name: id
        schema:
          type: string
          format: uuid
        description: A UUID string identifying this ticket.
        required: true
      - $ref: '#/components/parameters/ProjectIdPath'
      tags:
      - conversations
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchedTicket'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/PatchedTicket'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/PatchedTicket'
      security:
      - PersonalAPIKeyAuth:
        - ticket:write
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Ticket'
          description: ''
      x-explicit-tags: []
    delete:
      operationId: conversations_tickets_destroy
      parameters:
      - in: path
        name: id
        schema:
          type: string
          format: uuid
        description: A UUID string identifying this ticket.
        required: true
      - $ref: '#/components/parameters/ProjectIdPath'
      tags:
      - conversations
      security:
      - PersonalAPIKeyAuth:
        - ticket:write
      responses:
        '204':
          description: No response body
      x-explicit-tags: []
  /api/projects/{project_id}/conversations/tickets/{id}/suggest_reply/:
    post:
      operationId: conversations_tickets_suggest_reply_create
      parameters:
      - in: path
        name: id
        schema:
          type: string
          format: uuid
        description: A UUID string identifying this ticket.
        required: true
      - $ref: '#/components/parameters/ProjectIdPath'
      tags:
      - conversations
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuggestReplyResponse'
          description: ''
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuggestReplyError'
          description: ''
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuggestReplyError'
          description: ''
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuggestReplyError'
          description: ''
      x-explicit-tags: []
  /api/projects/{project_id}/conversations/tickets/bulk_update_tags/:
    post:
      operationId: conversations_tickets_bulk_update_tags_create
      description: 'Bulk update tags on multiple objects.


        Accepts:

        - {"ids": [...], "action": "add"|"remove"|"set", "tags": ["tag1", "tag2"]}


        Actions:

        - "add": Add tags to existing tags on each object

        - "remove": Remove specific tags from each object

        - "set": Replace all tags on each object with the provided list'
      parameters:
      - $ref: '#/components/parameters/ProjectIdPath'
      tags:
      - conversations
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkUpdateTagsRequest'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/BulkUpdateTagsRequest'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/BulkUpdateTagsRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BulkUpdateTagsResponse'
          description: ''
      x-explicit-tags:
      - conversations
  /api/projects/{project_id}/conversations/tickets/unread_count/:
    get:
      operationId: conversations_tickets_unread_count_retrieve
      description: 'Get total unread ticket count for the team.


        Returns the sum of unread_team_count for all non-resolved tickets.

        Cached in Redis for 30 seconds, invalidated on changes.'
      parameters:
      - $ref: '#/components/parameters/ProjectIdPath'
      tags:
      - conversations
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Ticket'
          description: ''
      x-explicit-tags:
      - conversations
components:
  schemas:
    TicketView:
      type: object
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
        short_id:
          type: string
          readOnly: true
        name:
          type: string
          maxLength: 400
        filters:
          type: object
          additionalProperties: true
          description: Saved ticket filter criteria. May contain status, priority, channel, sla, assignee, tags, dateFrom, dateTo, and sorting keys.
        created_at:
          type: string
          format: date-time
          readOnly: true
        created_by:
          allOf:
          - $ref: '#/components/schemas/UserBasic'
          readOnly: true
      required:
      - created_at
      - created_by
      - id
      - name
      - short_id
    PaginatedConversationMinimalList:
      type: object
      required:
      - count
      - results
      properties:
        count:
          type: integer
          example: 123
        next:
          type:
          - string
          - 'null'
          format: uri
          example: http://api.example.org/accounts/?offset=400&limit=100
        previous:
          type:
          - string
          - 'null'
          format: uri
          example: http://api.example.org/accounts/?offset=200&limit=100
        results:
          type: array
          items:
            $ref: '#/components/schemas/ConversationMinimal'
    NullEnum:
      enum:
      - null
    ConversationType:
      enum:
      - assistant
      - tool_call
      - deep_research
      - slack
      type: string
      description: '* `assistant` - Assistant

        * `tool_call` - Tool call

        * `deep_research` - Deep research

        * `slack` - Slack'
    PatchedConversation:
      type: object
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
        status:
          allOf:
          - $ref: '#/components/schemas/ConversationStatus'
          readOnly: true
        title:
          type:
          - string
          - 'null'
          readOnly: true
          description: Title of the conversation.
        user:
          allOf:
          - $ref: '#/components/schemas/UserBasic'
          readOnly: true
        created_at:
          type:
          - string
          - 'null'
          format: date-time
          readOnly: true
        updated_at:
          type:
          - string
          - 'null'
          format: date-time
          readOnly: true
        type:
          allOf:
          - $ref: '#/components/schemas/ConversationType'
          readOnly: true
        is_internal:
          type:
          - boolean
          - 'null'
          readOnly: true
          description: Whether this conversation was created during an impersonated session (e.g., by support agents). Internal conversations are hidden from customers.
        slack_thread_key:
          type:
          - string
          - 'null'
          readOnly: true
          description: 'Unique key for Slack thread: ''{workspace_id}:{channel}:{thread_ts}'''
        slack_workspace_domain:
          type:
          - string
          - 'null'
          readOnly: true
          description: Slack workspace subdomain (e.g. 'posthog' for posthog.slack.com)
        messages:
          type: array
          items:
            type: object
            additionalProperties: true
          readOnly: true
        has_unsupported_content:
          type: boolean
          readOnly: true
        agent_mode:
          type:
          - string
          - 'null'
          readOnly: true
        is_sandbox:
          type: boolean
          readOnly: true
        pending_approvals:
          type: array
          items:
            type: object
            additionalProperties: true
          description: 'Return pending approval cards as structured data.


            Combines metadata from conversation.approval_decisions with payload from checkpoint

            interrupts (single source of truth for payload data).'
          readOnly: true
    PatchedTicket:
      type: object
      description: Serializer mixin that handles tags for objects.
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
        ticket_number:
          type: integer
          readOnly: true
        channel_source:
          allOf:
          - $ref: '#/components/schemas/ChannelSourceEnum'
          readOnly: true
        channel_detail:
          readOnly: true
          oneOf:
          - $ref: '#/components/schemas/ChannelDetailEnum'
          - $ref: '#/components/schemas/NullEnum'
        distinct_id:
          type: string
          readOnly: true
        status:
          allOf:
          - $ref: '#/components/schemas/TicketStatusEnum'
          description: 'Ticket status: new, open, pending, on_hold, or resolved


            * `new` - New

            * `open` - Open

            * `pending` - Pending

            * `on_hold` - On hold

            * `resolved` - Resolved'
        priority:
          description: 'Ticket priority: low, medium, or high. Null if unset.


            * `low` - Low

            * `medium` - Medium

            * `high` - High'
          oneOf:
          - $ref: '#/components/schemas/PriorityEnum'
          - $ref: '#/components/schemas/BlankEnum'
          - $ref: '#/components/schemas/NullEnum'
        assignee:
          allOf:
          - $ref: '#/components/schemas/TicketAssignment'
          readOnly: true
        anonymous_traits:
          description: Customer-provided traits such as name and email
        ai_resolved:
          type: boolean
        escalation_reason:
          type:
          - string
          - 'null'
        created_at:
          type: string
          format: date-time
          readOnly: true
        updated_at:
          type: string
          format: date-time
          readOnly: true
        message_count:
          type: integer
          readOnly: true
        last_message_at:
          type:
          - string
          - 'null'
          format: date-time
          readOnly: true
        last_message_text:
          type:
          - string
          - 'null'
          readOnly: true
        unread_team_count:
          type: integer
          readOnly: true
        unread_customer_count:
          type: integer
          readOnly: true
        session_id:
          type:
          - string
          - 'null'
          readOnly: true
        session_context:
          readOnly: true
        sla_due_at:
          type:
          - string
          - 'null'
          format: date-time
          description: SLA deadline set via workflows. Null means no SLA.
        snoozed_until:
          type:
          - string
          - 'null'
          format: date-time
        slack_channel_id:
          type:
          - string
          - 'null'
          readOnly: true
        slack_thread_ts:
          type:
          - string
          - 'null'
          readOnly: true
        slack_team_id:
          type:
          - string
          - 'null'
          readOnly: true
        email_subject:
          type:
          - string
          - 'null'
          readOnly: true
        email_from:
          type:
          - string
          - 'null'
          format: email
          readOnly: true
        email_to:
          type:
          - string
          - 'null'
          readOnly: true
        cc_participants:
          readOnly: true
        person:
          allOf:
          - $ref: '#/components/schemas/TicketPerson'
          readOnly: true
        tags:
          type: array
          items: {}
    MessageMinimal:
      type: object
      description: Serializer for appending a message to an existing conversation without triggering AI processing.
      properties:
        content:
          type: string
          maxLength: 10000
      required:
      - content
    BulkUpdateTagsResponse:
      type: object
      properties:
        updated:
          type: array
          items:
            $ref: '#/components/schemas/BulkUpdateTagsItem'
        skipped:
          type: array
          items:
            $ref: '#/components/schemas/BulkUpdateTagsError'
      required:
      - skipped
      - updated
    ChannelDetailEnum:
      enum:
      - slack_channel_message
      - slack_bot_mention
      - slack_emoji_reaction
      - teams_channel_message
      - teams_bot_mention
      - widget_embedded
      - widget_api
      type: string
      description: '* `slack_channel_message` - Channel message

        * `slack_bot_mention` - Bot mention

        * `slack_emoji_reaction` - Emoji reaction

        * `teams_channel_message` - Teams channel message

        * `teams_bot_mention` - Teams bot mention

        * `widget_embedded` - Widget

        * `widget_api` - API'
    BulkUpdateTagsError:
      type: object
      properties:
        id:
          type: integer
        reason:
          type: string
      required:
      - id
      - reason
    ConversationMinimal:


# --- truncated at 32 KB (50 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/posthog/refs/heads/main/openapi/posthog-conversations-api-openapi.yml