- Commercial formation chooses or negotiates the terms.
- Creative supply attaches approved assets to the resulting packages.
- Operational control changes delivery inside the accepted envelope.
Form the commercial commitment
Readget_adcp_capabilities.media_buy.lifecycle_tools, then choose an
advertised path:
Both paths produce a MediaBuy with seller-issued
media_buy_id, packages,
commercial readback, lifecycle status, and revision.
Use Product discovery and planning to
choose a path, and Proposal negotiation
for immutable revision and hold semantics.
MediaBuy and package model
A MediaBuy contains:- the accepted commercial snapshot and digest when formed from a proposal;
- aggregate budget, pacing, bidding, and daily-cap policy;
- one or more packages representing purchased products and their executable targeting, flight, pricing, and creative requirements;
- operational status, health, indicators, and revision history;
- correlation context and reporting configuration; and
revision,valid_actions, andavailable_actionsfor safe routing.
The buyer does not reconstruct package state from its original request. Read
the current seller snapshot through
get_media_buys.
State machine
Task status is separate.
buy_products, accept_proposal, and
control_media_buy may return submitted, working, or input-required
while an operation awaits systems or human review. The MediaBuy changes only
when that task completes. See Task lifecycle.
Supply and assign creatives
Compact purchase calls do not carry creative bodies. Usesync_creatives to create or
update library assets, then use assignment_operations to assign, unassign, or
replace package creatives.
creative_deadline takes precedence over the MediaBuy-level
deadline. After the deadline, the seller rejects new or replacement creative
assignments for that package. Creative library state and package assignment
state remain distinct: ending a buy releases assignments but does not delete a
reusable library creative.
Control delivery inside accepted terms
Usecontrol_media_buy for
operational changes already permitted by the accepted commercial envelope:
- pause or resume delivery;
- exercise an accepted unilateral cancellation right;
- change total, aggregate-daily, or package budget controls;
- update allocation, pacing, bidding, targeting, catalog references, keywords, impression controls, or optimization goals; and
- change reporting-webhook configuration.
revision from get_media_buys:
CONFLICT. Re-read the
snapshot, reconcile the prior operation, and decide whether the original intent
still applies before retrying.
Amend commercial terms
control_media_buy does not add products, change negotiated pricing or billing
terms, attach creatives, or move a flight outside the accepted envelope. When
an otherwise valid control requires new terms, the seller returns
REQUOTE_REQUIRED.
The buyer then:
- reads
accepted_proposal_idand the current terms fromget_media_buys; - calls
refine_proposalswithchange_kind: "amendment"; - verifies the immutable successor draft;
- finalizes it into a committed hold; and
- calls
accept_proposalto apply the amendment atomically.
change_kind: "cancellation". A cancellation right already granted in the
accepted terms can use control_media_buy directly.
Read, reconcile, and report
Use the surfaces for their intended consistency level:
Webhook arrival order is not resource order. Treat the snapshot as the repair
surface and compare resource revisions rather than transport timestamps. See
Snapshot and log contract.
Seller implementation invariants
Sellers implementing the lifecycle should preserve these properties:- Store MediaBuy status explicitly; do not recompute paused, canceled, or rejected state from flight dates.
- Enforce the revision comparison atomically with every control.
- Return the accepted proposal ID, digest, and complete snapshot for proposal-formed buys so restarted clients can amend safely.
- Keep creative assignment mutations separate from commercial controls.
- Persist account-scoped buys regardless of whether they were created through AdCP or another seller surface.
- Expose current routing through
available_actionsrather than requiring buyers to infer it from status.
Compatibility boundary
Sellers withoutmedia_buy.lifecycle_tools continue to use the 3.x
get_products, create_media_buy, and update_media_buy facade. Keep that
translation in a version-adaptation layer. New business logic should reason in
terms of published offers, immutable proposals, accepted terms, and
revision-checked controls.
See Migrating from 3.1 to 3.2 for the
mapping and Media buy lifecycle flow for
the detailed state and dependency reference.