> ## Documentation Index
> Fetch the complete documentation index at: https://docs.interchange.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Preview catalog activation

> Dry-run the campaign and creative fan-out a transform would produce

`POST /api/v2/buyer/advertisers/{advertiserId}/catalogs/{catalogId}/activation-plan/preview`

Builds the **activation plan** a transform would produce from the catalog's current items — the campaign groups, creative-asset prompts, and seller-syndication targets — **without materializing anything**. Use it to check the fan-out before you [execute](/v2/buyer/advertisers/tasks/execute-catalog-activation). Pass `save: true` to persist the plan against the latest catalog version so a later [refresh](/v2/buyer/advertisers/tasks/refresh-catalog) can activate it.

By default the plan is computed from the catalog's [active transform](/v2/buyer/advertisers/tasks/save-catalog-transform). Supply an ad hoc `transform` in the body to preview an unsaved one.

## Request

```bash curl theme={null}
curl -X POST https://api.interchange.io/api/v2/buyer/advertisers/12345/catalogs/summer-sale-2026/activation-plan/preview \
  -H "Authorization: Bearer $SCOPE3_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "save": false }'
```

## Parameters

| Field          | Type          | Required | Notes                                                                                                                                                                                  |
| -------------- | ------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `advertiserId` | string (path) | Yes      | Unique identifier for the advertiser                                                                                                                                                   |
| `catalogId`    | string (path) | Yes      | Buyer-assigned `catalog_id` or the platform `catalogId` from [list catalogs](/v2/buyer/advertisers/tasks/list-catalogs)                                                                |
| `transform`    | object        | No       | Ad hoc transform definition to preview. If omitted, the catalog's active transform is used. Same shape as [save catalog transform](/v2/buyer/advertisers/tasks/save-catalog-transform) |
| `adcpAgentIds` | array         | No       | Seller agents to evaluate for upstream catalog/creative syndication. If omitted, the catalog's enabled syndication targets are used. Default `[]`                                      |
| `save`         | boolean       | No       | Persist this plan against the latest catalog version. Requires an active saved transform when `transform` is omitted. Default `false`                                                  |

## Response

```json theme={null}
{
  "plan": {
    "planId": null,
    "catalogId": "summer-sale-2026",
    "platformCatalogId": "14",
    "catalogVersionId": "42",
    "transformId": "10",
    "planHash": "9f8e7d…",
    "itemCount": 6,
    "campaignGroups": [
      {
        "key": "acme-austin",
        "name": "Acme - Austin",
        "fieldValues": { "city": "Austin", "citySlug": "austin" },
        "itemIds": ["p1", "p2"],
        "itemCount": 2,
        "budget": { "amount": 100, "currency": "USD" }
      }
    ],
    "creativeAssets": [],
    "syndicationTargets": [],
    "createdAt": null
  }
}
```

The plan mirrors the transform's three parts plus syndication:

* **`campaignGroups`** — one per distinct `groupBy` value, each carrying its derived `fieldValues`, `itemCount`, member `itemIds`, and resolved `budget` (or `null`).
* **`creativeAssets`** — resolved prompts and cache keys (empty when the transform defines none). This leg is currently gated: it is not surfaced in the buyer UI and is not carried out on execute until brand identity is threaded into generation and output fans out per platform format.
* **`syndicationTargets`** — one entry per evaluated seller agent, each with `adcpAgentId`, `shareStatus` (`ready`/`unsupported`), `deliveryMode`, `usesTransformedCatalog`, `requiresCreativeAssembly`, `creativeAgentId` (or `null`), and a human-readable `reason`. `deliveryMode` is one of `native_catalog`, `native_creative_catalog`, `assembled_creative`, `third_party_creative_agent`, or `unsupported`.

When `save` is `false`, `planId` and `createdAt` are `null` (nothing is persisted). When `save` is `true`, they are populated.

## Errors

* `400 VALIDATION_ERROR` — no active transform exists and none was supplied in the body ("No active catalog transform found. Provide a transform in the request body or save one first.").
* `404 NOT_FOUND` — `advertiserId` or `catalogId` does not exist or is not visible to the authenticated account.

See [Errors](/v2/reference/errors) for the full error contract.

## Related

<CardGroup cols={2}>
  <Card title="Save catalog transform" href="/v2/buyer/advertisers/tasks/save-catalog-transform" icon="shuffle">
    Define the fan-out rules
  </Card>

  <Card title="Execute activation" href="/v2/buyer/advertisers/tasks/execute-catalog-activation" icon="play">
    Materialize the plan into jobs
  </Card>

  <Card title="Refresh catalog" href="/v2/buyer/advertisers/tasks/refresh-catalog" icon="arrow-rotate-right">
    Pull the latest feed and re-activate
  </Card>

  <Card title="List catalogs" href="/v2/buyer/advertisers/tasks/list-catalogs" icon="list-ul">
    See synced catalogs
  </Card>
</CardGroup>
