Skip to main content
Connected-account campaign mirroring is an alpha feature available only to enrolled design partners. It is read-only: Interchange does not create, update, pause, reactivate, or cancel campaigns in the connected account.

Tracked campaigns

Connecting a seller account lets Interchange materialize its campaigns as read-only, management: "tracked" projections. The connected seller or ad platform remains the source of truth. Interchange periodically reconciles the projection and provides shared identity, audit, relationship rollups, and live delivery access around it. The compatibility API value for these projections is mode: "directed". directed is a deprecated wire discriminator, not a product name. Use the management field to understand who operates a campaign:
  • management: "tracked" means it was mirrored from connected-account activity that Interchange did not author. The projection is read-only.
  • management: "managed" means the campaign uses the canonical Interchange buyer lifecycle. Discover products and create, read, update, pause, or cancel its media buys through the buyer media-buy APIs.
Each tracked campaign is a one-to-one projection of one storefront campaign and one upstream AdCP media buy. Its name, status, flight, budget, and packages come from that buy and cannot be edited independently. The projection preserves both Interchange’s media_buy_id and the storefront’s adcp_media_buy_id. Tracked connected-account campaigns return directed.provenance: "connected_account" with connection/account IDs, provider, mirror freshness, and upstream media-buy identity.

Connect and subscribe an account

First connect the official adapter and map its discovered account to an advertiser. For an agent-driven setup:
  1. Call list_storefronts, then connect_storefront to obtain the human OAuth handoff URL.
  2. Call list_storefront_connections and list_storefront_connection_accounts to choose a buyable account.
  3. Read list_storefront_connection_account_mappings. If needed, call map_storefront_connection_account_to_advertiser with the intended advertiser.
  4. Call subscribe_directed_campaigns with the mapped connection and account IDs to start the read-only mirror.
Organization/manager and publisher-identity accounts cannot be subscribed.
Subscription immediately attempts a metadata sync. Active campaigns are always included; terminal history is backfilled for one year by default. Subsequent worker sweeps reconcile changes every 15 minutes by default. This does not import delivery history. The response includes backfillStart, lastSyncedAt, lastSyncStatus, lastSyncError, and mirrored/retired/skipped counts. Read the same state later with:
backfillStart is a fixed metadata-history boundary, not a progress meter. A subscription remains durable when enumeration is unsupported or temporarily unhealthy; the status reports ERROR and the worker retries. Existing valid mirrors survive a failed or incomplete snapshot. When a broad account read omits a known nonterminal campaign, Interchange performs a bounded direct read before retiring its projection. A complete terminal response preserves campaign and package history even if the provider returns no packages. A failed or incomplete direct read retains the last valid mirror. To stop mirroring, call unsubscribe_directed_campaigns. Interchange pauses the sweep and retires local projections; it does not delete campaigns from the seller platform.

Registered AdCP storefront sources

An enrolled buyer may project a registered third-party AdCP storefront source into the same connection plane. Register source credentials, discover the source account with list_available_accounts, map it to an advertiser, then call connect_adcp_storefront:
The response returns connectionId and connectionAccountId; use them with the normal subscribe, subscription-status, campaign-read, and delivery-read operations. The operation accepts only sources already registered on an active storefront. It never accepts an arbitrary endpoint URL or raw secret. For registered sellers, a snapshot is complete only when every requested page returns boolean pagination.has_more, every cursor advances, every buy carries a valid ISO currency, and any returned account ID matches the pinned account. Incomplete snapshots never retire an existing projection.

List and inspect mirrors

Use the shared campaign surface and compatibility mode filter:
GET /api/v2/buyer/campaigns/{campaignId} returns the tracked campaign and its single mirrored media buy. Discovery, execute, pause, reactivate, and ordinary campaign mutations reject tracked projections. To prioritize a fresh upstream snapshot without changing the seller, send the refresh-only compatibility request:

Relationship rollup

Scale lives on the connected-account relationship rather than the default campaign list. Each account may return a campaignRollup: Money never rolls up across accounts because accounts on one connection may use different currencies.

Presences: audiences and event sources

Connected accounts may expose first-party audiences and event sources as account presences. Use GET /api/v2/buyer/storefront-connections/{connectionId}/accounts/{accountId}/presences or list_account_presences. This is a read-only discovery surface; it does not sync an audience or authorize a provider mutation.

Read delivery through the seller

Use the normal campaign delivery endpoint:
Each call reads through to the connected seller’s get_media_buy_delivery. Raw payloads and time series are not cached. Only the latest aggregate media-buy/package metrics, exact requested window, and refresh time are persisted. Subscription and metadata sweeps never pull delivery. If dates are omitted, the read requests the one-year window through yesterday. Provider window limits may cause Interchange to split the request into consecutive chunks before merging aggregate results.

Errors and recovery

  • FEATURE_NOT_ENABLED: ask the Interchange account team about read-only alpha enrollment. Do not call a provider-specific endpoint as a bypass.
  • Account or mapping not found: re-list the official connection and discovered accounts, then use only returned IDs.
  • lastSyncStatus: "ERROR": inspect safe errorCode, errorField, errorReason, and upstreamCode fields. Reconnect only for authentication or authorization failures; retry provider-shape or availability failures.
  • mirrored: 0 with successful sync is an empty eligible history window, not a failed backfill.

Alpha boundaries

  • The connected-account surface is subscription, mirror, refresh, presence, relationship-rollup, and delivery read-only.
  • Campaigns created or managed through Interchange use the canonical buyer product and media-buy lifecycle, not a connected-account campaign write path.
  • Change webhooks, scheduled delivery/export, invoice-grade reporting, and BigQuery delivery history are not part of this alpha.
  • Connected-account feature eligibility never subscribes an account and never grants authority to mutate its campaigns.