The three layers
- Connection — one OAuth grant or API key against a platform: “I linked this account.” You can connect at the organization level (a manager account that reaches many ad accounts) or at the advertiser level (a single ad account). The connection carries the credential; revoking it on the platform side stops all access.
- Discovered accounts — the accounts that connection credential can reach. After you connect, Interchange lists them from the platform. Each account carries an account type and, where the platform has hierarchy, its parent organization.
- Advertiser mapping — links a platform account to one of your advertisers, so campaigns for that advertiser transact or generate on the right provider tenant. A connection may also have a display/default account, but advertiser-scoped work never falls back to it when a mapping is missing.
Account types
Every discovered account is classified so you (and Murph) can tell what it is and what it can do:
Accounts with a parent also report
parentExternalId and parentName, so an
agency grant reads as one organization with its client accounts underneath.
What each platform calls these
Manager accounts and agencies
If your access flows through a manager account — an agency MCC on Google, a Business Manager on Meta — connect that account. Interchange expands the manager into its client ad accounts automatically: on Google, client accounts under an MCC are discovered through the manager grant, attributed to the MCC as their parent, and available to map and buy on individually. The manager account itself is listed for context but can never be selected or transacted on. For an agency to buy on a client’s behalf, the grant happens on the platform, not in Interchange: the client adds the agency’s manager account / Business Manager / Business Center as a partner with campaign-management access. Once the platform-side grant exists, connecting the agency’s manager account in Interchange surfaces the client’s ad accounts. Each platform’s agency setup runbook walks through the client-side steps per platform.After connecting
- Interchange discovers the accounts the grant can reach and classifies them.
- If the connection reaches exactly one buyable account, it becomes the connection’s default account automatically; otherwise pick one on the Connections tab.
- Map each provider account to the advertiser whose campaigns should use it.
The Connections page (Settings → Connections) splits this into two
tabs: the Connections tab is where you link, unlink, and re-authorize
grants; the Advertiser mapping tab is where discovered accounts —
grouped under their manager account — are mapped to advertisers. An account
can be mapped to more than one advertiser, and an advertiser can be mapped
on several platforms. The mapping decides which account a buy or creative
generation runs on: either a media buy or AudioStack/ElevenLabs generation
for an unmapped advertiser fails with an
account_mapping_requiredblocker pointing back to the Advertiser mapping tab — it never silently falls back to another account. For AudioStack and ElevenLabs, mapping chooses the billed provider tenant; the brand’svoice_synthesissetting chooses the voice. You can complete this setup while the storefront is still configuring; mapping an account does not make the storefront transacting or allow buys before transacting is enabled. - Connection summaries report a mapped advertiser count so you (and your agent) can see “connected, but 0 advertisers mapped” — connected is not the same as ready to buy or generate — before a campaign trips over it.
- Account lists refresh when the connection re-authorizes. If accounts were added on the platform side (for example, a new client under your MCC), refresh the connection to pick them up.
Agent and API flow
Official adapters use the connection-level account model:list_storefront_connectionsidentifies the connection.list_storefront_connection_accountslists the accounts reached by that grant.list_storefront_connection_account_mappingsreturns their current advertiser mappings.map_storefront_connection_account_to_advertisermaps an account withconnectionId,accountId, andadvertiserId. The path already identifies the adapter, so callers do not need to copy another identifier into the request body.
sourceId, such as
meta, google, tiktok, or snap. A storefront’s platformId (for example,
meta-scope3-adapter) identifies the storefront resource and is not a second
provider identity. Historical adapter/platform IDs remain accepted as
compatibility input, but responses normalize them to the canonical provider
ID.
list_available_accounts is the legacy advertiser-scoped AdCP path. A
compatibility bridge can mirror official-adapter accounts into it, but it also
applies advertiser/source matching and provisioning behavior and is not the
authoritative connection workflow. Do not interpret an empty result there as
the state of a Meta, Google Ads, TikTok, Snap, or other official adapter
connection.
Unlinking
Unlinking a connection archives the grant and its credential, but your advertiser mappings are kept, not deleted. A mapping whose provider account is still reachable through another connection of the same platform (for example, a second grant that covers the same account) keeps working. A mapping only this connection reached is marked unreachable (unreachableAt on the
linked-account resource): it never resolves for buying or generation — the
operation fails with mapped_account_unavailable rather than silently using another account —
and it recovers automatically when you reconnect the platform or re-map the
account. A temporary disconnect/reconnect never loses your mapping work.