Menu

API reference · Inbox

Items

social_inbox · items · 19 operations

GET/v1/social-inbox/itemsGET/v1/social-inbox/items/{item_id}GET/v1/social-inbox/items/countsGET/v1/social-inbox/items/{item_id}/conversationGET/v1/social-inbox/items/{item_id}/auditPOST/v1/social-inbox/items/{item_id}/replyPOST/v1/social-inbox/items/{item_id}/archivePOST/v1/social-inbox/items/bulk/archivePOST/v1/social-inbox/items/{item_id}/restorePOST/v1/social-inbox/items/{item_id}/readPOST/v1/social-inbox/items/{item_id}/assignPOST/v1/social-inbox/items/bulk/assignPOST/v1/social-inbox/items/{item_id}/take-ownershipPOST/v1/social-inbox/items/{item_id}/snoozePOST/v1/social-inbox/items/{item_id}/unsnoozePOST/v1/social-inbox/items/{item_id}/resolvePOST/v1/social-inbox/items/bulk/resolvePOST/v1/social-inbox/items/{item_id}/spamPOST/v1/social-inbox/items/{item_id}/labels
GET/v1/social-inbox/items

List Social Inbox items (comments, direct messages, mentions)

social_inbox.items.list

ReadIdempotentSince 2026-11-01

Lists the inbox items of the organization, newest first (by received_at), with cursor pagination: comments, direct messages and mentions from Instagram, Facebook, LinkedIn and TikTok. folder works like the screen: all (everything but spam and archived; the default), pending_reply (still to answer: unread, read or needs_attention), unread, read, needs_attention, replied, resolved, snoozed, archived, spam or assigned_to_me. Filter by source (ig_comment, fb_message, tt_comment…), platform, conversation_type (dm, comment, mention), account_id, root_resource_id (one post or one private conversation), assigned_to (a user id, ai-<position_id> or me), label_id, sentiment or a text query over the text and the author name. received_after (ms since epoch, exclusive) keeps only what arrived after that time. updated_since (ms since epoch, inclusive) keeps only what changed at or after that time (a new item, a reply, an AI draft, an escalation, a state change) and orders the list by updated_at, newest change first: to poll for news, pass the time your previous run started and follow every page. The brand's own messages are left out unless include_self_authored. One filter runs in the database and the rest are applied reading on until the page is full (up to 400 items read per call): a page brings fewer than limit items with has_more true only when that reading limit was reached, so keep following next_cursor. limit is 25 by default. The list is light: it leaves out author.photo_url and media_preview (the post a comment is on, repeated on every comment of the same post) unless include asks for author_photo or media_preview; social_inbox.items.get brings them always. Each item brings the name of the connected account that received it (account_name), what the automation left on it (ai_suggested_reply, automation, auto_message_type) and, for a direct message, its attachments: a file MB Suite keeps comes as a link signed for one hour (url_expires_at), so list again for fresh links; author.photo_url and media_preview.thumbnail_url are the networks' CDN links, which they sign for a few days. Requires view access to the Social Inbox. With LinkedIn or TikTok, their terms limit it through the API and the MCP: what they do not allow answers 403 platform_terms_restricted, and their records are left out of the response (the permissions guide lists what each platform allows).

Scope
social_inbox:read
Permission
View the module
MCP tool
social_inbox_items_listOn the full surface; on the compact one, mb_execute_operation with id: "social_inbox.items.list".

Declared cost: up to 401 reads and 0 writes per call (they count against the daily quota).

Parameters

limitintegerqueryoptional

How many items this page brings at most (1 to 200, default 25).

Default: 25

cursorstringqueryoptional

The next_cursor of the previous page, exactly as it came (only for the same list and filters); without it, the first page.

folderenumqueryoptional

all (everything but spam and archived; the default), pending_reply (still to answer: unread, read or needs_attention), unread, read, needs_attention, replied, resolved, snoozed, archived, spam, or assigned_to_me (what the caller owns).

Values: all, pending_reply, unread, read, needs_attention, replied, resolved, snoozed, archived, spam, assigned_to_me · Default: "all"

sourceenumqueryoptional

Only this source (fb_comment, ig_message, tt_comment…).

Values: fb_comment, fb_message, fb_mention, ig_comment, ig_message, ig_mention, li_comment, li_message, li_mention, tt_comment, tt_message

platformenumqueryoptional

Only this network: facebook, instagram, linkedin or tiktok.

Values: facebook, instagram, linkedin, tiktok

conversation_typeenumqueryoptional

Only dm (private messages), comment or mention.

Values: dm, comment, mention

account_idstringqueryoptional

Only items received by this connected account (account_id from social_inbox.connections.list).

root_resource_idstringqueryoptional

Only items on this post or conversation (root_resource_id of an item): the whole conversation.

assigned_tostringqueryoptional

Only items owned by this person: a member's user id, ai-<position_id> (social_inbox.positions.list) or me.

label_idstringqueryoptional

An inbox label id (from social_inbox.labels.list).

sentimentenumqueryoptional

Only positive, neutral or negative (as the Sentiment Analyst classified them).

Values: positive, neutral, negative

querystringqueryoptional

Text to look for in the message and the author's name (case and accents ignored).

include_self_authoredbooleanqueryoptional

Also bring the brand's own messages and comments. Default false.

Default: false

includearray<enum>queryoptional

Extra parts for each item, left out by default to keep the list light: author_photo (author.photo_url, the network's CDN link, signed for a few days) and media_preview (the post a comment is on: thumbnail, link, text; repeated on every comment of the same post). social_inbox.items.get and items.conversation always bring them.

Values: author_photo, media_preview · Default: []

received_afterintegerqueryoptional

Only items that arrived on the network after this time (ms since epoch, exclusive), by received_at.

updated_sinceintegerqueryoptional

Only items that changed at or after this time (ms since epoch), by updated_at: new items and any change on them (a reply, an AI draft, an escalation, a state change). The list is then ordered by updated_at, newest change first.

Response

dataarray<object>
has_moreboolean
next_cursorstring

Errors

Example

curl "https://api.mb-suite.com/v1/social-inbox/items" \
  -H "Authorization: Bearer $MB_API_KEY"

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl "https://api.mb-suite.com/v1/social-inbox/items" \
  -H "Authorization: Bearer $MB_TEST_KEY"
GET/v1/social-inbox/items/{item_id}

Get one Social Inbox item

social_inbox.items.get

ReadIdempotentSince 2026-11-01

Returns one inbox item: source and network, the author, the text, attachments of a direct message (a file MB Suite keeps comes as a link signed for one hour, url_expires_at; an Instagram one, as the network's own link), sentiment, state, the reply sent from MB Suite (if any; sent_by_ai when an AI agent's API key sent it), assignment, labels, the link to it on the network (external_url), can_reply (false for read-only items such as an Instagram photo tag or a LinkedIn direct message), the unsent draft of an AI Community Manager (ai_suggested_reply), the automatic reply that took its turn (automation: a rule or the AI) and, for TikTok direct messages, the network's auto_message_type. 404 inbox_item_not_found if it is not in this organization. Requires view access. With LinkedIn or TikTok, their terms limit it through the API and the MCP: what they do not allow answers 403 platform_terms_restricted (the permissions guide lists what each platform allows).

Scope
social_inbox:read
Permission
View the module
MCP tool
social_inbox_items_getOn the full surface; on the compact one, mb_execute_operation with id: "social_inbox.items.get".

Declared cost: up to 1 reads and 0 writes per call (they count against the daily quota).

Parameters

item_idstringpathrequired

The inbox item id (from social_inbox.items.list).

Response

idstring

The item id.

sourcestring

Source: fb_comment, fb_message, fb_mention, ig_comment, ig_message, ig_mention, li_comment, li_message, li_mention, tt_comment or tt_message.

platformstring

facebook, instagram, linkedin or tiktok.

conversation_typestring

dm (a private message), comment or mention.

source_item_idstring

The item's id on the network.

source_account_idstring

The connected account that received it (its id on the network): the same as account_id in social_inbox.connections.list.

authorobject

Who wrote it.

textstring

What they wrote (empty for an attachment alone).

sentimentstring

positive, neutral or negative (neutral when the Sentiment Analyst did not classify it).

received_atnumber

When it arrived on the network (epoch ms).

statestring

unread, read, replied, needs_attention, snoozed, resolved, archived or spam.

can_replyboolean

Whether social_inbox.items.reply can answer it (some sources are read-only).

created_atnumber

When MB Suite stored it (epoch ms).

updated_atnumber

Last change (epoch ms): a reply, an AI draft, an escalation, a state change.

account_namestring | null

The name of that connected account, from the organization's connections (absent if the account is no longer connected).

root_resource_idstring | null

What it hangs from: the post of a comment, or the conversation of a private message (filter items.list by root_resource_id for the whole conversation).

parent_item_idstring | null

The comment it replies to, for a reply inside a comment thread.

thread_idstring | null

The thread it belongs to: one person on one post or in one conversation (social_inbox.threads.get).

languagestring | null

Detected language (ISO 639-1), when the Sentiment Analyst ran.

is_spamboolean | null

The Sentiment Analyst's spam verdict (with spam_score). It does not move the item: the spam folder is state spam, which a person, a rule or the engine sets.

spam_scorenumber | null

The Sentiment Analyst's spam probability, 0 to 1.

is_self_authoredboolean | null

True for the brand's own messages and comments (they are left out of items.list unless include_self_authored).

replyobject | null

The reply sent from MB Suite, if any.

snoozed_untilnumber | null

With state snoozed: when it comes back (epoch ms).

note_countnumber | null

Internal notes on it (social_inbox.notes.list).

first_human_reply_atnumber | null

When a person first replied to it (epoch ms); replies by AI or by an AI agent's key do not count.

assigned_to_user_idstring | null

Who owns it: a member's user id or ai-<position_id> for an AI Community Manager.

assigned_to_user_namestring | null

The name of who owns it.

assigned_atnumber | null

When it was assigned (epoch ms).

label_idsarray<string> | null

Its inbox labels (social_inbox.labels.list).

media_previewobject | null

The post a comment or mention is on (repeated on every comment of the same post).

attachmentsarray<object> | null

Files sent in a private message.

external_urlstring | null

Link to open it on the network (for a TikTok comment, the video's player).

mention_kindstring | null

Instagram mentions only: caption (in a post's text) or comment. Absent for a tag in a photo, which cannot be answered.

crm_linkedboolean | null

True when its conversation was passed to the CRM (CRM → Messages); see social_inbox.crm.*.

crm_conversation_idstring | null

The CRM conversation it is linked to, if any.

ai_suggested_replyobject | null

The reply an AI Community Manager in suggest mode drafted for this item (text, generated_at). It is never sent by itself; it stays after a reply goes out, so it is pending only while the item has no reply.

automationobject | null

The automatic reply that took this item's turn: by rule (a rule with a saved reply or 'reply with AI', rule_id) or by ai (an AI Community Manager in auto reply, position_id). In a private conversation every message of the burst it answered carries it. Absent when no automation answered.

escalationobject | null

Why the inbox engine or an AI Community Manager handed this item to a person (ai_signal, complaint, or the turn's reason) and when (at). Recorded since 2026-10-11; older escalations only have it in the audit log and the social_inbox.item.escalated webhook. Absent when it was never escalated.

auto_message_typestring | null

TikTok direct messages only: the network's automatic message type as TikTok sends it (WELCOME_MESSAGE, SUGGESTED_QUESTION or AUTO_REPLY), once the periodic sync has seen the message (TikTok's real-time notice does not carry it). Absent for messages a person typed.

Errors

Example

curl "https://api.mb-suite.com/v1/social-inbox/items/{item_id}" \
  -H "Authorization: Bearer $MB_API_KEY"

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl "https://api.mb-suite.com/v1/social-inbox/items/{item_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY"
GET/v1/social-inbox/items/counts

Count Social Inbox items per folder

social_inbox.items.counts

ReadIdempotentSince 2026-11-01

Returns how many items each inbox folder has, like the screen's badges: all (without spam, archived and the brand's own messages), unread, assigned_to_me (assigned to the caller), needs_attention, replied, resolved, snoozed, archived and spam. Aggregated counts: it does not read the items. Requires view access.

Scope
social_inbox:read
Permission
View the module
MCP tool
social_inbox_items_countsOn the full surface; on the compact one, mb_execute_operation with id: "social_inbox.items.counts".

Declared cost: up to 10 reads and 0 writes per call (they count against the daily quota).

Parameters

No parameters.

Response

allnumber
unreadnumber
assigned_to_menumber
needs_attentionnumber
repliednumber
resolvednumber
snoozednumber
archivednumber
spamnumber

Errors

Example

curl "https://api.mb-suite.com/v1/social-inbox/items/counts" \
  -H "Authorization: Bearer $MB_API_KEY"

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl "https://api.mb-suite.com/v1/social-inbox/items/counts" \
  -H "Authorization: Bearer $MB_TEST_KEY"
GET/v1/social-inbox/items/{item_id}/conversation

Get the conversation of a Social Inbox item

social_inbox.items.conversation

ReadIdempotentSince 2026-11-01

Returns the conversation an inbox item belongs to, oldest first, including the brand's own messages: for a direct message, the whole private conversation; for a comment or mention, that commenter's thread under the post (not the other people's comments). The post (media_preview) comes once, on the first message that has it. Use it to give an AI or a person the context before replying. Up to limit messages (default 100, max 200). Requires view access. With LinkedIn or TikTok, their terms limit it through the API and the MCP: what they do not allow answers 403 platform_terms_restricted, and their records are left out of the response (the permissions guide lists what each platform allows).

Scope
social_inbox:read
Permission
View the module
MCP tool
social_inbox_items_conversationOn the full surface; on the compact one, mb_execute_operation with id: "social_inbox.items.conversation".

Declared cost: up to 201 reads and 0 writes per call (they count against the daily quota).

Parameters

item_idstringpathrequired

The inbox item id (from social_inbox.items.list).

limitintegerqueryoptional

How many messages at most, oldest first (1 to 200, default 100).

Default: 100

Response

dataarray<object>

Errors

Example

curl "https://api.mb-suite.com/v1/social-inbox/items/{item_id}/conversation" \
  -H "Authorization: Bearer $MB_API_KEY"

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl "https://api.mb-suite.com/v1/social-inbox/items/{item_id}/conversation" \
  -H "Authorization: Bearer $MB_TEST_KEY"
GET/v1/social-inbox/items/{item_id}/audit

List the audit trail of a Social Inbox item

social_inbox.items.audit.list

ReadIdempotentSince 2026-11-01

Returns what happened to one inbox item, newest first (up to the latest 100 audit entries of the item): replies (content.inbox_reply_sent, content.inbox_private_reply_sent), state changes (archived, restored, read and unread, assigned and unassigned, snoozed, resolved, spam, labeled), notes added or deleted, sends to the CRM, the inbox automation (content.inbox_rule_managed, content.inbox_auto_reply_sent) and the AI (ai.inbox_ai_auto_replied, ai.inbox_ai_escalated with metadata.reason, ai.inbox_ai_taken_over, ai.inbox_ai_draft_generated). Each entry: id, action, actor_name and actor_uid (never an email; system:inbox-auto for the inbox engine and other system:* values for MB Suite's own processes, ai-<position_id> for an AI Community Manager), timestamp, via when it did not come from the MB Suite app (api_key, mcp_key, oauth, mia, support, internal), key_name when an API key of this organization (or of its workspace, for the agency's people) did it, and metadata with the details each action recorded, limited to the keys in the schema. platform is the item's network. Bulk actions are audited once for all their items and do not appear here; neither does anything recorded before an action was audited. Calls no network. 404 inbox_item_not_found if the item is not in this organization. Requires view access to the Social Inbox. With LinkedIn or TikTok, their terms limit it through the API and the MCP: what they do not allow answers 403 platform_terms_restricted, and their fields are left out of the response (the permissions guide lists what each platform allows).

Scope
social_inbox:read
Permission
View the module
MCP tool
social_inbox_items_audit_listOn the full surface; on the compact one, mb_execute_operation with id: "social_inbox.items.audit.list".

Declared cost: up to 22 reads and 0 writes per call (they count against the daily quota).

Parameters

item_idstringpathrequired

The inbox item id (from social_inbox.items.list).

Response

platformstring

The item's network: instagram, facebook, linkedin or tiktok.

dataarray<object>

Errors

Example

curl "https://api.mb-suite.com/v1/social-inbox/items/{item_id}/audit" \
  -H "Authorization: Bearer $MB_API_KEY"

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl "https://api.mb-suite.com/v1/social-inbox/items/{item_id}/audit" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/social-inbox/items/{item_id}/reply

Reply to a comment, mention or DM in the Social Inbox

social_inbox.items.reply

WriteSince 2026-11-01

Publishes a reply to an inbox item on its network, through the connected account that received it, and records it on the item (state replied). channel public answers in the same place (a reply to the comment, or a message in the private conversation); channel private answers a Facebook or Instagram comment by direct message. as_profile replies on LinkedIn as the connected personal profile. This SENDS to the network and cannot be undone from here: never call it to test. The text limit depends on the network (Instagram direct messages count UTF-8 bytes): 400 reply_too_long. An integration has no human-agent window: Meta accepts free text within 24 hours of the person's last message (409 reply_window_expired after that). With an API key marked as an AI agent's (an owner or admin sets it on the key; it is never chosen per call), the reply counts as an AI reply, like the AI Community Manager's: reply.sent_by_ai with ai_agent_user_id = the key's user, it stays out of the human first-response time (no first_human_reply_at, not in the team's average first response) and counts under that agent in the replies per agent, and social_inbox.reply.sent says automated true. Direct messages that belong to the CRM are answered with crm.social_dm.send (409 crm_linked). Read-only items (an Instagram photo tag, a LinkedIn direct message) give 400 reply_not_supported. When the network refuses the reply it gives 409 external_rejected (details.platform and the network's provider_code); 429 external_rate_limited when it is limiting and 503 external_unavailable only when the reply surely did not reach it (retry after retry_after); 409 external_outcome_unknown when it did not answer clearly (timeout, connection cut, its 500/502/504): the reply may have been published, so check the conversation before replying again; 409 integration_reconnect_required when the connected account expired or lacks a permission, and 409 integration_not_connected for LinkedIn without the LinkedIn (Pages) integration. Returns the updated item. Requires full access and an owner, admin or member role. Outside the app it runs in two steps (it sends to a network): first the dry run, which returns the confirm_token to send it with; with dry_run=true nothing is sent or written and the network is not called: it runs the same checks (role, crm_linked, private_reply_not_supported, reply_not_supported, reply_too_long) and fails with the same errors, or returns a Preview with channel, platform, source, length (used, max and unit: chars or UTF-8 bytes), account_connected (the account that received the item is still among the Inbox connections with an active credential; false comes with a warning: the reply would fail; so does a TikTok account that TikTok does not let send direct messages), reply_window for an Instagram or Messenger direct message answered in the same conversation (state open or closed, last_inbound_at: the person's last message, closes_at: 24 hours later for an integration, 7 days for a person in the app; closed comes with a warning; null where MB Suite has no fixed window to check: comments, mentions, TikTok, a private reply to a comment), sent_by_ai (the reply would count as an AI agent's) and first_human_reply (it would set the team's first human response time). A clean dry run does not guarantee the network accepts the reply: Meta (or the network) can still refuse it. With LinkedIn or TikTok, their terms limit it through the API and the MCP: what they do not allow answers 403 platform_terms_restricted (the permissions guide lists what each platform allows).

Needs confirmation: first dry_run: true (preview and confirm_token, valid 10 minutes and for one run), then the same body with confirm_token. In a few operations only with certain data: the description says when. Why and how: Dry run and confirm_token.

Scope
social_inbox:write
Permission
Edit in the module
MCP tool
social_inbox_items_replyOn the full surface; on the compact one, mb_execute_operation with id: "social_inbox.items.reply".
Events it can emit
social_inbox.reply.sent

Declared cost: up to 2 reads and 2 writes per call (they count against the daily quota). Touches an external platform (meta): it counts against the external operations quota.

Parameters

item_idstringpathrequired

The inbox item id (from social_inbox.items.list).

textstringbodyrequired

The reply, as it will be published on the network.

channelenumbodyoptional

public (on the same comment or conversation; the default) or private (answer a comment by private message, only where the network allows it).

Values: public, private · Default: "public"

as_profilebooleanbodyoptional

LinkedIn only: answer as the connected personal profile instead of the page. Default false.

Default: false

Response

idstring

The item id.

sourcestring

Source: fb_comment, fb_message, fb_mention, ig_comment, ig_message, ig_mention, li_comment, li_message, li_mention, tt_comment or tt_message.

platformstring

facebook, instagram, linkedin or tiktok.

conversation_typestring

dm (a private message), comment or mention.

source_item_idstring

The item's id on the network.

source_account_idstring

The connected account that received it (its id on the network): the same as account_id in social_inbox.connections.list.

authorobject

Who wrote it.

textstring

What they wrote (empty for an attachment alone).

sentimentstring

positive, neutral or negative (neutral when the Sentiment Analyst did not classify it).

received_atnumber

When it arrived on the network (epoch ms).

statestring

unread, read, replied, needs_attention, snoozed, resolved, archived or spam.

can_replyboolean

Whether social_inbox.items.reply can answer it (some sources are read-only).

created_atnumber

When MB Suite stored it (epoch ms).

updated_atnumber

Last change (epoch ms): a reply, an AI draft, an escalation, a state change.

account_namestring | null

The name of that connected account, from the organization's connections (absent if the account is no longer connected).

root_resource_idstring | null

What it hangs from: the post of a comment, or the conversation of a private message (filter items.list by root_resource_id for the whole conversation).

parent_item_idstring | null

The comment it replies to, for a reply inside a comment thread.

thread_idstring | null

The thread it belongs to: one person on one post or in one conversation (social_inbox.threads.get).

languagestring | null

Detected language (ISO 639-1), when the Sentiment Analyst ran.

is_spamboolean | null

The Sentiment Analyst's spam verdict (with spam_score). It does not move the item: the spam folder is state spam, which a person, a rule or the engine sets.

spam_scorenumber | null

The Sentiment Analyst's spam probability, 0 to 1.

is_self_authoredboolean | null

True for the brand's own messages and comments (they are left out of items.list unless include_self_authored).

replyobject | null

The reply sent from MB Suite, if any.

snoozed_untilnumber | null

With state snoozed: when it comes back (epoch ms).

note_countnumber | null

Internal notes on it (social_inbox.notes.list).

first_human_reply_atnumber | null

When a person first replied to it (epoch ms); replies by AI or by an AI agent's key do not count.

assigned_to_user_idstring | null

Who owns it: a member's user id or ai-<position_id> for an AI Community Manager.

assigned_to_user_namestring | null

The name of who owns it.

assigned_atnumber | null

When it was assigned (epoch ms).

label_idsarray<string> | null

Its inbox labels (social_inbox.labels.list).

media_previewobject | null

The post a comment or mention is on (repeated on every comment of the same post).

attachmentsarray<object> | null

Files sent in a private message.

external_urlstring | null

Link to open it on the network (for a TikTok comment, the video's player).

mention_kindstring | null

Instagram mentions only: caption (in a post's text) or comment. Absent for a tag in a photo, which cannot be answered.

crm_linkedboolean | null

True when its conversation was passed to the CRM (CRM → Messages); see social_inbox.crm.*.

crm_conversation_idstring | null

The CRM conversation it is linked to, if any.

ai_suggested_replyobject | null

The reply an AI Community Manager in suggest mode drafted for this item (text, generated_at). It is never sent by itself; it stays after a reply goes out, so it is pending only while the item has no reply.

automationobject | null

The automatic reply that took this item's turn: by rule (a rule with a saved reply or 'reply with AI', rule_id) or by ai (an AI Community Manager in auto reply, position_id). In a private conversation every message of the burst it answered carries it. Absent when no automation answered.

escalationobject | null

Why the inbox engine or an AI Community Manager handed this item to a person (ai_signal, complaint, or the turn's reason) and when (at). Recorded since 2026-10-11; older escalations only have it in the audit log and the social_inbox.item.escalated webhook. Absent when it was never escalated.

auto_message_typestring | null

TikTok direct messages only: the network's automatic message type as TikTok sends it (WELCOME_MESSAGE, SUGGESTED_QUESTION or AUTO_REPLY), once the periodic sync has seen the message (TikTok's real-time notice does not carry it). Absent for messages a person typed.

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/social-inbox/items/{item_id}/reply" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "text": "TEXT",
  "dry_run": true
}'

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset. In the practice organization this operation is not simulated (it reaches another platform): it answers 409 sandbox_external_unavailable.

POST/v1/social-inbox/items/{item_id}/archive

Archive a Social Inbox item

social_inbox.items.archive

WriteIdempotentSince 2026-11-01

Moves an inbox item to the Archived folder (it leaves All). Nothing is deleted: social_inbox.items.restore brings it back. Archiving an archived item changes nothing (changed false). Returns the item. Requires full access and an owner, admin or member role. With LinkedIn or TikTok, their terms limit it through the API and the MCP: what they do not allow answers 403 platform_terms_restricted (the permissions guide lists what each platform allows).

Scope
social_inbox:write
Permission
Edit in the module
MCP tool
social_inbox_items_archiveOn the full surface; on the compact one, mb_execute_operation with id: "social_inbox.items.archive".

Declared cost: up to 1 reads and 1 writes per call (they count against the daily quota).

Parameters

item_idstringpathrequired

The inbox item id (from social_inbox.items.list).

Response

itemobject
changedboolean

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/social-inbox/items/{item_id}/archive" \
  -H "Authorization: Bearer $MB_API_KEY"

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl -X POST "https://api.mb-suite.com/v1/social-inbox/items/{item_id}/archive" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/social-inbox/items/bulk/archive

Archive many Social Inbox items

social_inbox.items.bulk.archive

WriteBulk · up to 200IdempotentSince 2026-11-01

Archives up to 200 inbox items at once (they can be restored one by one). Ids that do not exist in this organization are skipped and counted in skipped; nothing is created. Outside the screen it needs a dry run and the confirm_token it returns. Returns how many were archived. Requires full access and an owner, admin or member role.

Needs confirmation: first dry_run: true (preview and confirm_token, valid 10 minutes and for one run), then the same body with confirm_token. In a few operations only with certain data: the description says when. Why and how: Dry run and confirm_token.

Scope
social_inbox:write
Permission
Edit in the module
MCP tool
social_inbox_items_bulk_archiveOn the full surface; on the compact one, mb_execute_operation with id: "social_inbox.items.bulk.archive".

Declared cost: up to 200 reads and 200 writes per call (they count against the daily quota).

Parameters

item_idsarray<string>bodyrequired

Inbox item ids (from social_inbox.items.list), 1 to 200.

Response

updatednumber
skippednumber

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/social-inbox/items/bulk/archive" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "item_ids": [
    "ITEM_ID"
  ],
  "dry_run": true
}'

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl -X POST "https://api.mb-suite.com/v1/social-inbox/items/bulk/archive" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "item_ids": [
    "ITEM_ID"
  ],
  "dry_run": true
}'
POST/v1/social-inbox/items/{item_id}/restore

Restore an archived Social Inbox item

social_inbox.items.restore

WriteIdempotentSince 2026-11-01

Takes an archived inbox item back to the inbox: replied if it has a reply from MB Suite, unread otherwise. On an item that is not archived it changes nothing (changed false). To leave Spam, Snoozed or Resolved use mark_spam, unsnooze or resolve. Requires full access and an owner, admin or member role. With LinkedIn or TikTok, their terms limit it through the API and the MCP: what they do not allow answers 403 platform_terms_restricted (the permissions guide lists what each platform allows).

Scope
social_inbox:write
Permission
Edit in the module
MCP tool
social_inbox_items_restoreOn the full surface; on the compact one, mb_execute_operation with id: "social_inbox.items.restore".

Declared cost: up to 1 reads and 1 writes per call (they count against the daily quota).

Parameters

item_idstringpathrequired

The inbox item id (from social_inbox.items.list).

Response

itemobject
changedboolean

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/social-inbox/items/{item_id}/restore" \
  -H "Authorization: Bearer $MB_API_KEY"

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl -X POST "https://api.mb-suite.com/v1/social-inbox/items/{item_id}/restore" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/social-inbox/items/{item_id}/read

Mark a Social Inbox item as read or unread

social_inbox.items.mark_read

WriteIdempotentSince 2026-11-01

Marks an inbox item as read (read true, the default) or unread (read false). Read state is shared by the whole team. It only moves an item between unread and read: a replied, archived, snoozed, spam, resolved or needs-attention item is left as it is (changed false). Requires full access and an owner, admin or member role. With LinkedIn or TikTok, their terms limit it through the API and the MCP: what they do not allow answers 403 platform_terms_restricted (the permissions guide lists what each platform allows).

Scope
social_inbox:write
Permission
Edit in the module
MCP tool
social_inbox_items_mark_readOn the full surface; on the compact one, mb_execute_operation with id: "social_inbox.items.mark_read".

Declared cost: up to 1 reads and 1 writes per call (they count against the daily quota).

Parameters

item_idstringpathrequired

The inbox item id (from social_inbox.items.list).

readbooleanbodyoptional

true marks it read (the default); false, unread.

Default: true

Response

itemobject
changedboolean

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/social-inbox/items/{item_id}/read" \
  -H "Authorization: Bearer $MB_API_KEY"

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl -X POST "https://api.mb-suite.com/v1/social-inbox/items/{item_id}/read" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/social-inbox/items/{item_id}/assign

Assign a Social Inbox item to a person or an AI Community Manager

social_inbox.items.assign

WriteIdempotentSince 2026-11-01

Assigns an inbox item, and its thread, to a member of the organization (or of its agency) or to an active AI Community Manager (assignee_uid ai-<position_id>, see social_inbox.positions.list); null unassigns. New messages of the thread inherit the owner, and a thread owned by a person is never answered by the AI. A person assignee gets an in-app notification. Any other user id gives 400 assignee_invalid; a direct message that belongs to the CRM cannot go to an AI (409 crm_linked). Returns the item. Requires full access and an owner, admin or member role. With LinkedIn or TikTok, their terms limit it through the API and the MCP: what they do not allow answers 403 platform_terms_restricted (the permissions guide lists what each platform allows).

Scope
social_inbox:write
Permission
Edit in the module
MCP tool
social_inbox_items_assignOn the full surface; on the compact one, mb_execute_operation with id: "social_inbox.items.assign".

Declared cost: up to 4 reads and 2 writes per call (they count against the daily quota).

Parameters

item_idstringpathrequired

The inbox item id (from social_inbox.items.list).

assignee_uidstring | nullbodyrequired

Who gets it: a member's user id (members.members.list), ai-<position_id> for an AI Community Manager (social_inbox.positions.list), or null to unassign.

Response

itemobject

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/social-inbox/items/{item_id}/assign" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "assignee_uid": "ASSIGNEE_UID"
}'

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl -X POST "https://api.mb-suite.com/v1/social-inbox/items/{item_id}/assign" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "assignee_uid": "ASSIGNEE_UID"
}'
POST/v1/social-inbox/items/bulk/assign

Assign many Social Inbox items

social_inbox.items.bulk.assign

WriteBulk · up to 200IdempotentSince 2026-11-01

Assigns up to 200 inbox items (and their threads) to one member or active AI Community Manager (ai-<position_id>), or unassigns them with null. The assignee gets one grouped notification. Ids that do not exist are skipped, and so are direct messages of the CRM when the assignee is an AI. Outside the screen it needs a dry run and the confirm_token it returns. Returns how many were updated and skipped. Requires full access and an owner, admin or member role. With LinkedIn or TikTok, their terms limit it through the API and the MCP: what they do not allow answers 403 platform_terms_restricted (the permissions guide lists what each platform allows).

Needs confirmation: first dry_run: true (preview and confirm_token, valid 10 minutes and for one run), then the same body with confirm_token. In a few operations only with certain data: the description says when. Why and how: Dry run and confirm_token.

Scope
social_inbox:write
Permission
Edit in the module
MCP tool
social_inbox_items_bulk_assignOn the full surface; on the compact one, mb_execute_operation with id: "social_inbox.items.bulk.assign".

Declared cost: up to 203 reads and 400 writes per call (they count against the daily quota).

Parameters

item_idsarray<string>bodyrequired

Inbox item ids (from social_inbox.items.list), 1 to 200.

assignee_uidstring | nullbodyrequired

Who gets it: a member's user id (members.members.list), ai-<position_id> for an AI Community Manager (social_inbox.positions.list), or null to unassign.

Response

updatednumber
skippednumber

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/social-inbox/items/bulk/assign" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "item_ids": [
    "ITEM_ID"
  ],
  "assignee_uid": "ASSIGNEE_UID",
  "dry_run": true
}'

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl -X POST "https://api.mb-suite.com/v1/social-inbox/items/bulk/assign" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "item_ids": [
    "ITEM_ID"
  ],
  "assignee_uid": "ASSIGNEE_UID",
  "dry_run": true
}'
POST/v1/social-inbox/items/{item_id}/take-ownership

Take over a Social Inbox thread (from the AI)

social_inbox.items.take_ownership

WriteSince 2026-11-01

The caller takes over the whole thread of an inbox item, usually one handled by an AI Community Manager: every message of the thread (except the brand's own) is assigned to the caller, the thread keeps the caller as owner (the AI stops answering it) and an internal note records the takeover (note_text, or a default one in the caller's language). Each call adds a note. Returns how many messages were assigned and the note id. Requires full access and an owner, admin or member role.

Scope
social_inbox:write
Permission
Edit in the module
MCP tool
social_inbox_items_take_ownershipOn the full surface; on the compact one, mb_execute_operation with id: "social_inbox.items.take_ownership".

Declared cost: up to 202 reads and 203 writes per call (they count against the daily quota).

Parameters

item_idstringpathrequired

The inbox item id (from social_inbox.items.list).

note_textstringbodyoptional

The internal note left on the thread. Default: a standard note in the caller's language.

Response

items_assignednumber
note_idstring

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/social-inbox/items/{item_id}/take-ownership" \
  -H "Authorization: Bearer $MB_API_KEY"

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl -X POST "https://api.mb-suite.com/v1/social-inbox/items/{item_id}/take-ownership" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/social-inbox/items/{item_id}/snooze

Snooze a Social Inbox item until a time

social_inbox.items.snooze

WriteIdempotentSince 2026-11-01

Hides an inbox item in Snoozed until snoozed_until (milliseconds since epoch, in the future: 400 snooze_in_past otherwise); it comes back to the inbox by itself within 15 minutes of that time. social_inbox.items.unsnooze brings it back now. Returns the item. Requires full access and an owner, admin or member role. With LinkedIn or TikTok, their terms limit it through the API and the MCP: what they do not allow answers 403 platform_terms_restricted (the permissions guide lists what each platform allows).

Scope
social_inbox:write
Permission
Edit in the module
MCP tool
social_inbox_items_snoozeOn the full surface; on the compact one, mb_execute_operation with id: "social_inbox.items.snooze".

Declared cost: up to 1 reads and 1 writes per call (they count against the daily quota).

Parameters

item_idstringpathrequired

The inbox item id (from social_inbox.items.list).

snoozed_untilintegerbodyrequired

When it comes back to the inbox (epoch ms, in the future).

Response

itemobject

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/social-inbox/items/{item_id}/snooze" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "snoozed_until": 0
}'

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl -X POST "https://api.mb-suite.com/v1/social-inbox/items/{item_id}/snooze" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "snoozed_until": 0
}'
POST/v1/social-inbox/items/{item_id}/unsnooze

Bring a snoozed Social Inbox item back now

social_inbox.items.unsnooze

WriteIdempotentSince 2026-11-01

Brings a snoozed inbox item back to the inbox before its time: replied if it has a reply from MB Suite, unread otherwise. On an item that is not snoozed it changes nothing (changed false). Requires full access and an owner, admin or member role. With LinkedIn or TikTok, their terms limit it through the API and the MCP: what they do not allow answers 403 platform_terms_restricted (the permissions guide lists what each platform allows).

Scope
social_inbox:write
Permission
Edit in the module
MCP tool
social_inbox_items_unsnoozeOn the full surface; on the compact one, mb_execute_operation with id: "social_inbox.items.unsnooze".

Declared cost: up to 1 reads and 1 writes per call (they count against the daily quota).

Parameters

item_idstringpathrequired

The inbox item id (from social_inbox.items.list).

Response

itemobject
changedboolean

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/social-inbox/items/{item_id}/unsnooze" \
  -H "Authorization: Bearer $MB_API_KEY"

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl -X POST "https://api.mb-suite.com/v1/social-inbox/items/{item_id}/unsnooze" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/social-inbox/items/{item_id}/resolve

Mark a Social Inbox item as resolved (or reopen it)

social_inbox.items.resolve

WriteIdempotentSince 2026-11-01

Marks an inbox item as resolved (resolved true, the default; it counts in the team's performance and emits social_inbox.item.resolved) or reopens a resolved one (resolved false: back to replied or unread). Resolving a resolved item, or reopening one that is not resolved, changes nothing (changed false). Returns the item. Requires full access and an owner, admin or member role. With LinkedIn or TikTok, their terms limit it through the API and the MCP: what they do not allow answers 403 platform_terms_restricted (the permissions guide lists what each platform allows).

Scope
social_inbox:write
Permission
Edit in the module
MCP tool
social_inbox_items_resolveOn the full surface; on the compact one, mb_execute_operation with id: "social_inbox.items.resolve".
Events it can emit
social_inbox.item.resolved

Declared cost: up to 1 reads and 2 writes per call (they count against the daily quota).

Parameters

item_idstringpathrequired

The inbox item id (from social_inbox.items.list).

resolvedbooleanbodyoptional

true resolves it (the default); false reopens it.

Default: true

Response

itemobject
changedboolean

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/social-inbox/items/{item_id}/resolve" \
  -H "Authorization: Bearer $MB_API_KEY"

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl -X POST "https://api.mb-suite.com/v1/social-inbox/items/{item_id}/resolve" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/social-inbox/items/bulk/resolve

Mark many Social Inbox items as resolved

social_inbox.items.bulk.resolve

WriteBulk · up to 200IdempotentSince 2026-11-01

Marks up to 200 inbox items as resolved at once (like «mark all as resolved» on a post). Items already resolved and ids that do not exist are skipped; each item that changes emits social_inbox.item.resolved and counts in the team's performance. Outside the screen it needs a dry run and the confirm_token it returns. Returns how many changed and how many were skipped. Requires full access and an owner, admin or member role.

Needs confirmation: first dry_run: true (preview and confirm_token, valid 10 minutes and for one run), then the same body with confirm_token. In a few operations only with certain data: the description says when. Why and how: Dry run and confirm_token.

Scope
social_inbox:write
Permission
Edit in the module
MCP tool
social_inbox_items_bulk_resolveOn the full surface; on the compact one, mb_execute_operation with id: "social_inbox.items.bulk.resolve".
Events it can emit
social_inbox.item.resolved

Declared cost: up to 200 reads and 204 writes per call (they count against the daily quota).

Parameters

item_idsarray<string>bodyrequired

Inbox item ids (from social_inbox.items.list), 1 to 200.

Response

updatednumber
skippednumber

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/social-inbox/items/bulk/resolve" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "item_ids": [
    "ITEM_ID"
  ],
  "dry_run": true
}'

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl -X POST "https://api.mb-suite.com/v1/social-inbox/items/bulk/resolve" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "item_ids": [
    "ITEM_ID"
  ],
  "dry_run": true
}'
POST/v1/social-inbox/items/{item_id}/spam

Mark a Social Inbox item as spam (or not)

social_inbox.items.mark_spam

WriteIdempotentSince 2026-11-01

Moves an inbox item to Spam (spam true, the default) or takes it out (spam false: back to replied or unread). Nothing is sent to the network and nothing is deleted. Marking spam what is already in Spam, or unmarking what is not spam, changes nothing (changed false). Returns the item. Requires full access and an owner, admin or member role. With LinkedIn or TikTok, their terms limit it through the API and the MCP: what they do not allow answers 403 platform_terms_restricted (the permissions guide lists what each platform allows).

Scope
social_inbox:write
Permission
Edit in the module
MCP tool
social_inbox_items_mark_spamOn the full surface; on the compact one, mb_execute_operation with id: "social_inbox.items.mark_spam".

Declared cost: up to 1 reads and 2 writes per call (they count against the daily quota).

Parameters

item_idstringpathrequired

The inbox item id (from social_inbox.items.list).

spambooleanbodyoptional

true moves it to spam (the default); false takes it out.

Default: true

Response

itemobject
changedboolean

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/social-inbox/items/{item_id}/spam" \
  -H "Authorization: Bearer $MB_API_KEY"

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl -X POST "https://api.mb-suite.com/v1/social-inbox/items/{item_id}/spam" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/social-inbox/items/{item_id}/labels

Set the labels of a Social Inbox item

social_inbox.items.set_labels

WriteIdempotentSince 2026-11-01

Replaces the labels of an inbox item with label_ids (up to 20; an empty list removes them all). Every id has to be an inbox label of this organization (social_inbox.labels.list): an unknown one stops the change (400 label_not_found). Returns the item. Requires full access and an owner, admin or member role. With LinkedIn or TikTok, their terms limit it through the API and the MCP: what they do not allow answers 403 platform_terms_restricted (the permissions guide lists what each platform allows).

Scope
social_inbox:write
Permission
Edit in the module
MCP tool
social_inbox_items_set_labelsOn the full surface; on the compact one, mb_execute_operation with id: "social_inbox.items.set_labels".

Declared cost: up to 21 reads and 1 writes per call (they count against the daily quota).

Parameters

item_idstringpathrequired

The inbox item id (from social_inbox.items.list).

label_idsarray<string>bodyrequired

All the item's labels (up to 20; social_inbox.labels.list): they replace the current ones; [] removes them all.

Response

itemobject

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/social-inbox/items/{item_id}/labels" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "label_ids": [
    "LABEL_ID"
  ]
}'

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl -X POST "https://api.mb-suite.com/v1/social-inbox/items/{item_id}/labels" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "label_ids": [
    "LABEL_ID"
  ]
}'