Menú

Referencia de la API · Media Planner

Campañas

media_planner · campaigns · 9 operaciones

GET/v1/media-planner/plans/{plan_id}/campaigns

List the rows of a media plan

media_planner.campaigns.list

LecturaIdempotenteDesde 2026-11-01

Lists the rows of a media plan in their display order, paginated by cursor (limit up to 200): campaigns in a campaigns-mode plan, platform rows or account rows in the other modes (row_kind says which). Each row has platform, budget, currency, status, own flight dates if any (start_day/end_day), labels, the link to a real campaign and the known spend (last_synced_cost). Filters status and platform fill the page (the rows are read until limit rows match). Requires view access to the Media Planner. With Google Ads, 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).

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

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

Parámetros

plan_idstringrutarequerido

Media plan id (from media_planner.plans.list).

limitintegerqueryopcional

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

Por defecto: 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 rows in this status (draft, scheduled, active, paused, completed, cancelled).

Valores: draft, scheduled, active, paused, completed, cancelled

platformenumqueryopcional

Only rows of this ad platform.

Valores: google_ads, meta_ads, tiktok_ads, linkedin_ads, twitter_ads, other

Respuesta

dataarray<object>
has_moreboolean
next_cursorstring

Errores

Ejemplo

curl "https://api.mb-suite.com/v1/media-planner/plans/{plan_id}/campaigns" \
  -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/media-planner/plans/{plan_id}/campaigns" \
  -H "Authorization: Bearer $MB_TEST_KEY"
GET/v1/media-planner/plans/{plan_id}/campaigns/{campaign_id}

Get one row of a media plan

media_planner.campaigns.get

LecturaIdempotenteDesde 2026-11-01

Returns one row of a media plan (a campaign, a platform row or an account row) with its budget, currency, status, dates, labels, link to a real campaign, carryover applied, manual spend and known spend. Not found: media_plan_not_found for the plan, media_plan_row_not_found for the row. Requires view access to the Media Planner. With Google Ads, 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).

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

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

Parámetros

plan_idstringrutarequerido

Media plan id (from media_planner.plans.list).

campaign_idstringrutarequerido

Row id inside the plan: a campaign, a platform row or an account row (from media_planner.campaigns.list).

Respuesta

idstring

Row id.

row_kindenum

campaign (campaigns mode), platform (one per ad platform) or account (one per currency).

Valores: campaign, platform, account

namestring

Row name (in platform and account modes, set by MB Suite).

platformstring

google_ads, meta_ads, tiktok_ads, linkedin_ads, twitter_ads or other.

budgetnumber

Planned budget in the row's currency (carryover included).

original_budgetnumber

The budget without the carryover applied (budget − carryover.amount).

currencystring

The row's currency (ISO code).

statusenum

draft, scheduled, active, paused, completed or cancelled.

Valores: draft, scheduled, active, paused, completed, cancelled

label_idsarray<string>

Campaign labels (media_planner.labels.list).

media_plan_idstring

The plan the row belongs to.

platform_custom_namestring

The name of an 'other' platform (e.g. Pinterest).

start_datenumber

Own flight start (epoch ms); absent = the plan's window.

end_datenumber

Own flight end (epoch ms).

start_daystring

Own flight start (YYYY-MM-DD): the format media_planner.campaigns.update takes.

end_daystring

Own flight end (YYYY-MM-DD, inclusive).

ordernumber

Position in the plan.

spend_sourcestring

Platforms and account modes: where the spend comes from (integration or manual).

manual_spendnumber

Spend entered by hand (already included in last_synced_cost).

manual_spend_updated_atnumber

When the manual spend was last edited (epoch ms).

manual_spend_updated_bystring

Who edited it (uid).

manual_spend_updated_by_namestring | null

That person's name (null when MB Suite does not know it: a former member).

excluded_account_idsarray<string>

Account mode: connected ad accounts left out of this row's total.

mapped_campaign_idstring

Campaigns mode: the real campaign on the ad platform whose spend is synced.

mapped_campaign_namestring

That campaign's name on the platform.

external_customer_idstring

The ad account of the linked campaign.

last_synced_costnumber

The row's known spend (synced + manual), in its currency.

last_synced_atnumber

When the spend was last synced (epoch ms).

carryoverobject

The carryover applied to this row.

comment_countnumber

Comments on the row (media_planner.comments.list); absent when it never had any (0).

auto_budget_enabledboolean

Whether a Google Ads Auto-Budget config adjusts this campaign.

auto_budget_last_runnumber

When the Auto-Budget last ran on it (epoch ms).

auto_budget_last_budgetnumber

The last daily budget the Auto-Budget set.

auto_budget_last_actionstring

What the Auto-Budget did last (adjusted, capped_max, no_change…).

created_atnumber

When the row was created (epoch ms).

updated_atnumber

Its last change (epoch ms).

Errores

Ejemplo

curl "https://api.mb-suite.com/v1/media-planner/plans/{plan_id}/campaigns/{campaign_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/media-planner/plans/{plan_id}/campaigns/{campaign_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/media-planner/plans/{plan_id}/campaigns

Add a row to a media plan

media_planner.campaigns.create

EscrituraDesde 2026-11-01

Adds a row to a media plan and recomputes the plan's totals. What a row is depends on the plan's mode: in campaigns mode it is a planned campaign (name and platform required; it can be linked to a real campaign with mapped_campaign_id + external_customer_id, an ad account connected to this organization for that platform, to sync its spend); in platforms mode it is one row per ad platform (platform required, one row per platform except 'other', which needs platform_custom_name; MB Suite names it and its spend is the total of that platform's accounts); in account mode it is one row per currency (MB Suite names it; excluded_account_ids leaves connected accounts out of its total). manual_spend (platforms and account modes) adds spend entered by hand. Fields that do not apply to the plan's mode are rejected (field_not_in_mode). Defaults: budget 0, the plan's currency, status draft for a campaign and active for a platform or account row, no own dates (the row follows the plan window), last position. label_ids must be campaign labels of this organization or of its workspace. Errors: platform_row_exists, currency_row_exists and limit_reached (409; a plan holds up to 500 rows, details.resource media_plan_rows), external_account_not_linked (404: an ad account that is not connected to the organization; details.platform), link_incomplete and unknown_label_ids (400). Returns the row and the plan's new totals. Requires full access to the Media Planner. With Google Ads, 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).

Alcance
media_planner:write
Permiso
Editar en el módulo
Tool del MCP
media_planner_campaigns_createEn la superficie completa; en la compacta, mb_execute_operation con id: "media_planner.campaigns.create".
Eventos que puede emitir
media_planner.campaign.changed

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

Parámetros

plan_idstringrutarequerido

Media plan id (from media_planner.plans.list).

namestringcuerpoopcional

Campaign name (campaigns mode only; platform and account rows are named by MB Suite).

platformenumcuerpoopcional

Ad platform (campaigns and platforms modes; account rows are always 'other').

Valores: google_ads, meta_ads, tiktok_ads, linkedin_ads, twitter_ads, other

platform_custom_namestringcuerpoopcional

Name of an 'other' platform (e.g. Pinterest).

budgetnumbercuerpoopcional

Planned budget in the row currency.

Por defecto: 0

currencystringcuerpoopcional

Row currency (default: the plan currency). In account mode each row is one currency.

start_datestringcuerpoopcional

Own flight start (YYYY-MM-DD). Without it the row follows the plan window.

end_datestringcuerpoopcional

Own flight end (YYYY-MM-DD, inclusive).

statusenumcuerpoopcional

Default: draft for a campaign, active for a platform or account row.

Valores: draft, scheduled, active, paused, completed, cancelled

label_idsarray<string>cuerpoopcional

Campaign labels of the row (ids from media_planner.labels.list).

mapped_campaign_idstringcuerpoopcional

Campaigns mode: the real campaign id on the ad platform to sync its spend (requires external_customer_id).

mapped_campaign_namestringcuerpoopcional

The linked campaign's name on the platform (shown in the plan).

external_customer_idstringcuerpoopcional

Ad account of the linked campaign: one of the organization's connected accounts for that platform.

manual_spendnumbercuerpoopcional

Platforms and account modes: spend entered by hand (a platform without integration, or an adjustment on top of the synced spend).

excluded_account_idsarray<string>cuerpoopcional

Account mode: connected ad accounts left out of this row's total.

orderintegercuerpoopcional

Position in the plan (default: last).

Respuesta

campaign_idstring

The new row's id.

campaignobject

The new row.

plan_totalsobject

The plan's totals after the change.

Errores

Ejemplo

curl -X POST "https://api.mb-suite.com/v1/media-planner/plans/{plan_id}/campaigns" \
  -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 POST "https://api.mb-suite.com/v1/media-planner/plans/{plan_id}/campaigns" \
  -H "Authorization: Bearer $MB_TEST_KEY"
PATCH/v1/media-planner/plans/{plan_id}/campaigns/{campaign_id}

Update a row of a media plan

media_planner.campaigns.update

EscrituraIdempotenteDesde 2026-11-01

Updates one or more fields of a row, sent inside updates ({ plan_id, campaign_id, updates: { … } }): name, platform and platform_custom_name (campaigns mode), budget, currency, start_date/end_date (YYYY-MM-DD; null clears them so the row follows the plan), status, label_ids, the link to a real campaign (mapped_campaign_id + external_customer_id together; mapped_campaign_id null unlinks; changing the platform of a linked campaign unlinks it), manual_spend (null clears it; the known spend keeps the synced part), excluded_account_ids (account mode) and order. What a row is depends on the plan's mode: in campaigns mode it is a planned campaign (name and platform required; it can be linked to a real campaign with mapped_campaign_id + external_customer_id, an ad account connected to this organization for that platform, to sync its spend); in platforms mode it is one row per ad platform (platform required, one row per platform except 'other', which needs platform_custom_name; MB Suite names it and its spend is the total of that platform's accounts); in account mode it is one row per currency (MB Suite names it; excluded_account_ids leaves connected accounts out of its total). manual_spend (platforms and account modes) adds spend entered by hand. A platform row cannot change its platform (platform_immutable). Each change is kept in the campaign history (media_planner.changes.list); budget and currency changes recompute the plan's totals. skip_activity: true keeps the change out of the account's Activity feed, for automated syncs that name each row after its real campaign: it only goes with name and the link fields (mapped_campaign_id, mapped_campaign_name, external_customer_id); with any other field it is invalid_input (400) and nothing is saved. The change stays in the audit log and the history, and the webhook still fires. An update that changes nothing returns changed: false. Requires full access to the Media Planner. With Google Ads, 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).

Alcance
media_planner:write
Permiso
Editar en el módulo
Tool del MCP
media_planner_campaigns_updateEn la superficie completa; en la compacta, mb_execute_operation con id: "media_planner.campaigns.update".
Eventos que puede emitir
media_planner.campaign.changed

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

Parámetros

plan_idstringrutarequerido

Media plan id (from media_planner.plans.list).

campaign_idstringrutarequerido

Row id inside the plan: a campaign, a platform row or an account row (from media_planner.campaigns.list).

updatesobjectcuerporequerido

The fields to change (at least one); the rest stay as they are.

skip_activitybooleancuerpoopcional

true: this change does not leave an entry in the account's Activity feed (for an automated process, such as keeping row names in sync with the real campaigns). It is still recorded in the audit log and in the campaign history (media_planner.changes.list), and media_planner.campaign.changed still fires. Only with name and the link fields (mapped_campaign_id, mapped_campaign_name, external_customer_id) in updates; with any other field the call is invalid_input.

Respuesta

campaignobject

The row as it is now.

changedboolean

false when the values sent were already the current ones: nothing was written.

Errores

Ejemplo

curl -X PATCH "https://api.mb-suite.com/v1/media-planner/plans/{plan_id}/campaigns/{campaign_id}" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "updates": {}
}'

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/media-planner/plans/{plan_id}/campaigns/{campaign_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "updates": {}
}'
DELETE/v1/media-planner/plans/{plan_id}/campaigns/{campaign_id}

Delete a row of a media plan

media_planner.campaigns.delete

IrreversibleDesde 2026-11-01

Deletes one row of a media plan and recomputes the plan's totals. The row goes to the 30-day trash, where an owner or admin can restore it (platform.trash.restore; its comments stay and come back with it, and restoring recomputes the plan totals; 409 trash_restore_parent_missing if the plan no longer exists). The deletion is kept in the plan's change history. 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 Media Planner.

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
media_planner:write y «Permitir eliminar» (media_planner:delete en OAuth)
Permiso
Editar en el módulo
Tool del MCP
media_planner_campaigns_deleteEn la superficie completa; en la compacta, mb_execute_operation con id: "media_planner.campaigns.delete".
Eventos que puede emitir
media_planner.campaign.changed

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

Parámetros

plan_idstringrutarequerido

Media plan id (from media_planner.plans.list).

campaign_idstringrutarequerido

Row id inside the plan: a campaign, a platform row or an account row (from media_planner.campaigns.list).

Respuesta

oktrue

Always true.

plan_totalsobject

The plan's totals after the deletion.

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/media-planner/plans/{plan_id}/campaigns/{campaign_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/media-planner/plans/{plan_id}/campaigns/{campaign_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/media-planner/plans/{plan_id}/campaigns/reorder

Reorder the rows of a media plan

media_planner.campaigns.reorder

EscrituraIdempotenteDesde 2026-11-01

Sets the display order of a plan's rows: campaign_ids in the new order (position = index); rows not listed keep their relative order after them. All or nothing: an id that is not a row of the plan stops the whole reorder (404). In a platforms-mode plan the order matters: if two rows ever share a platform, the first one receives the platform's spend. Returns how many rows moved and the final order. Requires full access to the Media Planner.

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

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

Parámetros

plan_idstringrutarequerido

Media plan id (from media_planner.plans.list).

campaign_idsarray<string>cuerporequerido

Row ids in the new order. Rows not listed keep their relative order after these.

Respuesta

countnumber

Rows reordered.

orderarray<string>

The row ids in their new order.

Errores

Ejemplo

curl -X POST "https://api.mb-suite.com/v1/media-planner/plans/{plan_id}/campaigns/reorder" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "campaign_ids": [
    "CAMPAIGN_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/media-planner/plans/{plan_id}/campaigns/reorder" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "campaign_ids": [
    "CAMPAIGN_ID"
  ]
}'
POST/v1/media-planner/plans/{plan_id}/campaigns/bulk/update

Edit many rows of a media plan

media_planner.campaigns.bulk.update

EscrituraMasiva · hasta 500Desde 2026-11-01

Applies the same change to up to 500 rows of a plan, like the selection bar of the app: status, start_date/end_date (YYYY-MM-DD; null clears), currency (not in account mode, where each row is one currency), add_label_ids and remove_label_ids. Ids that are not rows of the plan are skipped and returned in not_found; rows that would end before they start stop the whole call (date_range_invalid). Each changed row is kept in the campaign history. Outside the app it requires a dry run (which lists the rows) and a confirm_token. Requires full access to the Media Planner.

Pide confirmación: primero dry_run: true (vista previa y confirm_token, que vale 10 minutos y una sola vez), después el mismo cuerpo con confirm_token. En unas pocas, solo con ciertos datos: la descripción dice cuándo. Por qué y cómo: Vista previa y confirmación.

Alcance
media_planner:write
Permiso
Editar en el módulo
Tool del MCP
media_planner_campaigns_bulk_updateEn la superficie completa; en la compacta, mb_execute_operation con id: "media_planner.campaigns.bulk.update".
Eventos que puede emitir
media_planner.campaign.changed

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

Parámetros

plan_idstringrutarequerido

Media plan id (from media_planner.plans.list).

campaign_idsarray<string>cuerporequerido

Row ids of the plan (from media_planner.campaigns.list), up to 500.

updatesobjectcuerporequerido

What changes in every row (at least one field).

Respuesta

updatednumber

Rows changed.

not_foundarray<string>

Ids sent that are not rows of the plan (skipped).

Errores

Ejemplo

curl -X POST "https://api.mb-suite.com/v1/media-planner/plans/{plan_id}/campaigns/bulk/update" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "campaign_ids": [
    "CAMPAIGN_ID"
  ],
  "updates": {},
  "dry_run": true
}'

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/media-planner/plans/{plan_id}/campaigns/bulk/update" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "campaign_ids": [
    "CAMPAIGN_ID"
  ],
  "updates": {},
  "dry_run": true
}'
POST/v1/media-planner/plans/{plan_id}/campaigns/bulk/delete

Delete many rows of a media plan

media_planner.campaigns.bulk.delete

IrreversibleMasiva · hasta 500Desde 2026-11-01

Deletes up to 500 rows of a plan and recomputes its totals; each row goes to the 30-day trash and can be restored on its own. Ids that are not rows of the plan are skipped and returned in not_found. The deletions are kept in the plan's change history. Outside the app it requires a dry run (which lists the rows) and a confirm_token. Requires full access to the Media Planner.

Pide confirmación: primero dry_run: true (vista previa y confirm_token, que vale 10 minutos y una sola vez), después el mismo cuerpo con confirm_token. En unas pocas, solo con ciertos datos: la descripción dice cuándo. Por qué y cómo: Vista previa y confirmación.

Alcance
media_planner:write y «Permitir eliminar» (media_planner:delete en OAuth)
Permiso
Editar en el módulo
Tool del MCP
media_planner_campaigns_bulk_deleteEn la superficie completa; en la compacta, mb_execute_operation con id: "media_planner.campaigns.bulk.delete".
Eventos que puede emitir
media_planner.campaign.changed

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

Parámetros

plan_idstringrutarequerido

Media plan id (from media_planner.plans.list).

campaign_idsarray<string>cuerporequerido

Row ids of the plan (from media_planner.campaigns.list), up to 500.

Respuesta

deletednumber

Rows deleted.

not_foundarray<string>

Ids sent that are not rows of the plan (skipped).

trash_item_idsarray<string>

The trash items this deletion left, one per record: the item_id of platform.trash.restore (POST /trash/{item_id}/restore).

trash_expires_atnumber

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

Errores

Ejemplo

curl -X POST "https://api.mb-suite.com/v1/media-planner/plans/{plan_id}/campaigns/bulk/delete" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "campaign_ids": [
    "CAMPAIGN_ID"
  ],
  "dry_run": true
}'

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/media-planner/plans/{plan_id}/campaigns/bulk/delete" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "campaign_ids": [
    "CAMPAIGN_ID"
  ],
  "dry_run": true
}'
POST/v1/media-planner/plans/{plan_id}/campaigns/import

Import campaigns from another plan

media_planner.campaigns.import

EscrituraDesde 2026-11-01

Copies campaigns from another campaigns-mode plan of this organization (source_plan_id; campaign_ids to pick some, default all, up to 200) to the end of this plan, which must be in campaigns mode too. Each copy keeps name, platform, currency and labels, takes its original budget (without carryover), the window of this plan and status draft, and drops the link to the real campaign, the spend, the carryover and the Auto-Budget bookkeeping. Recomputes the plan's totals and keeps the import in the change history with the source plan's name. Returns the new row ids. Requires full access to the Media Planner.

Alcance
media_planner:write
Permiso
Editar en el módulo
Tool del MCP
media_planner_campaigns_importEn la superficie completa; en la compacta, mb_execute_operation con id: "media_planner.campaigns.import".
Eventos que puede emitir
media_planner.campaign.changed

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

Parámetros

plan_idstringrutarequerido

The plan that receives the campaigns.

source_plan_idstringcuerporequerido

A campaigns-mode plan of this organization to copy from.

campaign_idsarray<string>cuerpoopcional

Campaigns of the source plan to copy (default: all).

Respuesta

imported_idsarray<string>

Ids of the rows created, in the order sent.

countnumber

Rows created.

Errores

Ejemplo

curl -X POST "https://api.mb-suite.com/v1/media-planner/plans/{plan_id}/campaigns/import" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "source_plan_id": "SOURCE_PLAN_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/media-planner/plans/{plan_id}/campaigns/import" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "source_plan_id": "SOURCE_PLAN_ID"
}'