Menu

Referência da API · Social Planner

Publicações

social_planner · posts · 13 operações

GET/v1/social-planner/posts

List Social Planner posts (drafts, scheduled, published or failed)

social_planner.posts.list

LeituraIdempotenteDesde 2026-11-01

Lists the posts of the Social Planner calendar ordered by scheduled date (oldest first), paginated by cursor (limit up to 200, default 50). Filter by status (draft, internal_review, client_review, changes_requested, approved, scheduled, publishing, published, partially_published, failed) and by a scheduled-date range: from/to, inclusive, as ms since epoch or as a day YYYY-MM-DD (its start or end in the organization's time zone). platform and label_id are applied reading on until the page is full (up to 400 posts read per call), so a page brings fewer than limit only with has_more true at that limit: keep following next_cursor. Only posts created in MB Suite are listed (they carry a scheduled date); posts synced from the networks are not. Returns each post with its text, media, networks, per-network overrides, labels, status, publish results, approval_history (with by_name) and created_by_name; what the network sync brought (its copy of the text, files and metrics) comes only in social_planner.posts.get, under network. A post left in publishing for more than 15 minutes with all its publish jobs already finished is corrected on read to the status its jobs give (failed, partially_published or published). Requires view access to the Social Planner. With Google Business Profile, 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).

Escopo
social_planner:read
Permissão
Ver o módulo
Tool do MCP
social_planner_posts_listNa superfície completa; na compacta, mb_execute_operation com id: "social_planner.posts.list".

Custo declarado: até 420 leituras e 5 escritas por chamada (contam na cota diária).

Parâmetros

limitintegerqueryopcional

How many items this page brings at most (see the maximum and the default in the schema).

Padrão: 50

cursorstringqueryopcional

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

statusenumqueryopcional

Only posts in this status: draft, internal_review, client_review, changes_requested, approved, scheduled, publishing, published, partially_published or failed.

Valores: draft, internal_review, client_review, changes_requested, approved, scheduled, publishing, published, partially_published, failed

frominteger | stringqueryopcional

Planned date from (inclusive): ms since epoch, or a day YYYY-MM-DD (its start in the organization's time zone).

tointeger | stringqueryopcional

Planned date to (inclusive): ms since epoch, or a day YYYY-MM-DD (its end in the organization's time zone).

platformenumqueryopcional

Only posts that go to this network.

Valores: instagram, facebook, linkedin, linkedin_profile, tiktok, twitter, google_business

label_idstringqueryopcional

Only posts with this Planner label (social_planner.labels.list).

Resposta

dataarray<object>
has_moreboolean
next_cursorstring

Erros

Exemplo

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

Testar com a sua API key de teste

Com uma API key de teste o pedido vai sempre para a sua organização de prática: dados de exemplo que você pode reiniciar.

curl "https://api.mb-suite.com/v1/social-planner/posts" \
  -H "Authorization: Bearer $MB_TEST_KEY"
GET/v1/social-planner/posts/{post_id}

Get one Social Planner post

social_planner.posts.get

LeituraIdempotenteDesde 2026-11-01

Returns one Social Planner post: text (master_content), media, networks, format, per-network overrides (platform_overrides, keyed by network), labels, LinkedIn mentions, LinkedIn settings (linkedin_settings.document_title: the title shown above a document or a carousel; absent, the default), status, scheduled date, approval_history (each approval step: action submitted, approved, rejected or changes_requested, by, at and comment) and, once it went out, the published networks, the failed networks with publish_failure (the classified reason, by_platform, attempts, and raw_error: the network's own error text with credentials and URLs removed, said by raw_error_platform) and the permalink; created_by_name and by_name in each approval step; and network: what the network sync brought (its id on the network, the account, its copy of the text with LinkedIn's markup turned into plain text, its media type (on LinkedIn: image, video, carousel for several images in a grid, document or text), a LinkedIn document's title (document_title), its files, preferring MB Suite's archived copies because the networks' CDN links expire, the thumbnail and the metrics). A post left in publishing for more than 15 minutes with all its publish jobs already finished is corrected on read to the status its jobs give. Per-network job detail (status, attempts, error, and a Facebook video's cover_result) is in social_planner.posts.jobs.list. Not found if the id does not exist in this organization. Requires view access. With Google Business Profile, 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).

Escopo
social_planner:read
Permissão
Ver o módulo
Tool do MCP
social_planner_posts_getNa superfície completa; na compacta, mb_execute_operation com id: "social_planner.posts.get".

Custo declarado: até 8 leituras e 1 escritas por chamada (contam na cota diária).

Parâmetros

post_idstringrotaobrigatório

The post id (from social_planner.posts.list).

Resposta

idstring

The post id.

statusstring

draft, internal_review, client_review, changes_requested, approved, scheduled, publishing, published, partially_published or failed.

platformsarray<string>

The networks it goes to.

originstring | null

mb_suite (created in MB Suite) or platform (synced from a network; read-only).

formatstring | null

feed, reel, story, carousel, text or document.

master_contentstring | null

Its text.

master_mediaarray<object> | null

Its media, in order.

platform_overridesobject | null

Per network: its own text, which media and its settings (keyed by network id).

scheduled_datenumber | null

Planned date and time (epoch ms).

timezonestring | null

IANA time zone of the planned time.

label_idsarray<string> | null

Its Planner labels (social_planner.labels.list).

tagsarray<string> | null

Its free tags.

linkedin_mentionsarray<object> | null

LinkedIn mentions linked in the text.

linkedin_settingsobject | null

LinkedIn settings (page and profile).

cover_imageobject | null

A video's cover image.

cover_timestamp_msnumber | null

The video frame used as cover (ms).

publish_modestring | null

manual (only planned), now or scheduled: informative, set by publishing.

published_atnumber | null

When it first went out (epoch ms).

published_platformsarray<string> | null

Networks where it went out.

failed_platformsarray<string> | null

Networks where it failed.

story_sequenceobject | null

A story with several frames: per network, how many of how many went out.

publish_failureobject | null

Why it failed (all or partly).

approval_historyarray<object> | null

Each approval step, oldest first (the first one is created).

external_urlstring | null

Link to the published post (the first network).

networkobject | null

social_planner.posts.get only: what the network sync brought (its text, files, thumbnail, metrics and account). Absent before it went out.

art_sourcestring | null

manual_design: born from a content plan without art (a person uploads it).

series_idstring | null

The content plan or series it belongs to.

comment_countnumber | null

Internal comments (social_planner.comments.list).

created_bystring | null

Who created it (a user id).

created_by_namestring | null

Their name, when they are a member of the organization or its agency.

created_atnumber | null

When it was created (epoch ms).

updated_atnumber | null

Last change (epoch ms).

Erros

Exemplo

curl "https://api.mb-suite.com/v1/social-planner/posts/{post_id}" \
  -H "Authorization: Bearer $MB_API_KEY"

Testar com a sua API key de teste

Com uma API key de teste o pedido vai sempre para a sua organização de prática: dados de exemplo que você pode reiniciar.

curl "https://api.mb-suite.com/v1/social-planner/posts/{post_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY"
GET/v1/social-planner/posts/{post_id}/audit

List the audit trail of a planner post

social_planner.posts.audit.list

LeituraIdempotenteDesde 2026-11-01

Returns what happened to one Social Planner post, newest first (up to the latest 100 audit entries of the post): created (also from Content Studio, or as a copy: metadata.duplicated_from), updated, status changes with their approval step (metadata.status, approval_action), the client's approval from the portal (metadata.status and comment), scheduled, rescheduled (metadata.rescheduled_from and scheduled_at), published now, schedule cancelled, retried, published on a network (metadata.platform, external_post_id, post_status) and failed on a network (metadata.platform, reason: the same classification as publish_failure, systemic), and deleted. Each entry: id, action (content.post_* or content.content_studio_pushed_to_planner), actor_name and actor_uid (never an email; system for MB Suite's publisher), 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 (job ids are those of social_planner.posts.jobs.list). Comments on the post are not here (social_planner.comments.list). Calls no network. Not found if the post does not exist in this organization. Requires view access to the Social Planner.

Escopo
social_planner:read
Permissão
Ver o módulo
Tool do MCP
social_planner_posts_audit_listNa superfície completa; na compacta, mb_execute_operation com id: "social_planner.posts.audit.list".

Custo declarado: até 22 leituras e 0 escritas por chamada (contam na cota diária).

Parâmetros

post_idstringrotaobrigatório

The post id (from social_planner.posts.list).

Resposta

dataarray<object>

Erros

Exemplo

curl "https://api.mb-suite.com/v1/social-planner/posts/{post_id}/audit" \
  -H "Authorization: Bearer $MB_API_KEY"

Testar com a sua API key de teste

Com uma API key de teste o pedido vai sempre para a sua organização de prática: dados de exemplo que você pode reiniciar.

curl "https://api.mb-suite.com/v1/social-planner/posts/{post_id}/audit" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/social-planner/posts

Create a post

social_planner.posts.create

EscritaDesde 2026-11-01

Creates a Social Planner post for one or more networks (instagram, facebook, linkedin, linkedin_profile, tiktok, twitter, google_business) with its text, format (feed, reel, story, carousel, text, document), scheduled date (ms epoch), optional per-network text and settings, labels and media. It does NOT publish or schedule anything: it is a planning post (draft by default; with an API key only workflow statuses: draft, internal_review, client_review, changes_requested, approved). To publish use social_planner.posts.schedule or social_planner.posts.publish_now. Media must be files already in this organization's Media Library: each master_media url is /api/v1/storage/resolve?key=<the file's storage_path, URL-encoded>, as a post's master_media brings it; the format must be available on every network (400 format_not_available); label_ids must exist (400 label_not_found with details.missing). On LinkedIn (a page or a personal profile): document is LinkedIn only and takes a single PDF, PowerPoint or Word file of the Media Library (type document, up to 100 MB and 300 pages; LinkedIn turns PowerPoint and Word into pages); carousel goes out as a swipeable document that MB Suite builds from its 2 to 20 images (one page per image, all with the first image's proportions clamped between 4:5 and 1.91:1, the images cropped to the center); feed with several images goes out as a grid. Both document and carousel carry a title above the document: linkedin_settings.document_title (up to 100 characters), and without it the default (a document's file name, a carousel's first line of text); a carousel with no text and no title can't be scheduled (linkedin_document_title_missing). Returns the new post. Requires full access to the Social Planner. 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).

Escopo
social_planner:write
Permissão
Editar no módulo
Tool do MCP
social_planner_posts_createNa superfície completa; na compacta, mb_execute_operation com id: "social_planner.posts.create".
Eventos que pode emitir
social_planner.post.created

Custo declarado: até 51 leituras e 1 escritas por chamada (contam na cota diária).

Parâmetros

platformsarray<enum>corpoobrigatório

Where it goes: instagram, facebook, linkedin, linkedin_profile, tiktok, twitter, google_business (at least one).

Valores: instagram, facebook, linkedin, linkedin_profile, tiktok, twitter, google_business

scheduled_dateintegercorpoobrigatório

Planned date and time (epoch ms). It does not schedule anything by itself: social_planner.posts.schedule does.

master_contentstringcorpoopcional

The post's text (up to 10,000 characters); per-network texts go in platform_overrides.

Padrão: ""

formatenumcorpoopcional

feed, reel, story, carousel, text or document (it must be available on every network: TikTok only reel; LinkedIn and LinkedIn profiles feed, carousel or document; Google Business only feed). On LinkedIn a carousel goes out as a swipeable document built from its 2 to 20 images, and feed with several images as a grid; document is one PDF, PowerPoint or Word file (up to 100 MB and 300 pages), LinkedIn only.

Valores: feed, reel, story, carousel, text, document · Padrão: "feed"

statusenumcorpoopcional

The starting status: draft (the default), internal_review, client_review, changes_requested or approved. The publishing statuses (scheduled, publishing, published, partially_published, failed) are set by social_planner.posts.schedule and publish_now: with an API key they are 400 status_not_allowed.

Valores: draft, internal_review, client_review, changes_requested, approved, scheduled, publishing, published, partially_published, failed · Padrão: "draft"

timezonestringcorpoopcional

IANA time zone of the planned time (default: the organization's).

master_mediaarray<object>corpoopcional

The post's media (up to 20), in order.

Padrão: []

platform_overridesobjectcorpoopcional

Per network (keyed by network id): its own text, which media and its settings.

label_idsarray<string>corpoopcional

Planner labels (social_planner.labels.list), up to 50; ids that do not exist are 400 label_not_found.

Padrão: []

tagsarray<string>corpoopcional

Free tags (up to 30).

Padrão: []

linkedin_mentionsarray<object>corpoopcional

LinkedIn mentions in the text (up to 20): @name in master_content is linked to its URN.

linkedin_settingsobject | nullcorpoopcional

LinkedIn settings for the page and the profile (null removes them).

cover_imageobject | nullcorpoopcional

A video's cover image (null removes it).

cover_timestamp_msnumber | nullcorpoopcional

The video frame (ms) used as cover where there is no image (null removes it).

publish_modeenumcorpoopcional

How it is meant to go out, informative only (the default is manual: just planned): it does not publish; publishing is social_planner.posts.schedule or posts.publish_now, which set it.

Valores: manual, now, scheduled

Resposta

post_idstring
postobject

Erros

Exemplo

curl -X POST "https://api.mb-suite.com/v1/social-planner/posts" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "platforms": [
    "instagram"
  ],
  "scheduled_date": 0
}'

Testar com a sua API key de teste

Com uma API key de teste o pedido vai sempre para a sua organização de prática: dados de exemplo que você pode reiniciar.

curl -X POST "https://api.mb-suite.com/v1/social-planner/posts" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "platforms": [
    "instagram"
  ],
  "scheduled_date": 0
}'
PATCH/v1/social-planner/posts/{post_id}

Update a post: content, labels, status or approval step

social_planner.posts.update

EscritaIdempotenteDesde 2026-11-01

Updates one or more fields of a planner post: text, networks, format (feed, reel, story, carousel, text or document; document is LinkedIn only), workflow status, scheduled date, timezone, media, cover, per-network overrides, labels, tags, LinkedIn mentions or LinkedIn settings (linkedin_settings.document_title, the title above a LinkedIn document or carousel; linkedin_settings: null goes back to the default title). Only what comes in updates changes. With an API key: only workflow statuses (draft, internal_review, client_review, changes_requested, approved); a scheduled, publishing, published or partially published post is locked (409 post_locked: cancel the schedule first with social_planner.posts.cancel_schedule, or duplicate it; to only move its time use social_planner.posts.reschedule); posts synced from a network are read-only. In the planner screen a queued post can be edited, in one step with its queued publish jobs: taking a network (or a Google Business location) off it cancels that network's job, so it is not published, and changing what is published (text, media, format, per-network overrides, mentions, cover, the LinkedIn document title) updates the content frozen in the jobs that have not started; if that publication already started, 409 publish_in_progress and nothing changes. A post from a content plan without art can't move to client_review, approved, scheduled or published until it has media (409 art_pending). To approve or send for approval, set updates.status (client_review, approved or changes_requested) and, optionally, approval_comment (up to 1,000 characters) at the top level of the input, next to updates (inside updates it is 400 unknown_field): it records the approval step in the post's approval_history in the same call (client_review as submitted, approved as approved, changes_requested as changes_requested, with who and when); without one of those statuses in updates it is 400 approval_comment_needs_step (a plain note goes in social_planner.comments.create). Labels added must exist (400 label_not_found). Returns the updated post. Requires full access. With Google Business Profile, 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).

Escopo
social_planner:write
Permissão
Editar no módulo
Tool do MCP
social_planner_posts_updateNa superfície completa; na compacta, mb_execute_operation com id: "social_planner.posts.update".

Custo declarado: até 66 leituras e 11 escritas por chamada (contam na cota diária).

Parâmetros

post_idstringrotaobrigatório

The post id (from social_planner.posts.list).

updatesobjectcorpoobrigatório

What changes (only what comes is written). approval_comment does not go here: it goes at the top level, next to updates.

approval_commentstringcorpoopcional

A comment for the approval step, at the top level next to updates (not inside it), together with updates.status client_review (recorded as submitted), approved or changes_requested: it stays in approval_history with who and when.

Resposta

postobject
changedboolean

Erros

Exemplo

curl -X PATCH "https://api.mb-suite.com/v1/social-planner/posts/{post_id}" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "updates": {}
}'

Testar com a sua API key de teste

Com uma API key de teste o pedido vai sempre para a sua organização de prática: dados de exemplo que você pode reiniciar.

curl -X PATCH "https://api.mb-suite.com/v1/social-planner/posts/{post_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "updates": {}
}'
DELETE/v1/social-planner/posts/{post_id}

Delete a post

social_planner.posts.delete

IrreversívelDesde 2026-11-01

Deletes a post from the Social Planner. Its queued publish jobs are cancelled in the same step, so nothing more goes out; if publishing already started on some network (MB Suite is publishing it at this moment, a retry is waiting or a story sequence is halfway), 409 publish_in_progress and nothing is deleted. What was already published stays on the networks (deleting in MB Suite does not delete it there). The post goes to the 30-day trash (owners and admins restore it); its comments are kept and come back with it. A post restored after being scheduled comes back as approved: schedule it again. The dry run names the post, counts the queued jobs that would be cancelled and warns when publishing already started (the deletion would be refused) or when something already went out. Requires full access.

Com uma API key, este DELETE roda direto: o registro fica 30 dias na lixeira e a resposta traz o seu trash_item_id. Com um token OAuth, e pelo MCP, pede dry_run → confirm_token.

Escopo
social_planner:write e «Permitir exclusões» (social_planner:delete no OAuth)
Permissão
Editar no módulo
Tool do MCP
social_planner_posts_deleteNa superfície completa; na compacta, mb_execute_operation com id: "social_planner.posts.delete".

Custo declarado: até 12 leituras e 11 escritas por chamada (contam na cota diária).

Parâmetros

post_idstringrotaobrigatório

The post id (from social_planner.posts.list).

Resposta

oktrue
cancelled_jobsnumber
trash_item_idstring

The trash item this deletion left: the item_id of platform.trash.restore (POST /trash/{item_id}/restore). Missing if nothing went to the trash.

trash_item_idsarray<string>

Only when the deletion left more than one copy: all of them, the first being trash_item_id.

trash_expires_atnumber

When the copy leaves the trash for good (epoch ms): 30 days after the deletion.

Erros

Exemplo

curl -X DELETE "https://api.mb-suite.com/v1/social-planner/posts/{post_id}" \
  -H "Authorization: Bearer $MB_API_KEY"

Testar com a sua API key de teste

Com uma API key de teste o pedido vai sempre para a sua organização de prática: dados de exemplo que você pode reiniciar.

curl -X DELETE "https://api.mb-suite.com/v1/social-planner/posts/{post_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/social-planner/posts/{post_id}/duplicate

Duplicate a post

social_planner.posts.duplicate

EscritaDesde 2026-11-01

Creates a new draft copy of a post created in MB Suite: same text, media, networks, format, per-network overrides, labels, tags, mentions, LinkedIn settings (the document title) and cover, with no publish state and outside any content series. Use it to publish again something that already went out (a published or partially published post can't be republished on the networks where it already is). Optional scheduled_date for the copy (default: the original's). Labels that no longer exist are not copied. Posts synced from a network can't be duplicated. Returns the new post. Requires full 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 fields are left out of the response (the permissions guide lists what each platform allows).

Escopo
social_planner:write
Permissão
Editar no módulo
Tool do MCP
social_planner_posts_duplicateNa superfície completa; na compacta, mb_execute_operation com id: "social_planner.posts.duplicate".
Eventos que pode emitir
social_planner.post.created

Custo declarado: até 52 leituras e 1 escritas por chamada (contam na cota diária).

Parâmetros

post_idstringrotaobrigatório

The post id (from social_planner.posts.list).

scheduled_dateintegercorpoopcional

Planned date of the copy (epoch ms). Default: the original's.

Resposta

post_idstring
postobject

Erros

Exemplo

curl -X POST "https://api.mb-suite.com/v1/social-planner/posts/{post_id}/duplicate" \
  -H "Authorization: Bearer $MB_API_KEY"

Testar com a sua API key de teste

Com uma API key de teste o pedido vai sempre para a sua organização de prática: dados de exemplo que você pode reiniciar.

curl -X POST "https://api.mb-suite.com/v1/social-planner/posts/{post_id}/duplicate" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/social-planner/posts/{post_id}/schedule

Schedule a post to be published

social_planner.posts.schedule

EscritaDesde 2026-11-01

Queues a post to be PUBLISHED on its networks at a set time: one publish job per network (per location for Google Business Profile), and the post moves to scheduled. At that time MB Suite posts it on the client's real accounts; the result arrives as the webhook events social_planner.post.published / partially_published / failed. scheduled_at (ms epoch, in the future) defaults to the post's scheduled date and, when given, becomes it, written together with the jobs: if the call fails, nothing changes (neither the date nor any job). The post is validated like the planner does it (networks connected and authorized, content and media valid for each network and format, future date, art loaded for content-plan posts, TikTok and Google settings; on LinkedIn, a document post with exactly one PDF, PowerPoint or Word file, of up to 100 MB and 300 pages and not password-protected as far as its master_media says (size, page_count, document_flags; what it does not say, LinkedIn checks when it processes the file), a carousel of at least 2 images, and a title for a document or a carousel); otherwise 400 post_not_ready with details.issues. On LinkedIn a carousel goes out as a swipeable document that MB Suite builds from its images when it publishes, and feed with several images as a grid. Scheduling a post that already has queued jobs replaces them in the same step: the queued jobs that have not started are cancelled and new ones are created with the post's current content and the new time (to only move the time and keep what is frozen in the jobs, use social_planner.posts.reschedule); if publishing already started on some network, 409 publish_in_progress and nothing changes. A network where the post already went out is skipped; 409 already_published if it went out on all of them. Outside the app it runs in two steps (it leaves the post set to publish on the networks): first the dry run, which returns the confirm_token to schedule it with; with dry_run=true nothing is written or queued (not the new date, not the status, not a job): it runs the same validation and job plan against the post's current jobs and fails with the same errors, or returns a Preview whose counts say jobs, platforms, skipped and replaced (queued jobs that would be cancelled and created again), whose items are the publish jobs (one per network, network:location for Google Business) and whose warnings explain each skipped network and the replacement, plus scheduled_at, timezone, jobs (per job: platform, account_id, location_id for Google Business, scheduled_at and content_snapshot: the text, media_urls, media_type (image, video, carousel, story or document), params, cover, mention_count and, for a LinkedIn document or carousel, document_title, that would be frozen in the job, the same shape social_planner.posts.jobs.list returns) and skipped (platform, reason, location_id). Like the real call, the dry run reads each network's connection (it may renew an expiring TikTok token). Requires full access to the Social Planner. 409 post_changed: the post changed while the call ran (an edit from another tab or person); nothing was written, send the call again. With Google Business Profile, 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).

Pede confirmação: primeiro dry_run: true (prévia e confirm_token, válido por 10 minutos e por uma única execução), depois o mesmo corpo com confirm_token. Em algumas poucas, só com certos dados: a descrição diz quando. Por que e como: Prévia e confirmação.

Escopo
social_planner:write
Permissão
Editar no módulo
Tool do MCP
social_planner_posts_scheduleNa superfície completa; na compacta, mb_execute_operation com id: "social_planner.posts.schedule".
Eventos que pode emitir
social_planner.post.scheduled

Custo declarado: até 14 leituras e 21 escritas por chamada (contam na cota diária). Usa uma plataforma externa (meta): conta na cota de operações externas.

Parâmetros

post_idstringrotaobrigatório

The post id (from social_planner.posts.list).

scheduled_atintegercorpoopcional

When to publish (epoch ms, in the future); it also becomes the post's planned date. Default: the post's planned date.

Resposta

post_idstring
job_idsarray<string>
scheduled_atnumber
platformsarray<string>

Erros

Exemplo

curl -X POST "https://api.mb-suite.com/v1/social-planner/posts/{post_id}/schedule" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "dry_run": true
}'

Testar com a sua API key de teste

Com uma API key de teste o pedido vai sempre para a sua organização de prática: dados de exemplo que você pode reiniciar. Na prática esta operação não é simulada (usa outra plataforma): responde 409 sandbox_external_unavailable.

POST/v1/social-planner/posts/{post_id}/publish

Publish a post now

social_planner.posts.publish_now

EscritaDesde 2026-11-01

PUBLISHES the post right now on every network it targets, on the client's real accounts: one publish job per network, run during the call (up to about 60 seconds). On a scheduled post, the jobs it had queued for later are cancelled in the same step that creates the new ones (with the post's current content) and its scheduled date becomes now, so nothing goes out twice; if one of those queued jobs already started (MB Suite is publishing it at this moment), 409 publish_in_progress and nothing changes. Videos and LinkedIn documents the network is still processing finish in the background (processing: true) and the final result arrives as social_planner.post.published / partially_published / failed. Validated like social_planner.posts.schedule (400 post_not_ready with details.issues), and nothing is published twice on the same network (409 already_published). This can't be undone: what goes out stays on the networks. Requires full access to the Social Planner. 409 post_changed: the post changed while the call ran (an edit from another tab or person); nothing was written, send the call again. With Google Business Profile, 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).

Pede confirmação: primeiro dry_run: true (prévia e confirm_token, válido por 10 minutos e por uma única execução), depois o mesmo corpo com confirm_token. Em algumas poucas, só com certos dados: a descrição diz quando. Por que e como: Prévia e confirmação.

Escopo
social_planner:write
Permissão
Editar no módulo
Tool do MCP
social_planner_posts_publish_nowNa superfície completa; na compacta, mb_execute_operation com id: "social_planner.posts.publish_now".

Custo declarado: até 41 leituras e 40 escritas por chamada (contam na cota diária). Usa uma plataforma externa (meta): conta na cota de operações externas.

Parâmetros

post_idstringrotaobrigatório

The post id (from social_planner.posts.list).

Resposta

post_idstring
job_idsarray<string>
processingboolean

Erros

Exemplo

curl -X POST "https://api.mb-suite.com/v1/social-planner/posts/{post_id}/publish" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "dry_run": true
}'

Testar com a sua API key de teste

Com uma API key de teste o pedido vai sempre para a sua organização de prática: dados de exemplo que você pode reiniciar. Na prática esta operação não é simulada (usa outra plataforma): responde 409 sandbox_external_unavailable.

POST/v1/social-planner/posts/{post_id}/cancel-schedule

Cancel the scheduled publication of a post

social_planner.posts.cancel_schedule

EscritaIdempotenteDesde 2026-11-01

Cancels the publish jobs of a post that have not started yet, so nothing more is published, in one step together with the post's status. If publishing already started on some network (MB Suite is publishing it at this moment, a retry is waiting or a story sequence is halfway), 409 publish_in_progress and nothing is cancelled: what is under way finishes and its result arrives as social_planner.post.published / partially_published / failed (partial_stories is kept for compatibility and is no longer returned). With an API key the post goes back to status (a workflow status, default approved) so it can be edited and scheduled again; a published or partially published post does not take a status (409 post_locked). Idempotent: with nothing queued it cancels 0. Requires full access.

Escopo
social_planner:write
Permissão
Editar no módulo
Tool do MCP
social_planner_posts_cancel_scheduleNa superfície completa; na compacta, mb_execute_operation com id: "social_planner.posts.cancel_schedule".

Custo declarado: até 12 leituras e 11 escritas por chamada (contam na cota diária).

Parâmetros

post_idstringrotaobrigatório

The post id (from social_planner.posts.list).

statusenumcorpoopcional

The workflow status the post goes back to: draft, internal_review, client_review, changes_requested or approved (the default).

Valores: draft, internal_review, client_review, changes_requested, approved

Resposta

cancellednumber
already_terminalnumber
statusstring
partial_storiesarray<object>

Erros

Exemplo

curl -X POST "https://api.mb-suite.com/v1/social-planner/posts/{post_id}/cancel-schedule" \
  -H "Authorization: Bearer $MB_API_KEY"

Testar com a sua API key de teste

Com uma API key de teste o pedido vai sempre para a sua organização de prática: dados de exemplo que você pode reiniciar.

curl -X POST "https://api.mb-suite.com/v1/social-planner/posts/{post_id}/cancel-schedule" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/social-planner/posts/{post_id}/retry

Retry publishing on the networks that failed

social_planner.posts.retry

EscritaDesde 2026-11-01

PUBLISHES again, right now, on the networks where the post failed (failed or partially_published posts): it resets the last failed job of each network the post still targets and runs it. Networks where it already went out are not touched. Returns ok (all succeeded), processing (some network is still finishing in the background) and the result per network. 409 nothing_to_retry if no network failed. Requires full access. With Google Business Profile, 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).

Pede confirmação: primeiro dry_run: true (prévia e confirm_token, válido por 10 minutos e por uma única execução), depois o mesmo corpo com confirm_token. Em algumas poucas, só com certos dados: a descrição diz quando. Por que e como: Prévia e confirmação.

Escopo
social_planner:write
Permissão
Editar no módulo
Tool do MCP
social_planner_posts_retryNa superfície completa; na compacta, mb_execute_operation com id: "social_planner.posts.retry".

Custo declarado: até 22 leituras e 12 escritas por chamada (contam na cota diária). Usa uma plataforma externa (meta): conta na cota de operações externas.

Parâmetros

post_idstringrotaobrigatório

The post id (from social_planner.posts.list).

Resposta

okboolean
processingboolean
resultsarray<object>
failed_platformsarray<string>

Erros

Exemplo

curl -X POST "https://api.mb-suite.com/v1/social-planner/posts/{post_id}/retry" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "dry_run": true
}'

Testar com a sua API key de teste

Com uma API key de teste o pedido vai sempre para a sua organização de prática: dados de exemplo que você pode reiniciar. Na prática esta operação não é simulada (usa outra plataforma): responde 409 sandbox_external_unavailable.

POST/v1/social-planner/posts/{post_id}/reschedule

Move a scheduled post to another time

social_planner.posts.reschedule

EscritaIdempotenteDesde 2026-11-01

Changes the time a SCHEDULED post goes out, in one step: every queued publish job of the post takes the new scheduled_at (ms epoch, in the future) and it becomes the post's scheduled date. Nothing is cancelled or recreated, so the content frozen in the jobs stays the same (text, media and network settings as they were scheduled), and nothing is published by this call. To also take the post's current content, schedule it again with social_planner.posts.schedule, which replaces the queued jobs in one step. Refused with 409 post_not_scheduled when the post is not scheduled or has no queued job, 409 publish_in_progress when publishing already started on some network (a retry, a video still processing, a story sequence halfway), 409 publish_imminent when the current time is less than 2 minutes away or already due (MB Suite may be publishing it right now), and 400 date_in_past. Asking for the time it already has changes nothing (changed false). Fires social_planner.post.scheduled with the new time. Returns the new and previous time, the moved job ids and their networks. Requires full access to the Social Planner. With Google Business Profile, 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).

Escopo
social_planner:write
Permissão
Editar no módulo
Tool do MCP
social_planner_posts_rescheduleNa superfície completa; na compacta, mb_execute_operation com id: "social_planner.posts.reschedule".
Eventos que pode emitir
social_planner.post.scheduled

Custo declarado: até 12 leituras e 11 escritas por chamada (contam na cota diária). Usa uma plataforma externa (meta): conta na cota de operações externas.

Parâmetros

post_idstringrotaobrigatório

The post id (from social_planner.posts.list).

scheduled_atintegercorpoobrigatório

The new time (epoch ms, in the future); it also becomes the post's planned date.

Resposta

post_idstring
scheduled_atnumber
previous_scheduled_atnumber
job_idsarray<string>
platformsarray<string>
changedboolean

Erros

Exemplo

curl -X POST "https://api.mb-suite.com/v1/social-planner/posts/{post_id}/reschedule" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "scheduled_at": 0
}'

Testar com a sua API key de teste

Com uma API key de teste o pedido vai sempre para a sua organização de prática: dados de exemplo que você pode reiniciar. Na prática esta operação não é simulada (usa outra plataforma): responde 409 sandbox_external_unavailable.

GET/v1/social-planner/posts/{post_id}/jobs

List the publish jobs of a post

social_planner.posts.jobs.list

LeituraIdempotenteDesde 2026-11-01

Lists the publish jobs of a Social Planner post, newest first: one per network (one per location for Google Business Profile) each time the post was scheduled or published, so a rescheduled or retried post has older jobs too; latest marks the one that counts for each network and account (latest_only=true returns only those). Each job has its platform, account_id (and location_id for Google Business), status (pending, processing, published, failed, cancelled), publish_mode, scheduled_at, attempts and max_attempts, next_retry_at when a retry is waiting, deferred when a LinkedIn video or document (also a carousel, which goes out as a document MB Suite builds from its images) did not fit in the time of one run and went back to the queue without spending an attempt, the network's external_post_id and external_url once published, the network's error text (credentials and URLs removed), error_code, provider_code and provider_subcode, failure_reason (the same classification as the failure notice: credentials_expired, permissions_missing, account_restricted, media_invalid, content_invalid, rate_limited, platform_error, polling_timeout…), story_progress for a story with several frames, cover_result for a Facebook video with a cover image (the cover is applied in a separate step once Facebook finishes processing the video: status pending, applied or failed, attempts, applied_at and confirmed_at, and when it did not work error_code, error and error_from_provider, which says whether error is Facebook's own text or MB Suite's reason; null on other jobs and on Facebook jobs published before 2026-10-20, whose cover image was never applied), and content_snapshot: the text, media_urls, media_type (image, video, carousel, story or document), params, cover, mention_count and, for a LinkedIn document or carousel, document_title (the title shown above the document), frozen when the job was created (later edits of the post do not change it). It calls no network. Not found if the post does not exist in this organization. Requires view access to the Social Planner. With Google Business Profile, 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).

Escopo
social_planner:read
Permissão
Ver o módulo
Tool do MCP
social_planner_posts_jobs_listNa superfície completa; na compacta, mb_execute_operation com id: "social_planner.posts.jobs.list".

Custo declarado: até 202 leituras e 0 escritas por chamada (contam na cota diária).

Parâmetros

post_idstringrotaobrigatório

The post id (from social_planner.posts.list).

limitintegerqueryopcional

How many items this page brings at most (see the maximum and the default in the schema).

Padrão: 50

cursorstringqueryopcional

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

latest_onlybooleanqueryopcional

Only the latest job of each network and account (the ones that decide the post's status and what a retry retries). Default false: every job.

Padrão: false

Resposta

dataarray<object>
has_moreboolean
next_cursorstring

Erros

Exemplo

curl "https://api.mb-suite.com/v1/social-planner/posts/{post_id}/jobs" \
  -H "Authorization: Bearer $MB_API_KEY"

Testar com a sua API key de teste

Com uma API key de teste o pedido vai sempre para a sua organização de prática: dados de exemplo que você pode reiniciar.

curl "https://api.mb-suite.com/v1/social-planner/posts/{post_id}/jobs" \
  -H "Authorization: Bearer $MB_TEST_KEY"