Menu

API reference · Monitors

Templates

monitors · templates · 8 operations

GET/v1/monitors/templates

List monitor templates

monitors.templates.list

ReadIdempotentSince 2026-11-01

Lists the monitor templates this organization can use. A monitor is a one-page dashboard built for ONE platform and shown in that platform's tab of the Monitors page. Sources: the organization's own templates (ORGANIZATION, drafts included), the published templates of its workspace when it is an account (INHERITED) and the published system monitors (SYSTEM). Filter with source, platform (only templates that can be assigned to that platform's tab) and status. Each item has its platform, status, version (as stored; null when it has none), page and widget counts, and who created it (created_by, created_by_name); the description says what a system monitor shows (KPIs, Daily, Monthly…). Use monitors.templates.get for its widgets. Paginated by cursor (own templates first, by manual position).

Scope
monitors:read
Permission
View the module
MCP tool
monitors_templates_listOn the full surface; on the compact one, mb_execute_operation with id: "monitors.templates.list".

Declared cost: up to 801 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

Where from: ORGANIZATION (its own, drafts included), INHERITED (the published ones of its workspace, for an account), SYSTEM (MB Suite's published monitors) or all (default).

Values: all, SYSTEM, ORGANIZATION, INHERITED · Default: "all"

platformenumqueryoptional

Only the templates that can be assigned to this platform's tab.

Values: google_analytics, google_ads, meta_ads, tiktok_ads, tiktok, instagram, facebook_page, youtube, google_search_console, google_business_profile, linkedin_ads, linkedin_page

statusenumqueryoptional

draft or published. Only the organization's own templates have drafts: draft lists only those.

Values: draft, published

Response

dataarray<object>
has_moreboolean
next_cursorstring

Errors

Example

curl "https://api.mb-suite.com/v1/monitors/templates" \
  -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/monitors/templates" \
  -H "Authorization: Bearer $MB_TEST_KEY"
GET/v1/monitors/templates/{template_id}

Get one monitor template

monitors.templates.get

ReadIdempotentSince 2026-11-01

Returns a monitor template with its platform, version (as stored; null when it has none), date range, filters and its page with a summary of each widget (type, title, metrics, dimensions, grid position; no numbers: those load when the monitor is opened in MB Suite). Without source it looks in the organization's own templates, then the workspace's published ones (for an account), then the published system monitors. Not found (monitor_template_not_found) if no reachable template has that id.

Scope
monitors:read
Permission
View the module
MCP tool
monitors_templates_getOn the full surface; on the compact one, mb_execute_operation with id: "monitors.templates.get".

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

Parameters

template_idstringpathrequired

The monitor template id (monitors.templates.list).

sourceenumqueryoptional

Where to look: ORGANIZATION, INHERITED or SYSTEM. Without it, the organization's own, then its workspace's published ones, then the system's.

Values: SYSTEM, ORGANIZATION, INHERITED

Response

idstring

Template id.

sourceenum

SYSTEM, ORGANIZATION or INHERITED (published by the workspace).

Values: SYSTEM, ORGANIZATION, INHERITED

source_org_idstring | null

INHERITED: the workspace it belongs to.

titlestring

Title.

descriptionstring | null

Description.

subtitlestring | null

Subtitle.

statusenum

draft or published (accounts only see and deploy published ones).

Values: draft, published

supported_platformsarray<string>

Platforms it is built for.

data_source_slotsarray<object>

Data slots a dashboard maps to its own sources.

default_data_sourcestring | null

The slot or platform widgets without a source use.

page_countnumber

How many pages.

widget_countnumber

How many widgets.

label_idsarray<string>

Template labels (dashboards.labels.list with of: templates).

positionnumber | null

Manual order in the list.

versionnumber | null

Template version (goes up by one with each update).

created_atnumber | null

Created (epoch ms).

updated_atnumber | null

Last edited (epoch ms).

created_bystring | null

Uid of who created it, or the system label that did.

pagesarray<object>

Pages with a summary of each widget.

date_rangeobject | null

The default period.

compare_date_rangeobject | null

The comparison period, if any.

filtersarray<object>

Global filters.

filter_controlsarray<any>

Filter controls shown to the viewer.

styleobject | null

Cover style.

platformstring | null
created_by_namestring | null

Their name («MB Suite» for the system).

raw_pagesarray<object>

Errors

Example

curl "https://api.mb-suite.com/v1/monitors/templates/{template_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/monitors/templates/{template_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/monitors/templates

Create a monitor template

monitors.templates.create

WriteSince 2026-11-01

Creates a draft monitor template in this organization for one platform (one of the platforms with a monitor tab; the CRM has none), with a title, an optional description and one empty page. Its widgets are designed in MB Suite's monitor editor; publish it with monitors.templates.publish so it can be assigned (monitors.assignments.set) and, for a workspace, used by its accounts. To start from a system monitor use monitors.templates.clone instead. Returns the template id. Requires edit access to Monitors.

Scope
monitors:write
Permission
Edit in the module
MCP tool
monitors_templates_createOn the full surface; on the compact one, mb_execute_operation with id: "monitors.templates.create".

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

Parameters

titlestringbodyrequired

The template title (up to 200 characters).

platformenumbodyrequired

The platform it is built for: the tab it can be assigned to (it cannot change later).

Values: google_analytics, google_ads, meta_ads, tiktok_ads, tiktok, instagram, facebook_page, youtube, google_search_console, google_business_profile, linkedin_ads, linkedin_page

descriptionstringbodyoptional

A description (up to 2000 characters).

Response

template_idstring

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/monitors/templates" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "title": "TITLE",
  "platform": "google_analytics"
}'

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/monitors/templates" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "title": "TITLE",
  "platform": "google_analytics"
}'
PATCH/v1/monitors/templates/{template_id}

Update a monitor template's details

monitors.templates.update

WriteIdempotentSince 2026-11-01

Updates the title, description, subtitle, labels or cover gradient of one of the organization's own monitor templates (the fields go at the top level of the input, next to template_id). label_ids replaces the template's labels and must be ids from monitors.labels.list (label_unknown otherwise). Widgets are designed in MB Suite's monitor editor; the publication status changes with monitors.templates.publish; the platform cannot change. Tabs that show this monitor (here and, for a published workspace template, in its accounts) show the new details. Returns the updated template. Requires edit access to Monitors.

Scope
monitors:write
Permission
Edit in the module
MCP tool
monitors_templates_updateOn the full surface; on the compact one, mb_execute_operation with id: "monitors.templates.update".

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

Parameters

template_idstringpathrequired

The monitor template id (monitors.templates.list).

titlestringbodyoptional

New title (up to 200 characters).

descriptionstringbodyoptional

New description (up to 2000 characters).

subtitlestringbodyoptional

New subtitle (up to 500 characters).

label_idsarray<string>bodyoptional

Replaces the template's labels: ids from monitors.labels.list (label_unknown otherwise; up to 50).

styleobjectbodyoptional

The cover style.

Response

templateobject

Errors

Example

curl -X PATCH "https://api.mb-suite.com/v1/monitors/templates/{template_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 -X PATCH "https://api.mb-suite.com/v1/monitors/templates/{template_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/monitors/templates/{template_id}/publish

Publish a monitor template or move it back to draft

monitors.templates.publish

WriteIdempotentSince 2026-11-01

Sets the publication status of one of the organization's own monitor templates: published (it can be assigned to its platform's tab, and a workspace's published templates are offered to its accounts as INHERITED) or draft (status: draft; tabs that already show it fall back to the monitor picker until it is published again). Idempotent: changed is false when it already had that status. Requires edit access to Monitors.

Scope
monitors:write
Permission
Edit in the module
MCP tool
monitors_templates_publishOn the full surface; on the compact one, mb_execute_operation with id: "monitors.templates.publish".
Events it can emit
monitors.template.published

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

Parameters

template_idstringpathrequired

The monitor template id (monitors.templates.list).

statusenumbodyoptional

published (default: it can be assigned and, for a workspace, its accounts see it) or draft.

Values: published, draft · Default: "published"

Response

template_idstring
statusenum

Values: draft, published

changedboolean

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/monitors/templates/{template_id}/publish" \
  -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/monitors/templates/{template_id}/publish" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/monitors/templates/{template_id}/duplicate

Duplicate a monitor template

monitors.templates.duplicate

WriteSince 2026-11-01

Copies one of the organization's own monitor templates (page, widgets, filters, style, platform) into a new draft titled '<title> (Copia)' (the suffix in the caller's language: (Copia), (Copy) or (Cópia)). Returns the new template id. Requires edit access to Monitors.

Scope
monitors:write
Permission
Edit in the module
MCP tool
monitors_templates_duplicateOn the full surface; on the compact one, mb_execute_operation with id: "monitors.templates.duplicate".

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

Parameters

template_idstringpathrequired

The monitor template id (monitors.templates.list).

Response

template_idstring

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/monitors/templates/{template_id}/duplicate" \
  -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/monitors/templates/{template_id}/duplicate" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/monitors/templates/clone

Copy a system monitor into the organization

monitors.templates.clone

WriteSince 2026-11-01

Copies a published system monitor (source SYSTEM in monitors.templates.list) into the organization's own templates as a draft, so it can be customized and published; title names the copy (default the system monitor's title with the copy suffix in the caller's language, e.g. '<title> (Copia)'), and it goes after the organization's own templates. To just use a system monitor as it is, assign it directly with monitors.assignments.set (source SYSTEM). Returns the new template id. Not found (system_monitor_not_found) if there is no published system monitor with that id. Requires edit access to Monitors.

Scope
monitors:write
Permission
Edit in the module
MCP tool
monitors_templates_cloneOn the full surface; on the compact one, mb_execute_operation with id: "monitors.templates.clone".

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

Parameters

system_template_idstringbodyrequired

The published system monitor to copy (source SYSTEM in monitors.templates.list).

titlestringbodyoptional

The copy's title. Without it, the system monitor's title with the copy suffix in the caller's language: (Copia), (Copy) or (Cópia).

Response

template_idstring

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/monitors/templates/clone" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "system_template_id": "SYSTEM_TEMPLATE_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/monitors/templates/clone" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "system_template_id": "SYSTEM_TEMPLATE_ID"
}'
DELETE/v1/monitors/templates/{template_id}

Delete a monitor template

monitors.templates.delete

IrreversibleSince 2026-11-01

Deletes one of the organization's own monitor templates. It goes to the 30-day trash. Platform tabs that show it (in this organization and, if a workspace published it, in its accounts) keep their assignment but show the monitor picker until it is restored; restoring it brings them back as they were. The dry run says how many of this organization's tabs use it. Outside the screen it requires a dry run and a confirm_token, except a plain REST DELETE with a key allowed to delete. Requires edit access to Monitors.

Instructions for agents

Before confirming, tell the person how many platform tabs show this monitor (the dry run says it) and that restoring it from the trash brings them back.

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
monitors:write and “Allow deletions” (monitors:delete in OAuth)
Permission
Edit in the module
MCP tool
monitors_templates_deleteOn the full surface; on the compact one, mb_execute_operation with id: "monitors.templates.delete".

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

Parameters

template_idstringpathrequired

The monitor template id (monitors.templates.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.

Errors

Example

curl -X DELETE "https://api.mb-suite.com/v1/monitors/templates/{template_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 -X DELETE "https://api.mb-suite.com/v1/monitors/templates/{template_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY"