Repository navigation
[Change] § 5.2 — Say what each impression is: rewarded, interstitial, video placement, skippability, API frameworks, refresh #89
Description
What kind of change?
Add a new field
Which section?
5.2 — Inventory composition
Current text
| `environments` | Object | selectable | `available[]` from `web_desktop` \| `web_mobile` \| `app_mobile` \| `ctv` \| `dooh` \| `audio_streaming` |Proposed text
§ 5.2, add a row after `environments`:
| `placement` | Object | seller-set | What every impression of this line item is. Keys follow AdCOM 1.0 and OpenRTB 2.6. `plcmt` is REQUIRED for video ads (`channel` `video`, or `ctv` video). See the placement subsection |
#### placement
| Key | Required | Meaning | AdCOM 1.0, OpenRTB 2.6 |
| :--- | :--- | :--- | :--- |
| `reward` | OPTIONAL | `0` (no) \| `1` (yes). The user receives a reward for viewing the ad | `Placement.reward`, `imp.rwdd` |
| `instl` | OPTIONAL | `0` (no) \| `1` (yes). Interstitial or full screen | `DisplayPlacement.instl`, `imp.instl` |
| `plcmt` | REQUIRED for video ads (`channel` `video`, or `ctv` video); otherwise OPTIONAL | One value from List: Plcmt Subtypes - Video: 1 instream, 2 accompanying content, 3 interstitial, 4 no content (standalone), 5 pause, 6 screensaver, 7 overlay, 8 squeezeback, 9 in-scene | `VideoPlacement.ptype`, `video.plcmt` |
| `skip` | OPTIONAL | Video or audio. `0` (no) \| `1` (yes). The placement lets the user skip the ad | `VideoPlacement.skip`, `AudioPlacement.skip`, `video.skip` |
| `skipafter` | OPTIONAL | When `skip` is `1`: seconds the ad plays before the placement enables skipping | `VideoPlacement.skipafter`, `AudioPlacement.skipafter`, `video.skipafter` |
| `playmethod[]` | OPTIONAL | Video or audio. Values from List: Playback Methods in use, such as `1` (starts without user action, sound on), `2` (same, sound off by default), `3` (on click, sound on), `7` (continuous playback) | `VideoPlacement.playmethod`, `AudioPlacement.playmethod`, `video.playbackmethod` |
| `api[]` | OPTIONAL | Values from List: API Frameworks that every impression supports, such as `6` (MRAID 3.0), `7` (OMID 1.0), `9` (SIMID 1.1) | `DisplayPlacement.api`, `VideoPlacement.api`, `AudioPlacement.api`, `banner.api`, `video.api`, `audio.api` |
| `refresh` | OPTIONAL | `{ min_interval_s }`: minimum seconds a creative renders before the slot refreshes | OpenRTB 2.6 only: `imp.refresh.refsettings[].minint` |
Each key takes an integer, except `playmethod[]` and `api[]`, which take
arrays of integers, and `refresh`, an object whose `min_interval_s` is a
REQUIRED integer. `plcmt`, `playmethod[]`, and `api[]` take any code in
their AdCOM list.
A key that is present holds for every impression of the line item. An
absent key doesn't constrain it: a line item that omits `instl` may deliver
to banner and interstitial impressions alike. AdCOM 1.0 reads an absent
`reward` or `instl` as `0`; here it means either value. OpenRTB 2.6 `Audio`
has no `skip`, `skipafter`, or `playbackmethod`.
The seller MUST NOT deliver the line item to an impression that doesn't
match a key that is present. An impression matches `api[]` when it supports
every listed framework, `playmethod[]` when its playback method is one of
the listed values, and `refresh` when the slot renders each creative for at
least `min_interval_s` seconds before it refreshes, or does not refresh. It
matches any other key when its value is equal.
Unless `api[]` includes `7` (OMID 1.0), a line item whose
`committed_metrics[]` includes `viewable_rate` and whose
`environments.available[]` includes `app_mobile` or `ctv` SHOULD NOT offer
a `measurement_source` vendor other than the seller.
§ 2.1, add to the per-line-item summary, when present:
`placement.reward`, `placement.instl`, `placement.plcmt`, and
`placement.skip`.Why
An in-app line item has no field to say whether its impressions are rewarded, interstitial, in-stream, or skippable, or whether third-party measurement and rich media can run. We ask for a placement object in AdCOM 1.0 Placement terms. Omitted keys stay open, so run-of-app lines can mix banners and interstitials.
Today, channel: video on app_mobile covers rewarded, interstitial, and out-stream video. A buyer commits to one, the seller delivers another, and both stay conformant.
- Price. On #5, @fgranata notes that "rewarded and interstitial of the same duration clear at very different rates".
- Viewer controls. Skippable ads complete less often, so
skipchanges what a § 5.7completion_ratemeans. - Measurement. In apps, verification vendors run through the Open Measurement SDK, signaled as API framework
7(OpenRTB advisory for OM SDK). The § 6.2 example lets a buyer select IAS or DoubleVerify. Without OM SDK, a committedviewable_ratemay not settle. - Creative. An MRAID creative doesn't render without MRAID; a SIMID creative loses its interactive layer.
- Refresh. A banner refreshing every 30 seconds is different exposure (OpenRTB 2.6
RefSettings).
Every key exists in OpenRTB 2.6 (Imp, Banner, Video), which PMP deals target. All but refresh exist in AdCOM Placement, which OpenDirect 2.1 AdUnit and Placement carry for direct and PG lines (§ 1.1).
Definitions: AdCOM 1.0 DisplayPlacement, VideoPlacement, AudioPlacement, List: Plcmt Subtypes - Video, List: Playback Methods, List: API Frameworks.
Details and examples: Placement in AdCOM terms: full rationale and examples
Knock-on effects
- #5: a third answer to @fgranata's either/or. App-open has no AdCOM value; it stays a format id with
instl: 1. @unreconciled'sinteractiveandverificationspec keys say this per format,api[]per placement; they must agree. - #38:
counts[].trackingsays how a vendor counts;api[]says whether it can run at all. - #32:
placement.api[]gives creative review, which [Change] § 5.4 — Validateassets[].format_refagainst the resolvedformatsselection at submission, not at creative review #32 limits to content and policy, a list to check MRAID and SIMID creatives against. Whether review does so is open in the supporting material. - Our audio change request (#101) defines
feedand adds it to the placement subsection as REQUIRED foraudio. - Our channel definitions change request (#90), as revised for device types, puts Connected Device (6) in
ctvand adds noconnected_deviceenvironment, so the OM SDK rule'sctvcovers those devices. - Appendix A gains a row; Appendix B counts one more
seller-setfield. The § 6.3 example gainsplacement; § 6 gains a rewarded in-app one. - The draft PR for this change request writes it as spec text.
Open questions for the working group
- Answered by @fgranata on this issue. Should the OM SDK rule be MUST, or stay SHOULD because some verification vendors still measure in-app with their own SDKs?
- Should the OM SDK rule also cover a non-seller
counterincontrolling_measurement(our settlement change request), or stay limited tomeasurement_sourceonapp_mobileandctv? - Answered by @fgranata on this issue. Should
placementsit on the line item, so a multi-app line item whose apps differ in OM SDK support omits7or splits, or on each app inproperties? - When @unreconciled's
interactiveandverificationformat spec keys on format registry entries for audio, CTV, and DOOH (#5) andplacement.api[]disagree, which one governs, or should the spec carry only one of them? - Answered by @fgranata on this issue. AdCOM and OpenDirect 2.1 read an absent
rewardorinstlas0, so how should a line item that omits them, meaning either value, map to OpenDirect 2.1Placement.spec: onePlacementper value, or a new way to say "either"? - No field says, in a way a validator can check, whether a
ctvline item sells video, yet the REQUIRED condition onplcmtdepends on it. Should the condition key on the format ids informats.available[](§ 5.4), which needs registry entries forctv/*(#5), or shouldplcmtbe RECOMMENDED onctv? - A REQUIRED
plcmtcan't be omitted, so the answer to question 3 (omit the keys that apps don't share) doesn't cover it. A video line item whose impressions differ inplcmtsplits into one line item per value, as @fgranata does when apps disagree. Shouldplcmtstay one value, or becomeplcmt[], likeplaymethod[]?
Would this break an implementation already built to this draft?
Yes — breaking
Alternatives you considered and rejected
- A
placement_typeenum (#5): duplicates AdCOM, and a rewarded interstitial is two values. - Placement in the format id (
app/rewarded-video-30s, #5): ids multiply by duration and placement, and an id can't say OMID. placementas selectable with deltas: an option carries only a price delta, but completion commitments differ too.
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-25: @fgranata's answers and our reply answer questions 1, 3, and 5 (SHOULD, on the line item, absent means either), and our device-type revision on #90 puts Connected Device (6) in ctv, so question 2 drops connected_device. The draft PR adds what a match is and the value types, leaves feed to #101 and the #32 review check open, and adds questions 6 and 7.
Analyzed and generated with the help of Claude, fully reviewed by me.
Activity
fgranata commentedon Oct 23, 2026
This answers the point I raised on #5, and the keys map onto what we hold per placement today: reward, interstitial, video placement subtype, skippability. Two numbers for why it matters: measured across our catalogue, the 25th-percentile clearing price spans $0.05 (native) to $8.35 (video) by placement type, and rewarded and interstitial of the same duration clear at very different rates. A line item that cannot say which of those it is cannot be priced or committed on.
Q3 (line item vs. per app). On the line item, with a split when apps disagree. Our line items are one app × one placement type already, so
placementon the line is exact for us; a multi-app package would omit the keys its apps do not share, which the "absent key does not constrain" rule handles.Q5 (absent
reward/instlmeaning either). We need "either" for run-of-app lines. Mapping to one downstream placement per value is what we would do; a new "either" marker is not needed.api[]. We can declare7(OMID) and MRAID per placement from the request data we see;refresh.min_interval_swe can declare for banners. Making the OM SDK rule a SHOULD is right for now, since some vendors still measure in-app with their own SDKs.Commenting as an in-app / CTV supply-side exchange.
KonstantinMirin commentedon Oct 23, 2026
Thank you, @fgranata. With your evidence, two open questions resolve as drafted:
placementsits on the line item. A multi-app line item omits the keys its apps don't share, because an absent key doesn't constrain.rewardorinstlmeans either, which covers run-of-app lines without a new marker.The OM SDK rule stays a SHOULD.
Analyzed and generated with the help of Claude, fully reviewed by me.
KonstantinMirin commentedon Oct 25, 2026
Draft PR: § 2.1, § 5.2 — Placement: what each impression is. It applies this change request with @fgranata's answers to questions 3 and 5, and leaves
feedto our audio filing (#101), which defines it. Writing it as spec text added two rules that the issue didn't state:api[]when it supports every listed framework,playmethod[]when its playback method is one of the listed values, andrefreshwhen the slot renders each creative for at leastmin_interval_sseconds before it refreshes, or does not refresh. It matches any other key when its value is equal."playmethod[]andapi[], which take arrays of integers, andrefresh, an object whosemin_interval_sis a REQUIRED integer.plcmt,playmethod[], andapi[]take any code in their AdCOM list.We also corrected the supporting material to match this issue: on
ctv,plcmtis REQUIRED for video and OPTIONAL otherwise. Question 1 below asks how to check that condition.The PR's list for the working group keeps the open questions from this issue and the supporting material, and adds two:
ctvline item sells video, yet the REQUIRED condition onplcmtdepends on it. Should the condition key on the format ids informats.available[](§ 5.4), which needs registry entries forctv/*(#5), or shouldplcmtbe RECOMMENDED onctv?plcmtcan't be omitted, so the answer to question 3 (omit the keys that apps don't share) doesn't cover it. A video line item whose impressions differ inplcmtsplits into one line item per value, as @fgranata does when apps disagree. Shouldplcmtstay one value, or becomeplcmt[], likeplaymethod[]?Analyzed and generated with the help of Claude, fully reviewed by me.