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

# Get post comments

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

## Request

- Base URL: `https://apihub.co.il`
- URL: `https://apihub.co.il/v1/messaging/inbox/comments/{postId}`
- Auth: HTTP bearer

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.


**Billing:** Read (free unless it says otherwise) · **Rate limit:** 120/min

## Path parameters

- `postId` string, required: Zernio post ID or platform-specific post ID. Zernio IDs are auto-resolved. On LinkedIn, pass the post id exactly as the feed returns it (urn:li:share:<id> or urn:li:ugcPost:<id>). A bare number is read as an activity id (urn:li:activity:<n>, the number in a linkedin.com/feed/update URL); a share or ugcPost number passed bare returns an empty list. On Facebook, a comment ID is also accepted here and returns that comment's replies, kept for backwards compatibility; prefer the `commentId` query parameter, which also works on Instagram.

## Query parameters

- `limit` integer: Maximum number of comments to return
- `cursor` string: Pagination cursor, returned by a previous call as `pagination.cursor`. This is the platform's own opaque paging value passed through verbatim: never construct, decode or validate it client-side.
- `accountId` string, required
- `commentId` string: (Facebook, Instagram, Reddit and TikTok) Get replies to a specific comment. On Facebook and Instagram, the requested comment is returned in the top-level `comment` field and comments[] holds its replies.
- `subreddit` string: (Reddit only) Subreddit name

## Headers

- `Idempotency-Key` string
- `X-Tag` string

## Response `200`

Completed

- object
  - `id` string: Execution id — stable across internal retries; use it with GET /v1/executions/{id}
  - `status` 'pending' | 'processing' | 'completed' | 'partial' | 'failed' | 'cancelled' | 'timeout'
  - `operation` string
  - `tag` string, nullable: Your X-Tag, if sent
  - `created_at` string, date-time
  - `completed_at` string, date-time, nullable
  - `output` object: Operation result (see each operation). While a Studio render is processing: `stage` (queued · transcribing · downloading · preparing · cleaning_voice · mixing_audio · rendering · finishing), `phase` (the engine's: download · prepare · voice · audio · encode · qa · upload, or null), `progress` (a percent, 0–100) and `progress_fraction` (0–1), `eta_seconds` (seconds left, never below 0) and `estimate_seconds`
    - `meta` object
      - `postId` string
      - `postUrn` string: (LinkedIn only) The post URN that was queried, after a bare number is read as urn:li:activity:<n>
      - `platform` string
      - `accountId` string
      - `subreddit` string, nullable: (Reddit only) Subreddit name
      - `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)
      - `lastUpdated` string, date-time
    - `post` union: (Reddit, Facebook and Instagram) Metadata for the target post, returned alongside the comments so integrators can render a preview of the post being commented on without an additional request. Facebook and Instagram return the Meta shape: the post thumbnail, text and permalink, for any post the account can read, including the hidden dark posts Meta publishes for each variant of an ad (dynamic creative, placement asset customization, Advantage+). Facebook posts need the Facebook Page connection and Instagram media the Instagram connection. `thumbnailUrl` and `mediaUrl` are Meta CDN URLs that expire: store a copy if you render them later. On Instagram, `productType` tells an ad (`AD`) from organic media (`FEED`, `REELS`, `STORY`). Absent on other platforms, when the post cannot be read with the connection's token, and on Reddit when the upstream response is missing the post listing (deleted post, malformed response).
      - object
        - `id` string: Reddit post base36 id (e.g. "1tjtj26")
        - `url` string: For link posts, the external URL; for self-posts, the Reddit permalink
        - `score` integer: Net upvotes (upvotes minus downvotes)
        - `title` string
        - `author` string: Reddit username, without the u/ prefix
        - `over18` boolean
        - `fullname` string: Fullname with type prefix (e.g. "t3_1tjtj26")
        - `selftext` string: Body text for self-posts (empty for link posts)
        - `stickied` boolean
        - `flairText` string, nullable: Link flair text if any
        - `isGallery` boolean: True if the post is a Reddit gallery (multiple images)
        - `permalink` string: Absolute URL to the post on reddit.com
        - `subreddit` string: Subreddit name, without the r/ prefix
        - `createdUtc` integer: Unix timestamp in seconds
        - `numComments` integer
      - object
        - `id` string, required: Facebook post id ({pageId}_{postId}) or Instagram media id
        - `text` string, nullable, required: Facebook post message or Instagram caption
        - `mediaUrl` string, uri, nullable, required: Instagram `media_url` (the video file for videos). Always null on Facebook. Expiring Meta CDN URL.
        - `createdAt` string, nullable, required: Creation time as Meta returns it (e.g. 2026-05-27T17:15:51+0000)
        - `mediaType` string, nullable, required: Instagram `media_type` (IMAGE, VIDEO, CAROUSEL_ALBUM) or the Facebook attachment type (photo, video_inline, link, ...)
        - `permalink` string, uri, nullable, required
        - `productType` string, nullable, required: Instagram `media_product_type`: AD, FEED, REELS or STORY. Always null on Facebook.
        - `thumbnailUrl` string, uri, nullable, required: Facebook `full_picture` (or the first attachment image); Instagram `thumbnail_url` for videos, `media_url` for images. Expiring Meta CDN URL.
    - `status` string
    - `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.
    - `comments` object[]
      - `id` string
      - `cid` string, nullable: Bluesky content identifier
      - `url` string, nullable: Direct link to the comment on the platform (if available)
      - `from` object
        - `id` string
        - `name` string
        - `isOwner` boolean
        - `picture` string, nullable
        - `username` string
        - `verifiedType` 'blue' | 'government' | 'business' | 'none', nullable: X verified badge type. Only present for X comments.
      - `canHide` boolean: Whether this comment can be hidden (Facebook, Instagram, Threads)
      - `canLike` boolean: Whether this comment can be liked (Facebook, X, Bluesky, Reddit, LinkedIn)
      - `isLiked` boolean: Whether the current user has liked this comment
      - `likeUri` string, nullable: Bluesky like URI for unliking
      - `message` string
      - `replies` object[]
      - `rootCid` string, nullable: Bluesky root post CID
      - `rootUri` string, nullable: Bluesky root post URI
      - `canReply` boolean
      - `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.
      - `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.
      - `platform` string: The platform this comment is from
      - `canDelete` boolean
      - `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.
      - `createdTime` string, date-time
      - `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.
    - `pagination` object
      - `cursor` string, nullable: Only present when hasMore is true. Absent on the last page, so treat its absence as the end of the thread.
      - `hasMore` boolean
  - `error` string, nullable
  - `usage` object
    - `credits_charged` number, nullable
    - `credits_reserved` number
    - `estimated_credits` number
    - `cost_source` 'provider_reported' | 'calculated' | 'estimated' | 'null', nullable
    - `provider_usage` object, nullable: Normalised consumption, e.g. { VIDEO_SECOND: 22.4 }
  - `balance` object
    - `available` number
    - `reserved` number

## Other responses

- `400`: Invalid input
- `402`: Insufficient credits / project budget
- `404`: Resource not found (or not yours)
- `429`: Rate limited
- `503`: Service temporarily paused

---

[API](https://skmtc.dev/apihub/apis/apihub-one-api-for-chat-image-video-ai.md) · [All operations](https://skmtc.dev/apihub/apis/apihub-one-api-for-chat-image-video-ai/llms.txt) · [OpenAPI document](https://skmtc.dev/apihub/apis/apihub-one-api-for-chat-image-video-ai/revisions/a8caa42835ce?raw)
