Problem
AdCP supports fixed-price and floor+auction pricing, but not "price on request." Many premium sellers (OOH, CTV) finalize price through negotiation before committing. Their current options are:
- Publish a price they don't want to commit to
- Omit pricing entirely — which makes the product impossible to transact against in fully-agentic execution
Either choice breaks the end-to-end agentic flow for negotiated-deal sellers.
Proposed addition
An async quote/offer handshake as a lifecycle extension between get_products and create_media_buy:
- Buyer submits a quote request — brief, budget parameters, desired packages
- Seller returns a structured offer — rate, terms, validity window (ISO 8601 expiry)
- Buyer accepts, declines, or counters — structured response, not freetext
- Accepted offer yields a token passed into
create_media_buy to lock the negotiated terms
This sits between discovery and commitment without changing the existing fixed-price path.
Proposed direction on proposal_id
The existing proposal_id field on create_media_buy is the natural anchor for locking a negotiated offer into a buy. The preferred direction is to extend that mechanism rather than introduce new top-level tasks — specifically:
- Add a
request_quote mode to get_products (or a lightweight companion call) that signals the buyer wants a quoted price rather than a catalog price
- The seller responds with a structured offer including a
proposal_id and validity window
- The buyer passes that
proposal_id into create_media_buy as today
This avoids a new task surface and reuses an existing commitment primitive. Alternatives (new request_quote / respond_to_quote tasks) should be considered if the offer/counter flow needs to be multi-round.
Human-in-the-loop on the seller side
Many premium sellers will need a human to approve or set the quoted price before responding. The protocol must support async offer delivery — the seller's response to a quote request may not be immediate. This means:
- The buyer agent must be able to poll or receive a webhook when the offer is ready
- The offer state machine needs at minimum:
pending, offered, accepted, declined, expired
- Validity window expiry must be explicit (ISO 8601 timestamp), not TTL-relative, so both sides have an unambiguous deadline
This is the key design difference from fixed-price: the seller side is not necessarily automated.
Open questions
- Counter-offer depth — single round (buyer accept/decline only) vs multi-round (buyer can counter). Recommend starting with single-round to reduce state machine complexity.
- How offer delivery interacts with existing webhook infrastructure (
push_notification_config)
- Whether
request_quote should be a get_products mode or a distinct lightweight task
Why this matters
Fixed-price and floor+auction cover commodity inventory. Negotiated pricing is the model for premium, high-value placements — exactly where agentic buying offers the most upside. Without this, AdCP cannot fully automate the premium direct market.
Affected areas
- Pricing model
- Task lifecycle / async response patterns
create_media_buy — proposal_id interaction
- Webhook / push notification infrastructure
- Storyboard coverage for negotiated-deal path
Problem
AdCP supports fixed-price and floor+auction pricing, but not "price on request." Many premium sellers (OOH, CTV) finalize price through negotiation before committing. Their current options are:
Either choice breaks the end-to-end agentic flow for negotiated-deal sellers.
Proposed addition
An async quote/offer handshake as a lifecycle extension between
get_productsandcreate_media_buy:create_media_buyto lock the negotiated termsThis sits between discovery and commitment without changing the existing fixed-price path.
Proposed direction on
proposal_idThe existing
proposal_idfield oncreate_media_buyis the natural anchor for locking a negotiated offer into a buy. The preferred direction is to extend that mechanism rather than introduce new top-level tasks — specifically:request_quotemode toget_products(or a lightweight companion call) that signals the buyer wants a quoted price rather than a catalog priceproposal_idand validity windowproposal_idintocreate_media_buyas todayThis avoids a new task surface and reuses an existing commitment primitive. Alternatives (new
request_quote/respond_to_quotetasks) should be considered if the offer/counter flow needs to be multi-round.Human-in-the-loop on the seller side
Many premium sellers will need a human to approve or set the quoted price before responding. The protocol must support async offer delivery — the seller's response to a quote request may not be immediate. This means:
pending,offered,accepted,declined,expiredThis is the key design difference from fixed-price: the seller side is not necessarily automated.
Open questions
push_notification_config)request_quoteshould be aget_productsmode or a distinct lightweight taskWhy this matters
Fixed-price and floor+auction cover commodity inventory. Negotiated pricing is the model for premium, high-value placements — exactly where agentic buying offers the most upside. Without this, AdCP cannot fully automate the premium direct market.
Affected areas
create_media_buy—proposal_idinteraction