REST APIGET

Inbox comments

List the comments on your posts across Facebook, Instagram, Threads, YouTube, LinkedIn, Bluesky and Mastodon, then reply, hide, like, delete or mark them done.

GEThttps://post.adaptlypost.com/post/api/v1/inbox/comments

Returns comments on your accounts' posts, newest first. Answers { comments, total, hasMore, nextCursor }.

API Key (Bearer token)
Permission:inbox.readRoles and permissions

Every role holds inbox.read, so any valid key can read the inbox.

Query parameters

ParameterTypeDescription
accountIdsstring[]Only these accounts, by the id from GET /social-accounts. Repeat the key or separate values with commas. Up to 50
platformsPlatformType[]Only these platforms. Repeat the key or separate values with commas
statusesInboxStatus[]Only items in these states: UNREAD, READ or DONE. Repeat the key or separate values with commas
sincestring (ISO 8601)Only items created on the platform at or after this date-time
searchstringText to search for
postIdstringOnly comments on this AdaptlyPost post, by its id from /social-posts
platformPostIdstringOnly comments on this post, by the platform's own post id
limitnumberItems per page, 1 to 100. Default 25
cursorstringThe nextCursor of the previous page. nextCursor is null on the last page

About 10 minutes, not real time

AdaptlyPost reads each connected account every 10 minutes and keeps what it finds. The lists answer from that copy, so a new comment, mention, message or review shows up within about 10 minutes. POST /api/v1/inbox/refresh asks for a read now. Webhook events come from the same reads.

Channels that need a reconnect

Every channel is open to the API. When a connection lacks the platform permission for a channel or action, including permissions the platform is still reviewing for AdaptlyPost, GET /api/v1/inbox/summary shows the channel as RECONNECT_REQUIRED and every write on it answers 403 inbox_reconnect_required. An expired token answers the same. Ask the user to reconnect the account in AdaptlyPost; retrying does not help.

Comment fields

FieldDescription
idComment id. Use it with the endpoints below
accountIdThe account the item belongs to: its id from GET /social-accounts
platformThe platform, as a PlatformType
accountNameDisplay name of that account
postIdThe AdaptlyPost post id, or null when the post was not published through AdaptlyPost
platformPostIdThe platform's id of the post the comment is on
postTextText of that post
postPermalinkLink to that post
platformCommentIdThe platform's id of the comment
parentPlatformCommentIdThe platform's id of the comment this one answers, or null for a top-level comment
isReplyTrue when the comment answers another comment
authorWho wrote it: id (the platform's user id), name, username and avatarUrl. id, username and avatarUrl can be null
textThe comment text
permalinkPublic link on the platform, or null when the platform gives none
likeCountLikes on the comment, or null when the platform does not report them
createdAtWhen it was created on the platform
statusUNREAD, READ or DONE. Only AdaptlyPost keeps this state; the platform does not see it
isHiddenTrue when the comment is hidden on the platform
isOwnTrue when your account wrote it
repliedTrue when your account has a reply under it, sent from AdaptlyPost or from the platform's own app
repliedAtWhen your account last replied, or null
likedByAccountTrue when your account liked it
capabilitiescanReply, canHide, canDelete and canLike: what this comment allows. Check them before you call an action

Read a thread

GEThttps://post.adaptlypost.com/post/api/v1/inbox/comments/:id

Returns { comment, parent, replies }: the comment, the comment it answers (null for a top-level comment) and the replies under it. An unknown id answers 404 inbox_item_not_found.

API Key (Bearer token)
Permission:inbox.readRoles and permissions

Reply to a comment

POSThttps://post.adaptlypost.com/post/api/v1/inbox/comments/:id/reply

Posts a reply from the account under the comment and answers 201 with the new reply as a comment.

API Key (Bearer token)
Permission:inbox.replyRoles and permissions

Writes need inbox.reply (Admin and Editor) and an active AdaptlyPost plan. Without the plan they answer 403 subscription_required.

Body parameters

ParameterTypeDescription
textREQUIREDstringThe reply. It follows the platform's comment limit: LinkedIn 1250, Threads 500, Bluesky 300, Mastodon 500, YouTube 10000, Facebook 8000 and Instagram 2200 characters

Hide, like and delete

Each action answers 400 inbox_action_unsupported when the platform or the comment does not allow it. capabilities on the comment tells you in advance.

POSThttps://post.adaptlypost.com/post/api/v1/inbox/comments/:id/hide

Hides the comment on the platform and answers 200 with the comment.

API Key (Bearer token)
Permission:inbox.replyRoles and permissions
POSThttps://post.adaptlypost.com/post/api/v1/inbox/comments/:id/unhide

Shows a hidden comment again and answers 200 with the comment.

API Key (Bearer token)
Permission:inbox.replyRoles and permissions
POSThttps://post.adaptlypost.com/post/api/v1/inbox/comments/:id/like

Likes the comment from the account and answers 200 with the comment.

API Key (Bearer token)
Permission:inbox.replyRoles and permissions
DELETEhttps://post.adaptlypost.com/post/api/v1/inbox/comments/:id/like

Removes the account's like and answers 200 with the comment.

API Key (Bearer token)
Permission:inbox.replyRoles and permissions
DELETEhttps://post.adaptlypost.com/post/api/v1/inbox/comments/:id

Deletes the comment on the platform and from the AdaptlyPost inbox, and answers 200 { "deleted": true }.

API Key (Bearer token)
Permission:inbox.replyRoles and permissions

Delete and like per platform

What each platform lets the account delete and like. On Threads, deleting needs the threads_delete permission, so an older Threads connection answers 403 inbox_reconnect_required until it is reconnected.

PlatformDeleteLike and unlike
FACEBOOKAny comment on the Page's postsYes
INSTAGRAMAny comment on the account's postsNo
YOUTUBEThe channel's own comments onlyNo
THREADSThe account's own replies onlyNo
BLUESKYThe account's own replies onlyYes
MASTODONThe account's own replies onlyYes, as a favourite
LINKEDINAny comment on the organization's postsYes

Mark as read or done

POSThttps://post.adaptlypost.com/post/api/v1/inbox/comments/status

Sets the status of up to 100 comments and answers { comments, unreadCount }.

API Key (Bearer token)
Permission:inbox.replyRoles and permissions

Body parameters

ParameterTypeDescription
idsREQUIREDstring[]1 to 100 ids from the list
statusREQUIREDInboxStatusUNREAD, READ or DONE

Refusals

A refused call answers { statusCode, error, code, message }. Branch on code. message explains the refusal in words.

CodeStatusWhen, and what to do
inbox_item_not_found404The id does not exist or belongs to another workspace. Stop
inbox_action_unsupported400The platform, or this item, does not allow this hide, delete or like. capabilities says what applies. Stop
inbox_reconnect_required403The connection lacks the permission for this channel or action, including one still in platform review, or its token expired. Ask the user to reconnect the account in AdaptlyPost. Do not retry
inbox_reply_invalid400The text is empty or over the limit. The message names the limit. Fix the text
inbox_messaging_window_closed400Facebook or Instagram: the 24-hour reply window has passed. Stop
inbox_rate_limited429The platform rate limited AdaptlyPost. Retry after a while
inbox_platform_error503The platform failed. Retry later
permission_denied403The key's role lacks inbox.read or inbox.reply. Do not retry
subscription_required403A write without an active AdaptlyPost plan. Do not retry
List unread comments
curl --request GET \
  --url 'https://post.adaptlypost.com/post/api/v1/inbox/comments?statuses=UNREAD&platforms=INSTAGRAM,FACEBOOK&limit=25' \
  --header 'Authorization: Bearer <api-key>'
Read a comment thread
curl --request GET \
  --url https://post.adaptlypost.com/post/api/v1/inbox/comments/cmt_8f2a1c40 \
  --header 'Authorization: Bearer <api-key>'

200
{
  "comment": { "id": "cmt_8f2a1c40", "isReply": false, "...": "..." },
  "parent": null,
  "replies": [
    { "id": "cmt_9b31d7e2", "isReply": true, "isOwn": true, "...": "..." }
  ]
}
Reply to a comment
curl --request POST \
  --url https://post.adaptlypost.com/post/api/v1/inbox/comments/cmt_8f2a1c40/reply \
  --header 'Authorization: Bearer <api-key>' \
  --header 'Content-Type: application/json' \
  --data '{ "text": "Thanks Ana, the new plan starts on Monday." }'
Hide, like or delete a comment
curl --request POST \
  --url https://post.adaptlypost.com/post/api/v1/inbox/comments/cmt_8f2a1c40/hide \
  --header 'Authorization: Bearer <api-key>'

curl --request POST \
  --url https://post.adaptlypost.com/post/api/v1/inbox/comments/cmt_8f2a1c40/like \
  --header 'Authorization: Bearer <api-key>'

curl --request DELETE \
  --url https://post.adaptlypost.com/post/api/v1/inbox/comments/cmt_8f2a1c40 \
  --header 'Authorization: Bearer <api-key>'
Mark comments as done
curl --request POST \
  --url https://post.adaptlypost.com/post/api/v1/inbox/comments/status \
  --header 'Authorization: Bearer <api-key>' \
  --header 'Content-Type: application/json' \
  --data '{ "ids": ["cmt_8f2a1c40", "cmt_7c02e9a1"], "status": "DONE" }'
200
{
  "comments": [
    {
      "id": "cmt_8f2a1c40",
      "accountId": "conn_ig_001",
      "platform": "INSTAGRAM",
      "accountName": "adaptlypost",
      "postId": "cmm0z0k3q0000i0r5mxn0hfhs",
      "platformPostId": "18034417852490123",
      "postText": "Plan a week of posts in one sitting",
      "postPermalink": "https://www.instagram.com/p/C9x2Lm0tQ1a/",
      "platformCommentId": "17890455123456789",
      "parentPlatformCommentId": null,
      "isReply": false,
      "author": {
        "id": "17841400000000001",
        "name": "Ana Souza",
        "username": "ana.souza",
        "avatarUrl": null
      },
      "text": "Does this work with Reels too?",
      "permalink": null,
      "likeCount": 2,
      "createdAt": "2026-11-08T09:12:44.000Z",
      "status": "UNREAD",
      "isHidden": false,
      "isOwn": false,
      "replied": false,
      "repliedAt": null,
      "likedByAccount": false,
      "capabilities": {
        "canReply": true,
        "canHide": true,
        "canDelete": true,
        "canLike": false
      }
    }
  ],
  "total": 12,
  "hasMore": false,
  "nextCursor": null
}