Migrating pricing
AdCP 3.0 renames pricing fields for clarity and separates hard constraints (prices the publisher enforces) from soft hints (historical data to help buyers bid).What changed
The
pricing_model, currency, pricing_option_id, and price_guidance percentiles (p25, p50, p75, p90) are unchanged.
Hard constraints vs soft hints
v3 makes an explicit semantic distinction: Hard constraints — publisher-enforced prices that cause bid rejection if violated:fixed_price— the exact price per unit (fixed-price deals)floor_price— minimum acceptable bid (auction pricing)
fixed_price (guaranteed rate) or floor_price (auction with minimum), never both.
Soft hints — historical percentiles to help buyers calibrate bids:
price_guidance.p25— 25th percentile of recent winning bidsprice_guidance.p50— median of recent winning bidsprice_guidance.p75— 75th percentile of recent winning bidsprice_guidance.p90— 90th percentile of recent winning bids
Deal type mapping
These fields map to standard programmatic deal types:
PG and Preferred Deals both use
fixed_price. The distinction between them is in delivery commitment, not pricing — PG guarantees delivery volume while Preferred Deals offer first-look access without volume guarantees.
Fixed-price deals
v2:fixed_rate to fixed_price. No structural changes.
Auction pricing
v2:price_guidance.floormoves to top-levelfloor_priceprice_guidanceretains only the percentile hints
Price guidance object
The v3price_guidance object contains only statistical percentiles:
Flat-rate pricing
v2 (DOOH with parameters, no type discriminator):fixed_raterenames tofixed_price(same as other pricing models)parametersgains a required"type": "dooh"discriminator for DOOH inventory
parameters in v2 continue to omit it in v3. Note that fixed_price is optional on flat-rate options — when absent, the flat-rate is auction-based (uncommon but valid for some DOOH inventory).
Minimum spend
v3 adds an optionalmin_spend_per_package field to all pricing options:
Transition period handling
During migration, readers may encounter both old and new field names. Consider checking for both:test=false
fixed_rate, price_guidance.floor) are not recognized by v3 schema validation. Remove the v2 fallback once all upstream sellers have migrated to v3 schemas.
Migration steps
1
Rename fixed_rate
Rename
fixed_rate to fixed_price in all pricing options.2
Move floor
Move
floor from inside price_guidance to top-level floor_price.3
Clean up price_guidance
Remove
floor from price_guidance objects (only percentiles remain).4
Update readers
Update code to look for new field names. Consider temporary fallback for both during transition.
5
Test auction bids
Verify floor enforcement works with the new field location.
6
Validate against schemas
Each pricing model has its own schema in
/schemas/v3/pricing-options/.Media products
How products declare pricing options, channels, and capabilities.
Related: Channels | Geo targeting | Creatives | Catalogs | Attribution | AdCP 3.0 overview