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

# Returns a task's comments, newest first.

> Cursor-paginated. Filter from broadest to narrowest: send nothing for every comment;
conversationType to select kinds; or a single
conversationType together with conversationId for
one specific conversation.
            
Attachment and inline-image links carry a time-limited access token that expires, so
fetch the comment again rather than storing a url.
            
A comment that arrived by email stores its body outside the document, and this list does
not fetch it: such a row carries `BodyTruncated: true` with an empty
`BodyHtml`/`BodyText`. Read the single comment to get the full body.



## OpenAPI

````yaml /api-reference/openapi.json get /v1/projects/{projectId}/tasks/{taskId}/comments
openapi: 3.0.4
info:
  title: Public API
  description: Gorelo Public API documentation.
  version: 1.0.0
servers:
  - url: https://api.usw.gorelo.io
    description: US
  - url: https://api.aue.gorelo.io
    description: Australia
security:
  - ApiKeyAuth: []
tags:
  - name: Attachments
    description: "Uploading a file, for anything that can carry one. One endpoint rather than one per record\r\ntype, because the upload itself is identical - only the record it is checked against differs."
  - name: Alerts
    description: Alerts management operations
  - name: Assets
    description: Assets management operations
  - name: Billing
    description: Billing management operations
  - name: Tickets
    description: Tickets management operations
  - name: Clients
    description: Clients management operations
  - name: Contacts
    description: Contacts management operations
  - name: Deletions
    description: Deletions management operations
  - name: Documents
    description: Documents management operations
  - name: Forms
    description: Forms management operations
  - name: Organization
    description: Organization management operations
  - name: Projects
    description: Projects management operations
paths:
  /v1/projects/{projectId}/tasks/{taskId}/comments:
    get:
      tags:
        - Projects
      summary: Returns a task's comments, newest first.
      description: "Cursor-paginated. Filter from broadest to narrowest: send nothing for every comment;\r\nconversationType to select kinds; or a single\r\nconversationType together with conversationId for\r\none specific conversation.\r\n            \r\nAttachment and inline-image links carry a time-limited access token that expires, so\r\nfetch the comment again rather than storing a url.\r\n            \r\nA comment that arrived by email stores its body outside the document, and this list does\r\nnot fetch it: such a row carries `BodyTruncated: true` with an empty\r\n`BodyHtml`/`BodyText`. Read the single comment to get the full body."
      operationId: get_v1_projects_projectId_tasks_taskId_comments
      parameters:
        - name: projectId
          in: path
          description: Project the task belongs to.
          required: true
          schema:
            type: string
            format: uuid
        - name: taskId
          in: path
          description: Task whose comments to return.
          required: true
          schema:
            type: string
            format: uuid
        - name: Cursor
          in: query
          description: Cursor from a previous page.
          schema:
            type: string
        - name: PageSize
          in: query
          description: Comments per page, 1-200. Defaults to 50.
          schema:
            type: integer
            format: int32
            default: 50
        - name: SortBy
          in: query
          description: 'Sort field: `createdOn`.'
          schema:
            type: string
            default: createdOn
        - name: SortOrder
          in: query
          description: '`desc` (default, newest first) or `asc`.'
          schema:
            type: string
            default: desc
        - name: ConversationType
          in: query
          description: >-
            Kinds to include: `1` Public, `2` Private, `3` Side Conversation,
            `4` Approval. Comma-separated on its own; a single value when paired
            with conversationId.
          schema:
            type: string
        - name: ConversationId
          in: query
          description: >-
            Identifier of the single conversation to read, from the
            conversations endpoint. Requires a single conversationType.
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/TaskCommentListItemModelListBaseResponse'
            application/json:
              schema:
                $ref: '#/components/schemas/TaskCommentListItemModelListBaseResponse'
            text/json:
              schema:
                $ref: '#/components/schemas/TaskCommentListItemModelListBaseResponse'
        '400':
          description: Bad Request
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/ObjectBaseResponse'
            application/json:
              schema:
                $ref: '#/components/schemas/ObjectBaseResponse'
            text/json:
              schema:
                $ref: '#/components/schemas/ObjectBaseResponse'
        '401':
          description: Unauthorized
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/ObjectBaseResponse'
            application/json:
              schema:
                $ref: '#/components/schemas/ObjectBaseResponse'
            text/json:
              schema:
                $ref: '#/components/schemas/ObjectBaseResponse'
        '404':
          description: Not Found
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/ObjectBaseResponse'
            application/json:
              schema:
                $ref: '#/components/schemas/ObjectBaseResponse'
            text/json:
              schema:
                $ref: '#/components/schemas/ObjectBaseResponse'
        '500':
          description: Internal Server Error
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/ObjectBaseResponse'
            application/json:
              schema:
                $ref: '#/components/schemas/ObjectBaseResponse'
            text/json:
              schema:
                $ref: '#/components/schemas/ObjectBaseResponse'
components:
  schemas:
    TaskCommentListItemModelListBaseResponse:
      type: object
      properties:
        StatusCode:
          $ref: '#/components/schemas/HttpStatusCode'
        IsSuccess:
          type: boolean
        Data:
          type: array
          items:
            $ref: '#/components/schemas/TaskCommentListItemModel'
          nullable: true
        DataContext:
          $ref: '#/components/schemas/PaginationDataContext'
        Notifications:
          type: array
          items:
            $ref: '#/components/schemas/Error'
      additionalProperties: false
    ObjectBaseResponse:
      type: object
      properties:
        StatusCode:
          $ref: '#/components/schemas/HttpStatusCode'
        IsSuccess:
          type: boolean
        Data:
          nullable: true
        DataContext:
          $ref: '#/components/schemas/ErrorDataContext'
        Notifications:
          type: array
          items:
            $ref: '#/components/schemas/Error'
      additionalProperties: false
    HttpStatusCode:
      enum:
        - 100
        - 101
        - 102
        - 103
        - 200
        - 201
        - 202
        - 203
        - 204
        - 205
        - 206
        - 207
        - 208
        - 226
        - 300
        - 301
        - 302
        - 303
        - 304
        - 305
        - 306
        - 307
        - 308
        - 400
        - 401
        - 402
        - 403
        - 404
        - 405
        - 406
        - 407
        - 408
        - 409
        - 410
        - 411
        - 412
        - 413
        - 414
        - 415
        - 416
        - 417
        - 421
        - 422
        - 423
        - 424
        - 426
        - 428
        - 429
        - 431
        - 451
        - 500
        - 501
        - 502
        - 503
        - 504
        - 505
        - 506
        - 507
        - 508
        - 510
        - 511
      type: integer
      format: int32
    TaskCommentListItemModel:
      type: object
      properties:
        BodyTruncated:
          type: boolean
          description: "True when the body was left out of the list. Fetch the single comment to get the complete\r\n`BodyHtml` and `BodyText`."
        Id:
          type: string
          description: Comment identifier.
          format: uuid
        ConversationId:
          type: string
          description: "Identifier of the conversation this comment belongs to, as a string. Null for Public and\r\nPrivate comments, which are the task's main thread rather than a separate conversation."
          nullable: true
        ConversationType:
          $ref: '#/components/schemas/CodeModel'
        Source:
          $ref: '#/components/schemas/CodeModel'
        BodyHtml:
          type: string
          description: The comment body, as HTML.
        BodyText:
          type: string
          description: The comment body as markdown, when one was stored.
          nullable: true
        Author:
          $ref: '#/components/schemas/CommentAuthorModel'
        EmailInfo:
          $ref: '#/components/schemas/CommentEmailInfoModel'
        Attachments:
          type: array
          items:
            $ref: '#/components/schemas/CommentAttachmentModel'
          description: Files attached to the comment.
        SentimentScore:
          type: number
          description: >-
            Customer sentiment scored on incoming comments; null when not
            scored.
          format: double
          nullable: true
        Reactions:
          type: array
          items:
            $ref: '#/components/schemas/CommentReactionModel'
          description: Reactions left on the comment.
        CreatedOn:
          type: string
          description: When the comment was written (UTC).
          format: date-time
        UpdatedOn:
          type: string
          description: When the comment was last edited (UTC). Null if it never was.
          format: date-time
          nullable: true
      additionalProperties: false
      description: "A task comment as it appears in the comments list. Adds `BodyTruncated`, which\r\nthe single-comment endpoint omits because it always returns the full body."
    PaginationDataContext:
      type: object
      properties:
        Pagination:
          $ref: '#/components/schemas/PaginatedResponse'
      additionalProperties: false
      description: "The `DataContext` of a cursor-paginated success response: carries the paging metadata\r\nfor the returned page."
    Error:
      type: object
      properties:
        Code:
          pattern: ^[0-9]{6}$
          type: string
          description: 6-digit MMTTNN error code. See the Public API error-code registry.
          example: '070101'
        Message:
          type: string
        PropertyName:
          type: string
          nullable: true
        ActionHint:
          type: string
          nullable: true
        DocUrl:
          type: string
          nullable: true
      additionalProperties: false
    ErrorDataContext:
      type: object
      properties:
        TraceId:
          type: string
          description: Request correlation id. Quote this when reporting a problem.
          nullable: true
      additionalProperties: false
      description: "The `DataContext` of an error response: carries the correlation id for the failed\r\nrequest."
    CodeModel:
      type: object
      properties:
        Id:
          type: integer
          description: >-
            Numeric identifier of the coded value (e.g. status, priority, type,
            or source id).
          format: int64
          example: 1
        Name:
          type: string
          description: Display name of the coded value.
      additionalProperties: false
      description: >-
        A coded value, such as a status, priority, type or source, as an id and
        a display name.
    CommentAuthorModel:
      type: object
      properties:
        Type:
          type: string
          description: One of `User`, `Contact`, `Automation`, `AI Agent`, `API`.
        Id:
          type: integer
          description: "Identifier of the author. Null for authors that have no numeric id of their own -\r\nAI agents, automations, and comments created through the public API."
          format: int64
          nullable: true
        Name:
          type: string
          description: Display name of the author.
        Email:
          type: string
          description: Email address of the author, where we have it.
          nullable: true
      additionalProperties: false
      description: Who wrote a comment.
    CommentEmailInfoModel:
      type: object
      properties:
        Status:
          $ref: '#/components/schemas/CodeModel'
        ErrorDetail:
          type: string
          description: Reason the send failed; null unless `Status` is `Failed`.
          nullable: true
      additionalProperties: false
      description: "Delivery state of this comment's email. Recipients are not here: they belong to the\r\nconversation, not to one comment, and are served by the conversations endpoint."
    CommentAttachmentModel:
      type: object
      properties:
        Name:
          type: string
          description: File name.
        Url:
          type: string
          description: Temporary secure download link. Expires.
      additionalProperties: false
      description: A file attached to a comment, and what the upload endpoint returns.
    CommentReactionModel:
      type: object
      properties:
        UserId:
          type: integer
          description: Identifier of the user who reacted.
          format: int64
        ReactionId:
          type: integer
          description: Identifier of the reaction.
          format: int32
      additionalProperties: false
      description: A reaction left on a comment.
    PaginatedResponse:
      type: object
      properties:
        NextCursor:
          type: string
          nullable: true
        PreviousCursor:
          type: string
          nullable: true
        HasMore:
          type: boolean
        HasPrevious:
          type: boolean
        TotalCount:
          type: integer
          format: int32
      additionalProperties: false
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      description: >-
        Your Gorelo API key. See [Generate API key](/generate-api-key). If your
        data is hosted in Australia, click the base URL at the top of this page
        and select `https://api.aue.gorelo.io`.
      name: X-API-Key
      in: header

````

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