Menú

Referencia de la API · Dashboards

Dashboards

dashboards · dashboards · 8 operaciones

GET/v1/dashboards

List dashboards

dashboards.dashboards.list

LecturaIdempotenteDesde 2026-11-01

Lists the dashboards of the organization, most recently updated first, paginated by cursor (limit 50 by default, up to 200). Each item has its title, description, kind (linked = created from a template and rendered from it; standalone = legacy, stores its own widgets), the template reference, platforms, labels (dashboards.labels.list), the featured flag, its manual position and who created it (created_by with created_by_name). Widget data is not included. Use dashboards.dashboards.get for the pages and widgets of one dashboard.

Alcance
dashboards:read
Permiso
Ver el módulo
Tool del MCP
dashboards_dashboards_listEn la superficie completa; en la compacta, mb_execute_operation con id: "dashboards.dashboards.list".

Costo declarado: hasta 202 lecturas y 0 escrituras por llamada (cuentan en el cupo diario).

Parámetros

limitintegerqueryopcional

How many dashboards per page (default 50, at most 200).

Por defecto: 50

cursorstringqueryopcional

The next_cursor of the previous page, to get the next one; omit it for the first page.

Respuesta

dataarray<object>
has_moreboolean
next_cursorstring

Errores

Ejemplo

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

Probar con tu API key de prueba

Con una API key de prueba el pedido va siempre a tu organización de práctica: datos de ejemplo que puedes reiniciar.

curl "https://api.mb-suite.com/v1/dashboards" \
  -H "Authorization: Bearer $MB_TEST_KEY"
GET/v1/dashboards/{dashboard_id}

Get one dashboard with its pages and widgets

dashboards.dashboards.get

LecturaIdempotenteDesde 2026-11-01

Returns a dashboard with its data source mapping (template slot id → data source id), the template's slots, date range, filters and its pages with a summary of each widget: type, title, effective data source, platform, metrics, dimensions and layout (x, y, w, h as saved: system templates store x as an order and the screen arranges the widgets, so two widgets can share a row position). For a linked dashboard the pages come from its template; template_available is false when that template no longer exists. It does not return widget data (numbers come from the live platforms and are read in MB Suite). Not found if the id does not exist in this organization.

Alcance
dashboards:read
Permiso
Ver el módulo
Tool del MCP
dashboards_dashboards_getEn la superficie completa; en la compacta, mb_execute_operation con id: "dashboards.dashboards.get".

Costo declarado: hasta 2 lecturas y 0 escrituras por llamada (cuentan en el cupo diario).

Parámetros

dashboard_idstringrutarequerido

The dashboard id (dashboards.dashboards.list).

Respuesta

idstring

Dashboard id.

titlestring

Title.

descriptionstring | null

Description.

kindenum

linked: created from a template and rendered from it; standalone: legacy, stores its own widgets.

Valores: linked, standalone

template_refobject | null

The template a linked dashboard renders.

platformsarray<string>

The platforms it shows.

label_idsarray<string>

Dashboard labels (dashboards.labels.list).

is_featuredboolean

Featured in the list.

positionnumber | null

Manual order in the list (dashboards.dashboards.reorder); null if never ordered.

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.

data_source_mappingobject

Template slot id → data source id (dashboards.data_sources.list).

data_source_slotsarray<object>

The template's data slots: the keys data_source_mapping accepts.

template_availableboolean

false when its template no longer exists or is not reachable.

date_rangeobject | null

The default period.

compare_date_rangeobject | null

The comparison period, if any.

filtersarray<object>

Filters applied to every widget.

filter_controlsarray<any>

The filter controls shown on the dashboard.

pagesarray<object>

Pages with a summary of each widget (no data).

created_by_namestring | null

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

Errores

Ejemplo

curl "https://api.mb-suite.com/v1/dashboards/{dashboard_id}" \
  -H "Authorization: Bearer $MB_API_KEY"

Probar con tu API key de prueba

Con una API key de prueba el pedido va siempre a tu organización de práctica: datos de ejemplo que puedes reiniciar.

curl "https://api.mb-suite.com/v1/dashboards/{dashboard_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/dashboards

Create a dashboard from a template

dashboards.dashboards.create_from_template

EscrituraDesde 2026-11-01

Creates a dashboard linked to a template: the organization's own template (ORGANIZATION), a published template of its workspace (INHERITED, only for an account) or a published system template (SYSTEM). template_source is a hint; if the template is not there, the other sources are tried. data_source_mapping assigns each template slot (data_source_slots[].id from dashboards.templates.get) a data source of this organization (ids from dashboards.data_sources.list); a key that is not a slot of the template is data_source_slot_unknown and a source that is not connected to the organization is data_source_not_linked. Title and description default to the template's. The dashboard renders the template live: later edits to the template show up in it. Returns the new dashboard id and unmapped_slots: the template slots left without a source (their widgets show no data until dashboards.dashboards.update maps them). Requires edit access to Dashboards.

Instrucciones para agentes

After creating it, tell the person the dashboard's title and that its numbers load when it is opened in MB Suite. If unmapped_slots is not empty, say which data sources are still missing.

Alcance
dashboards:write
Permiso
Editar en el módulo
Tool del MCP
dashboards_dashboards_create_from_templateEn la superficie completa; en la compacta, mb_execute_operation con id: "dashboards.dashboards.create_from_template".
Eventos que puede emitir
dashboards.dashboard.created

Costo declarado: hasta 3 lecturas y 1 escrituras por llamada (cuentan en el cupo diario).

Parámetros

template_idstringcuerporequerido

The template (dashboards.templates.list).

template_sourceenumcuerpoopcional

Where to look for the template first (SYSTEM, ORGANIZATION or INHERITED); the others are tried if it is not there.

Valores: SYSTEM, ORGANIZATION, INHERITED

source_org_idstringcuerpoopcional

INHERITED only: the workspace of this account (it must be its own).

titlestringcuerpoopcional

Title; default the template's.

descriptionstringcuerpoopcional

Description; default the template's.

data_source_mappingobjectcuerpoopcional

Template slot id (data_source_slots[].id of dashboards.templates.get or dashboards.dashboards.get) → data source id of this organization: the id of dashboards.data_sources.list (platform:id), or the account id of dashboards.data.sources (act_…, also as tiktok_organic:… for TikTok), which is stored as the former. A key that is not a slot of the template is rejected (data_source_slot_unknown); an account id connected on more than one platform, data_source_ambiguous.

Por defecto: {}

Respuesta

dashboard_idstring

The new dashboard id.

unmapped_slotsarray<object>

Template slots left without a data source.

Errores

Ejemplo

curl -X POST "https://api.mb-suite.com/v1/dashboards" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "template_id": "TEMPLATE_ID"
}'

Probar con tu API key de prueba

Con una API key de prueba el pedido va siempre a tu organización de práctica: datos de ejemplo que puedes reiniciar.

curl -X POST "https://api.mb-suite.com/v1/dashboards" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "template_id": "TEMPLATE_ID"
}'
PATCH/v1/dashboards/{dashboard_id}

Update a dashboard

dashboards.dashboards.update

EscrituraIdempotenteDesde 2026-11-01

Updates the title, description, labels (ids from dashboards.labels.list; an id that does not exist is label_unknown) and/or the full data source mapping of a linked dashboard (replaces the previous one; keys must be slots of its template, data_source_slot_unknown otherwise, and each new source must be connected to the organization). Pages and widgets are edited in MB Suite (or in the template a linked dashboard renders). Returns the updated dashboard. Requires edit access to Dashboards.

Alcance
dashboards:write
Permiso
Editar en el módulo
Tool del MCP
dashboards_dashboards_updateEn la superficie completa; en la compacta, mb_execute_operation con id: "dashboards.dashboards.update".

Costo declarado: hasta 2 lecturas y 1 escrituras por llamada (cuentan en el cupo diario).

Parámetros

dashboard_idstringrutarequerido

The dashboard id (dashboards.dashboards.list).

titlestringcuerpoopcional

New title.

descriptionstringcuerpoopcional

New description.

label_idsarray<string>cuerpoopcional

Dashboard labels (ids from dashboards.labels.list); replaces the list. An id that does not exist is label_unknown.

data_source_mappingobjectcuerpoopcional

The full mapping of a linked dashboard (replaces the previous one); keys are slots of its template.

Respuesta

dashboardobject

The dashboard as saved.

Errores

Ejemplo

curl -X PATCH "https://api.mb-suite.com/v1/dashboards/{dashboard_id}" \
  -H "Authorization: Bearer $MB_API_KEY"

Probar con tu API key de prueba

Con una API key de prueba el pedido va siempre a tu organización de práctica: datos de ejemplo que puedes reiniciar.

curl -X PATCH "https://api.mb-suite.com/v1/dashboards/{dashboard_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/dashboards/{dashboard_id}/reconnect-sources

Point a dashboard's widgets to other data sources

dashboards.dashboards.reconnect_sources

EscrituraIdempotenteDesde 2026-11-01

Replaces data sources in a dashboard, in order: each replacement moves every slot (linked dashboard) or widget (standalone) that uses the old source (from) to the new one (to); in a linked dashboard a from that no slot uses is taken as a slot id when it is one of its template. Use it when an ad account or property was disconnected and replaced. Every new source must be connected to this organization (dashboards.data_sources.list). Returns how many slots or widgets changed (replaced) and the from values that matched nothing (unmatched: nothing is written for them). Requires edit access to Dashboards.

Alcance
dashboards:write
Permiso
Editar en el módulo
Tool del MCP
dashboards_dashboards_reconnect_sourcesEn la superficie completa; en la compacta, mb_execute_operation con id: "dashboards.dashboards.reconnect_sources".

Costo declarado: hasta 1 lecturas y 1 escrituras por llamada (cuentan en el cupo diario).

Parámetros

dashboard_idstringrutarequerido

The dashboard id (dashboards.dashboards.list).

replacementsarray<object>cuerporequerido

Each old source (from) by the new one (to), applied in order.

Respuesta

dashboard_idstring

The dashboard.

kindenum

linked (slots changed) or standalone (widgets changed).

Valores: linked, standalone

replacednumber

How many slots or widgets now point to the new source.

unmatchedarray<string>

from values that matched no source nor slot (nothing changed for them).

Errores

Ejemplo

curl -X POST "https://api.mb-suite.com/v1/dashboards/{dashboard_id}/reconnect-sources" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "replacements": []
}'

Probar con tu API key de prueba

Con una API key de prueba el pedido va siempre a tu organización de práctica: datos de ejemplo que puedes reiniciar.

curl -X POST "https://api.mb-suite.com/v1/dashboards/{dashboard_id}/reconnect-sources" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "replacements": []
}'
POST/v1/dashboards/reorder

Set the manual order of the dashboards

dashboards.dashboards.reorder

EscrituraIdempotenteDesde 2026-11-01

Sets the manual order of the organization's dashboards list, the same order people get by dragging the cards in MB Suite: pass the dashboard ids (from dashboards.dashboards.list) in the new order and each one gets position = its index (0, 1, 2…), which dashboards.dashboards.list returns. Send the whole list: a dashboard left out keeps its position and can tie with the new ones. Every id must exist in this organization: otherwise 404 dashboard_not_found with the missing ids in details and nothing is written. Only the dashboards that change place are written (changed says how many), so repeating the call is harmless. For an account, call it with MB-Organization (or org_id). Requires edit access to Dashboards.

Alcance
dashboards:write
Permiso
Editar en el módulo
Tool del MCP
dashboards_dashboards_reorderEn la superficie completa; en la compacta, mb_execute_operation con id: "dashboards.dashboards.reorder".

Costo declarado: hasta 500 lecturas y 500 escrituras por llamada (cuentan en el cupo diario).

Parámetros

ordered_idsarray<string>cuerporequerido

The dashboard ids (dashboards.dashboards.list) in the new order; each one once.

Respuesta

countnumber

How many ids came.

changednumber

How many dashboards changed place.

Errores

Ejemplo

curl -X POST "https://api.mb-suite.com/v1/dashboards/reorder" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "ordered_ids": [
    "ORDERED_ID"
  ]
}'

Probar con tu API key de prueba

Con una API key de prueba el pedido va siempre a tu organización de práctica: datos de ejemplo que puedes reiniciar.

curl -X POST "https://api.mb-suite.com/v1/dashboards/reorder" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "ordered_ids": [
    "ORDERED_ID"
  ]
}'
DELETE/v1/dashboards/{dashboard_id}

Delete a dashboard

dashboards.dashboards.delete

IrreversibleDesde 2026-11-01

Deletes a dashboard. It goes to the 30-day trash (owners and admins restore it with platform.trash.restore); its template and data sources are not touched. 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 Dashboards.

Instrucciones para agentes

Tell the person the dashboard stays 30 days in the trash and can be restored.

Con una API key, este DELETE se ejecuta directo: el registro queda 30 días en la papelera y la respuesta trae su trash_item_id. Con un token OAuth, y por el MCP, pide dry_run → confirm_token.

Alcance
dashboards:write y «Permitir eliminar» (dashboards:delete en OAuth)
Permiso
Editar en el módulo
Tool del MCP
dashboards_dashboards_deleteEn la superficie completa; en la compacta, mb_execute_operation con id: "dashboards.dashboards.delete".
Eventos que puede emitir
dashboards.dashboard.deleted

Costo declarado: hasta 1 lecturas y 2 escrituras por llamada (cuentan en el cupo diario).

Parámetros

dashboard_idstringrutarequerido

The dashboard id (dashboards.dashboards.list).

Respuesta

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.

Errores

Ejemplo

curl -X DELETE "https://api.mb-suite.com/v1/dashboards/{dashboard_id}" \
  -H "Authorization: Bearer $MB_API_KEY"

Probar con tu API key de prueba

Con una API key de prueba el pedido va siempre a tu organización de práctica: datos de ejemplo que puedes reiniciar.

curl -X DELETE "https://api.mb-suite.com/v1/dashboards/{dashboard_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/dashboards/{dashboard_id}/export-pdf

Export a dashboard to PDF

dashboards.dashboards.export_pdf

EscrituraDesde 2026-11-01

Renders the dashboard to a landscape A4 PDF (with the live data of every widget, for the given date range, filters and language) and returns a signed download link that expires in 24 hours, plus the file name and size. Rendering reads every connected platform of the dashboard and can take tens of seconds; very large dashboards may time out (pdf_render_timeout): retry with a shorter range. Not idempotent: each call renders a new file and counts 1 against the daily PDF quota of the organization that pays the call (the pdf external quota, by default 50 a day on a trial, 300 starter, 1,000 growth, 2,500 scale, 5,000 enterprise; it resets at 00:00 UTC). The MB-Quota-External-Platform (pdf), MB-Quota-External-Limit and MB-Quota-External-Remaining headers say what is left; once it is used up the call fails with 429 quota_exceeded (details.quota.type external) until the reset. Requires view access to Dashboards; not available in the public demo. In the practice organization (test keys) nothing is rendered and no platform is read: the response has the same shape, its link (valid 24 hours, like a real one) downloads a one-page stand-in PDF that says so, it carries simulated: true, uses none of the PDF quota and fires no webhook. With Google Ads, Google Business Profile, LinkedIn, TikTok or YouTube, 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).

Instrucciones para agentes

Give the person the download link and say it expires in 24 hours. Do not paste the link anywhere public.

Alcance
dashboards:write
Permiso
Ver el módulo
Tool del MCP
dashboards_dashboards_export_pdfEn la superficie completa; en la compacta, mb_execute_operation con id: "dashboards.dashboards.export_pdf".
Eventos que puede emitir
dashboards.dashboard.exported

Costo declarado: hasta 1 lecturas y 0 escrituras por llamada (cuentan en el cupo diario). Toca una plataforma externa (pdf): cuenta en el cupo de operaciones externas.

Parámetros

dashboard_idstringrutarequerido

The dashboard id (dashboards.dashboards.list).

date_rangeobjectcuerpoopcional

The period to print (default: the dashboard's): a preset, or a fixed range with from_date and to_date.

filtersarray<object>cuerpoopcional

Global filters to apply (the same as the dashboard's filter bar).

langenumcuerpoopcional

The PDF's language: es (default), en or pt-BR.

Valores: es, en, pt-BR

Respuesta

download_urlstring
file_namestring
size_bytesnumber
expires_atnumber

Errores

Ejemplo

curl -X POST "https://api.mb-suite.com/v1/dashboards/{dashboard_id}/export-pdf" \
  -H "Authorization: Bearer $MB_API_KEY"

Probar con tu API key de prueba

Con una API key de prueba el pedido va siempre a tu organización de práctica: datos de ejemplo que puedes reiniciar. En la práctica esta operación se simula: no sale nada y la respuesta trae simulated: true.

curl -X POST "https://api.mb-suite.com/v1/dashboards/{dashboard_id}/export-pdf" \
  -H "Authorization: Bearer $MB_TEST_KEY"