Lists the organization's pack labels (the ones the pack library of the app uses to group packs), in their order: id, name, color and order. Their ids are what label_ids of seo_planner.packs.create and seo_planner.packs.update take (an id that is not here is ignored there). Labels are created and edited in the app. Requires view access to the SEO Planner.
Scope
seo_planner:read
Permission
View the module
MCP tool
seo_planner_packs_labels_listOn the full surface; on the compact one, mb_execute_operation with id: "seo_planner.packs.labels.list".
Declared cost: up to 200 reads and 0 writes per call (they count against the daily quota).
Parameters
limitintegerqueryoptional
How many items this page brings at most (see the maximum and the default in the schema).
Default: 50
cursorstringqueryoptional
The next_cursor of the previous page, exactly as it came (only for the same list and filters); without it, the first page.
Lists SEO action packs: reusable plans of several actions spread over months (month_offset) that seo_planner.packs.apply turns into planner actions from a base month. source picks where from: all (default) = the organization's own, then its agency workspace's when the organization is an Account (read only), then the published packs of the MB Suite library; or org, parent, system. Each pack has name, description, icon_key, color, label_ids (seo_planner.packs.labels.list), item_count, month_span, source (and source_org_id for a workspace's) and who created it (created_by_id, created_by_name). Its actions are in seo_planner.packs.items.list. Paginated by cursor. Requires view access to the SEO Planner.
Scope
seo_planner:read
Permission
View the module
MCP tool
seo_planner_packs_listOn the full surface; on the compact one, mb_execute_operation with id: "seo_planner.packs.list".
Declared cost: up to 601 reads and 0 writes per call (they count against the daily quota).
Parameters
limitintegerqueryoptional
How many items this page brings at most (see the maximum and the default in the schema).
Default: 50
cursorstringqueryoptional
The next_cursor of the previous page, exactly as it came (only for the same list and filters); without it, the first page.
sourceenumqueryoptional
all (default: the organization's, then its workspace's when it is an Account, then the published ones of the MB Suite library), org, parent or system.
Returns one SEO action pack. Without source it looks in the organization's packs, then its workspace's (for an Account) and then the published packs of the MB Suite library; drafts of the library do not exist for an organization. 404 seo_pack_not_found otherwise. Requires view access to the SEO Planner.
Scope
seo_planner:read
Permission
View the module
MCP tool
seo_planner_packs_getOn the full surface; on the compact one, mb_execute_operation with id: "seo_planner.packs.get".
Declared cost: up to 3 reads and 0 writes per call (they count against the daily quota).
Parameters
pack_idstringpathrequired
The pack id (id of an item of seo_planner.packs.list).
sourceenumqueryoptional
Where to look: org, parent (the workspace of an Account) or system (the MB Suite library). Without it, in that order.
Values: org, parent, system
Response
idstring
namestring
sourceenum
org (the organization's, editable), parent (its agency workspace's, read only) or system (the MB Suite library, read only: copy it with seo_planner.packs.clone_system).
Values: org, parent, system
descriptionstring | null
icon_keystring | null
MDI icon name (mdiMagnify).
colorstring | null
Hex color.
ordernumber
Position in the organization's list.
label_idsarray<string>
Pack label ids (seo_planner.packs.labels.list).
item_countnumber
Actions in the pack (seo_planner.packs.items.list).
month_spannumber
Months it covers when applied (the highest month_offset + 1).
source_org_idstring | null
With source parent: the workspace the pack belongs to.
source_keystring | null
The key a script loaded the pack with (packs loaded in bulk), if any.
Lists the actions of a pack in order: title, subtitle, seo_type, description, month_offset (months after the base month when applied; 0 = the base month), icon, color and sub-actions (titles). Works for the organization's packs, its workspace's and the published library packs (same lookup as seo_planner.packs.get). Requires view access to the SEO Planner.
Scope
seo_planner:read
Permission
View the module
MCP tool
seo_planner_packs_items_listOn the full surface; on the compact one, mb_execute_operation with id: "seo_planner.packs.items.list".
Declared cost: up to 203 reads and 0 writes per call (they count against the daily quota).
Parameters
pack_idstringpathrequired
The pack id (id of an item of seo_planner.packs.list).
limitintegerqueryoptional
How many items this page brings at most (see the maximum and the default in the schema).
Default: 50
cursorstringqueryoptional
The next_cursor of the previous page, exactly as it came (only for the same list and filters); without it, the first page.
sourceenumqueryoptional
Where to look: org, parent (the workspace of an Account) or system (the MB Suite library). Without it, in that order.
Creates an empty SEO action pack at the end of the organization's list, owned by the caller: name, optional description, icon_key (an MDI name like mdiMagnify, the default), color (hex, default #3b82f6) and label_ids (pack labels from seo_planner.packs.labels.list; unknown ids are left out and returned in ignored_label_ids). Add its actions with seo_planner.packs.items.replace. Returns pack_id and the pack. Requires full access to the SEO Planner.
Scope
seo_planner:write
Permission
Edit in the module
MCP tool
seo_planner_packs_createOn the full surface; on the compact one, mb_execute_operation with id: "seo_planner.packs.create".
Declared cost: up to 51 reads and 1 writes per call (they count against the daily quota).
Parameters
namestringbodyrequired
The pack's name (1 to 200 characters).
descriptionstringbodyoptional
What the pack is for.
icon_keystringbodyoptional
MDI icon name, e.g. mdiMagnify (the default).
colorstringbodyoptional
Hex color, default #3b82f6.
label_idsarray<string>bodyoptional
Pack label ids (seo_planner.packs.labels.list), up to 50; ids that do not exist are left out and returned in ignored_label_ids.
Response
pack_idstring
packobject
ignored_label_idsarray<string>
The label_ids given that are not labels of the organization (seo_planner.packs.labels.list): they were left out.
Changes the name, description, icon_key, color or label_ids of one of the organization's packs, inside updates. A pack of the workspace or of the MB Suite library is 409 seo_pack_read_only (details.source parent or system), with the way to go: a library pack is copied with seo_planner.packs.clone_system and the copy is edited; a workspace pack is changed on the workspace. An id that does not exist anywhere is 404 seo_pack_not_found. Its actions change with seo_planner.packs.items.replace. Unknown fields are rejected; unknown label ids are left out and returned in ignored_label_ids. Returns the pack. Requires full access to the SEO Planner.
Scope
seo_planner:write
Permission
Edit in the module
MCP tool
seo_planner_packs_updateOn the full surface; on the compact one, mb_execute_operation with id: "seo_planner.packs.update".
Declared cost: up to 51 reads and 1 writes per call (they count against the daily quota).
Parameters
pack_idstringpathrequired
The id of one of the organization's own packs (a workspace or library pack cannot be edited: copy it first).
updatesobjectbodyrequired
The fields to change (at least one). Its actions change with seo_planner.packs.items.replace.
Response
packobject
ignored_label_idsarray<string>
The label_ids given that are not labels of the organization (seo_planner.packs.labels.list): they were left out.
Deletes one of the organization's packs with all its actions. It goes to the 30-day trash and comes back whole (actions included). Planner actions already created from the pack are not touched. Outside the app it needs a dry run and a confirm_token, except a REST DELETE with a key allowed to delete. Requires full access to the SEO Planner.
With an API key, this DELETE runs directly: the record stays 30 days in the trash and the response carries its trash_item_id. With an OAuth token, and through the MCP, it needs dry_run → confirm_token.
Scope
seo_planner:writeand “Allow deletions” (seo_planner:delete in OAuth)
Permission
Edit in the module
MCP tool
seo_planner_packs_deleteOn the full surface; on the compact one, mb_execute_operation with id: "seo_planner.packs.delete".
Declared cost: up to 1001 reads and 1001 writes per call (they count against the daily quota).
Parameters
pack_idstringpathrequired
The id of one of the organization's own packs (source org in seo_planner.packs.list).
Response
oktrue
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.
Copies one of the organization's packs with all its actions into a new pack named '<name> (Copy)' (the suffix in the caller's language: '(Copia)', '(Copy)' or '(Cópia)'), owned by the caller. Returns the new pack id. Requires full access to the SEO Planner.
Scope
seo_planner:write
Permission
Edit in the module
MCP tool
seo_planner_packs_duplicateOn the full surface; on the compact one, mb_execute_operation with id: "seo_planner.packs.duplicate".
Declared cost: up to 1001 reads and 1002 writes per call (they count against the daily quota).
Parameters
pack_idstringpathrequired
The id of one of the organization's own packs (source org in seo_planner.packs.list).
Copies a published pack of the MB Suite library (an id from seo_planner.packs.list with source system) into the organization, actions included, so it can be edited. Drafts of the library cannot be copied (404 seo_pack_not_found). Returns the new pack id. Requires full access to the SEO Planner.
Scope
seo_planner:write
Permission
Edit in the module
MCP tool
seo_planner_packs_clone_systemOn the full surface; on the compact one, mb_execute_operation with id: "seo_planner.packs.clone_system".
Declared cost: up to 1002 reads and 1002 writes per call (they count against the daily quota).
Parameters
system_pack_idstringpathrequired
The id of a published library pack (an item of seo_planner.packs.list with source system).
curl-X POST "https://api.mb-suite.com/v1/seo-planner/packs/system/{system_pack_id}/clone" \
-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/seo-planner/packs/system/{system_pack_id}/clone" \
-H"Authorization: Bearer $MB_TEST_KEY"
POST/v1/seo-planner/packs/{pack_id}/items/replace
Replace the actions of an SEO action pack
seo_planner.packs.items.replace
WriteSince 2026-11-01
Saves the whole ordered list of actions of one of the organization's packs (up to 100), like the pack editor: each one with title, seo_type, month_offset (0–60 months after the base month), optional subtitle, description, icon and color (default: those of its type), sub_actions (titles) and source_template_id. Actions that carry the item_id of an existing one keep that id; the rest are new; existing ones missing from the list are removed. item_count and month_span are recalculated. Returns the saved list. Requires full access to the SEO Planner.
Scope
seo_planner:write
Permission
Edit in the module
MCP tool
seo_planner_packs_items_replaceOn the full surface; on the compact one, mb_execute_operation with id: "seo_planner.packs.items.replace".
Declared cost: up to 1001 reads and 1101 writes per call (they count against the daily quota).
Parameters
pack_idstringpathrequired
The id of one of the organization's own packs.
itemsarray<object>bodyrequired
The WHOLE list of the pack's actions, in order (up to 100): it replaces the current one.
Creates one SEO Planner action per action of a pack (the organization's, its workspace's or a published library pack; without source, looked up in that order), each in the month base_month_key (YYYY-MM) + its month_offset, pending, with the pack action's title, subtitle, type and sub-actions, and linked to the pack (pack_id, pack_source, pack_item_id). items can leave some out (include: false). The pack is read on the server: nothing of its content comes from the caller. Up to 100 actions. Outside the app it requires a dry run (which lists the actions and their months) and a confirm_token. Requires full access to the SEO Planner.
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
seo_planner:write
Permission
Edit in the module
MCP tool
seo_planner_packs_applyOn the full surface; on the compact one, mb_execute_operation with id: "seo_planner.packs.apply".