Repository navigation
Description
What kind of change?
Change a field's type or shape
Which section?
Whole document / more than one section
Current text
§ 5.1:
| `channel` | Enum | immutable | `display` \| `video` \| `audio` \| `ctv` \| `dooh` \| `native`. The discriminator for how the rest of the line item is read |
§ 5.2:
| `environments` | Object | selectable | `available[]` from `web_desktop` \| `web_mobile` \| `app_mobile` \| `ctv` \| `dooh` \| `audio_streaming` |Proposed text
§ 5.1, `channel` row:
| `channel` | MediaChannel | REQUIRED | immutable | Core terms in § 5.1.1. The discriminator for how the rest of the line item is read |
#### 5.1.1 channel
An impression's channel is the first row of this table that the impression
matches. Conditions are stated in AdCOM 1.0 terms: the distribution channel,
the ad's media (`Placement` subtypes) and the device type. Where an impression
accepts more than one medium, its media is that of the ad served.
| `channel` | Condition |
| :--- | :--- |
| `dooh` | Distribution channel `Dooh` |
| `audio` | Audio ad (`AudioPlacement`) |
| `ctv` | A TV device type |
| `native` | Native ad (`DisplayPlacement.nativefmt`), including native ads with video assets |
| `video` | Video ad (`VideoPlacement`) |
| `display` | Any other display ad (`DisplayPlacement`) |
**`MediaChannel`** is a `VocabularyTerm` (§ 2.2) whose core terms are the rows
of this table. An impression a row matches has that row's channel, so an
extension term covers only impressions no row matches.
Device types are values of AdCOM 1.0 List: Device Types, each written as its
name followed by its code. The *TV device types* are Connected TV (3),
Connected Device (6), and Set Top Box (7). The *mobile device types* are
Mobile/Tablet - General (1), Phone (4), and Tablet (5).
- The seller MUST serve a line item only on impressions of its `channel`.
Placement type, such as interstitial or rewarded (OpenRTB 2.6
`video.plcmt`, `imp.instl` and `imp.rwdd`), does not change the channel.
- Impressions in linear TV, including addressable linear, are outside this
table: they have no core `channel` term in 3.0.
§ 5.2, `environments` row:
| `environments` | Selectable[Environment] | OPTIONAL | selectable | The distribution channels and device types the line item runs on. See 5.2.1. Absent: the seller promises no environment |
#### 5.2.1 environments
**`Environment`** is a value of this table. Each value is the set of
(distribution channel, device type) pairs formed from its row, in AdCOM 1.0
terms. An impression matches the value when both its distribution channel and
its device type are in the row. Device types are as in 5.1.1.
| `environments` | Distribution channel | Device types |
| :--- | :--- | :--- |
| `web_desktop` | `Site` | Personal Computer (2) |
| `web_mobile` | `Site` | The mobile device types |
| `app_mobile` | `App` | The mobile device types |
| `ctv` | `Site` or `App` | The TV device types |
| `dooh` | `Dooh` | Any |
Each `environments.available[]` value MUST match at least one impression to
which 5.1.1 gives the line item's `channel`.
§ 2.1, `LineItemSummary`: add `environments.available[]`.Why
channel and environments have no definitions, and their values overlap. Two sellers can label the same impression differently, and a buyer can't check delivery against the label. In @jaanijuk's mapping run on #8, deriving environments from an ad server's environment type labeled a DOOH screen as web inventory. We define each value in the terms AdCOM uses to describe an impression: distribution channel, ad media, and device type. Delivery is then checkable wherever the impression carries them.
videoorctv? The CTV example useschannel: ctv, but nothing rules outchannel: videowithenvironments: [ctv]. The § 2.1 summary carrieschannelbut notenvironments.doohis a distribution channel. OpenRTB 2.6 Object: DOOH replacessiteorapp, with any media.nativeis a display format. AdCOM puts it insideDisplayPlacement, so native video fits two values.audio_streamingnames a medium, not a surface, as @fgranata notes on #8.ctvstays in both fields. As a channel, it marks line items whosefrequency_cap.perandplacement.ssaidiffer from web and app. As an environment, it is the TV surface, which anaudioline item can also select.
The first-match order keeps the six labels and gives each impression one. Because channel is an open vocabulary, an extension term covers what no row matches. Print and static OOH have no ad-served impression. @matthew-iabtechlab filed the print channel change request (#102) for BCN, and @clerongi and @premesh raised OOH as a channel (#49). They need no row and no rule of their own: a field with no meaning for them stays absent, and an absent key promises nothing. Whether 3.0 adds core print or ooh terms stays with #102 and #49, linear TV with #44, and the environment list with #8.
Our channel definitions PR (#119) carries the channel and environment tables, with channel typed MediaChannel. Our shared types PR defines VocabularyTerm and states the unknown-term rule once, in § 2.2.
Details: Channel and environments: full rationale and examples.
Knock-on effects
- The audio example lists
web_mobileandapp_mobileinstead ofaudio_streaming. - A cross-screen video deal becomes a
videoand actvline item.requires.all_of[]from #23 binds them in onecommit, as our lifecycle PR defines it. @fgranata reports that their exchange already sells television as its own lane, by the TV device types. devicenarrowsenvironments. Our buyer writes PR typesdeviceon AdCOM Device Types, as our reply on #58 proposed. A seller or buyer separates consoles and streaming devices from TVs withdevice, not with another environment value.
Open questions for the working group
- Should 3.0 keep the six
channellabels and define them with the first-match table? Or should 3.0 replacechannelwith separate media, distribution, and device fields, and derive the label from them? - Is the first-match order right?
audiocomes beforectv, so audio in a TV app isaudio.nativecomes beforevideo, so native video isnative. Should either pair go the other way? - Answered by @fgranata on this issue. Should a cross-screen video deal split into a
videoand actvline item, tied by line-item dependencies (#23)? Or shouldchannelsay what renders andenvironmentssay where, as @fgranata suggested on open question 7 on environments (#8)? Thenfrequency_cap.perandplacement.ssaiwould be set per environment. Two line items: their exchange already works that way, and they withdrew the alternative. - Answered in part in our device-type revision: the filing adds no
connected_devicevalue.app_tvin place ofctvwent with the alternative that @fgranata withdrew on this issue. Our channel definitions PR (#119) dropsaudio_streaming. Still open: should open question 7 on environments (#8) settle the rest of the value list, includingapp_tablet? - Answered in our shared types PR. A consumer skips a line item whose
channelit doesn't recognize. Should the text also say that it can't commit alinked_executionorrequiresfrom line-item dependencies (#23) that contains the line item? § 2.2 states that a receiver never assents to what it can't read. So it can't send acommitthat needs the skipped line item. - Answered by @premesh on #125. Should proof of performance be one field across channels that also covers DOOH proof of play, as @premesh asks on #49? Or should it be part of each channel's own object, like
print.proof_of_publicationin #102? One type. Our DOOH PR definesProofOfPerformance { logged_by, evidence[] }. Itsevidence[]is aVocabularyTermlist whose core terms areplay_log,photo, andaudit_report. A channel that 3.0 adds, such as print or static OOH, can reuse the type with its own evidence terms, such asinstall_recordortearsheet. - A smart speaker that reports Connected Device (6) is in the
ctvenvironment. So an audio line item sold on smart speakers selectsctv, and a buyer screening forctvalso finds that audio. Should smart speakers stay inctv, narrowed bydeviceas in our reply on typed targeting codes (#58)? Or should they get their own value? For any separate Connected Device (6) value, @fgranata asks that a seller may omit it and a buyer reach TV without selecting it. - What happens when an impression doesn't carry an attribute that a condition names?
device.devicetypeis optional in OpenRTB 2.6 Object: Device. So a TV video impression without it falls through tovideo, and an impression without a device type matches no environment exceptdooh. Should a missing attribute fail the condition? Or should the seller classify the impression from what it knows about the property? This goes with the question on sendingdevice.devicetypein the supporting material's open questions. - Should the seller also serve a line item only on impressions that match an environment in effect:
environments.selected[]or, without it,included[]? As written, 5.2.1 limits which environments a line item may offer, not where it serves. So a buyer can check delivery againstchannelbut not against the environments it chose.
Would this break an implementation already built to this draft?
Yes — breaking
Alternatives you considered and rejected
channelfor what renders,environmentsfor where (#8): TV would share a line item with web and app. Butfrequency_cap.perandplacement.ssaiare set once per line item, and they differ on TV. @fgranata has withdrawn it.- Connected Device (6) in its own
connected_deviceenvironment: a television line item couldn't serve those impressions, which @fgranata's TV lane includes.deviceseparates them where needed. - Separate media, distribution, and device fields: cleanest. The table derives the label from them, so a later version can add them without relabeling.
channel[]: breaks one channel per line item.
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 as the text our PRs carry, with their field names and open questions 4, 6, and 9 updated. An open MediaChannel vocabulary replaces the print and static OOH paragraph and answers open question 5.
Analyzed and generated with the help of Claude, fully reviewed by me.
Activity
fgranata commentedon Oct 23, 2026
Implementation evidence from an in-app + CTV supply-side exchange, on the open questions.
Q3 (one line item per channel vs. channel = what renders, environments = where). We already operate the way the first-match table implies. Television is its own lane in our catalogue: separate line items, separate floors, separate frequency and serving settings, identified by device type 3/6/7 on the request, never by OS (a large share of our CTV impressions report
android). A cross-screen video deal is two line items for us today, so the table matches practice; the alternative I floated on #8 would makefrequency_cap.basisandserving_modeper environment, which we could not honour on one line. Withdrawn in favour of this definition.Q4 (
connected_device). We fold device type 6 into the television lane and do not yet see meaningful volume on it to treat separately. A separate environment value is fine as long as a seller may omit it; a buyer should not have to select it to reach television.Q2. No audio inventory here yet; no position on
audiobeforectv.One request: keep the device-type codes in the table, as drafted. They are what we filter on at request time, so delivery against the label becomes checkable for us without a mapping step.
KonstantinMirin commentedon Oct 23, 2026
Revision, from implementation evidence on this issue. @fgranata reports that their television lane is identified by device type 3, 6, or 7 on the request, and that device type 6 carries no volume worth separating. As drafted,
ctvcovers device types 3 and 7 only. That would leave their television line items unable to serve Connected Device (6) impressions, because a line item serves only impressions of itschannel.We revise both tables:
The device-type codes stay in the table, as @fgranata asks, because delivery is checked against them at request time. A seller or buyer that wants to separate consoles and streaming devices narrows with device targeting, which our reply on typed targeting codes (#58) defines on AdCOM Device Types. A separate environment value isn't needed for that. This also answers part of open question 4: the filing adds no
connected_devicevalue.The same evidence answers open question 3. A cross-screen video deal is two line items,
videoandctv, tied by line-item dependencies (#23), and @fgranata withdraws the alternative raised on open question 7 on environments (#8).Analyzed and generated with the help of Claude, fully reviewed by me.
KonstantinMirin commentedon Oct 25, 2026
Revision, from the print channel change request (#102) that @matthew-iabtechlab filed for BCN, and from @clerongi and @premesh on Add OOH as a channel (#49). Print and static OOH both sell inventory with no ad-served impression. Our rationale says that static OOH "gets no value until AdCOM describes it". Read that way, neither channel could ever get a value. We make two changes.
In § 5.1.1, after the Linear TV rule, add:
In Why, drop the sentence "Static OOH (#49) gets no value until AdCOM describes it."
The per-channel list of absent fields follows #102's own recommendation. We don't add the
not_applicablevalue of #102's design principle 5: as in our placement change request (#89), an absent key doesn't constrain the line item. The first-match table still labels every served impression. Linear TV stays with linear TV scope (#44). Whether 3.0 addsprintoroohstays with the print channel (#102) and OOH as a channel (#49).Open question for the working group
print.proof_of_publicationin #102?Analyzed and generated with the help of Claude, fully reviewed by me.
KonstantinMirin commentedon Oct 25, 2026
Draft PR: § 2.1, § 5.1, § 5.2 — Define channel and environments in AdCOM terms. It applies this change request with the revision for Connected Device (6), from @fgranata's implementation evidence. It removes
audio_streamingand leaves the rest of the environment value list, such asapp_tablet, to #8. The revision for print and static OOH isn't in it yet.Writing the change as spec text added one rule that the issue's labels ("Audio ad", "Video ad") imply but the issue didn't state:
Without it, the first match makes every impression that accepts both video and display a
videoimpression, so adisplayline item could never serve it. A buyer can check the served media againstbid.mtypein OpenRTB 2.6 Object: Bid.The PR also gives the delivery rule an actor: "The seller MUST serve a line item only on impressions of its
channel." The PR description lists the other wording changes, such as putting linear TV outside the table. None of them changes what this issue asks for.It also raised three questions:
ctvenvironment, so an audio line item sold on smart speakers selectsctv, and a buyer that screens for thectvenvironment also finds that audio. Should smart speakers stay inctv, narrowed by device targeting as in our reply on typed targeting codes (#58), or get their own value that, as @fgranata asks, a seller may omit and a buyer doesn't have to select to reach TV?device.devicetypeis optional in OpenRTB 2.6 Object: Device, so a TV video impression without it falls through tovideo, and an impression without a device type matches no environment exceptdooh. Should a missing attribute fail the condition, or should the seller classify the impression from what it knows about the property? This goes with the question on sendingdevice.devicetypein the supporting material's open questions.environments.included[]? As written, § 5.2.1 in the PR limits which environments a line item may offer, not where it serves, so a buyer can check delivery againstchannelbut not against the environments it selected.Analyzed and generated with the help of Claude, fully reviewed by me.