Skip to main content
POST
Plan a directed campaign (alpha)
Alpha. This operation requires both the directed-campaigns mirror gate and the narrower directed-campaign-writes gate. It never creates or changes a provider campaign, but a ready plan is persisted temporarily so it can be accepted and bound to a later assisted create.
Use this planning preflight when a buyer starts with an advertiser brief. It calls the connected provider’s ordinary AdCP get_products path, validates its controlled planning payload, then returns the available products, a typed decision plan, and a 30-minute proposal reference. Raw directed create remains brief-free and defaults to decisionMode: "raw" when that field is omitted. To claim Scope3-assisted brief strategy, accept the proposal and reference its exact digests in the create. Named operation: plan_directed_campaign

Meta decision plan

Meta currently supports this contract. The response is provider-neutral and top-level; adapter extension fields are validated inside Interchange and are not passed through to buyers. Controlled fields are intended for review and exact testing; narrative rationale is not used as a provider enum.
The plan’s product_id is the stable family and concrete_product_id is the only product accepted by an assisted create. Accept the proposal before it expires; proposal and acceptance are bound to the authenticated principal, customer, advertiser, selected account subscription, and provider. The execution snapshot is part of the plan digest. Meta prices the concrete product in the selected ad account’s authoritative currency. For non-USD accounts, floor_price: 0 means no account-currency floor was inferred; Meta omits USD-only proposal and forecast guidance instead of assuming an exchange rate. Meta rejects a missing or changed stored product or currency before mutation and executes from this accepted snapshot. Plan audit rows remain reviewable for at least 30 days, then become eligible for bounded best-effort cleanup on later planning traffic; this is not a hard deletion SLA, and the independent write journal retains replay provenance.
The later create uses decisionMode: "assisted" and passes the accepted planId, planDigest, and writeIntentDigest. Interchange verifies those values, the planned product/pricing/geography, and the exact accepted create intent before reserving budget or calling Meta. One accepted plan authorizes one create; idempotent retries reuse the original create key. Version 1 accepts only a paused, single-package write with the planned product, pricing option, budget, and country targeting. Inline creative, actor, format, catalog, CTA, landing-page, extension, or other package execution fields are rejected until the plan contract can map them. Creative attachment remains unavailable for assisted v1 until the separate sync/assignment workflow lands. Controlled Meta brief planning currently supports contiguous age buckets from 18–24 through 65+; non-bucket or disjoint age language requires clarification instead of being broadened. Separate account readback may preserve provider-authored ages from 13 upward. That read compatibility does not mean Scope3 controlled writes support under-18 targeting; on readback, age_max: 65 represents Meta’s 65+ bucket and an empty gender list means all genders. Explicit composite ranges that align exactly to those contiguous buckets are also supported. For example, 25-54 resolves to 25-34, 35-44, and 45-54 without broadening the requested audience. Explicit country names such as Australia and uppercase ISO codes such as AU are grounded deterministically, so a complete objective/geography/creative brief does not depend on the optional model interpreter being available. Conversion, app-install, and lead briefs currently return execution_setup_unavailable because the directed write contract cannot yet carry the promoted-object setup those objectives require. Planning does not pretend those campaigns are executable.

Clarification is a successful planning result

If the brief is ambiguous, omits geography or objective, contains instruction conflicts, requests unresolved interest or exclusion targeting, or asks for an unverified creative/localization path, Meta returns status: "clarification_required", plan: null, plan_ref: null, and no actionable products. The current contract models positive targeting only, so exclusions must be resolved explicitly rather than being reinterpreted as inclusions. Ask the buyer to resolve the named clarification_codes; do not silently choose defaults and do not proceed to a provider write.
Provider adapters that do not yet implement the controlled decision contract return CAPABILITY_NOT_SUPPORTED. They can still list products or accept a raw directed write when those separate capabilities are enabled. See Directed campaigns (alpha), List directed campaign products, Accept a directed campaign plan, and Create campaign.