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:

ValueMeaning
availableYou can read and reply.
needs-reconnectThe platform supports it, but this account was connected before Bulkit asked for the permission. Reconnect it in the app.
unsupportedThis 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"
Response
{
  "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.
  • likeCount is null when 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 parentId set. That means the comment it answers is on another page. Every reply is listed once.
  • When nextCursor is not null, 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!" }'
Response
{ "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_ID must be an id from the list call for the same post and channel. Any other id returns 404 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.maxReplyCharacters on GET /platforms, or limits.maxCharacters when that is null. 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 id is sandbox.

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

CodeStatusMeaning
comments_not_supported400This platform's comments can't be read through Bulkit.
comments_not_granted409Reconnect the account in the app. Also returned when the account owner removed Bulkit's access on the platform.
post_not_published409The post isn't live on that channel yet.
comment_not_found404The comment isn't on this post, or was deleted.
quota_exceeded402Your plan's monthly posts are used up.
content_too_long400The reply is over the platform's limit for replies.
platform_refused422The 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_error502The 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.

On this page