Skip to content

[Change] § 5.1, § 5.2 — Define channel and environments in AdCOM terms, so one impression gets one label #90

Open

Description

@KonstantinMirin

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: replace the enum with "One value from Channel values".

#### 5.1.1 Channel values

An impression's channel is the first row it matches, in AdCOM 1.0 terms.
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 |
| `ctv` | Device type Connected TV (3), Connected Device (6), or Set Top Box (7) |
| `native` | Native ad (`nativefmt`), video assets included |
| `video` | Video ad |
| `display` | Any other display ad |

The seller MUST serve a line item only on impressions of its `channel`.
Placement type does not change it. A consumer MUST skip a line item whose
`channel` it does not recognize, and MUST NOT reject the proposal because
of it. Impressions in linear TV, including addressable linear, are outside
this table: they have no `channel` value in 3.0.

A channel whose delivery is not an AdCOM ad-served impression, such as
`print` or `ooh`, is not in the first-match table. The rule that a line
item serves only impressions of its `channel`, and the environment rule
in 5.2.1, apply only to channels in the table. Such a channel defines
its own environment values, and its definition lists the fields that
have no meaning for it. Those fields are absent from its line items. A
`proof_of_performance` (#92), with the evidence terms its definition lists,
shows its delivery in place of a served-impression count. Audience and
circulation guarantees stay in `committed_metrics[]`.

§ 5.2, `environments` row: `available[]` of values from Environment values.

#### 5.2.1 Environment values

Each value is the set of (distribution channel, device type) pairs formed
from its row. An impression matches the value when both its distribution
channel and its device type are in the row.

| Value | Distribution channel | Device types |
| :--- | :--- | :--- |
| `web_desktop` | `Site` | Personal Computer (2) |
| `web_mobile` | `Site` | Mobile/Tablet - General (1), Phone (4), Tablet (5) |
| `app_mobile` | `App` | Mobile/Tablet - General (1), Phone (4), Tablet (5) |
| `ctv` | `Site` or `App` | Connected TV (3), Connected Device (6), Set Top Box (7) |
| `dooh` | `Dooh` | any |

Device types are AdCOM 1.0 List: Device Types, named with their codes.

Each `available[]` value MUST match at least one impression to which
5.1.1 gives the line item's `channel`.

§ 2.1, Summary Representation: 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. We ask to 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.

  • video or ctv? Nothing says whether CTV video is channel: ctv, as in the CTV example, or channel: video, environments: [ctv]. The § 2.1 summary carries channel but not environments. Display & Video 360 sells Connected TV as its own line item type, with position, video, and device targeting preselected.
  • dooh is a distribution channel. OpenRTB 2.6 Object: DOOH is sent instead of site or app, with any media.
  • native is a display format. AdCOM puts it inside DisplayPlacement; its video asset reuses VideoPlacement. Native video fits two values.
  • audio_streaming names a medium, not a surface. @fgranata (#8) notes that ctv and audio_streaming both repeat the channel. We keep ctv in both fields. As a channel, it marks lines whose household caps and SSAI serving differ from web and app. As an environment, it is the TV surface, which an audio line item can also select.

The first-match order keeps the six labels and makes each impression's label unique. It proposes a definition rule for environments (#8) and leaves the value list open to the inventory evidence there. Linear TV gets no value, and its scope is left to #44. Print, in the print channel change request (#102) that @matthew-iabtechlab filed for BCN, and static OOH, in OOH as a channel (#49) from @clerongi and @premesh, sell inventory with no ad-served impression. Such a channel sits outside the table and shows delivery by proof of performance. The per-channel list of absent fields follows #102's own recommendation. We don't add the not_applicable value of #102's design principle 5: as in our placement change request (#89), an absent key doesn't constrain the line item. Whether 3.0 adds print or ooh stays with #102 and #49.

Definitions: AdCOM 1.0 objects Site, App, Dooh, and AudioPlacement.

Details: Channel and environments: full rationale and examples.

Knock-on effects

  • The § 6.4 audio example lists surfaces instead of audio_streaming.
  • Under this definition, a cross-screen video deal becomes a video and a ctv line item, tied by #23 and our commitment-set reply on #23. This fits #20 item 6: packages are linked line items. @fgranata reports that their exchange already sells television as its own lane, identified by Connected TV (3), Connected Device (6), or Set Top Box (7).
  • Our targeting-values reply on #58: device narrows environments, now checkable locally. A seller or buyer that wants to separate consoles and streaming devices from TVs narrows ctv with device targeting, not a separate environment value.

Open questions for the working group

  1. Should 3.0 keep the six channel labels and define them with the first-match table, or replace channel now with separate media, distribution, and device fields and derive the label from them?
  2. Is the first-match order right, in particular audio before ctv (audio in a TV app is audio) and native before video (native video is native), or should either pair go the other way?
  3. Answered by @fgranata on this issue. Should a cross-screen video deal split into a video and a ctv line item tied by line-item dependencies (#23), or should channel say what renders and environments say where, as @fgranata suggests on open question 7 on environments (#8), with frequency_cap.basis and serving_mode set per environment?
  4. Answered in part in our device-type revision: the filing adds no connected_device value, and app_tv in place of ctv went with the alternative that @fgranata withdrew on this issue. Still open: should this filing drop audio_streaming, or should open question 7 on environments (#8) settle the value list, including app_tablet, while this filing sets only the rule?
  5. When a consumer skips a line item whose channel it doesn't recognize, should the text also say that it can't commit a linked_execution or requires from line-item dependencies (#23), or a commitment set from our commitment-set reply, that contains the line item?
  6. 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 part of each channel's own object, like print.proof_of_publication in #102? One proof_of_performance object, { logged_by, evidence[] } as [Change] § 5.6, § 5.7 — DOOH: define a play, and whose multiplier turns plays into impressions #92 drafts it, serves every channel. Each channel's definition lists its evidence terms: play_log for DOOH, posting_photo and install_record for static OOH, and [Change] § 1.1, § 5.1, § 5.9, new § 5.11 — Add a print channel: enum, print extension object, downstream row #102's proof-of-publication types for print.
  7. A smart speaker that reports Connected Device (6) is in the ctv environment, so an audio line item sold on smart speakers selects ctv, and a buyer that screens for the ctv environment also finds that audio. Should smart speakers stay in ctv, 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?
  8. What happens when an impression doesn't carry an attribute that a condition names? device.devicetype is optional in OpenRTB 2.6 Object: Device, so a TV video impression without it falls through to video, and an impression without a device type matches no environment except dooh. 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 sending device.devicetype in the supporting material's open questions.
  9. Should the seller also serve a line item only on impressions that match a value in its environments.included[]? As written, 5.2.1 limits which environments a line item may offer, not where it serves, so a buyer can check delivery against channel but not against the environments it selected.

Would this break an implementation already built to this draft?

Yes — breaking

Alternatives you considered and rejected

  • channel for what renders, environments for where (#8): TV would then share a line item with web and app, but frequency_cap.basis and serving_mode are set once per line item and differ on TV. @fgranata has since withdrawn it.
  • Connected Device (6) outside ctv, in its own connected_device environment: a television line item could then not serve Connected Device (6) impressions, which @fgranata's TV lane includes, and a buyer would have to select a second value to reach television. Device targeting separates 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-10-28: Proof of performance is one object across channels, as @premesh proposes on #125. From @fgranata's implementation evidence, ctv covers Connected Device (6), the connected_device environment is gone, and cross-screen deals are settled as two line items (our device-type revision). Channels without an ad-served impression, such as print or ooh, sit outside the table, the fields with no meaning for such a channel are absent, and open question 6 asks about proof of performance (our print and OOH revision). The draft PR adds the served-ad media rule, states the delivery, skip, linear TV, and consistency rules more precisely, defines environments as (distribution channel, device type) pairs, and raises open questions 7 to 9.

Analyzed and generated with the help of Claude, fully reviewed by me.

Activity

  1. fgranata commented on Oct 23, 2026

    @fgranata

    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 make frequency_cap.basis and serving_mode per 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 audio before ctv.

    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.

  2. KonstantinMirin commented on Oct 23, 2026

    @KonstantinMirin
    Author

    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, ctv covers 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 its channel.

    We revise both tables:

    § 5.1.1, `ctv` row: Device type Connected TV (3), Connected Device (6), or
    Set Top Box (7).
    
    § 5.2.1: `ctv` | `Site` or `App` | Connected TV (3), Connected Device (6),
    Set Top Box (7). Remove the `connected_device` row.

    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_device value.

    The same evidence answers open question 3. A cross-screen video deal is two line items, video and ctv, 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.

  3. KonstantinMirin commented on Oct 25, 2026

    @KonstantinMirin
    Author

    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:

    A channel whose delivery is not an AdCOM ad-served impression, such as
    `print` or `ooh`, is not in the first-match table. The rule that a line
    item serves only impressions of its `channel`, and the environment rule
    in 5.2.1, apply only to channels in the table. Such a channel defines
    its own environment values, and its definition lists the fields that
    have no meaning for it. Those fields are absent from its line items. A
    proof of performance, such as proof of publication or proof of posting,
    shows its delivery in place of a served-impression count. Audience and
    circulation guarantees stay in `committed_metrics[]`.

    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_applicable value 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 adds print or ooh stays with the print channel (#102) and OOH as a channel (#49).

    Open question for the working group

    1. Should proof of performance be one field across channels that also covers DOOH proof of play, as @premesh asks on #49, or part of each channel's own object, like print.proof_of_publication in #102?

    Analyzed and generated with the help of Claude, fully reviewed by me.

  4. KonstantinMirin commented on Oct 25, 2026

    @KonstantinMirin
    Author

    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_streaming and leaves the rest of the environment value list, such as app_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:

    Where an impression accepts more than one medium, its media is that of the ad served.

    Without it, the first match makes every impression that accepts both video and display a video impression, so a display line item could never serve it. A buyer can check the served media against bid.mtype in 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:

    1. A smart speaker that reports Connected Device (6) is now in the ctv environment, so an audio line item sold on smart speakers selects ctv, and a buyer that screens for the ctv environment also finds that audio. Should smart speakers stay in ctv, 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?
    2. What happens when an impression doesn't carry an attribute that a condition names? device.devicetype is optional in OpenRTB 2.6 Object: Device, so a TV video impression without it falls through to video, and an impression without a device type matches no environment except dooh. 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 sending device.devicetype in the supporting material's open questions.
    3. Should the seller also serve a line item only on impressions that match a value in its 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 against channel but not against the environments it selected.

    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

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions