Inbox
Read and reply to Instagram and Facebook DMs, comments, and mentions, plus LinkedIn company-page comments and mentions (LinkedIn has no API DMs). Reads require the inbox:read scope; replies and marking read require inbox:write.
List social inbox conversations (newest activity first)
Returns one entry per conversation (the latest message in each), across Instagram and Facebook DMs, comments, and mentions, LinkedIn company-page comments and mentions (LinkedIn has no DMs via API), TikTok video comments (comments only; requires the TikTok comments authorization on the channel), YouTube video comments (comments only; each channel is checked once per day, YouTube has no comment webhooks), X DMs for workspaces that opted in to X DMs in the dashboard (X is DM-only; no history from before opt-in), and Threads replies on your posts plus mentions (requires a Threads connection with the reply-reading permission; currently rolling out). Cursor-paginated: follow pagination.next_cursor until it is null. Requires the inbox:read scope (API keys) or the access_social_inbox permission (OAuth/MCP).
query Parameters
limitMax conversations per page (1-100, default 25).
cursorOpaque pagination cursor from a previous response.
platformFilter to a single platform.
typeFilter to a single conversation type.
unreadWhen true, only conversations with unread incoming messages.
unansweredWhen true, only conversations that still need an answer: the customer's latest DM has no reply after it (Instagram/Facebook DMs within the 24-hour messaging window only), or a comment/mention has not been replied to and is not hidden. Replies typed in the native apps count as answers (they are mirrored into the inbox). Read state is ignored here; use GET /inbox/next for a work queue.
List social inbox conversations (newest activity first) › Responses
A page of conversations
Get the full message history of a conversation
Returns messages in a conversation, oldest first, cursor-paginated. Requires the inbox:read scope (API keys) or the access_social_inbox permission (OAuth/MCP).
path Parameters
conversationIdquery Parameters
limitcursorGet the full message history of a conversation › Responses
A page of messages
Mark all incoming messages in a conversation as read
Marks every unread incoming message in the conversation as read and returns how many were updated. Requires the inbox:write scope (API keys) or the access_social_inbox permission (OAuth/MCP).
path Parameters
conversationIdMark all incoming messages in a conversation as read › Responses
Read state updated
conversation_idmarked_readReply to a conversation
Sends a reply in an existing conversation (DM, comment, or mention) on Instagram, Facebook, LinkedIn, TikTok (comments only), YouTube (comments only), X (DM-only), or Threads (replies and mentions; needs a Threads connection with the reply permission, else 401 reauth_required). You can only reply to conversations that already exist in your inbox — the API cannot start new conversations (Instagram requires the user to message first, and cold outreach violates Meta policy). Direct-message replies must be within the platform's messaging window (24 hours since the user's last message); replies outside the window are rejected. TikTok replies are text-only, capped at 150 characters (400 validation_error beyond that), and can take a few minutes to appear on TikTok while they pass spam review. Each workspace can send up to 1,000 replies per rolling 24 hours (429 reply_limit_reached beyond that) — contact [email protected] if you need a higher limit. X DM replies debit 2 credits from the company balance before the send (auto-refunded if the send fails) and can return 402 insufficient_credits or 402 x_inbox_suspended. Requires the inbox:write scope (API keys) or the access_social_inbox permission (OAuth/MCP).
path Parameters
conversationIdReply to a conversation › Request Body
textReply body (max 2000 characters; Instagram DMs max 1000; TikTok comments max 150). Optional when attachment_url is set — an attachment-only DM is allowed.
attachment_urlOptional media URL to send (Facebook and Instagram DMs only)
attachment_typeRequired if attachment_url is set
include_nextWhen true, the response also carries next: the next conversation that needs an answer (same shape as GET /inbox/next, with its default queue order and filters), and remaining. Saves the extra call when working through the inbox.
Reply to a conversation › Responses
Reply sent
nextOnly when include_next was set. Null when nothing is waiting.
remainingOnly when include_next was set: unanswered items still waiting after next (capped at 500).
Hide or unhide a comment
Hides (or unhides) a comment someone left on one of your posts, on the platform, as the post owner. Facebook, Instagram, TikTok, YouTube and Threads comments (Threads: incoming top-level replies only; Threads does not allow hiding nested replies). On YouTube "hide" sets the comment's moderation status to rejected, which removes it and its replies from public view; unhide publishes it again. The message keeps its place in the conversation and hidden flips on the returned message. A hidden comment no longer counts as unanswered. The account must have been connected with the moderation permission (Facebook pages_manage_engagement, Instagram instagram_business_manage_comments); 403 reconnect_required otherwise. Requires the inbox:write scope (API keys) or the access_social_inbox permission (OAuth/MCP).
path Parameters
idThe inbox message id (from the conversation messages list).
Hide or unhide a comment › Request Body optional
hidetrue to hide, false to unhide
Hide or unhide a comment › Responses
Reply hidden or unhidden. On Facebook/Instagram, if the platform reports the comment no longer exists (its author deleted it, or it was already removed another way), this still returns 200 — there is nothing left to hide, and it stops counting as unanswered — but the response carries a note explaining that instead of silently implying the call hid something.
notePresent only when the comment was already gone on the platform; explains that nothing was left to hide/unhide.
Delete a comment
Deletes a comment someone left on one of your posts, on the platform and from the inbox. Facebook, Instagram and TikTok comments only: YouTube's API does not let a channel delete other people's comments, hide those instead (POST /inbox/messages/{id}/hide). Replies under the deleted comment go with it (the platforms cascade the delete and the inbox mirrors that); their ids are returned. A comment that is already gone on the platform is still removed from the inbox. This cannot be undone. Requires the inbox:write scope (API keys) or the access_social_inbox permission (OAuth/MCP).
path Parameters
idThe inbox message id (from the conversation messages list or GET /inbox/next).
Delete a comment › Responses
Comment deleted
Get the next conversation that needs an answer
A work queue for answering the inbox. Returns the oldest (by default) item that still needs a reply, together with its conversation so far and the post it belongs to, so a reply can be drafted from one call. An item needs an answer when it is the customer's latest DM with no reply after it (Instagram/Facebook DMs within the 24-hour messaging window only, since Meta refuses replies outside it), or a comment/mention that has not been replied to and is not hidden. Replies typed in the native apps count as answers (they are mirrored into the inbox), so a thread a colleague answered on their phone is not served again. Instagram mentions are skipped (no reply path). Only unread items are served by default: marking a conversation read (POST /inbox/conversations/{id}/read) is how to skip one for good; pass include_read=true to include read-but-unanswered items. Looks at the last 30 days of activity. To chain the queue, pass include_next: true to the reply endpoint and it returns the next item in the same response. Requires the inbox:read scope (API keys) or the access_social_inbox permission (OAuth/MCP).
query Parameters
platformOnly items from one platform.
typeOnly items of one type.
orderoldest serves the item that has waited longest first; newest the most recent.
include_readAlso serve items that were marked read but never answered.
excludeComma-separated conversation ids to leave out of this call (a session-local skip; up to 100).
Get the next conversation that needs an answer › Responses
The next item, or null when nothing is waiting
dataThe next conversation that needs an answer, with everything needed to draft the reply. Null when the queue is empty.
remainingUnanswered items still waiting after this one (capped at 500). 0 when data is null.