Menu

API reference · Media Planner

Cross-account

media_planner · cross_account · 1 operation

GET/v1/media-planner/cross-account

Overview of every account's media plans

media_planner.cross_account.overview

ReadIdempotentSince 2026-11-01

The workspace's cross-account view, one page of accounts at a time (limit 20 by default, up to 100, sorted by name; follow next_cursor): for each active account the person can reach, its active and draft media plans with budget, spend (in the plan's currency, or null with budget_by_currency / spent_by_currency when a plan mixes currencies), pacing (on_track, under_pacing, over_pacing), last sync and alerts (type, severity and an English message: plan ended but not archived, costs not synced today, active plan without linked campaigns, draft starting soon, account without an active plan). budget_summary covers every account (not only the page): the active plans' budget and spend by currency and platform, alert and pacing counts. The rows of each plan come only with include_rows=true; for one account, media_planner.plans.get with that account's org_id is lighter. only_with_alerts and pacing narrow the accounts (matching_accounts counts them; total_accounts counts all). Every page reads every account's plans and rows, so it is a heavy read: ask for the big picture, then go to one account. Only in the workspace (an account gets 400 workspace_only) and not for viewers. 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).

Scope
media_planner:read
Permission
View the module
MCP tool
media_planner_cross_account_overviewOn the full surface; on the compact one, mb_execute_operation with id: "media_planner.cross_account.overview".

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

Parameters

limitintegerqueryoptional

Accounts per page (default 20, up to 100), sorted by name.

Default: 20

cursorstringqueryoptional

next_cursor of the previous page of this same view.

include_rowsbooleanqueryoptional

Also return each plan's rows (default false: for one account's rows, media_planner.plans.get with that account's org_id).

Default: false

only_with_alertsbooleanqueryoptional

Only accounts with at least one alert.

Default: false

pacingenumqueryoptional

Only accounts with an active plan in this pacing state.

Values: on_track, under_pacing, over_pacing, no_sync

Response

accountsarray<object>

This page of accounts, by name.

total_accountsnumber

Active accounts the person reaches.

matching_accountsnumber

Accounts that match the filters.

has_moreboolean

More accounts after this page.

budget_summaryobject

Totals over every account (not only this page).

fetched_atnumber

When it was computed (epoch ms).

next_cursorstring

Pass it as cursor for the next page.

Errors

Example

curl "https://api.mb-suite.com/v1/media-planner/cross-account" \
  -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/media-planner/cross-account" \
  -H "Authorization: Bearer $MB_TEST_KEY"