Skip to content

RFC: Negotiated pricing / price-on-request handshake in the buy lifecycle #5540

Description

@pkras

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:

  1. Publish a price they don't want to commit to
  2. 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:

  1. Buyer submits a quote request — brief, budget parameters, desired packages
  2. Seller returns a structured offer — rate, terms, validity window (ISO 8601 expiry)
  3. Buyer accepts, declines, or counters — structured response, not freetext
  4. 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_buyproposal_id interaction
  • Webhook / push notification infrastructure
  • Storyboard coverage for negotiated-deal path

Metadata

Metadata

Assignees

No one assigned

    Labels

    claude-triagedIssue has been triaged by the Claude Code triage routine. Remove to re-triage.documentationImprovements or additions to documentationknowledge-gapmedia-buyIssue concerns the media-buy protocol domain

    Type

    No type

    Projects

    Status
    Shipped

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions