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

# List Thread Messages

<Warning>
  This is an internal/undocumented endpoint. It is not part of the public API and may change without notice. Do not rely on this endpoint for production connections.
</Warning>

Error steps from the agent (such as inference failures or tool errors) are surfaced as messages with `role: "agent"`, where the `content` field contains the error description.


## OpenAPI

````yaml openapi-undocumented.json GET /v1/threads/{thread_id}/messages
openapi: 3.1.0
info:
  title: Notion API (Undocumented)
  version: 1.0.0
  description: >-
    Internal/undocumented Notion API endpoints. These endpoints are not part of
    the public API and may change without notice. Do not rely on these for
    production integrations.
  termsOfService: >-
    https://notion.notion.site/Terms-and-Privacy-28ffdd083dc3473e9c2da6ec011b58ac
  x-noIndex: true
servers:
  - url: https://api.notion.com
security:
  - bearerAuth: []
tags:
  - name: Internal
    description: Internal/undocumented endpoints
    x-hidden: true
paths:
  /v1/threads/{thread_id}/messages:
    get:
      tags:
        - Internal
      summary: List thread messages
      operationId: list-thread-messages
      parameters:
        - name: thread_id
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/idRequest'
            description: The ID of the thread.
        - name: verbose
          in: query
          schema:
            type: boolean
            description: >-
              Whether to include agent thinking and structured message content
              parts. Defaults to false.
        - name: role
          in: query
          schema:
            type: string
            enum:
              - user
              - agent
            description: Filter messages by role (user or agent).
        - name: start_cursor
          in: query
          schema:
            type: string
            description: >-
              If supplied, this endpoint will return a page of results starting
              after the cursor provided. If not supplied, this endpoint will
              return the first page of results.
        - name: page_size
          in: query
          schema:
            type: integer
            minimum: 1
            maximum: 100
            description: >-
              The number of items from the full list desired in the response.
              Maximum: 100
        - $ref: '#/components/parameters/notionVersion'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  object:
                    type: string
                    const: list
                    description: Always `list`
                  type:
                    type: string
                    const: thread_message
                    description: Always `thread_message`
                  results:
                    type: array
                    items:
                      type: object
                      properties:
                        object:
                          type: string
                          const: thread_message
                          description: Always `thread_message`
                        id:
                          $ref: '#/components/schemas/idResponse'
                        role:
                          type: string
                          enum:
                            - user
                            - agent
                          description: 'One of: `user`, `agent`'
                        content:
                          type: string
                        created_time:
                          type: string
                          format: date-time
                          description: Date and time when this message was created.
                        parent:
                          type: object
                          properties:
                            type:
                              type: string
                              const: thread
                              description: The parent type.
                            id:
                              $ref: '#/components/schemas/idResponse'
                              description: The ID of the parent thread.
                          additionalProperties: false
                          required:
                            - type
                            - id
                        attachments:
                          type: array
                          items:
                            type: object
                            properties:
                              name:
                                type: string
                              content_type:
                                type: string
                              url:
                                type: string
                              expiry_time:
                                type: string
                                format: date-time
                                description: The time when the attachment URL will expire.
                            additionalProperties: false
                            required:
                              - name
                              - content_type
                              - url
                          maxItems: 100
                        content_parts:
                          type: array
                          items:
                            oneOf:
                              - type: object
                                properties:
                                  type:
                                    type: string
                                    const: text
                                    description: Always `text`
                                  text:
                                    type: string
                                additionalProperties: false
                                required:
                                  - type
                                  - text
                              - type: object
                                properties:
                                  type:
                                    type: string
                                    const: thinking
                                    description: Always `thinking`
                                  text:
                                    type: string
                                additionalProperties: false
                                required:
                                  - type
                                  - text
                              - type: object
                                properties:
                                  type:
                                    type: string
                                    const: tool_call
                                    description: Always `tool_call`
                                  tool_call_id:
                                    oneOf:
                                      - type: string
                                      - type: 'null'
                                  tool_name:
                                    type: string
                                  results:
                                    type: array
                                    items:
                                      type: object
                                      properties:
                                        id:
                                          $ref: '#/components/schemas/idResponse'
                                        agent_step_id:
                                          oneOf:
                                            - $ref: '#/components/schemas/idResponse'
                                            - type: 'null'
                                        tool_call_id:
                                          oneOf:
                                            - type: string
                                            - type: 'null'
                                        tool_name:
                                          type: string
                                        tool_type:
                                          type: string
                                        state:
                                          type: string
                                        started_at:
                                          type: integer
                                          minimum: 0
                                        finished_at:
                                          oneOf:
                                            - type: integer
                                              minimum: 0
                                            - type: 'null'
                                        duration_ms:
                                          oneOf:
                                            - type: integer
                                              minimum: 0
                                            - type: 'null'
                                      additionalProperties: false
                                      required:
                                        - id
                                        - agent_step_id
                                        - tool_call_id
                                        - tool_name
                                        - tool_type
                                        - state
                                        - started_at
                                        - finished_at
                                        - duration_ms
                                    maxItems: 100
                                additionalProperties: false
                                required:
                                  - type
                                  - tool_call_id
                                  - tool_name
                              - type: object
                                properties:
                                  type:
                                    type: string
                                    const: follow_ups
                                    description: Always `follow_ups`
                                  follow_ups:
                                    type: array
                                    items:
                                      type: object
                                      properties:
                                        label:
                                          type: string
                                        message:
                                          type: string
                                      additionalProperties: false
                                      required:
                                        - label
                                        - message
                                    maxItems: 100
                                additionalProperties: false
                                required:
                                  - type
                                  - follow_ups
                              - type: object
                                properties:
                                  type:
                                    type: string
                                    const: custom_agent_template_picker
                                    description: Always `custom_agent_template_picker`
                                additionalProperties: false
                                required:
                                  - type
                          maxItems: 100
                        pending_user_actions:
                          type: array
                          items:
                            type: object
                            properties:
                              id:
                                $ref: '#/components/schemas/idResponse'
                              type:
                                type: string
                                const: tool_confirmation
                                description: Always `tool_confirmation`
                              title:
                                type: string
                              requirements:
                                type: array
                                items:
                                  oneOf:
                                    - type: object
                                      properties:
                                        type:
                                          type: string
                                          const: general
                                          description: Always `general`
                                      additionalProperties: false
                                      required:
                                        - type
                                    - type: object
                                      properties:
                                        type:
                                          type: string
                                          const: manage_workers
                                          description: Always `manage_workers`
                                      additionalProperties: false
                                      required:
                                        - type
                                    - type: object
                                      properties:
                                        type:
                                          type: string
                                          const: url_safety
                                          description: Always `url_safety`
                                        urls:
                                          type: array
                                          items:
                                            type: string
                                          maxItems: 100
                                        required_by_workspace_policy:
                                          type: boolean
                                      additionalProperties: false
                                      required:
                                        - type
                                        - urls
                                    - type: object
                                      properties:
                                        type:
                                          type: string
                                          const: permission_escalation
                                          description: Always `permission_escalation`
                                        destination_title:
                                          type: string
                                        source_titles:
                                          type: array
                                          items:
                                            type: string
                                          maxItems: 100
                                      additionalProperties: false
                                      required:
                                        - type
                                    - type: object
                                      properties:
                                        type:
                                          type: string
                                          const: delete_content
                                          description: Always `delete_content`
                                        page_count:
                                          type: integer
                                          minimum: 0
                                        database_count:
                                          type: integer
                                          minimum: 0
                                        meeting_notes_block_count:
                                          type: integer
                                          minimum: 0
                                      additionalProperties: false
                                      required:
                                        - type
                                        - page_count
                                        - database_count
                                    - type: object
                                      properties:
                                        type:
                                          type: string
                                          const: connect_integration
                                          description: Always `connect_integration`
                                        integration_type:
                                          type: string
                                        integration_name:
                                          type: string
                                        handoff_url:
                                          type: string
                                      additionalProperties: false
                                      required:
                                        - type
                                        - integration_type
                                        - integration_name
                                        - handoff_url
                                    - type: object
                                      properties:
                                        type:
                                          type: string
                                          const: admin_mode
                                          description: Always `admin_mode`
                                        explanation:
                                          type: string
                                      additionalProperties: false
                                      required:
                                        - type
                                  title: Pending user action requirement
                                maxItems: 100
                              options:
                                type: array
                                items:
                                  oneOf:
                                    - type: object
                                      properties:
                                        id:
                                          type: string
                                          const: approve
                                          description: Always `approve`
                                        label:
                                          type: string
                                      additionalProperties: false
                                      required:
                                        - id
                                        - label
                                    - type: object
                                      properties:
                                        id:
                                          type: string
                                          const: reject
                                          description: Always `reject`
                                        label:
                                          type: string
                                      additionalProperties: false
                                      required:
                                        - id
                                        - label
                                    - type: object
                                      properties:
                                        id:
                                          type: string
                                          const: use_connection
                                          description: Always `use_connection`
                                        label:
                                          type: string
                                        input:
                                          type: object
                                          properties:
                                            type:
                                              type: string
                                              const: connection_id
                                              description: Always `connection_id`
                                            required:
                                              type: boolean
                                              const: true
                                              description: Always `true`
                                          additionalProperties: false
                                          required:
                                            - type
                                            - required
                                      additionalProperties: false
                                      required:
                                        - id
                                        - label
                                        - input
                                  title: Pending user action option
                                maxItems: 100
                            additionalProperties: false
                            required:
                              - id
                              - type
                              - title
                              - requirements
                              - options
                          maxItems: 100
                      additionalProperties: false
                      required:
                        - object
                        - id
                        - role
                        - content
                        - created_time
                        - parent
                    maxItems: 100
                  has_more:
                    type: boolean
                  next_cursor:
                    oneOf:
                      - title: Cursor
                        type: string
                      - type: 'null'
                additionalProperties: false
                required:
                  - object
                  - type
                  - results
                  - has_more
                  - next_cursor
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_api_400'
        '401':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_api_401'
        '403':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_api_403'
        '404':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_api_404'
        '406':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_api_406'
        '409':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_api_409'
        '429':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_api_429'
        '500':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_api_500'
        '503':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_api_503'
        '504':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_api_504'
        '529':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_api_529'
      deprecated: true
components:
  schemas:
    idRequest:
      type: string
    idResponse:
      type: string
      format: uuid
    error_api_400:
      allOf:
        - $ref: '#/components/schemas/publicApiCommonErrorResponse'
        - type: object
          properties:
            code:
              enum:
                - invalid_json
                - invalid_request_url
                - invalid_request
                - missing_version
                - invalid_beta
                - validation_error
                - invalid_credit_limit
            status:
              const: 400
          required:
            - code
            - status
          additionalProperties: false
    error_api_401:
      allOf:
        - $ref: '#/components/schemas/publicApiCommonErrorResponse'
        - type: object
          properties:
            code:
              enum:
                - unauthorized
            status:
              const: 401
          required:
            - code
            - status
          additionalProperties: false
    error_api_403:
      oneOf:
        - allOf:
            - $ref: '#/components/schemas/publicApiCommonErrorResponse'
            - type: object
              properties:
                code:
                  enum:
                    - restricted_resource
                    - status_change_not_allowed
                status:
                  const: 403
              required:
                - code
                - status
              additionalProperties: false
        - allOf:
            - $ref: '#/components/schemas/publicApiCommonErrorResponse'
            - type: object
              properties:
                code:
                  const: workspace_credits_exhausted
                status:
                  const: 403
                additional_data:
                  type: object
                  properties:
                    tool_error_code:
                      const: workspace_credits_exhausted
                    tool_error_class:
                      const: entitlement_required
                    tool_error_retryable:
                      const: 'false'
                    recovery_kind:
                      enum:
                        - contact_workspace_owner
                        - open_workspace_credit_settings
                      description: The recovery action selected by Notion for the caller.
                    recovery_url:
                      type: string
                      format: uri
                      description: >-
                        Present when recovery_kind directs the caller to a
                        settings page.
                  required:
                    - tool_error_code
                    - tool_error_class
                    - tool_error_retryable
                    - recovery_kind
                  additionalProperties:
                    oneOf:
                      - type: string
                      - type: array
                        items:
                          type: string
              required:
                - code
                - status
                - additional_data
        - allOf:
            - $ref: '#/components/schemas/publicApiCommonErrorResponse'
            - type: object
              properties:
                code:
                  const: agent_credit_limit_reached
                status:
                  const: 403
                additional_data:
                  type: object
                  properties:
                    tool_error_code:
                      const: agent_credit_limit_reached
                    tool_error_class:
                      const: entitlement_required
                    tool_error_retryable:
                      const: 'false'
                    recovery_kind:
                      enum:
                        - contact_workspace_owner
                        - none
                        - open_agent_settings
                        - request_agent_limit_increase
                        - request_pending
                      description: The recovery action selected by Notion for the caller.
                    recovery_url:
                      type: string
                      format: uri
                      description: >-
                        Present when recovery_kind directs the caller to a
                        settings page.
                  required:
                    - tool_error_code
                    - tool_error_class
                    - tool_error_retryable
                    - recovery_kind
                  additionalProperties:
                    oneOf:
                      - type: string
                      - type: array
                        items:
                          type: string
              required:
                - code
                - status
                - additional_data
    error_api_404:
      allOf:
        - $ref: '#/components/schemas/publicApiCommonErrorResponse'
        - type: object
          properties:
            code:
              enum:
                - object_not_found
                - directory_not_found
            status:
              const: 404
          required:
            - code
            - status
          additionalProperties: false
    error_api_406:
      allOf:
        - $ref: '#/components/schemas/publicApiCommonErrorResponse'
        - type: object
          properties:
            code:
              enum:
                - row_limit_exceeded
            status:
              const: 406
          required:
            - code
            - status
          additionalProperties: false
    error_api_409:
      allOf:
        - $ref: '#/components/schemas/publicApiCommonErrorResponse'
        - type: object
          properties:
            code:
              enum:
                - conflict_error
                - idempotency_key_reused
                - agent_deleted
            status:
              const: 409
          required:
            - code
            - status
          additionalProperties: false
    error_api_429:
      allOf:
        - $ref: '#/components/schemas/publicApiCommonErrorResponse'
        - type: object
          properties:
            code:
              enum:
                - rate_limited
            status:
              const: 429
          required:
            - code
            - status
          additionalProperties: false
    error_api_500:
      allOf:
        - $ref: '#/components/schemas/publicApiCommonErrorResponse'
        - type: object
          properties:
            code:
              enum:
                - internal_server_error
            status:
              const: 500
          required:
            - code
            - status
          additionalProperties: false
    error_api_503:
      allOf:
        - $ref: '#/components/schemas/publicApiCommonErrorResponse'
        - type: object
          properties:
            code:
              enum:
                - service_unavailable
            status:
              const: 503
          required:
            - code
            - status
          additionalProperties: false
    error_api_504:
      allOf:
        - $ref: '#/components/schemas/publicApiCommonErrorResponse'
        - type: object
          properties:
            code:
              enum:
                - gateway_timeout
            status:
              const: 504
          required:
            - code
            - status
          additionalProperties: false
    error_api_529:
      allOf:
        - $ref: '#/components/schemas/publicApiCommonErrorResponse'
        - type: object
          properties:
            code:
              enum:
                - service_overload
            status:
              const: 529
          required:
            - code
            - status
          additionalProperties: false
    publicApiCommonErrorResponse:
      type: object
      properties:
        object:
          const: error
        message:
          type: string
        additional_data:
          type: object
          additionalProperties:
            oneOf:
              - type: string
              - type: array
                items:
                  type: string
      required:
        - object
        - message
  parameters:
    notionVersion:
      name: Notion-Version
      in: header
      required: true
      schema:
        enum:
          - '2026-03-11'
      description: >-
        The [API version](/reference/versioning) to use for this request. The
        latest version is `2026-03-11`.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer

````