refine_proposals.
This page is the single reading path for the topology. Everything on it is experimental under the feature id media_buy.delegated_composition: a seller that implements product_ids_exclusive or terms_only declares that id in experimental_features. It assembles capabilities defined elsewhere and adds no wire fields of its own. It is a bootstrap profile: composition and negotiation are standardized, acceptance is not yet (see Open items). The two capabilities are independently useful and are not limited to composers, since any seller that holds no inventory can declare terms_only.
Capabilities
Flow
- Check capabilities. The platform reads
supports_exclusive_product_idsandhold_semanticsbefore relying on either. A seller that predates the flag cannot be trusted to reject it, so the platform also verifies subset-ness of every result. - Bind the universe. The platform calls
request_proposalswithcriteria.product_idsandcriteria.product_ids_exclusive: true. Every purchase, echoed product, and seller-selected signal in the result resolves within that set. - Negotiate.
refine_proposalsrevisions inherit the universe and may only narrow it. Widening is a newrequest_proposals. - Finalize terms.
finalizecommits the same atomic all-or-none batch, but places no hold.expires_atis the acceptance window. The composer never returnshold_unavailablefor an entry whose effective policy is terms-only.hold_semanticsis the default for products and drafts that declare nohold_policy, so a composer that never emits one gets terms-only finalize for every proposal and never returnshold_unavailable. - Reserve and execute on the requester. The platform performs its own availability control when it executes. A bounded universe is not an inventory hold, and a
committedproposal underterms_onlydoes not promise availability.
Open items
Step 5 above has no standard acceptance step yet:accept_proposal creates the MediaBuy on the responding seller, which a composer cannot do, so an implementation completes the flow with a vendor profile until a later minor defines an acceptance-only response variant. That variant needs two decisions before any schema:
- Governance trigger.
accept_proposalcarriesx-governed-commitmentbecause acceptance creates the commitment on the responder. When the executable MediaBuy lives on the requester, the governance check belongs at the point that creates the commitment, not at a record-keeping acceptance. - Correlation handle. An acceptance-only response omits
media_buy_idand package IDs, so it needs the minimum the requester can use to correlate accepted purchases with its own execution identities.