PostHog conversations API

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

OpenAPI Specification

posthog-conversations-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: PostHog actions conversations API
  version: 1.0.0
  description: ''
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:
    ChannelSourceEnum:
      enum:
      - widget
      - email
      - slack
      - teams
      type: string
      description: '* `widget` - Widget

        * `email` - Email

        * `slack` - Slack

        * `teams` - Microsoft Teams'
    BulkUpdateTagsResponse:
      type: object
      properties:
        updated:
          type: array
          items:
            $ref: '#/components/schemas/BulkUpdateTagsItem'
        skipped:
          type: array
          items:
            $ref: '#/components/schemas/BulkUpdateTagsError'
      required:
      - skipped
      - updated
    PriorityEnum:
      enum:
      - low
      - medium
      - high
      type: string
      description: '* `low` - Low

        * `medium` - Medium

        * `high` - High'
    Conversation:
      type: object
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
        status:
          allOf:
          - $ref: '#/components/schemas/ConversationStatus'
          readOnly: true
        title:
          type: string
          readOnly: true
          nullable: true
          description: Title of the conversation.
        user:
          allOf:
          - $ref: '#/components/schemas/UserBasic'
          readOnly: true
        created_at:
          type: string
          format: date-time
          readOnly: true
          nullable: true
        updated_at:
          type: string
          format: date-time
          readOnly: true
          nullable: true
        type:
          allOf:
          - $ref: '#/components/schemas/ConversationType'
          readOnly: true
        is_internal:
          type: boolean
          readOnly: true
          nullable: 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
          readOnly: true
          nullable: true
          description: 'Unique key for Slack thread: ''{workspace_id}:{channel}:{thread_ts}'''
        slack_workspace_domain:
          type: string
          readOnly: true
          nullable: 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
          nullable: true
          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
      required:
      - agent_mode
      - created_at
      - has_unsupported_content
      - id
      - is_internal
      - is_sandbox
      - messages
      - pending_approvals
      - slack_thread_key
      - slack_workspace_domain
      - status
      - title
      - type
      - updated_at
      - user
    RoleAtOrganizationEnum:
      enum:
      - engineering
      - data
      - product
      - founder
      - leadership
      - marketing
      - sales
      - other
      type: string
      description: '* `engineering` - Engineering

        * `data` - Data

        * `product` - Product Management

        * `founder` - Founder

        * `leadership` - Leadership

        * `marketing` - Marketing

        * `sales` - Sales / Success

        * `other` - Other'
    ConversationMinimal:
      type: object
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
        status:
          allOf:
          - $ref: '#/components/schemas/ConversationStatus'
          readOnly: true
        title:
          type: string
          readOnly: true
          nullable: true
          description: Title of the conversation.
        user:
          allOf:
          - $ref: '#/components/schemas/UserBasic'
          readOnly: true
        created_at:
          type: string
          format: date-time
          readOnly: true
          nullable: true
        updated_at:
          type: string
          format: date-time
          readOnly: true
          nullable: true
        type:
          allOf:
          - $ref: '#/components/schemas/ConversationType'
          readOnly: true
        is_internal:
          type: boolean
          readOnly: true
          nullable: 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
          readOnly: true
          nullable: true
          description: 'Unique key for Slack thread: ''{workspace_id}:{channel}:{thread_ts}'''
        slack_workspace_domain:
          type: string
          readOnly: true
          nullable: true
          description: Slack workspace subdomain (e.g. 'posthog' for posthog.slack.com)
      required:
      - created_at
      - id
      - is_internal
      - slack_thread_key
      - slack_workspace_domain
      - status
      - title
      - type
      - updated_at
      - user
    PaginatedConversationMinimalList:
      type: object
      required:
      - count
      - results
      properties:
        count:
          type: integer
          example: 123
        next:
          type: string
          nullable: true
          format: uri
          example: http://api.example.org/accounts/?offset=400&limit=100
        previous:
          type: string
          nullable: true
          format: uri
          example: http://api.example.org/accounts/?offset=200&limit=100
        results:
          type: array
          items:
            $ref: '#/components/schemas/ConversationMinimal'
    PaginatedTicketList:
      type: object
      required:
      - count
      - results
      properties:
        count:
          type: integer
          example: 123
        next:
          type: string
          nullable: true
          format: uri
          example: http://api.example.org/accounts/?offset=400&limit=100
        previous:
          type: string
          nullable: true
          format: uri
          example: http://api.example.org/accounts/?offset=200&limit=100
        results:
          type: array
          items:
            $ref: '#/components/schemas/Ticket'
    Message:
      type: object
      description: Serializer for appending a message to an existing conversation without triggering AI processing.
      properties:
        content:
          type: string
          nullable: true
          maxLength: 40000
        conversation:
          type: string
          format: uuid
        contextual_tools:
          type: object
          additionalProperties: true
        ui_context: {}
        billing_context: {}
        trace_id:
          type: string
          format: uuid
        session_id:
          type: string
        agent_mode:
          $ref: '#/components/schemas/AgentModeEnum'
        is_sandbox:
          type: boolean
          default: false
        resume_payload:
          nullable: true
      required:
      - content
      - conversation
      - trace_id
    NullEnum:
      enum:
      - null
    SuggestReplyResponse:
      type: object
      properties:
        suggestion:
          type: string
      required:
      - suggestion
    UserBasic:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        uuid:
          type: string
          format: uuid
          readOnly: true
        distinct_id:
          type: string
          nullable: true
          maxLength: 200
        first_name:
          type: string
          maxLength: 150
        last_name:
          type: string
          maxLength: 150
        email:
          type: string
          format: email
          title: Email address
          maxLength: 254
        is_email_verified:
          type: boolean
          nullable: true
        hedgehog_config:
          type: object
          additionalProperties: true
          nullable: true
          readOnly: true
        role_at_organization:
          nullable: true
          oneOf:
          - $ref: '#/components/schemas/RoleAtOrganizationEnum'
          - $ref: '#/components/schemas/BlankEnum'
          - $ref: '#/components/schemas/NullEnum'
      required:
      - email
      - hedgehog_config
      - id
      - uuid
    TicketPerson:
      type: object
      description: Minimal person serializer for embedding in ticket responses.
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
        name:
          type: string
          readOnly: true
        distinct_ids:
          type: array
          items:
            type: string
          r

# --- 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