---
title: "List comments on a post"
method: GET
path: "/v1/inbox/comments/{postId}"
tags: ["Inbox"]
---

# List comments on a post

`GET /v1/inbox/comments/{postId}`

## Request

- Base URL: `https://api.postzen.dev`
- URL: `https://api.postzen.dev/v1/inbox/comments/{postId}`
- Auth: HTTP bearer

Returns the comments the platform holds for one Instagram, Facebook, or Threads post, and refreshes PostZen's stored copy of the thread as a side effect. `replies` carries the first page of nested replies when the platform returns them cheaply — `repliesHasMore` says when it did not, and passing that comment's id as `commentId` pages through the rest. Instagram threads are only two levels deep, so a reply never carries replies of its own. Fields a platform does not report are absent rather than zero: Threads, for example, never reports per-reply like counts. Read-only and read-write API keys are accepted.

## Query parameters

- `accountId` string, required
- `limit` integer
- `cursor` string
- `commentId` string

## Response `200`

Comments returned.

- InboxCommentsResponse
  - `status` 'success', required
  - `comments` InboxComment[], required
    - `id` string, required: Platform comment id. Pass it as `commentId` to the reply, delete, and hide endpoints.
    - `message` string, required: Comment body as plain text.
    - `createdTime` string, date-time, required: When the platform recorded the comment.
    - `from` object, required: Author of the comment.
      - `id` string
      - `name` string
      - `username` string
      - `picture` string, uri
      - `isOwner` boolean, required: True when the connected account wrote the comment.
    - `likeCount` integer: Likes on the comment, when the platform reports a count. Threads never does.
    - `replyCount` integer: Replies to the comment, when the platform reports a count.
    - `platform` 'instagram' | 'facebook' | 'threads', required: Platform the comment lives on.
    - `url` string, uri: Permalink to the comment, when the platform returns one.
    - `replies` InboxComment[], required: First page of nested replies, when the listing returned them cheaply. Instagram threads are two levels deep, so a reply's own `replies` is always empty.
    - `repliesHasMore` boolean, required: True when the comment has replies beyond the ones in `replies`. Fetch them by passing this comment's id as `commentId`.
    - `canReply` boolean, required: True when the connected account's granted scopes and the platform's own rules allow replying to this comment.
    - `canDelete` boolean, required: True when this comment can be deleted. Facebook reports it per comment; Threads reports it only for replies the connected account wrote.
    - `canHide` boolean, required: True when this comment can be hidden. Facebook reports it per comment; on Threads only top-level replies on the account's own posts qualify.
    - `isHidden` boolean, required: True when the comment is currently hidden. Threads' `HIDDEN` and `COVERED` states both map to true.
    - `parentId` string, nullable, required: Comment this one replies to, or `null` when it is a top-level comment on the post.
  - `pagination` object, required
    - `hasMore` boolean, required: True when the platform has another page of comments.
    - `cursor` string: Opaque cursor for the next page. Present only when `hasMore` is true.
  - `meta` object, required
    - `platform` 'instagram' | 'facebook' | 'threads', required: Platform the comment lives on.
    - `postId` string, required: Platform post id the comments were read from. When a PostZen post id was supplied it is the resolved platform id, not the id you sent.
    - `accountId` string, required: PostZen account id used for the read.
    - `lastUpdated` string, date-time, required: When PostZen fetched this page from the platform.

## Other responses

- `400`: A parameter is missing or malformed — a plain `{ error }` body — or the account is not on a platform the inbox supports (`platformUnsupported`). A platform-rejected identifier or parameter also lands here, with `platformError` carrying the platform's wording.
- `401`: Missing or invalid API key.
- `403`: The account is outside the API key's profile access (`forbidden`), or the platform refused the token because the connection lacks the scope this read needs (`platformCapabilityMissing`).
- `404`: No such account (`accountNotFound`), no such post for that account (`postNotFound`), the PostZen post has not published to this account yet (`postNotPublished`), or the platform reported the comment as missing.
- `424`: The account's connection is dead and must be reauthorized before its comments can be read or written.
- `429`: The platform rate limited the upstream request; `platformError` carries its wording and `Retry-After` gives the wait in seconds. PostZen's own per-key and per-operation limiters also return `429`, with the plain body `{"error":"rate_limited","retryAfter":<seconds>}`.
- `500`: Unexpected server error.
- `502`: The platform could not answer the request. `platformError` carries its wording.

---

[API](https://skmtc.dev/postzen/apis/postzen-public-api.md) · [All operations](https://skmtc.dev/postzen/apis/postzen-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/postzen/apis/postzen-public-api/revisions/40863e3710ec?raw)
