> ## 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.

# Accept a directed campaign plan (alpha)

> Bind a temporary Scope3-assisted plan to the authenticated principal before create

Accept a ready decision plan returned by
[`plan_directed_campaign`](/v2/buyer/campaigns/tasks/plan-directed-campaign).
Acceptance is required before a create can claim `decisionMode: "assisted"`.

The proposal expires after 30 minutes and is bound to the customer,
advertiser, connection-account subscription, provider, and authenticated
principal that proposed it. Replaying acceptance is idempotent only for that
same principal. A missing, expired, mismatched, or cross-account plan fails
closed.

**Named operation:** `accept_directed_campaign_plan`

| Field          | Location | Type           | Required | Description                                                                                                          |
| -------------- | -------- | -------------- | -------- | -------------------------------------------------------------------------------------------------------------------- |
| `connectionId` | path     | integer        | Yes      | Connection used to propose the plan                                                                                  |
| `accountId`    | path     | integer        | Yes      | Provider account used to propose the plan                                                                            |
| `planId`       | path     | UUID           | Yes      | `plan_ref.plan_id` from the planning response                                                                        |
| `advertiserId` | body     | numeric string | Yes      | Advertiser bound to the proposal                                                                                     |
| `plan_digest`  | body     | SHA-256 digest | Yes      | Exact `plan_ref.plan_digest` from the planning response                                                              |
| `write_intent` | body     | object         | Yes      | Exact assisted-v1 `name`, `currency`, and paused single-package `mediaBuy` payload that the later create will submit |

```bash theme={null}
curl -X POST \
  "https://api.interchange.io/api/v2/buyer/storefront-connections/42/accounts/81/directed-campaigns/plans/11111111-1111-4111-8111-111111111111/accept" \
  -H "Authorization: Bearer $SCOPE3_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "advertiserId": "12345",
    "plan_digest": "sha256:...",
    "write_intent": {
      "name": "US awareness campaign",
      "currency": "USD",
      "mediaBuy": {
        "brand": { "domain": "example.com" },
        "total_budget": { "amount": 2500, "currency": "USD" },
        "start_time": "2026-08-01T00:00:00Z",
        "end_time": "2026-08-31T23:59:59Z",
        "paused": true,
        "packages": [{
          "product_id": "meta_awareness_7a31c902",
          "pricing_option_id": "meta_awareness_7a31c902_cpm",
          "budget": 2500,
          "targeting_overlay": { "geo_countries": ["US"] }
        }]
      }
    }
  }'
```

The response repeats the immutable plan reference with
`acceptance_status: "accepted"` and adds the digest of that exact write
intent. Pass it to the directed create as:

```json theme={null}
{
  "decisionMode": "assisted",
  "decisionPlan": {
    "planId": "11111111-1111-4111-8111-111111111111",
    "planDigest": "sha256:...",
    "writeIntentDigest": "sha256:..."
  }
}
```

The later create must submit the same `name`, `currency`, and complete
`mediaBuy` value that was accepted. Interchange revalidates the accepted
reference, planned product/pricing/geography, and the full write-intent digest
inside the create claim, before budget reservation or provider I/O. Each
accepted plan can authorize one create; retries use the original idempotency
key. Impersonated identities cannot propose, accept, or spend an assisted plan.
The root write currency, `mediaBuy.total_budget.currency`, accepted snapshot
pricing currency, and selected provider account currency must match exactly.
For non-USD Meta accounts, a zero snapshot floor means no account-currency
floor guidance was inferred; it is not a converted USD floor.
This first assisted contract requires a paused launch and permits only the
planned product, pricing option, package budget, and country targeting on its
single package. Inline creatives, creative assignments, formats, catalogs,
actors, calls to action, landing pages, package extensions, and other package
execution fields fail closed until a later plan version maps them explicitly;
creative attachment is unavailable for assisted v1 until the separate
sync/assignment workflow is ready.
Meta also verifies that its immutable stored-product execution snapshot still
matches and that provider readback preserves the accepted campaign name.
This alpha gate covers create only; updates and cancellation still use the
existing directed write contract.
