Repository navigation
Description
What kind of change?
Add a new field
Which section?
5.2 — Inventory composition
Current text
| `content_detail` | Object | seller-set | Shows, series, sections, network verticals |Proposed text
§ 5.2, replace the `content_detail` row:
| `programs` | Selectable[ProgramOption] | OPTIONAL | selectable | The content the line item serves within. See 5.2.9. Absent, or nothing in effect: no content is promised |
#### 5.2.9 programs
**`ProgramOption`** keys:
| Key | Type | Required | Meaning |
| :--- | :--- | :--- | :--- |
| `id` | String | REQUIRED | Option id (§ 3.1). It is not compared with delivered content |
| `content` | Object | OPTIONAL | An AdCOM 1.0 `Content` object, in AdCOM's keys and meanings, `series`, `title`, `network`, `channel`, `genres`, `rating`, `live`, and `realtime` included. Its `channel` is the AdCOM `Channel` object, the TV channel or station the content is on |
| `schedule` | EventSchedule | OPTIONAL | When the event airs. An option for a scheduled event carries it |
**`EventSchedule`** keys come from the LEAP Forecast API `UpcomingEvent`, in
LEAP's spelling and with its meanings, except that the two times are `Instant`
values:
| Key | Type | Required | Meaning |
| :--- | :--- | :--- | :--- |
| `scheduledstart` | Instant | REQUIRED | When the event is scheduled to start |
| `scheduledend` | Instant | REQUIRED | When the event is scheduled to end |
| `flexibleend` | IntegerFlag | OPTIONAL | Whether `scheduledend` can move, which LEAP calls flexible. Absent: `0` |
| `eventstatus` | Integer | RECOMMENDED | `1` (scheduled) \| `2` (tentative) \| `3` (cancelled). Absent: `1` |
An impression matches an option when its content has the option's value for every
key `content` declares, with `network` and `channel` compared by `id`. With
`schedule`, the impression also falls between `scheduledstart` and `scheduledend`,
or the event's actual end when `flexibleend` is `1`.
With an option in effect, the seller MUST serve the line item only into impressions
that match one. When the line item executes over OpenRTB 2.6, the seller MUST send
the matched option's `content` values in `site.content` or `app.content`, under
OpenRTB 2.6's key names, such as `livestream` for `live` and `contentrating` for
`rating`.
An option whose `schedule.eventstatus` is tentative (`2`) MUST NOT be in
`included[]`, and its entry in `deltas`, if any, MUST be `delta_flat`.
An event in effect that is cancelled or does not air in its window delivers
nothing, and its `delta_flat` is not owed. `commitment` still applies across the
other options in effect inside the flight, and a shortfall against it settles
under `shortfall_remedy` (§ 5.7) as for any other delivery.Our video and audio PR carries this text, the § 2.1 summary paths, and a live event series example.
Why
A CTV buyer often buys a show or a game, not an app. The draft can't bind a line item to either, and it can't say what happens when a live event doesn't air.
§ 5.2 has only content_detail, a seller-set description with no shape. A buyer can't select from it, and no rule keeps delivery within it. The § 6.3 CTV example has no content term.
IAB Tech Lab already names both things:
- AdCOM 1.0
Contentidentifies the program, includingrealtime(a live game, not a replay). OpenRTB 2.6 can carry it in the optionalsite.contentorapp.content, so a programmatic buyer can check delivery against the record. - The LEAP Forecast API marks each
UpcomingEventscheduled (1), tentative (2), or cancelled (3), and leaves deal specifics to the Deal API. Deals API 1.0 has no field for a program or an event. OpenProposal agrees those terms first (§ 1.1).
In LEAP's seven-game series sample, Games 5 to 7 are tentative. A buyer committing across it needs to know, before agreed, what happens to its commitment and price if they aren't played.
Unlike #46, #43, and #48, this binds delivery to named programs. Details: Programs and live events: full rationale and examples.
Knock-on effects
content_detailgoes:programsholds what is promised about content.- § 3.3 recomputes
availabilityagainst theprogramsoptions in effect. - Under our buyer writes PR, options of different fields combine, so a program option narrows delivery within the properties in effect.
- Our delivery type and settlement change requests say when delivery below
commitmentis a shortfall. Under #68, the downstream standard applies the remedy.
Open questions for the working group
- Should the not-aired rule stay line-level, with
commitmentapplying across the other options in effect? Or should each option carry its own units or budget, so the seller can choose between moving an unaired event's units and owing a remedy? - Should a tentative option's price be limited to
delta_flat, as proposed? Or should the spec also allow adelta_cpmthat applies only to impressions inside the option? That would change § 3.1 Selectable structure. - When an event is rescheduled after
agreed, which window do impressions match? Matching the agreedschedulemakes a moved event count as not aired. Matching the event's updated LEAPUpcomingEventschedule keeps it while it stays inside the flight. - Should a property option also carry the
channelandnetworkobjects that @unreconciled suggests on #15, for FAST channels? Or shouldprogramsbe the only place a buyer selects a channel or network? - Answered in our video and audio PR.
content_detailgoes, and podcastepisodesis its own § 5.2 field, not a series option inprograms.
Would this break an implementation already built to this draft?
Yes — breaking
Alternatives you considered and rejected
- A free-text preemption clause: an agent can't compute from it.
- One line item per event: a seven-game series becomes seven commitments.
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-03: Rewritten against our video and audio PR: programs replaces content_detail, and an option nests AdCOM Content. Open question 5 is answered.
Analyzed and generated with the help of Claude, fully reviewed by me.
Activity