Repository navigation
§ 2.1, § 5.2 — Placement: what each impression is (#89) - #120
Draft
KonstantinMirin wants to merge 2 commits into
Draft
KonstantinMirin wants to merge 2 commits into
KonstantinMirin wants to merge 2 commits into
Conversation
Move the summary rule out of the § 2.1 key list, drop skip from the CTV example, and mark the CHANGELOG entry as breaking.
This was referenced Oct 25, 2026
Open
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this changes
A line item can now state what every impression is: rewarded, interstitial, video placement subtype, skippability, playback, API frameworks, and refresh.
placement(§ 5.2, § 5.2.1) is aseller-setobject keyed to AdCOM 1.0Placementand OpenRTB 2.6Imp. A present key holds for every impression, and an absent key doesn't constrain. The seller MUST NOT deliver the line item to an impression that doesn't match a present key, and the text says what a match is for each key.plcmtis REQUIRED for video ads. Inapp_mobileandctv, a line item that commitsviewable_rateSHOULD NOT offer a third-partymeasurement_sourceunlessapi[]includes OMID 1.0 (7). The Summary Representation (§ 2.1) carriesreward,instl,plcmt, andskipwhen present.Related issue
Refs #89, a change request from Postindustria (IAB Tech Lab member).
Type
Checklist
placementseller-set;scripts/check_appendix.pypassesseller-set29 → 30; 71 → 72 fieldsexamples/is updated and still parses — the CTV example gainsplacement: { plcmt: 1 }(Instream (1)), which REQUIREDplcmtneeds; newline-item-rewarded-video.yaml(§ 6.5)placementsits on the line item; nothing comes from the proposal or a propertyselectabledeclaresavailable[]andincluded[]; anythingsettabledeclares bounds (§ 3.1, § 3.2) — no newselectableorsettablefieldsKnock-on effects
placement.plcmtno longer conforms.reward,instl,plcmt, andskipmatch what they hold per placement, and that they can declare OMID 1.0 (7), MRAID, and, for banners,refresh.min_interval_s. They also note that rewarded and interstitial of the same duration clear at very different rates (first raised on OQ-4 — The format registry has no entries foraudio/*,ctv/*ordooh/*#5). Per the reply,placementsits on the line item, and a multi-app line item omits the keys its apps don't share (question 3). The text states that an absentrewardorinstlmeans either value (question 5). @fgranata maps such a line item to one OpenDirect 2.1Placementper value, so the reply adds no "either" marker. The OM SDK rule stays a SHOULD, which @fgranata supports because some vendors still measure in-app with their own SDKs (question 1).plcmtonctv. This PR follows [Change] § 5.2 — Say what each impression is: rewarded, interstitial, video placement, skippability, API frameworks, refresh #89's proposed text:plcmtis REQUIRED for video onctv. The supporting material is corrected to match.api[]when it supports every listed framework,playmethod[]when its method is listed,refreshwhen it renders each creative for at leastmin_interval_sseconds, and any other key when the value is equal. Keys take integers or integer arrays, andplcmt,playmethod[], andapi[]take any code in their AdCOM list.plcmtper line item.plcmtis one value and REQUIRED for video, so a video line item whose impressions differ inplcmtsplits into one line item per value. That's how @fgranata handles apps that disagree (question 8 below).feed. [Change] § 5.2 — Say what each impression is: rewarded, interstitial, video placement, skippability, API frameworks, refresh #89's row namesfeedas REQUIRED for audio, but [Change] § 5.2, § 5.9 — Audio: name the feed, and say when an ad is recorded into the content #101 defines the key. This PR leavesfeedout; [Change] § 5.2, § 5.9 — Audio: name the feed, and say when an ad is recorded into the content #101 adds it to § 5.2.1.connected_device. [Change] § 5.2 — Say what each impression is: rewarded, interstitial, video placement, skippability, API frameworks, refresh #89's question 2 named theconnected_deviceenvironment from [Change] § 5.1, § 5.2 — Define channel and environments in AdCOM terms, so one impression gets one label #90. [Change] § 5.1, § 5.2 — Define channel and environments in AdCOM terms, so one impression gets one label #90's revision removes that value and puts Connected Device (6) inctv, so the rule'sctvcovers those devices once [Change] § 5.1, § 5.2 — Define channel and environments in AdCOM terms, so one impression gets one label #90 lands. Under [Change] § 5.1, § 5.2 — Define channel and environments in AdCOM terms, so one impression gets one label #90, placement type doesn't change the channel: rewarded in-app video stayschannelvideowithplacement.reward: 1.audio/*,ctv/*ordooh/*#5. Answers @fgranata's either/or without aplacement_typeenum or placement in format ids. App-open stays a format id withinstl: 1.assets[].format_refagainst the resolvedformatsselection at submission, not at creative review #32 and [Change] § 5.7: Bind each committed metric to the measurement source that settles it #38.placement.api[]gives creative review a list to check MRAID and SIMID creatives against; whether review does so is question 3 below. [Change] § 5.7: Bind each committed metric to the measurement source that settles it #38'scounts[].trackingsays how a vendor counts;api[]says whether it can run. [Change] § 5.7: Bind each committed metric to the measurement source that settles it #38'svendor: sellerwould give the OM SDK rule's "vendor other than the seller" a value to check. This PR leaves the § 5.7measurement_sourcerow unchanged, because [Change] § 5.7: Bind each committed metric to the measurement source that settles it #38 rewrites it.imp.rwdd,imp.instl,video.plcmt,video.skip,video.skipafter,video.playbackmethod,banner.api,video.api,audio.api, andimp.refresh.refsettings[].minint. All butrefreshare in AdCOMPlacement, which OpenDirect 2.1AdUnit.specandPlacement.speccarry. AdCOM namesplcmtVideoPlacement.ptype.propertiesshape on main. PR § 5.2 — App identity on properties (#15) #17 makes each property carrydomainsorapps, so whichever merges later givespuzzle-packanapps[]entry (platform,bundle,storeurl,domain). The two merge without a textual conflict, but § 5.2 — App identity on properties (#15) #17's App identity paragraph then lands inside § 5.2.1 and needs to move above it.environmentsrow comes before theplacementrow, environments keeps § 5.2.1 and placement becomes § 5.2.2, whichever merges first; theSee 5.2.1reference in theplacementrow changes with it. PRs § 2, § 4.1, § 5.6 — Line-item dependencies and bonus lines (#23) #70 and § 2.3 — Static manifest at a well-known URL for standard proposals (#29) #76 each add a § 6.5, so the rewarded-video example is renumbered after them, with its(spec § 6.5)header. The PR for [Change] § 5.1, § 5.2 — Define channel and environments in AdCOM terms, so one impression gets one label #90 also edits the § 5.2 table next to the new row. PR § 2, § 4.1, § 5.6 — Line-item dependencies and bonus lines (#23) #70'sline-item-ctv-bonus.yamlis CTV in-stream video withoutplacement, so whichever merges later addsplacement: { plcmt: 1 }(Instream (1)) to it. PR § 2.3 — Static manifest at a well-known URL for standard proposals (#29) #76'smanifest.jsoncarries the Summary Representation, so whichever merges later adds"placement": { "plcmt": 1 }to itsweather-app-ctventry. Other open change requests also change the Appendix B counts.For the working group
Open on #89 and its supporting material:
counterincontrolling_measurement(#95), or stay limited tomeasurement_source? (#89, question 2, without the removedconnected_devicevalue)interactiveandverificationformat spec keys on #5 andplacement.api[]disagree, which governs, or should the spec carry only one? (#89, question 4)placement.api[], although #32 limits review to content and policy? (#89 supporting material, question 1)instl: 1? (#89 supporting material, question 2)plcmtbe REQUIRED ondoohvideo line items, and onnativeline items with video assets, which #90 assigns to those channels? The OpenRTB 2.6 implementation guide's DOOH video example sends noplcmt. (#89 supporting material, question 3)refreshstay one minimum interval, or also name the triggers in AdCOM List: Auto Refresh Triggers? (#89 supporting material, question 4)ctvline item sells video, which the REQUIRED condition onplcmtdepends on. Should the condition key on the format ids informats.available[], or shouldplcmtbe RECOMMENDED onctv? (#89, question 6)plcmtstay one value, so that a video line item whose impressions differ inplcmtsplits, or becomeplcmt[], likeplaymethod[]? (#89, question 7)By opening this pull request I agree my contribution may be published under this
repository's licence, as set out in CONTRIBUTING.md.
Analyzed and generated with the help of Claude, fully reviewed by me.