capabilities object.
A public reply costs 1 interaction credit. Reading, private replies, hiding, deleting, and liking cost none. Platform pages hold the rules that differ per platform.
Endpoints
{postId} is the platform’s post ID (targets[].platform_post_id on a post you published through SocialAPI, or id from GET /v1/inbox/comments). {commentId} and comment_id accept the comment’s sapi_cmt_ ID or the platform’s comment ID. See IDs.
Your first reply
List the posts that have comments on one account:account_id is required:
comment_id in the response is the new reply’s sapi_cmt_ ID.
List posts with comments
GET /v1/inbox/comments returns the posts that received comments, newest published first.
Each post has
id (the platform’s post ID, the value for {postId}), user_id (the ID of your SocialAPI account), account_id, page_id (Facebook only), platform, content, thumbnail, permalink, comment_count, like_count, published_at, created_at, and updated_at. pagination holds has_more, and next_cursor when has_more is true. Paging is in Pagination.
YouTube videos with comments appear only when you pass account_id, and that list is 1 page with no cursor.
List comments and replies
GET /v1/inbox/comments/{postId} lists the comments on a post. GET /v1/inbox/comments/{postId}/{commentId}/replies lists the replies to one comment in the same shape. Both need account_id, the connected account that owns the post. A missing account_id returns 400 validation.field_required.
A page can hold fewer comments than
limit, because the platform sets its own page size. Follow next_cursor until has_more is false: see Pagination.
Comments in webhook events use the nested Interaction shape instead of this flat one.
Read
capabilities instead of assuming. A call the platform does not support returns 501 resource.not_supported.
Reply to a comment
POST /v1/inbox/comments/{postId} posts a public reply.
A reply costs 1 interaction credit. When the plan’s interaction allowance is used up, the call returns
429 validation.interaction_limit_exhausted. A credit is returned when the request fails with a validation.* error: see When a credit comes back.
Send a private reply
A private reply is a DM to the person who wrote a comment. It has its own endpoint:POST /v1/inbox/comments/{postId}/{commentId}/private-reply. The reply endpoint above never sends one.
Private replies exist on Instagram and Facebook. The platform allows 1 private reply per comment, within 7 days of the comment. A second reply, or a comment older than 7 days, returns
400 platform.instagram.private_reply_ineligible or 400 platform.facebook.private_reply_ineligible. error.meta.reason says why: already_replied, platform_refused, or window_expired. This 400 is final, so retrying never succeeds. Every other platform returns 501 resource.not_supported.
A private reply does not open the messaging window. You cannot message the person again until they answer, and their answer opens the window.
To answer comments by keyword with no handler of your own, use an Automation: it sends the private reply and handles each button tap, including a Follow gate on Instagram.
Hide and unhide a comment
Hiding removes a comment from public view. Unhiding restores it.DELETE on the same path and account_id as a query parameter:
501 resource.not_supported. Threads hides replies only on an account connected on or after 2026-10-17: reconnect an older account first. See Threads.
Delete a comment
DELETE /v1/inbox/comments/{postId}/{commentId}?account_id={account_id} deletes the comment on the platform. It returns { "success": true } and cannot be undone. On Threads, TikTok, X, Bluesky, and YouTube, you can delete only comments the connected account wrote. Each other platform’s page states its rule.
Like and unlike a comment
POST /v1/inbox/comments/{postId}/{commentId}/like likes a comment as the connected account. DELETE on the same path removes the like. Both take account_id: in the body for POST, as a query parameter for DELETE. They return { "success": true }. A platform without comment likes returns 501 resource.not_supported, and can_like is false on its comments.
Filter YouTube comments
GET /v1/inbox/comments/{postId} accepts 3 more parameters. Only YouTube uses them. Every other platform ignores them.
A value outside these lists, or a longer
q, returns 400 validation.field_invalid. See YouTube comments.
Platform support
Every platform has its own comment rules: whether replies nest, who can hide or delete what, and which account permissions and platform scopes the connection needs. The capability matrix compares platforms, and each platform page has the details: Instagram, Facebook, Threads, TikTok, YouTube, X, and Bluesky. Google Business Profile has no comments or Q&A: its calls return501 resource.not_supported. Read reviews on Reviews.
Limits
Errors and debugging
Check these in order when a comment call fails or returns nothing:401,403 auth.insufficient_scope. The key is invalid, or a scoped key lacks the scope in Scopes.404 account.not_found,403 account.reconnection_required. Theacc_ID is not yours, or the account needs reconnecting.403 account.permission_missing. The account lacks the permission the call needs:comments.readto list the comments on a post and the replies to a comment,comments.writeto reply, hide, unhide, delete, or like, andmessages.writefor a private reply.error.meta.permissionnames it.GET /v1/inbox/commentslists the posts SocialAPI stored and never returns this error: an account withoutcomments.readstores no new posts.400 validation.field_required,400 validation.field_invalid. A required field is missing, or a parameter has a wrong value.error.meta.fieldnames it.400 validation.id_invalid,400 validation.id_platform_mismatch. The comment ID is the wrong type or belongs to another platform: see IDs.501 resource.not_supported. The platform lacks the action. Readcapabilitieson the comment.404 resource.not_found. The post was deleted on the platform. The same post returns the same 404 afterwards.400 platform.instagram.private_reply_ineligible,400 platform.facebook.private_reply_ineligible. The comment already received its private reply, or is older than 7 days.429 validation.interaction_limit_exhausted,429 platform.{platform}.rate_limit. Your allowance, or the platform’s own limit. ReadRetry-After: see Rate limits.422 platform.youtube.processing_failure. YouTube refused to delete a comment that your channel did not write. Hide it instead.
account_id owns the post, and, on a platform that sends events, that the comment arrived: see Webhook events. The full catalog is in Errors.
Scopes
Events
SocialAPI sendscomment.received when a person comments on a post of a connected account, on the platforms that report comments to SocialAPI. See comment.received for the platforms and the payload. Platforms that report nothing, such as X, YouTube, and Bluesky, need the list endpoints above. An account without the comments.read permission receives no comment.received events.
Use from an AI agent
The tool list and error shape are in MCP tools.
Related
- Direct messages: the messages and buttons a private reply starts.
- Automations: answer comments by keyword with no handler of your own.
- Webhook events: the
comment.receivedpayload per platform. - Platform support: which platform supports which comment action.
- IDs: the
sapi_cmt_ID and the platform IDs these endpoints accept. - Account permissions: the permissions an account needs for each comment action.
- Plans and usage: what costs an interaction credit.