---
title: "The bubble’s comments in reading order (oldest first). Archived and draft threads/comments are excluded, matching what a reader sees in the product."
method: GET
path: "/v1/bubbles/{id}/comments"
---

# The bubble’s comments in reading order (oldest first). Archived and draft threads/comments are excluded, matching what a reader sees in the product.

`GET /v1/bubbles/{id}/comments`

## Request

- Base URL: `https://api.usebubbles.com`
- URL: `https://api.usebubbles.com/v1/bubbles/{id}/comments`
- Auth: HTTP bearer

## Path parameters

- `id` string, required

## Query parameters

- `limit` string
- `cursor` string

## Response `200`

Success.

- CommentList: GET /v1/bubbles/{id}/comments — cursor-paginated list of comments.
  - `data` Comment[], required: The page of comments.
    - `id` string, required: The comment id.
    - `thread_id` string, required: The containing thread id.
    - `bubble_id` string, required: The bubble uuid the comment is on.
    - `kind` 'text' | 'video' | 'image', required: The comment kind.
    - `body` string, nullable, required: Text-comment body; null for video/image comments.
    - `video_url` string, nullable, required: Video-comment media URL, or null.
    - `image_url` string, nullable, required: Image-comment media URL, or null.
    - `url_expires_at` string, nullable, required: ISO-8601 instant at which video_url and image_url stop working, or null when media is served unsigned.
    - `created_at` string, required: Creation instant (ISO-8601 UTC).
    - `author` CommentAuthor, required: The author of a comment.
      - `id` string, required: The Bubbles user id.
      - `name` string, nullable, required: Display name, or null.
    - `is_pinned` boolean, required: Whether the containing thread is pinned.
    - `timestamp_seconds` number, nullable, required: The anchored video timestamp, or null when not anchored.
    - `url` string, required: Deep link into the app opening this comment.
  - `has_more` boolean, required: Whether another page exists.
  - `next_cursor` string, nullable, required: Opaque cursor for the next page, or null.

## Other responses

- `400`: A query parameter or request body was malformed (invalid_request).
- `401`: Missing, malformed, or wrong-kind credential (unauthorized / token_revoked / account_deleted).
- `404`: The resource does not exist or is not readable by the caller (not_found).
- `429`: Rate limit exceeded (rate_limited); see the Retry-After header.
- `500`: An unexpected server error occurred (internal_error).

---

[API](https://skmtc.dev/usebubbles/apis/bubbles-public-api.md) - [All operations](https://skmtc.dev/usebubbles/apis/bubbles-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/usebubbles/apis/bubbles-public-api/revisions/31570f5d4b05?raw)
