Read and reply to comments
List the comments on a published post and reply to them, from the API or an AI agent.
Once a post is live, you can read its comments and reply to them as the connected account. Bulkit reads comments live from the platform. Nothing is stored, so a comment deleted on the platform is gone here too.
Comments belong to one channel's copy of a post. A post sent to X and
LinkedIn has two separate conversations, so every call names a channelId.
Check the channel first
Each channel on GET /channels has a commentsStatus:
| Value | Meaning |
|---|---|
available | You can read and reply. |
needs-reconnect | The platform supports it, but this account was connected before Bulkit asked for the permission. Reconnect it in the app. |
unsupported | This platform's comments can't be read through Bulkit. |
Today that is Facebook Pages, Instagram, Bluesky, Reddit, YouTube, LinkedIn Pages and X.
List comments
curl "$BULKIT_URL/posts/POST_ID/comments?channelId=CHANNEL_ID" \
-H "x-api-key: $BULKIT_API_KEY"{
"data": [
{
"id": "17890000000000001",
"parentId": null,
"authorName": "Ana",
"authorHandle": "ana.designs",
"text": "Love this!",
"createdAt": "2026-10-12T09:30:00.000Z",
"likeCount": 3,
"url": null,
"replies": [
{
"id": "17890000000000002",
"parentId": "17890000000000001",
"authorName": "Bo",
"authorHandle": "bo",
"text": "Same",
"createdAt": "2026-10-12T09:41:00.000Z",
"likeCount": null,
"url": null,
"replies": []
}
]
}
],
"nextCursor": null
}- You get top-level comments, each with its direct replies (one level).
- Your own thread's later blocks are never listed.
likeCountisnullwhen the platform didn't report it. It is never a made-up zero.- On X, a reply can show up at the top of a page with its
parentIdset. That means the comment it answers is on another page. Every reply is listed once. - When
nextCursoris notnull, pass it back as?cursor=for the next page.
Reply to a comment
curl -X POST "$BULKIT_URL/posts/POST_ID/comments/COMMENT_ID/replies" \
-H "x-api-key: $BULKIT_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{ "channelId": "CHANNEL_ID", "text": "Thank you!" }'{ "id": "17890000000000003", "url": null }Replies are public right away
A reply goes live the moment the request succeeds. Always send an
Idempotency-Key: without one, a retry after a timeout posts the reply twice.
COMMENT_IDmust be anidfrom the list call for the same post and channel. Any other id returns404 comment_not_found.- Each reply counts as one post against your plan's monthly limit.
- The text is held to the platform's limit for replies:
limits.maxReplyCharactersonGET /platforms, orlimits.maxCharacterswhen that isnull. Today only LinkedIn Pages differ (1,250 for a reply, 3,000 for a post). - With a test key, nothing is posted and the response
idissandbox.
What each platform allows
Every platform has its own limits: how far back you can read, how many replies show, and who you reply as. They are on each platform page: Facebook Page, Instagram, Bluesky, Reddit, YouTube, LinkedIn Page and X.
The two to know before you start:
- X only finds replies from the last 7 days, and only if your X app's access level includes search.
- YouTube uses 51 units of your Google project's daily quota per reply.
Using your own app keys
Your platform app needs these permissions approved by the platform:
pages_read_engagement and pages_manage_engagement (Facebook),
instagram_business_manage_comments (Instagram), r_organization_social
and w_organization_social (LinkedIn Pages), and youtube.force-ssl
(YouTube). Bulkit already asks for all of them when you connect an account.
Errors
| Code | Status | Meaning |
|---|---|---|
comments_not_supported | 400 | This platform's comments can't be read through Bulkit. |
comments_not_granted | 409 | Reconnect the account in the app. Also returned when the account owner removed Bulkit's access on the platform. |
post_not_published | 409 | The post isn't live on that channel yet. |
comment_not_found | 404 | The comment isn't on this post, or was deleted. |
quota_exceeded | 402 | Your plan's monthly posts are used up. |
content_too_long | 400 | The reply is over the platform's limit for replies. |
platform_refused | 422 | The platform said no, for example comments are turned off on the post or the thread is locked. message has its reason. Retrying won't help. |
platform_error | 502 | The platform failed. message has its reason. You can retry. |
From an AI agent
The MCP tools list_comments and reply_to_comment do the same thing. See
Connect an AI agent.