Skip to content

[Change] § 5.2 — Make programs and live events selectable, and say what happens when one doesn't air #100

Open

Description

@KonstantinMirin

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 Content identifies the program, including realtime (a live game, not a replay). OpenRTB 2.6 can carry it in the optional site.content or app.content, so a programmatic buyer can check delivery against the record.
  • The LEAP Forecast API marks each UpcomingEvent scheduled (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_detail goes: programs holds what is promised about content.
  • § 3.3 recomputes availability against the programs options 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 commitment is a shortfall. Under #68, the downstream standard applies the remedy.

Open questions for the working group

  1. Should the not-aired rule stay line-level, with commitment applying 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?
  2. Should a tentative option's price be limited to delta_flat, as proposed? Or should the spec also allow a delta_cpm that applies only to impressions inside the option? That would change § 3.1 Selectable structure.
  3. When an event is rescheduled after agreed, which window do impressions match? Matching the agreed schedule makes a moved event count as not aired. Matching the event's updated LEAP UpcomingEvent schedule keeps it while it stays inside the flight.
  4. Should a property option also carry the channel and network objects that @unreconciled suggests on #15, for FAST channels? Or should programs be the only place a buyer selects a channel or network?
  5. Answered in our video and audio PR. content_detail goes, and podcast episodes is its own § 5.2 field, not a series option in programs.

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions