Repository navigation
Description
What kind of change?
Add a new field
Which section?
Whole document / more than one section
Current text
| `content_detail` | Object | seller-set | Shows, series, sections, network verticals |
| `serving_mode` | Enum | seller-set | `client_side` \| `ssai` \| `dai` |Proposed text
§ 5.2, in place of the `content_detail` row:
| `episodes` | Enum | REQUIRED when `placement.feed` is Podcast (3) or Catch-up radio (4) | seller-set | `new` \| `catalog` \| `all`. `new`: released within the flight. `catalog`: released before it. `all`: either |
§ 5.2.2, a `Placement` key:
| `feed` | Integer | REQUIRED when `channel` is `audio` | A value from List: Feed Types, such as Podcast (3) | `AudioPlacement.feed`, `audio.feed` |
§ 2.1, `LineItemSummary` adds the paths `episodes` and `placement.feed`.
§ 5.9, the `serving_mode` row and a row after it:
| `serving_mode` | VocabularyTerm | OPTIONAL | seller-set | How the ad reaches the content or the player. Core terms: `dai` \| `scheduled` \| `embedded`, defined below. `placement.ssai` states server-side insertion |
| `retention` | Range[Duration] | REQUIRED when `serving_mode` is `embedded` | seller-set | From release or air. The ad stays in every copy of the content the seller distributes for at least `min` and is removed by `max`. No `max`: indefinitely. When `placement.feed` is present, only copies in that feed count toward delivery |
Later in § 5.9:
The `serving_mode` core terms mean the same on every channel:
- `dai`: an ad server picks the ad for each impression when the content or the ad
break is requested, including ad replacement in a station's stream.
- `scheduled`: the media owner's scheduler pushes plays to the player.
- `embedded`: the ad is recorded into the content or aired in a live program, so
everyone who receives that content receives that ad. A baked-in podcast read, a
live read, and a broadcast spot carried in a simulcast are `embedded`.
On an `embedded` line item:
- `commitment.flight` bounds release or air dates. Delivery to that content after
`commitment.flight.end` counts toward `commitment` until the `final_after` of the
`controlling_measurement` option in effect elapses after that end (§ 5.7.1).
- `episodes`, when present, MUST be `new`.
- `geo`, `markets`, `device`, and `frequency_cap` MUST be absent. `daypart` bounds air
time, not listening or viewing time, so `time_zone` MUST NOT be `viewer_local`.
- `transaction_mechanism.available[]` MUST hold only the `direct_io` option.
§ 5.7, `controlling_measurement` is REQUIRED when `serving_mode` is `embedded`.
§ 5.7.1, after the final-count sentence:
An `embedded` line item with no `final_after` also states no end to the counting in
§ 5.9, and `terms_refs[]` (§ 5.8) may state one.Why
An audio line item can't say whether it sells a podcast, a music stream, or a station simulcast. It also can't say whether the ad is recorded into the content. Those two facts decide what the flight, the targeting, and a delivered unit mean.
Feed. § 5.2 has one audio value, audio_streaming. OpenRTB 2.6 audio.feed already sends the difference, from AdCOM 1.0 List: Feed Types. Streams count per listening session. The IAB Tech Lab Podcast Technical Measurement Guidelines v2.3 count podcasts from server logs, because most players "send no information about playback". Copied to a podcast, the § 6.4 example's completion_rate 0.92 promises something else.
Embedded. The guidelines name baked-in ads, which "are part of the content", so "everyone who downloads the episode gets the same ads". The IAB Digital Audio Buyer's Guide 2.0 says native ads "can be permanently integrated into the program or dynamically inserted". On a baked-in read, the buyer reads the flight end as the day the ad stops. The seller reads it as the last release date, while downloads keep coming. No frequency cap can apply, and no bid request exists for a deal to act on.
Retention. Baked-in ads "can't easily be removed or changed once the episode has published" (Acast), so a promo code outlives its offer. The parties agree how long the ad stays.
Our video and audio PR carries this text, and our settlement PR the final_after sentence. The rules issue lists the embedded rules we left out.
Details: Audio feed and embedded ads: full rationale and examples
Knock-on effects
- Our channel and environments change request (#90) drops
audio_streaming:channelcarries the medium, andfeedthe kind of audio. - Our placement change request (#89) adds
placement.ssai, soserving_modedropsclient_sideandssai. - Our DOOH properties change request (#96) adds the
serving_modecore termscheduled. - Content categories on inventory (#48), from @esteininger. If accepted, a seller should be able to declare categories per show or per episode for Podcast (3) and Catch-up radio (4). On catalog episodes,
classification.assessed_atshould postdate release, so the buyer screens the audio it buys. Anembeddedline item'snewepisodes don't exist at commit, so the buyer screens it on show-level categories, as @esteininger notes on this issue. - Per-source counting (#38): a podcast count is a
metricterm that cites the podcast guidelines (our reply). - Downstream:
feedchecks againstimp.audio.feed.embeddedlands in OpenDirect 2.1 only.
Open questions for the working group
- Should an
embeddedline item be limited todirect_iowith a MUST, as proposed, or with a SHOULD? Some sellers book baked-in reads asprogrammatic_guaranteedthrough an SSP for billing, though no bid request exists. - Should
retentionbe REQUIRED on everyembeddedline item, as proposed, or only when the seller distributes a stored copy? A live read or broadcast spot that is never recorded could then omit it. - Answered in our video and audio PR. Should
episodesstay acontent_detailkey? Or should it move intoplacementfrom our placement change request (#89)? Or onto a series option inprogramsfrom our programs change request (#100)? None of these:content_detailis removed, andepisodesis its own seller-set field in § 5.2. - Answered in part in our video and audio PR: Should post-flight delivery on an
embeddedline item stop counting when our settlement change request (#95)'sfinal_afterelapses? Or shouldembeddedcarry its own delivery window?final_afterends it when present, andcontrolling_measurementis REQUIRED underembedded. Still open: shouldfinal_afterbe REQUIRED on the option in effect too? The rules issue lists it. - Answered in our video and audio PR. Should the § 6.4 audio line item example declare Music streaming service (1), Web radio (5), or Podcast (3)? It offers the
audio/host-read-30sformat. The example declares Music streaming service (1), and the host read is pre-recorded. A new embedded podcast example covers the podcast. - Content categories on inventory (#48) puts
declared[]on the line item. Where should per-show and per-episode categories sit? On a show or episode key in [Change] § 5.2, § 5.5: Structured content categories (taxonomy_ref) on inventory, and a contextual targeting bound #48'sdeclared[]entries, or as AdCOM 1.0Contentcatandcattaxin aprogramsoption'scontent? There, as everycontentkey does, they would also limit which impressions match. - Should an
embeddedline item let the buyer reject a new episode before the ad is recorded into it? If so, on what pre-release disclosure?
Would this break an implementation already built to this draft?
Yes — breaking
Alternatives you considered and rejected
- Audio values in
environments: that field is buyer-selected and says where an ad renders; the feed is what the content is. - Insertion in the format id (
audio/host-read-baked-30s): it doubles every id; insertion isn't creative shape.
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: episodes is its own field, serving_mode gains scheduled, and markets is absent under embedded. Questions 3 to 5 state answers, 4 in part.
Analyzed and generated with the help of Claude, fully reviewed by me.
Activity
esteininger commentedon Oct 23, 2026
Commenting as a content classification vendor (Mixpeek). Cites v3.0-draft-1.
Support
feedandepisodes. Withepisodes: catalog, the episodes already exist, so abuyer can be told what they are about before committing, and with
serving_mode: embeddedthat matters more, because the ad stays in the episode for the retentionwindow. Today the only place for that is free-text
content_detail.#48 proposes structured
content_categorieson inventory. For podcasts and catch-upradio, categories assessed per episode or per show from the audio itself
(
classification.method: model, withassessed_at) would let a buyer screen a catalogbuy the same way it screens video, and exclude a sensitive episode before an embedded ad
is recorded into it.
Suggest #101 notes that
content_categories(if accepted) can be declared per show orper episode for audio, and that
assessed_atshould postdate the episode's release.KonstantinMirin commentedon Oct 25, 2026
Thank you, @esteininger. We record this here as a knock-on of this filing: if the working group accepts your content categories on inventory (#48), a seller should be able to declare categories per show or per episode for the Podcast (3) and Catch-up radio (4) feeds. For catalog episodes (
episodes: catalogorall),classification.assessed_atSHOULD postdate the episode's release, so the buyer screens the audio it buys.One correction: our proposed text limits an
embeddedline item toepisodes: new. Those episodes don't exist when the buyer commits, and an assessment after release comes after the ad is recorded. On anembeddedline item, the buyer screens on show-level categories, assessed from earlier episodes. Per-episode screening fits catalog episodes, sold withdaior another non-embedded serving mode.Open questions for the working group
declared[]on the line item. Where should per-show and per-episode categories sit: on a show or episode key in [Change] § 5.2, § 5.5: Structured content categories (taxonomy_ref) on inventory, and a contextual targeting bound #48'sdeclared[]entries, or as AdCOM 1.0Contentcatandcattaxon a series option inprogramsfrom our programs and live events filing (#100)? This ties to open question 3 of this filing (#101), on whereepisodessits.embeddedline item let the buyer reject a new episode before the ad is recorded into it, and if so, on what pre-release disclosure?Analyzed and generated with the help of Claude, fully reviewed by me.