Blog · Spec release
AdCOM 1.0-202607: new enums, five redefined playback methods, and two releases carrying the wrong field names
AdCOM is where OpenRTB 2.6 keeps its enumerated lists. When a bid request sends video.plcmt or video.pos or video.playbackmethod, the integers mean whatever the current AdCOM document says they mean, and OpenRTB itself only holds a link. AdCOM 1.0-202607 was tagged on July 16, 2026. It adds the enumerations behind the CTV Ad Portfolio formats, it rewords five playback methods that already existed, and it carries a Content object with seven field names that are not AdCOM's. The names were corrected on the main branch six days later. The tag was not re-cut, and neither was the one before it.
What the release adds
The substantive change came in through a single commit from June 25 titled "Ad Format Signaling Enumeration Updates," and it extends four lists. These are the machine-readable half of the CTV Ad Portfolio work whose signaling guidance was finalized on July 22.
List: Creative Attributes 19 Contains advertiser QR Code 20 Support alpha channel transparency 21 Static Visual 22 Limited Motion (Cinemagraph) 23 Full-Motion Video List: Plcmt Subtypes - Video 5 Pause 6 Screensaver 7 Overlay 8 Squeezeback 9 In-scene List: Placement Positions (was 0 through 7) 8 Partial Screen 9 Top Left 10 Top Right 11 Frame the content 12 Double box 13 Double box with background 14 Bottom Left 15 Bottom Right 16 L shape 17 Reversed L shape List: Playback Methods (was 1 through 7) 8 Initiated by user pausing content, Sound on 9 Initiated by user pausing content, Sound off 10 Initiated by idling (e.g. screensaver), Sound on 11 Initiated by idling (e.g. screensaver), Sound off
Nothing controversial there. A pause ad needs a way to say it is a pause ad, a squeezeback needs a way to describe an L shape, and a cinemagraph is genuinely neither a still nor a video. The creative-side view of these formats is covered in vastlint's piece on the VAST 4.4 draft schema.
Five playback methods changed meaning without changing number
The additions are the easy part. In the same diff, five values that have been in use for years were reworded.
1 was: Initiates on Page Load with Sound On now: Initiates without any specific user interaction with Sound On 2 was: Initiates on Page Load with Sound Off by Default now: Initiates without any specific user interaction Sound Off by Default 4 was: Initiates on Mouse-Over with Sound On now: Initiates on Mouse-Over or cursor over with Sound On 5 was: Initiates on Entering Viewport with Sound On now: Initiates on Entering Viewport or scrolling into view with Sound On 6 was: Initiates on Entering Viewport with Sound Off by Default now: Initiates on Entering Viewport or scrolling into view with Sound Off by Default
The direction is deliberate and reasonable. "Page load" is browser vocabulary that never described a television, so values 1 and 2 were generalized to cover any initiation without user interaction, and 4, 5 and 6 picked up the cursor and scroll phrasing that CTV remotes and feed surfaces actually need. Nobody was going to spend a new integer on that.
It still means a seller who implemented playbackmethod: 1 against the old text and a seller who implemented it against the new text are making different claims with the same byte, and a buyer cannot tell which. This is the same shape as the content.livestream redefinition in OpenRTB 2.6-202606 and the same shape as the plcmt migration: a good correction landing on an enforcement layer that has no way to reject a stale interpretation.
The timing is worth noting. The Redefining Media Types standard is in public comment until August 8, and its sound-state attribute maps onto exactly these five values. The definitions underneath that mapping moved on July 16, in a different repository, three weeks into a thirty-day comment window.
The Content object in both current releases has the wrong field names
AdCOM has always used short field names on its own objects. OpenRTB 2.x uses longer ones for the same concepts. Content.rating in AdCOM is Content.contentrating in OpenRTB, live is livestream, lang is language, and so on. Two documents, two naming conventions, deliberately.
On March 20, 2026, a commit titled "Live Attributes to Object: Content" added the new live signals to AdCOM's Content object. It also converted that object's table from HTML to markdown, and in the rewrite seven existing field names were replaced with their OpenRTB spellings.
AdCOM name became reverted on main 2026-07-22 ------------------------------------------------------ rating contentrating rating urating userrating urating mrating qagmediarating mrating live livestream live srcrel sourcerelationship srcrel lang language lang embed embeddable embed
The commits that fixed it are titled "revert inadvertent name changes" and "Revert Inadvertent Content Object Name Changes," so the working group is clear about what happened. A second commit the same day standardized the type column from int to integer, which is a smaller version of the same problem for anyone parsing that column.
Here is the part that matters. The rename shipped in AdCOM 1.0-202606, tagged June 11, and in AdCOM 1.0-202607, tagged July 16. The fix landed on main on July 22 and 23. Neither tag has been moved, so as of today both of the two most recent AdCOM releases describe a Content object with seven fields AdCOM does not have, and the corrected text exists only on an untagged branch.
If you generate anything from a tagged release, which is the normal and correct thing to do, you generated the wrong names. If you read the document in a browser this week, you read the right ones. Those two facts coexisting is the whole hazard.
Why a pipeline notices this and a reader does not
Seven renamed rows inside a two-hundred-row object, in a document nobody reads end to end, introduced as a side effect of a table format conversion, is close to invisible to review. It stayed in for four months and two releases.
It is not invisible to anything that parses the document into a catalog and diffs the catalogs release over release. That is what our AdCOM handling and the generated JSON Schemas exist to do. Table format conversions are a recurring source of this: an object rewritten from HTML into markdown can come out with an empty field list, which is loud and gets caught immediately, or with seven fields under different names, which is silent unless something is comparing the before and the after.
The general lesson for anyone maintaining bidder code against these documents: pin the release you generate from, diff every new release against the last one at the field level rather than reading the changelog, and treat a rename as a breaking change even when the changelog does not mention it. The changelog for 202607 does not mention this one, because nobody intended it.
What our own validator does with the new values today
Worth being straight about this, because it is the flip side of the same problem. Our AdCOM value sets predated 202607, so until we published this post a perfectly valid pause-ad bid request failed validation against the newest snapshot. Four errors, all of them ours:
openrtb.value.invalid error imp[0].video.plcmt
has unsupported value 5. Allowed values from List: Plcmt Subtypes - Video
are 1, 2, 3 or 4.
openrtb.value.invalid error imp[0].video.pos
has unsupported value 14. Allowed values from List: Placement Positions
are 0, 1, 2, 3, 4, 5, 6 or 7.
openrtb.value.invalid error imp[0].video.playbackmethod[0]
has unsupported value 9. Allowed values from List: Playback Methods
are 1, 2, 3, 4, 5, 6 or 7.
openrtb.value.invalid error imp[0].video.battr[0]
has unsupported value 19. Allowed values from List: Creative Attributes
are 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 or >=500.That is fixed as of today. The four value sets now carry the 202607 ranges, the tester and the MCP endpoint are running the rebuilt validator, and the enum reference lists the new values and flags the five reworded playback methods. Values outside the new ranges still fail, so plcmt: 10 and pos: 18 are still errors.
Saying so is cheaper than the alternative. A validator that is quietly out of date on an enum tells you your good traffic is broken, which is worse than telling you nothing. If you pin a version of the CLI or the library rather than using the hosted tools, check that you are on a build dated after this post.
What to do about it
- Do not generate from AdCOM 1.0-202607 or 1.0-202606 without checking the Content object. Both tags carry the seven renamed fields. Compare against main, or against 1.0-202409, which has the correct names.
- Accept the new enum values on the receive side now. A buyer rejecting
plcmt5 through 9 orpos8 through 17 is rejecting the CTV formats sellers are actively trafficking, and the rejection looks like a no-bid rather than an error. - Re-read your
playbackmethodmapping against the current text. If your documentation still says "initiates on page load," your implementation and the spec have diverged in wording even where they agree in intent. - Diff catalogs, not changelogs. The changes that hurt are the ones nobody wrote down, because nobody meant to make them.
- Check a request against a pinned snapshot in the bid request tester, or gate it per the CI guide. Version pinning is the part of this that is entirely in your control.
Sources
AdCOM and OpenRTB are published by IAB Technology Laboratory under a Creative Commons Attribution 3.0 License. Field names, enumerated values and quoted definitions are drawn from those documents and from the public commit history of their repositories; the analysis is our own. Diagnostic output shown here was produced by RTBlint. RTBlint is independent and not affiliated with IAB or IAB Tech Lab.
- AdCOM 1.0-202607 release, tagged July 16, 2026
- Commit history for AdCOM v1.0 FINAL.md, including "Live Attributes to Object: Content" (March 20, 2026) and "revert inadvertent name changes" (July 22, 2026)
- IAB Tech Lab: CTV Ad Portfolio, signaling guidance finalized July 22, 2026
- IAB: Redefining Media Types Standard, public comment through August 8, 2026
- Where these integers end up in a creative: the CTV Ad Portfolio VAST 2.0 extensions (vastlint)