> ## Documentation Index
> Fetch the complete documentation index at: https://docs.hq.zone/llms.txt
> Use this file to discover all available pages before exploring further.

# List conversation messages

> Returns the conversation's transcript as a sequence-ordered list of journal rows,
each carrying its direction, kind, JSON payload, sequence number, turn id,
timestamp, and resolved author name/avatar; this is the cold-load companion to the
live event stream. Optional query parameters filter the results: since_seq returns
only events after a given sequence number (used to fill gaps on stream reconnect),
turn_id restricts to a single turn, direction restricts to inbound or outbound, and
view=admin lets a workspace admin read a conversation they do not participate in.
The caller must have access to the conversation, otherwise 404 is returned.



## OpenAPI

````yaml GET /v1/api/conversations/{id}/messages
openapi: 3.1.0
info:
  title: HQ API
  description: >-
    Public HTTP API for HQ. Authenticate with a Personal Access Token
    (`Authorization: Bearer hq_pat_...`) for server-side integrations, or an
    OAuth 2.1 authorization-code + PKCE flow for browser apps acting on a user's
    behalf. Both grant from the same resource:action scope vocabulary; an
    endpoint's required scope is listed under its `security`.
  license:
    name: Apache-2.0
    identifier: Apache-2.0
  version: 1.0.0
servers:
  - url: https://api.hq.zone
    description: HQ API (production)
security: []
tags:
  - name: me
    description: The signed-in user's own account
  - name: conversations
    description: Conversations and their messages
  - name: documents
    description: The content-addressed documents library
  - name: schedules
    description: Scheduled prompts and recurring tasks
  - name: agents
    description: Agents, their skills and integrations
  - name: memory
    description: What the assistant remembers (L5 governance)
  - name: tokens
    description: Personal Access Token management
  - name: billing
    description: Usage and billing
  - name: notifications
    description: In-app notification center
  - name: admin
    description: Workspace administration
  - name: integrations
    description: Workspace integrations (Slack, MCP, skills)
  - name: onboarding
    description: New-workspace onboarding wizard
  - name: auth
    description: Sign-in, sessions, and OAuth
paths:
  /v1/api/conversations/{id}/messages:
    get:
      tags:
        - conversations
      summary: List conversation messages
      description: >-
        Returns the conversation's transcript as a sequence-ordered list of
        journal rows,

        each carrying its direction, kind, JSON payload, sequence number, turn
        id,

        timestamp, and resolved author name/avatar; this is the cold-load
        companion to the

        live event stream. Optional query parameters filter the results:
        since_seq returns

        only events after a given sequence number (used to fill gaps on stream
        reconnect),

        turn_id restricts to a single turn, direction restricts to inbound or
        outbound, and

        view=admin lets a workspace admin read a conversation they do not
        participate in.

        The caller must have access to the conversation, otherwise 404 is
        returned.
      operationId: list_messages
      parameters:
        - name: id
          in: path
          description: Conversation id
          required: true
          schema:
            type: string
            format: uuid
        - name: since_seq
          in: query
          required: false
          schema:
            type:
              - integer
              - 'null'
            format: int64
        - name: turn_id
          in: query
          required: false
          schema:
            type:
              - string
              - 'null'
            format: uuid
        - name: direction
          in: query
          required: false
          schema:
            type:
              - string
              - 'null'
        - name: view
          in: query
          description: |-
            `?view=admin` opts a tenant admin into reading a journal
            they don't participate in; non-admins are silently
            downgraded. Same shape as conversation_meta. Honored as
            read-only - there's no admin-elevation on POST.
          required: false
          schema:
            type:
              - string
              - 'null'
      responses:
        '200':
          description: >-
            The conversation transcript: journal rows, seq-ordered (the
            cold-load companion to the live SSE stream)
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MessageRow'
        '404':
          description: No such conversation for the caller
      security:
        - bearer_pat: []
        - oauth2: []
components:
  schemas:
    MessageRow:
      type: object
      required:
        - id
        - direction
        - kind
        - payload
        - seq
        - created_at
      properties:
        author:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/MessageAuthor'
              description: >-
                Resolved author for multi-party threads (Slack/Teams): name +
                public

                avatar URL, looked up from `workspace_users` by the message's

                `identity.sub`. `None` for web/extension owners + unknown users
                -> the

                frontend falls back to its own current-user rendering.
        created_at:
          type: string
          format: date-time
        direction:
          type: string
        id:
          type: string
          format: uuid
        kind:
          type: string
        payload: {}
        seq:
          type: integer
          format: int64
        turn_id:
          type:
            - string
            - 'null'
          format: uuid
    MessageAuthor:
      type: object
      properties:
        avatar_url:
          type:
            - string
            - 'null'
        name:
          type:
            - string
            - 'null'
  securitySchemes:
    bearer_pat:
      type: http
      scheme: bearer
      bearerFormat: hq_pat
      description: 'Personal Access Token. Send as `Authorization: Bearer hq_pat_...`.'
    oauth2:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: https://app.hq.zone/v1/oauth/authorize
          tokenUrl: https://api.hq.zone/v1/oauth/token
          refreshUrl: https://api.hq.zone/v1/oauth/token
          scopes:
            admin: Administer the workspace (users, settings, integrations)
            agents:read: View the agents in your workspace
            agents:write: Create and configure agents
            billing:read: View usage and billing information
            conversations:read: Read your conversations and their messages
            conversations:write: Start conversations and send messages on your behalf
            documents:read: Read your documents library
            documents:write: Upload and manage documents in your library
            memory:read: Read what the assistant remembers about you
            memory:write: Correct or delete what the assistant remembers
            schedules:read: View your scheduled tasks
            schedules:write: Create and manage scheduled tasks
            tables:read: Read your tables and their rows
            tables:write: Create tables and add, edit, or delete rows

````