Repository navigation
Description
What kind of change?
Add a new field
Which section?
5.9 — Execution
Current text
§ 5.9: | `transaction_mechanism` | Object | selectable | `available[]` from `DIRECT_IO` \| `PROGRAMMATIC_GUARANTEED` \| `PREFERRED_DEAL` \| `PRIVATE_AUCTION` \| `OPEN_AUCTION`. A seller MAY offer the same inventory through more than one |
§ 5.6: | `availability` | Object | derived | `{ unit, basis, as_of, granularity, type: forecast \| reservable, quantity }`. Recomputed against the buyer's selection |Proposed text
§ 5.9, `transaction_mechanism` row: each `available[]` entry becomes an option
`{ id, delivery_type }`. `id` is the mechanism. `delivery_type` is REQUIRED:
`guaranteed` \| `share_of_voice` \| `non_guaranteed`. The value on the
mechanism in effect (the buyer's selection, or its `included[]` value when
unset, § 3.1) applies to the line item.
§ 5.9, after the `transaction_mechanism` row:
| `sov_basis` | Enum | seller-set | REQUIRED when an option's `delivery_type` is `share_of_voice`. `impressions`: a share of the line item's eligible impressions (digital placements, pooled DOOH products). `loop_time`: a share of each named screen's loop time (fixed-loop DOOH spots) |
| `sov_share` | Fraction | seller-set | REQUIRED when `sov_basis` is `impressions`; absent under `loop_time`. The promised share, greater than 0 |
After the table:
**Delivery type.** What the seller promises to deliver, independent of how
the line item transacts and how it is priced.
- `guaranteed`: the seller reserves the committed units for the flight, or,
on a flat-fee entry, which has no units, the days of the flight.
- `share_of_voice`: the seller reserves a fixed share of the inventory, up to
all of it, for the flight. With a `daypart` (§ 5.5), the share is of the
daypart's hours only, read in the line item's `time_zone`. Sponsorships,
roadblocks, takeovers, and DOOH loop and rotary buys.
- `non_guaranteed`: the seller reserves nothing.
An option's `delivery_type` MUST be one its mechanism allows:
| `transaction_mechanism` | `delivery_type` |
| :--- | :--- |
| `direct_io` | Any |
| `programmatic_guaranteed` | `guaranteed`, `share_of_voice` |
| `preferred_deal` | `non_guaranteed` |
| `private_auction` | `non_guaranteed` |
A domination, every screen and static face in a location, is `guaranteed`
with an included `exclusivity` term of `scope: sole` (§ 5.6), not
`share_of_voice` at 100%.
`sov_basis: loop_time` requires `properties.available[].allocation: all` on
every DOOH property.
Under `loop_time`, the share derives from the loop: `slots_per_loop` ×
`slot_s` ÷ `length_s` (#96). Under `impressions`, `sov_share` states it. Its
denominator is impressions; a share counted in plays is a different product
and doesn't use this basis. On DOOH, its eligible screens are the line item's
screen set, the pool the seller allocates from under
`properties.available[].allocation: seller_allocated`. Its scope is the line
item's flight and `daypart`.
§ 5.6, `availability` row, append:
`certainty` MUST be `forecast` when the line item's `delivery_type` is `non_guaranteed`.Names and types follow the coming PRs, listed in the rationale. The settlement PR carries this text.
Why
For direct_io, a line item never says whether the seller promises delivery. For programmatic_guaranteed, it never says whether the promise is units or a share. We ask for one seller-set value that says it, per mechanism.
transaction_mechanism (§ 5.9) implies whether delivery is promised, except for direct_io. An IO can reserve an impression goal, take over a home page, or run best effort. Downstream, OpenRTB 2.6 deal.guar and Deals API 1.0 terms.guar flag a guaranteed programmatic deal. OpenDirect 2.1, the § 1.1 direct-buy target, puts OpenDirect 2.1 Product.deliverytype on the Product each Line books; an OpenProposal line item has no equivalent. Google Ad Manager line item types are guaranteed as Sponsorship (a percentage of impressions) or Standard (an impression goal); Network, Bulk, and Price priority are non-guaranteed. availability.certainty describes a recomputed number, not a promise.
Terms depend on the type, not only on the cost method. The IAB/4A's Standard Terms and Conditions, Version 3.0 set cancellation notice by it. Under § V(a), notice is 14 days guaranteed, 7 non-guaranteed, including "some non-guaranteed CPM Deliverables", and 30 flat-fee or fixed-placement, including share-of-voice. A makegood applies when Deliverables "fall below guaranteed levels" (§ VI(b)). Under non_guaranteed no units are promised, so, as our settlement change request states in § 5.7, delivery below the commitment owes no makegood.
A share of voice has one of two bases, as @premesh (OUTFRONT Media) points out on share of voice for DOOH (#79). A fixed loop spot is a share of loop time on named screens. A rotary product is a share of impressions across a pool of screens. They deliver and price differently, so sov_basis says which one a line item sells. It stays one delivery type, because T&Cs § V(a)(iii) treat share of voice as one class for notice. Only a fixed loop derives its share, as @premesh notes on #134, so the seller states a pooled share. Its denominator, pool, and scope follow @premesh's answer to @jaanijuk's question. @premesh's later input on #79 adds two cases. A share of part of the day follows the line item's own § 5.5 daypart, and open question 6 asks whether it should. A domination's static faces have no loop or impressions to share, so, as @premesh suggests, it is guaranteed plus § 5.6 exclusivity.
§ 6.2 offers one line item as programmatic_guaranteed or preferred_deal, so the type follows the mechanism in effect.
Knock-on effects
cancellation_policyandshortfall_remedystay the line item's actual terms; the type tells a buyer which T&Cs default they depart from. A seller needing different terms per type publishes separate line items.- § 6.2 gives each mechanism option its
delivery_type. § 6.3 holds anon_guaranteedline item; the holds PR offers it no hold, and open question 4 asks whether a rule should require that. delivery_type,sov_basis, andsov_shareare offered terms, so they fall insiderecord_digest(#63, #64). Appendix A/B gain twoseller-setfields. Related: #54 (guaranteed audience delivery) and #79 (share of voice for DOOH).allocationis in our DOOH properties change request (#96). Daypart windows and the line item's onetime_zoneare in our reply on typed targeting values (#58). § 5.6exclusivityterms are typed in our cancellation and exclusivity change request (#98).
Open questions for the working group
- Should
delivery_typekeepshare_of_voiceas a third value, or use theexclusivevalue of OpenDirect 2.1Product.deliverytype(a 100% share only) instead? Or should it carry two values, as OpenRTB 2.6deal.guardoes? - Should
delivery_typebe REQUIRED for every mechanism, as we propose, or only fordirect_ioandprogrammatic_guaranteed, where the mechanism alone doesn't say what is promised? - Answered in part by @premesh on #134: Under
share_of_voice, should delivery belowcommitment.amountbe a shortfall, or only a missed share? Our settlement change request counts it only underguaranteedand defines no share metric. Delivered share belongs in the settlement record, against the same denominator and pool as the promised share, as the delivery type and settlement PR states. Still open, and among the rules we left out of the text: whether a delivered share belowsov_shareis a shortfall. - Answered in part in our lifecycle change request (#65) and by @EvgenyAndroid, with @premesh, on [Change] § 5.6.2 — hold_status needs refused and re-entry to requested #66: What should a hold on a
non_guaranteedline item, such as the § 6.3 CTV line item example, firm (hold states (#66), commitment acceptance (#67))? The offered terms only, or nothing, so that holds apply only underguaranteedandshare_of_voice? Open question 4 on [Change] § 5.6.2 — hold_status needs refused and re-entry to requested #66 records the answer: a hold firms its version's offered terms, andheldalways means reserved inventory. A seller that reserves nothing offers no hold (hold_terms.available: false, or nohold_terms) and states the expiry inpricing[].price_valid_until. Still open, among the rules we left out: whethernon_guaranteedrules out a hold, in what form, or leaves it to seller policy. The holds PR shows the § 6.3 example withhold_terms.available: false. - Should
guaranteedalso cover a promised audience quantity, as guaranteed audience delivery (#54) asks for OOH and DOOH? Or is a committedimpressionsvalue enough, even on anon_guaranteedline item? Our DOOH plays and impressions change request and our settlement change request provide one. - Should a share of voice follow the line item's own
daypart, as proposed, or carry a separate seller-set scope, as @premesh suggests on #79? With a separate scope, a buyer who narrows thedaypartunder our reply on typed targeting values (#58) can't narrow the share. - Answered by @premesh. A domination sells static and digital faces together, one line item per channel, as @premesh answered on #102. A
soleterm in our cancellation and exclusivity change request (#98) separates only within one line item. Does each line item carry its ownsoleterm, or does one exclusivity term name the location across them? One term, they suggest, at the proposal or package level, with line items referencing it, so the terms can't drift apart. Open question 6 on #98 asks whether the spec adds it, and static OOH continues in its own thread (#125). Our reply on #146 keeps each line item independent and asks for the business case.
Would this break an implementation already built to this draft?
Yes — breaking
Alternatives you considered and rejected
A single scalar (breaks § 6.2), three direct_io values (mixes how with what), inferring from availability.certainty (recomputed), ad-server priorities (seller-internal), two share-of-voice types (one class under the T&Cs): Delivery type and hold terms: full rationale and examples.
You are commenting as
Other — IAB Tech Lab member (Postindustria).
Before you submit
- I have read CONTRIBUTING.md and agree my contribution may be published under this repository's licence.
- This contains no confidential or commercially sensitive information.
Revised 2026-11-05: Question 7 points to our reply on #146. delivery_type sits on each mechanism option, and guaranteed covers a flat-fee entry.
Analyzed and generated with the help of Claude, fully reviewed by me.
Activity
KonstantinMirin commentedon Oct 23, 2026
Revision, from seller input on #79. @premesh (OUTFRONT Media) points out that a share of voice is measured over one of two bases. A fixed loop spot is a share of loop time on named screens. A rotary product is a share of impressions across a pool of screens. Labeled with one
share_of_voice, the two compare at the same CPM and share, although they deliver and price differently.We revise the
share_of_voicebullet to:We keep one delivery type rather than two. The IAB/4A's Standard Terms and Conditions 3.0, § V(a)(iii), treat share of voice as one class for notice. The basis changes what is counted, not the promise.
allocationis in our DOOH properties change request (#96), which takes the matching revision.Analyzed and generated with the help of Claude, fully reviewed by me.
KonstantinMirin commentedon Oct 25, 2026
Second revision, from seller input on #79. @premesh (OUTFRONT Media) names two cases that our
sov_basisrevision doesn't fully cover, and how they'd model each.guaranteedunits plus exclusivity.We take both. For the scope, we use the line item's own § 5.5
daypartrather than a separate field, so the hours a line item runs and the hours its share covers can't differ. We revise theshare_of_voicebullet again and add one line after the bullets:Daypart windows and the line item's one
time_zoneare in our reply on typed targeting values (#58). § 5.6exclusivityterms are typed in our cancellation and exclusivity change request (#98).Open questions:
daypart, as proposed, or carry a separate seller-set scope, as @premesh suggests on #79, so that a buyer who narrows thedaypartunder our reply on typed targeting values (#58) can't narrow the share?soleterm in our cancellation and exclusivity change request (#98) separates only within one line item. Does each line item carry its ownsoleterm, or does one exclusivity term name the location across them? One term, they suggest, at the proposal or package level, with line items referencing it, so the terms can't drift apart. Open question 6 on #98 asks whether the spec adds it, and static OOH continues in its own thread (#125).Revised 2026-10-27: @premesh answered open question 2, which is open question 7 in the issue body. They suggest one exclusivity term per location, at the proposal or package level. Open question 6 on #98 asks whether the spec adds it.
Analyzed and generated with the help of Claude, fully reviewed by me.
premesh commentedon Oct 27, 2026
On OQ7: from the seller side, one exclusivity term should name the location and apply to every line item it covers, static and digital. A station or venue domination is often sold as several line items: digital screens, static panels, sometimes floor or wall graphics. If each line carries its own exclusivity term, they can drift apart in negotiation, and the buyer thinks they own the location when they own half of it.
Suggest exclusivity lives at the proposal or package level, scoped by location, with line items referencing it. This connects to #98: separation needs a
locationvalue (no competitor anywhere in the venue) and aloopvalue (no competitor in the same digital loop) for dominations to be expressible.