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

# List Comments

> Lists the comments on an intake request, newest first. Follow `pagination.next_cursor` until `pagination.has_more` is false.

### Permissions

Requires `Intake API` permission, and one of `Intake requests`, `Intake access`, or `Intake admin` permission. If these permissions are not available to select, contact [support@harvey.ai](mailto:support@harvey.ai).


## OpenAPI

````yaml /intake_api.json get /api/v1/intake/requests/{request_id}/comments
openapi: 3.0.3
info:
  title: Harvey Intake API
  description: >-
    Push legal requests into Harvey Intake from your own systems and read their
    progress back. Submit a request with an idempotency key, any title and
    description, and the documents it concerns, then read the request to see its
    status, assignee, and attachments as they appear in Harvey.
  version: 1.0.0
  contact:
    email: support@harvey.ai
servers:
  - url: https://api.harvey.ai
    description: Harvey API server
security: []
paths:
  /api/v1/intake/requests/{request_id}/comments:
    get:
      tags:
        - Intake
      summary: List Comments
      description: >-
        Lists the comments on an intake request, newest first. Follow
        `pagination.next_cursor` until `pagination.has_more` is false.
      operationId: listIntakeRequestComments
      parameters:
        - name: request_id
          in: path
          required: true
          description: >-
            The unique identifier of the intake request, as returned when it was
            submitted.
          schema:
            type: string
            format: uuid
          example: 6b5d8f02-4c1a-4f8e-9a77-2d0c3e5b1a94
        - name: limit
          in: query
          required: false
          description: >-
            The page size. Values outside the range are clamped rather than
            rejected.
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 20
        - name: cursor
          in: query
          required: false
          description: >-
            The `pagination.next_cursor` from the previous page of this
            request's comments.
          schema:
            type: string
      responses:
        '200':
          description: A page of the request's comments, newest first.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IntakeRequestCommentList'
              examples:
                listIntakeRequestComments:
                  summary: Example response for a page with more to follow
                  value:
                    comments:
                      - comment_id: 3f1c9a7e-8b2d-4e5f-a6c1-0d9e8f7b6a52
                        request_id: 6b5d8f02-4c1a-4f8e-9a77-2d0c3e5b1a94
                        body: >-
                          @Dana Whitfield the counterparty's redlines are
                          attached.
                        author:
                          type: USER
                          display_name: Priya Raman
                        created_at: '2026-10-09T07:38:21.604117Z'
                        attachments:
                          - file_id: a2e47c19-5d3b-4f60-8e1a-7c2b9d0f4e86
                            name: northwind-msa-redline.docx
                    pagination:
                      limit: 1
                      has_more: true
                      next_cursor: >-
                        eyJjcmVhdGVkX2F0IjoiMjAyNi0xMC0wOVQwNzozODoyMS42MDQxMTdaIn0
        '400':
          description: Bad Request - The `cursor` could not be read
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                invalidCursor:
                  summary: The cursor could not be read
                  value:
                    error: Invalid cursor.
        '401':
          description: >-
            Unauthorized - Invalid or missing API token, or a token that may not
            read intake requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                missingPermission:
                  summary: The token lacks permission to read requests
                  value:
                    error: User does not have permission to read Intake requests
        '404':
          description: >-
            Not Found - No intake request you can read has this id. Also
            returned for a request in another workspace, a deleted request, a
            request that has moved into a Space, and when the Intake API is not
            enabled for your workspace
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                notFound:
                  summary: The request is not reachable
                  value:
                    error: Request not found.
        '422':
          description: >-
            Unprocessable Content - A query parameter is unknown or repeated, or
            `limit` is not an integer. `details` names each one
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IntakeRequestCommentListValidationError'
              examples:
                validationFailed:
                  summary: A non-integer limit and an unknown parameter
                  value:
                    error: Invalid request
                    details:
                      - field: limit
                        code: int_parsing
                        message: This field is invalid
                      - field: sort
                        code: extra_forbidden
                        message: This field is invalid
        '429':
          description: >-
            Too Many Requests - Rate limit exceeded. The response carries a
            `Retry-After` header giving the seconds to wait
        '500':
          description: >-
            Internal Server Error - Also returned when a comment on the request
            can no longer be read, so retrying will not help
        '503':
          description: >-
            Service Unavailable - The comments changed while they were read. The
            call is safe to retry
      security:
        - bearerAuth: []
components:
  schemas:
    IntakeRequestCommentList:
      type: object
      properties:
        comments:
          type: array
          description: The page's comments, newest first.
          items:
            $ref: '#/components/schemas/IntakeRequestComment'
        pagination:
          $ref: '#/components/schemas/IntakeRequestListPagination'
    Error:
      type: object
      properties:
        error:
          type: string
          description: A readable explanation of the failure. Localized, and may change.
    IntakeRequestCommentListValidationError:
      type: object
      description: >-
        Returned when `GET /api/v1/intake/requests/{request_id}/comments`
        rejects a request on its query parameters.
      properties:
        error:
          type: string
          description: >-
            A readable summary of the failure. Localized, so switch on
            `details[].code` rather than matching this text.
        details:
          type: array
          description: It lists each parameter at fault, one entry per problem.
          items:
            type: object
            properties:
              field:
                type: string
                description: The query parameter that has the problem.
                example: limit
              code:
                type: string
                description: >-
                  The machine-parseable reason the parameter was rejected, such
                  as `extra_forbidden`, `multiple_argument_values`, or
                  `int_parsing`. Switch on this value rather than parsing
                  `message`, which is localized and may change.
              message:
                type: string
                description: A readable explanation of the problem with this parameter.
    IntakeRequestComment:
      type: object
      description: One comment on an intake request.
      properties:
        comment_id:
          type: string
          format: uuid
          description: The unique identifier of the comment.
        request_id:
          type: string
          format: uuid
          description: The unique identifier of the intake request.
        body:
          type: string
          description: >-
            The comment as plain text. A mention reads as `@` followed by a
            name, or `@Unknown user` when the name cannot be shown.
        author:
          $ref: '#/components/schemas/IntakeRequestCommentAuthor'
        created_at:
          type: string
          format: date-time
          description: When the comment was posted.
        attachments:
          type: array
          description: Files attached to the comment that your token's user can open.
          items:
            $ref: '#/components/schemas/IntakeRequestCommentAttachment'
    IntakeRequestListPagination:
      type: object
      properties:
        limit:
          type: integer
          description: The page size applied, after clamping.
        has_more:
          type: boolean
          description: Whether another page follows.
        next_cursor:
          type: string
          nullable: true
          description: >-
            Pass it back as `cursor` for the next page. It is null on the last
            page.
    IntakeRequestCommentAuthor:
      type: object
      description: Who wrote the comment.
      properties:
        type:
          $ref: '#/components/schemas/IntakeRequestCommentAuthorType'
        display_name:
          type: string
          nullable: true
          description: The author's display name.
    IntakeRequestCommentAttachment:
      type: object
      description: One file attached to the comment.
      properties:
        file_id:
          type: string
          format: uuid
          description: The unique identifier of the file.
        name:
          type: string
          nullable: true
          description: The file's name.
    IntakeRequestCommentAuthorType:
      type: string
      description: Whether the comment was written by a person or by a Harvey agent.
      enum:
        - USER
        - AGENT
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: Token

````

## Related topics

- [Audit Logs](https://developers.harvey.ai/guides/audit_logs.md)
- [Rate Limits](https://developers.harvey.ai/api-reference/ratelimits.md)
- [List Requests](https://developers.harvey.ai/api-reference/intake/list-requests.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.