Skip to main content
POST /api/v2/buyer/advertisers/{advertiserId}/catalogs/{catalogId}/activation-plan/execute Runs a catalog’s activation plan, creating durable downstream jobs: campaign-activation requests, creative-generation requests, and seller-syndication steps. This is the step that turns the previewed fan-out into real work. The plan is resolved in this order: the planId you pass, else the latest saved plan, else a plan built on the fly from the catalog’s active transform. Pass dryRun: true to build and return the execution without persisting any jobs.

Request

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

Parameters

FieldTypeRequiredNotes
advertiserIdstring (path)YesUnique identifier for the advertiser
catalogIdstring (path)YesBuyer-assigned catalog_id or the platform catalogId from list catalogs
planIdstringNoA saved activation plan id. If omitted, the latest saved plan is used, or one is created from the active transform
adcpAgentIdsarrayNoSeller agents to evaluate/execute. If omitted, the catalog’s enabled syndication targets are used. Default []
dryRunbooleanNoBuild and return the execution without creating durable jobs. Default false

Response

The plan object is the same activation plan shape returned by preview.
{
  "plan": {
    "planId": "10",
    "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": "2026-06-07T12:00:00Z"
  },
  "execution": {
    "executionId": "11",
    "planId": "10",
    "catalogId": "summer-sale-2026",
    "platformCatalogId": "14",
    "catalogVersionId": "42",
    "transformId": "10",
    "status": "pending",
    "trigger": "manual",
    "steps": [
      {
        "stepId": "s1",
        "stepType": "campaign_activation_request",
        "status": "pending",
        "targetAdcpAgentId": null,
        "creativeAssetKey": null,
        "campaignGroupKey": "acme-austin",
        "error": null
      }
    ],
    "creativeGenerationRequests": [],
    "startedAt": "2026-06-07T12:00:00Z",
    "completedAt": null
  }
}
The response returns the resolved plan and the execution it produced. The overall execution.status is pending, completed, or failed, and its trigger is manual, feed_refresh, or scheduled. Each steps[] entry is one downstream job (campaign_activation_request, sync_catalogs, sync_creatives, creative_generation_request, third_party_creative_agent, or unsupported) with its own status of pending, completed, failed, or skipped. Creative work surfaces separately under creativeGenerationRequests. On a dryRun, the execution is built and returned but no jobs are persisted.

Errors

  • 400 VALIDATION_ERROR — no plan is available and none can be built (“No activation plan is available. Save a catalog transform and sync or refresh the catalog first.”).
  • 404 NOT_FOUNDadvertiserId or catalogId does not exist or is not visible to the authenticated account.
See Errors for the full error contract.

Preview activation

Dry-run the fan-out first

Save catalog transform

Define the fan-out rules

Refresh catalog

Pull the latest feed and re-activate

List catalogs

See synced catalogs