List comments

<Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>

Returns the app's open comment threads with all their comments, newest first. Set include_resolved to true to include resolved threads too.

Threads are ordered by when they were created, newest first. A page holds up to limit threads, 500 by default. While has_more is true, request the next page with cursor set to next_cursor, and send nothing else beside it. A cursor works for 24 hours, only on this app. A thread created after you start paging shows up on a fresh first page, not in later pages.

Screenshot links in the response work for one hour. Call this again for fresh ones, or use Create comment screenshot link for a link that lasts a year.

This is limited to 600 requests per minute per app, shared by List comments and List mentionable users. A signed-in session has its own limit, and every personal access token for the workspace shares one. Some workspaces have a different limit. Every request that counts against the limit gets X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset (Unix time in seconds) headers, and a 429 also gets Retry-After in seconds. If the limiter itself is unavailable, requests go through without these headers.

<Note>Call this as an editor of the app, with a personal access token sent as a Bearer token or from a signed-in session. A read-only token works here. Workspace API keys aren't accepted.</Note>

<Warning>The response includes fields beyond the ones documented here. Don't rely on undocumented response fields, as they can change at any time.</Warning>

get/api/apps/{app_id}/comments

Path parameters

app_idstring required

ID of the app.

ID of the app.

Query parameters

include_resolvedboolean nullable

Set to true to include resolved threads. Defaults to false.

Set to true to include resolved threads. Defaults to false.

limitinteger nullable

Threads per page, 1 to 500. Defaults to 500.

Threads per page, 1 to 500. Defaults to 500.

cursorstring nullable

next_cursor from the previous page. Send it on its own: it carries include_resolved and limit, so sending either beside it returns a 400.

next_cursor from the previous page. Send it on its own: it carries include_resolved and limit, so sending either beside it returns a 400.

Response

One page of the app's comment threads, newest first.

has_moreboolean required

Whether more threads follow this page.

next_cursorstring nullable required

Pass as cursor to get the next page. null on the last page.

Example response

{
  "items": [
    {
      "comment": {
        "content": "Make this button match the header color.",
        "created_date": "2026-10-05T09:14:22.512000Z",
        "id": "68e2b7c4d4f0a9001c3e5a1c",
        "reactions": {},
        "sender_id": "6820f41be7b91d003c45a20a",
        "sender_name": "Dana Levi"
      },
      "reactor_names": {},
      "replies": [],
      "thread": {
        "anchor": {
          "element_tag": "button",
          "source_location": "pages/Pricing.jsx:42:8"
        },
        "created_date": "2026-10-05T09:14:22.512000Z",
        "id": "68e2b7c1d4f0a9001c3e5a17",
        "last_activity_at": "2026-10-05T09:14:22.512000Z",
        "message_count": 0,
        "page_path": "/pricing",
        "unread": true
      }
    }
  ],
  "next_cursor": "gAAAAABn7vJ0q2kX"
}

Changes

Changed in 1 of the 28 revisions of this API.1

Of the 28 revisions, 1 has no diff computed.