---
title: "Get post comments"
method: GET
path: "/v1/inbox/comments/{postId}"
tags: ["Comments"]
---

# Get post comments

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

Fetch comments for a specific post. Requires accountId query parameter.

Pass `commentId` (Facebook, Instagram, Reddit, TikTok) to fetch replies to a specific
comment instead of the post's top-level comments. Facebook, Instagram and TikTok return
the comment's replies, paged by `limit`/`cursor`; Reddit returns the focused comment
thread instead. On Facebook and Instagram the requested comment itself comes back in the
top-level `comment` field.

On Facebook, passing a COMMENT id as `postId` (instead of using `commentId`) is also
supported for backwards compatibility and returns that comment's replies the same way.
Prefer `commentId` for new integrations; it also works on Instagram, which rejects a
comment id passed as `postId`. YouTube does not support either form, `postId` must be a
video id.

Responses are cached for up to 10 minutes, so a page may lag new comments by that
window. Do not poll this endpoint for real-time updates: subscribe to the
`comment.received` webhook, which delivers new comments as they arrive. Your own
writes (creating, replying to, or deleting a comment) refresh the cache immediately.

TikTok is served for accounts connected through the TikTok for Business app: `postId`
is the TikTok video id, each top-level comment carries up to three inline replies, and
`commentId` pages the full reply list of one comment. Developer-app TikTok accounts
return 400 with code `PLATFORM_LIMITATION`.

On X (Twitter), when `postId` is itself a reply rather than the thread's root post,
only replies to that specific post are returned, not the whole conversation thread.

Hidden comments: Facebook Pages and Instagram accounts connected through Instagram Login
return them with `isHidden: true`. Instagram accounts connected through Facebook Login do
not return them at all (Meta omits them, together with their replies), so a hidden comment
and a deleted one look the same on this read.

## Path parameters

- `postId` string, required

## Query parameters

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

## Response `200`

Comments for the post

- object
  - `status` string
  - `comments` object[]
    - `id` string
    - `message` string
    - `createdTime` string, date-time
    - `from` object
      - `id` string
      - `name` string
      - `username` string
      - `picture` string, nullable
      - `isOwner` boolean
      - `verifiedType` 'blue' | 'government' | 'business' | 'none', nullable — X verified badge type. Only present for X comments.
    - `likeCount` integer
    - `replyCount` integer — The platform's own reply count, which includes hidden and deleted replies. Can exceed replies[].length even when repliesHasMore is false or absent.
    - `platform` string — The platform this comment is from
    - `url` string, nullable — Direct link to the comment on the platform (if available)
    - `replies` object[]
    - `repliesHasMore` boolean — Facebook only. True when replies[] (capped at 10) does not hold the comment's full reply thread; fetch the rest by passing the comment id as the `commentId` query parameter to GET /v1/inbox/comments/{postId} (or, for backwards compatibility, as `postId`). Absent (not false) on every other platform, including Instagram, which has no equivalent signal.
    - `canReply` boolean
    - `canDelete` boolean
    - `canHide` boolean — Whether this comment can be hidden (Facebook, Instagram, Threads)
    - `canLike` boolean — Whether this comment can be liked (Facebook, X, Bluesky, Reddit, LinkedIn)
    - `isHidden` boolean — Whether the comment is currently hidden. On Instagram accounts connected through Facebook Login, Meta leaves hidden comments (and their replies) out of the list entirely, so they never appear with isHidden true; Instagram Login accounts and Facebook Pages return them with isHidden true.
    - `isLiked` boolean — Whether the current user has liked this comment
    - `likeUri` string, nullable — Bluesky like URI for unliking
    - `cid` string, nullable — Bluesky content identifier
    - `parentId` string, nullable — ID of the parent comment. Present on entries inside replies[] for Facebook, Instagram and X. On X it is also present on top-level entries, where it holds the ID of the post replied to. Omitted entirely (key absent, not null) on top-level Facebook and Instagram entries and on every other platform, which express the parent relationship only through replies[] nesting.
    - `rootUri` string, nullable — Bluesky root post URI
    - `rootCid` string, nullable — Bluesky root post CID
  - `post` object, nullable — (Reddit only) Metadata for the target post, returned alongside the comments in Reddit's single round-trip. Lets integrators render a preview of the post the user is commenting on without an additional request. Absent for non-Reddit platforms and when the upstream response is missing the post listing (deleted post, malformed response).
    - `id` string — Reddit post base36 id (e.g. "1tjtj26")
    - `fullname` string — Fullname with type prefix (e.g. "t3_1tjtj26")
    - `title` string
    - `selftext` string — Body text for self-posts (empty for link posts)
    - `author` string — Reddit username, without the u/ prefix
    - `subreddit` string — Subreddit name, without the r/ prefix
    - `permalink` string — Absolute URL to the post on reddit.com
    - `url` string — For link posts, the external URL; for self-posts, the Reddit permalink
    - `score` integer — Net upvotes (upvotes minus downvotes)
    - `numComments` integer
    - `createdUtc` integer — Unix timestamp in seconds
    - `over18` boolean
    - `stickied` boolean
    - `flairText` string, nullable — Link flair text if any
    - `isGallery` boolean — True if the post is a Reddit gallery (multiple images)
  - `comment` object — (Facebook and Instagram only) Present when `commentId` was passed: the requested comment itself, in the same shape as an entry in comments[]. comments[] then holds that comment's replies instead of the post's top-level comments.
  - `pagination` object
    - `hasMore` boolean
    - `cursor` string, nullable — Only present when hasMore is true. Absent on the last page, so treat its absence as the end of the thread.
  - `meta` object
    - `platform` string
    - `postId` string
    - `accountId` string
    - `subreddit` string, nullable — (Reddit only) Subreddit name
    - `lastUpdated` string, date-time
    - `adComments` object, nullable — (Facebook/Instagram only) Present when this post has no organic comments but is a boosted post: the engagement lives on the ad. Use the ad-comments endpoint instead.
      - `adId` string — Internal Zernio ad ID
      - `adCommentsUrl` string — Path to fetch the ad's comments (GET /v1/ads/{adId}/comments)

## Other responses

- `400` — Invalid request, or the postId belongs to a Meta ad creative / ad ID rather than an organic post (code USE_AD_COMMENTS_ENDPOINT; the response includes `adId` and `adCommentsUrl`), or the upstream platform rejected the request (type platform_error, code platform_api_error; the provider's own payload is in platformError). Meta returns code 100 with error_subcode 33 both for a story past its 24h life and for a deleted post, so the two are indistinguishable from the response.
- `401` — Unauthorized
- `403` — Inbox addon required, or the connected account is not permitted to read this post on the platform (code platform_api_error, type platform_error)
- `429` — The connected account's upstream platform quota is exhausted. Reddit rate-limits per connected Reddit user (1000 requests per 10-minute window), and that budget is shared by every operation using that account. Retry after the window resets rather than retrying immediately; repeated calls while exhausted do not succeed and keep the budget spent. Google Ads: writes and reports run on one developer token shared by every Google Ads account on Zernio. The token holds Standard access (no daily operations cap), so this only happens when Google throttles the token or your ad account. The envelope has `code: rate_limited`, `platform: google`, `details.quotaScope: DEVELOPER` (`ACCOUNT` when it is your own ad account's quota), `details.resetsAt` (ISO instant when Google accepts requests again) and `Retry-After` counting down to it. Retrying earlier cannot succeed.
- `502` — Upstream platform error (code platform_api_error, type platform_error)

## Changes

- **2026-09-25** `2c04683ce694` — 5 info
  - added the optional property `comment` to the response with the `200` status
  - added the optional property `details/adAccountId` to the response with the `429` status
  - added the optional property `details/createdObjects` to the response with the `429` status
  - added the optional property `details/stage` to the response with the `429` status
  - …1 more
- **2026-09-16** `3e6ddf2a99ea` — 1 info
  - added the optional property `details/budgetScope` to the response with the `429` status
- **2026-09-15** `0dba7d004d75` — 2 info
  - added the optional property `details/quotaExhausted` to the response with the `429` status
  - added the optional property `details/quotaScope` to the response with the `429` status
- **2026-08-14** `875093317201` — 1 info
  - added the optional property `comments/items/repliesHasMore` to the response with the `200` status

[Change history](https://skmtc.dev/zernio/apis/zernio-api/changes/v1/inbox/comments/:postId/get.md)

---

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