IAB Tech Lab marked the Deals API at version 1.0 in February 2026, and trade coverage picked it up again in late October. The API finally names the curator, the origin seller, and the curation fee type. None of that rides on the live bid request. On the wire you still get imp.pmp.deals with a deal id, a floor, and maybe wseat. The audience filter, the inventory bundle, and the data fee you negotiated live upstream, or in a spreadsheet, or in the DSP deal UI. When that upstream layer slips, the auction can clear as open traffic while finance still books a curated CPM. Fill drops because you are bidding the wrong auction, and money leaks because you are paying for packaging that never reached the impression.
Here are eleven ways that happens in production.
private_auctionleft at 0 on a deal-only buy. OpenRTB 2.6 defaultspmp.private_auctionto 0, which means outside bidders may compete. A curated package sold as exclusive should carryprivate_auction: 1so only listed deals qualify. If the SSP omits the flag, your deal bid can win, but so can anyone else on the open exchange at a lower price. You thought you bought a walled garden; the request says otherwise.Deal Sync metadata promises a segment the bid request cannot prove. The Deals API and Deal Sync objects can describe segments, inventory lists, and curator roles. The bid request has no field that says "this impression passed filter X." You validate the deal id in the DSP, not the filter graph. When the curator loosens targeting to recover volume, the first signal is often a win without the audience you sold to the client.
dealidmissing on the bid even thoughimp.pmp.dealslisted your deal. The response must echo the deal id when you transact against an in-request deal. Without it, reporting attributes spend to open auction, pacing rules misfire, and loss analytics blame creative filters instead of deal mismatch. Loss reason 213 (not allowed in PMP deal) is real, but so is the quieter case: you win, and finance cannot tie the impression back to the curated line item.Multiple deals in the array when the buyer activated one. Some exchanges broadcast every PMP they could serve on an impression. Your seat bids deal A; the request also advertises deals B and C for other buyers. That is legal OpenRTB, but it confuses deal-level QA if you sample one id and assume the path is exclusive. You optimize against the wrong floor and wonder why margin disappeared.
wseatorwadomainstripped between curator and exchange. Deal objects can restrict which buyer seats or advertiser domains may bid. Curators sometimes normalize requests for latency and drop optional arrays. Your bid goes in from an allowed seat, loses to a cheaper open bidder, and the seller swears the deal was "activated." The payload tells a different story.Impression-level
bidfloorundercuts the per-deal floor you synced. Floors can live onimp.bidfloorand again on eachpmp.deals[].bidfloor. A curated package often sets a higher deal floor to cover data and curation fees. If only the impression floor survives the hop, open auction bids above the low floor and below your economic deal floor steal wins you cannot serve profitably.Duration floors on video deals ignored after curation repackaging. OpenRTB 2.6 dated snapshots added
durfloorsand related video deal pricing. A curator bundles long-form CTV with a 30-second creative requirement. The repackaged request dropsdurfloorsbecause the downstream exchange runs an older profile. Your bidder passes schema checks; the player rejects the creative length.Curator fee embedded in UI, invisible on the request. TripleLift’s October 2026 Uber audience packages and Multilocal’s FouAnalytics curated PMPs both describe bundled data plus inventory. Neither OpenRTB nor the winning bid exposes how much of the CPM is inventory versus data versus curation margin. When fill softens, buyers cannot tell whether to renegotiate the package or fix targeting.
Supply-side targeting miscounted as "curation." OpenX’s 2026 reporting split audience and content targeting from inventory-only curation. Deals sold as curated bundles may be executed as supply-side targeting packages with different fee and auction rules. Your operational runbook says PMP; the SSP’s internal taxonomy says something else. Spend lands on the wrong report row.
Deal id rotation without DSP sync. Curators rotate ids after package changes. The Deals API row updates; your DSP still bids last month’s id. The exchange treats the bid as non-deal or maps it to a generic PMP with weaker filters. Wins look fine in aggregate until you audit domain and app bundle mix.
Protobuf JSON
privateAuction: falseon a gRPC hop. On gRPC bid streams the same flag serializes as boolean camelCase. A spec-JSON validator saysprivate_auction: 1; a proto hop silently reads open auction if the field name or type drifts. Curated exclusivity dies in transport, not in the sales contract.
How you catch it
An LLM wiring AdCP, ARTF, or AAMP can emit an OpenRTB request that parses clean and still misrepresents the curated buy. The RPC or MCP task can return OK while private_auction, deal floors, and dealid are wrong for what finance sold.
RTBlint is the deterministic check on that object: imp.pmp.deals, per-deal floors, seat restrictions, and the bid response dealid. It is independent of IAB Tech Lab and of AgenticAdvertising.org; the spec does not require it, but someone has to diff the live request against the deal terms you think you bought.
Run rtblint validate on sampled bid requests from the curated line item, or npm install rtblint-core in CI on fixtures your SSP provides. For ARTF paths that mutate deals, validate the patched request before it hits the exchange, not only the agent’s success bit.
Where to go next
- What is curation in programmatic? walks how a curated package collapses to an ordinary deal id on the wire.
-
Bid floors in OpenRTB covers impression floors versus
pmp.deals[].bidfloorand video duration floors. - PMP vs preferred deal vs programmatic guaranteed separates auction types so you know when open competition is allowed by design.
- OpenX CTV supply-side targeting vs curation shows why the word "curation" on a rate card may not match IAB’s taxonomy.
- Dark pooling and authorized seller id is a supply-path angle when the curated deal’s seller chain does not match the inventory you thought you bought.
Top comments (0)