Blog · Protocol

placement vs plcmt is not a rename: the same integer 2 is a different placement.

placement vs plcmt is the migration that copies an integer and changes what the impression is. video.placement was deprecated in OpenRTB 2.6-202303. video.plcmt is a new list. Value 2 is not the same placement on both.

The old 1 is not automatically the new 1

The deprecated list on video.placement runs 1 In-Stream, 2 In-Banner, 3 In-Article, 4 In-Feed, 5 Interstitial/Slider/Floating. The plcmt list runs 1 Instream, 2 Accompanying Content, 3 Interstitial, 4 No Content/Standalone. Both fields sit on the Video object. Both draw from AdCOM lists. The placement vs plcmt guide has the definitions. The failure is a builder that sets plcmt to whatever placement already held.

plcmt 1 is instream that must be sound-on by default at player start, or that has explicit user intent to watch. The video is the focus of the visit, and it is the only in-view player capable of audio while it plays. A lot of inventory that claimed placement 1 under the old list was a muted autoplay player in an article. Under the new definitions that inventory is plcmt 2, Accompanying Content: playback starts on entering the viewport, beside text or graphics, and it may become a floating player when scrolled away. Copying 1 into plcmt tells buyers this is sound-on instream. They price it that way. The player is not that placement.

placement 2, In-Banner, is display inventory used as a video experience. plcmt 2 is accompanying content with a stream. Those are not the same sentence. placement 3 In-Article and placement 4 In-Feed do not fall on plcmt 3 and 4 by arithmetic. plcmt 3 is interstitial: no stream, primary focus, majority of the viewport, cannot be scrolled away. plcmt 4 is standalone video without streaming content, including slideshows, native feeds, and sticky units. The integer 4 on the old list was a feed. The integer 4 on the new list is a different object.

Send both until demand reads plcmt, and do not omit it to stay safe

The IAB implementation pattern is to keep the legacy value in video.placement for buyers still on the old list, and to set video.plcmt from the new list. Buyers on the updated definitions read plcmt. Drop placement after those buyers confirm. Sending only the old field on a snapshot that deprecated it is openrtb.field.deprecated territory when you validate as 2.6-202303 or later. Sending only a copied integer in plcmt is a clean-looking field with the wrong subtype.

The spec does not mark plcmt required. Video buyers still key pricing and eligibility on it, because it separates sound-on instream from accompanying and standalone video. Omitting it to avoid the mapping decision costs the impression on CTV and on instream web supply. The safe omit is not safe. Classify the player, then write the new integer. If you are unsure, plcmt 2 is the honest bucket for muted in-article autoplay that used to say In-Stream. plcmt 1 is the bucket you have to earn with sound-on or with explicit intent.

plcmt does not exist in the original April 2022 2.6 text. It arrived in the 2.6-202303 update. A partner who says they are on 2.6 and validates only as 2.6-202211 will not see this field as part of that snapshot. Pin 2.6-202303 or later when the contract includes plcmt. The version-string problem is the 2.5 vs 2.6 post. This one is the integer.

Buyers who still read only placement will keep paying the old definition until you drop that field. Buyers who read plcmt will pay the new definition immediately. During the overlap, the two fields are allowed to disagree, and they should, whenever the old In-Stream label was a muted player. Forcing them to match so the JSON looks tidy is the copy. A request with placement 1 and plcmt 2 is the honest transition row for that player. A request with both set to 1 is the overclaim.

CTV and outstream do not share the article-player exception

Accompanying content is defined around a page: the player loads before, between, or after paragraphs, starts in the viewport, and may float. A CTV app has no paragraph and no scroll. Instream on a television is the content the viewer opened, sound on, full player. Copying a web placement of 1 into CTV plcmt can be honest when the show is the visit. Copying it from a muted corner player on an article is how CTV demand pays instream prices for a unit that was never a show.

Interstitial on the new list is video without streaming content, primary focus, most of the viewport, not scrollable. The old interstitial value was 5, grouped with slider and floating. A migration that sends plcmt 5 because the old field was 5 writes a value the new four-value list does not have. A migration that sends plcmt 3 for every floating unit calls a sticky outstream player an interstitial. plcmt 4 is the standalone bucket for slideshows, feeds, and floating units without a stream.

Two exchanges can send the same impression with different integers if one copied and one reclassified. Do not average them. Read plcmt on each request. The Prebid path, the TAM path, and an Open Bidding path are three assemblies. A placement fix in Prebid does not rewrite the others. The comparison of those assemblies is a separate post. The integer still has to be set on each one.

What to put on the video object

  • Do not set plcmt equal to placement as a migration.
  • plcmt 1 is sound-on instream, or explicit watch intent, and the only in-view player that can play audio.
  • Muted autoplay beside article text is plcmt 2, even when the old field said 1.
  • Keep placement for legacy buyers during the transition. Set plcmt from the new list, not from the old integer.
  • Pin a snapshot that includes 2.6-202303 before you treat a missing plcmt as optional forever.
  • Validate the builder output. A sample someone edited to plcmt 1 while the player is muted will pass the checker and still be the wrong sale.

Paste the request in the tester with the snapshot set, or run rtblint validate --version 2.6-202505 on the file the player stack emits. RTBlint is not an IAB validator. A pass means the integers are legal values on that snapshot. It does not watch the player to see whether sound was on, and it will not refuse plcmt 1 on a muted unit. That refusal is the classification you owe the buyer, written into the field before the request is sent.

Further reading