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.
https://post.adaptlypost.com/post/api/v1/inbox/commentsReturns comments on your accounts' posts, newest first. Answers { comments, total, hasMore, nextCursor }.
Every role holds inbox.read, so any valid key can read the inbox.
Query parameters
| Parameter | Type | Description |
|---|---|---|
accountIds | string[] | Only these accounts, by the id from GET /social-accounts. Repeat the key or separate values with commas. Up to 50 |
platforms | PlatformType[] | Only these platforms. Repeat the key or separate values with commas |
statuses | InboxStatus[] | Only items in these states: UNREAD, READ or DONE. Repeat the key or separate values with commas |
since | string (ISO 8601) | Only items created on the platform at or after this date-time |
search | string | Text to search for |
postId | string | Only comments on this AdaptlyPost post, by its id from /social-posts |
platformPostId | string | Only comments on this post, by the platform's own post id |
limit | number | Items per page, 1 to 100. Default 25 |
cursor | string | The 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
| Field | Description |
|---|---|
id | Comment id. Use it with the endpoints below |
accountId | The account the item belongs to: its id from GET /social-accounts |
platform | The platform, as a PlatformType |
accountName | Display name of that account |
postId | The AdaptlyPost post id, or null when the post was not published through AdaptlyPost |
platformPostId | The platform's id of the post the comment is on |
postText | Text of that post |
postPermalink | Link to that post |
platformCommentId | The platform's id of the comment |
parentPlatformCommentId | The platform's id of the comment this one answers, or null for a top-level comment |
isReply | True when the comment answers another comment |
author | Who wrote it: id (the platform's user id), name, username and avatarUrl. id, username and avatarUrl can be null |
text | The comment text |
permalink | Public link on the platform, or null when the platform gives none |
likeCount | Likes on the comment, or null when the platform does not report them |
createdAt | When it was created on the platform |
status | UNREAD, READ or DONE. Only AdaptlyPost keeps this state; the platform does not see it |
isHidden | True when the comment is hidden on the platform |
isOwn | True when your account wrote it |
replied | True when your account has a reply under it, sent from AdaptlyPost or from the platform's own app |
repliedAt | When your account last replied, or null |
likedByAccount | True when your account liked it |
capabilities | canReply, canHide, canDelete and canLike: what this comment allows. Check them before you call an action |
Read a thread
https://post.adaptlypost.com/post/api/v1/inbox/comments/:idReturns { 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.
Reply to a comment
https://post.adaptlypost.com/post/api/v1/inbox/comments/:id/replyPosts a reply from the account under the comment and answers 201 with the new reply as a comment.
Writes need inbox.reply (Admin and Editor) and an active AdaptlyPost plan. Without the plan they answer 403 subscription_required.
Body parameters
| Parameter | Type | Description |
|---|---|---|
textREQUIRED | string | The 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.
https://post.adaptlypost.com/post/api/v1/inbox/comments/:id/hideHides the comment on the platform and answers 200 with the comment.
https://post.adaptlypost.com/post/api/v1/inbox/comments/:id/unhideShows a hidden comment again and answers 200 with the comment.
https://post.adaptlypost.com/post/api/v1/inbox/comments/:id/likeLikes the comment from the account and answers 200 with the comment.
https://post.adaptlypost.com/post/api/v1/inbox/comments/:id/likeRemoves the account's like and answers 200 with the comment.
https://post.adaptlypost.com/post/api/v1/inbox/comments/:idDeletes the comment on the platform and from the AdaptlyPost inbox, and answers 200 { "deleted": true }.
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.
| Platform | Delete | Like and unlike |
|---|---|---|
FACEBOOK | Any comment on the Page's posts | Yes |
INSTAGRAM | Any comment on the account's posts | No |
YOUTUBE | The channel's own comments only | No |
THREADS | The account's own replies only | No |
BLUESKY | The account's own replies only | Yes |
MASTODON | The account's own replies only | Yes, as a favourite |
LINKEDIN | Any comment on the organization's posts | Yes |
Mark as read or done
https://post.adaptlypost.com/post/api/v1/inbox/comments/statusSets the status of up to 100 comments and answers { comments, unreadCount }.
Body parameters
| Parameter | Type | Description |
|---|---|---|
idsREQUIRED | string[] | 1 to 100 ids from the list |
statusREQUIRED | InboxStatus | UNREAD, READ or DONE |
Refusals
A refused call answers { statusCode, error, code, message }. Branch on code. message explains the refusal in words.
| Code | Status | When, and what to do |
|---|---|---|
inbox_item_not_found | 404 | The id does not exist or belongs to another workspace. Stop |
inbox_action_unsupported | 400 | The platform, or this item, does not allow this hide, delete or like. capabilities says what applies. Stop |
inbox_reconnect_required | 403 | The 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_invalid | 400 | The text is empty or over the limit. The message names the limit. Fix the text |
inbox_messaging_window_closed | 400 | Facebook or Instagram: the 24-hour reply window has passed. Stop |
inbox_rate_limited | 429 | The platform rate limited AdaptlyPost. Retry after a while |
inbox_platform_error | 503 | The platform failed. Retry later |
permission_denied | 403 | The key's role lacks inbox.read or inbox.reply. Do not retry |
subscription_required | 403 | A write without an active AdaptlyPost plan. Do not retry |
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>'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, "...": "..." }
]
}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." }'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>'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" }'{
"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
}