OpenRTB protocol

video.plcmt in OpenRTB: values, versions, and what buyers filter on

imp.video.plcmt is a single integer that says where a video ad plays relative to content the viewer asked for. It carries more buying weight than almost any other optional field in the Video object, because buyers use it to separate instream inventory from everything else, and it is one of the few fields where a wrong value is worse than a missing one.

The nine values

The values come from AdCOM's List: Plcmt Subtypes - Video, not from OpenRTB itself, which is why they can change without an OpenRTB release. Values 1 through 4 arrived with the field; 5 through 9 were added by AdCOM 1.0-202607 for the CTV Ad Portfolio formats.

ValueNameWhat qualifiesAvailable from
1InstreamPre-, mid-, or post-roll against video content the viewer asked for. Sound on at player start, or clear intent to watch. The video is the primary content on the page.2.6-202309
2Accompanying ContentThe player sits beside or between text or graphics and starts only on entering the viewport. May become floating or sticky as the page scrolls.2.6-202309
3InterstitialNo streaming video content. The ad takes the majority of the viewport and cannot be scrolled away while it plays.2.6-202309
4No Content / StandaloneNo streaming video content. Slideshows, native feeds, in-content, sticky or floating players.2.6-202309
5PauseShown while requested video content is paused. The player remains the focus of the visit.AdCOM 1.0-202607
6ScreensaverShown when an OS or app screensaver starts.AdCOM 1.0-202607
7OverlayPlaced over program content, outside the traditional ad break, often as a banner or picture in picture.AdCOM 1.0-202607
8SqueezebackThe program is resized so the ad shares the screen rather than covering it. That sharing is what separates it from an overlay.AdCOM 1.0-202607
9In-sceneBranded elements composited into the content itself, such as virtual placements in non-live content.AdCOM 1.0-202607

The list defines no vendor-specific range, so unlike api or battr there is no 500-and-above escape hatch. A value outside 1 through 9 is simply invalid, and a buyer that does not recognise it treats the impression as unclassified.

When plcmt actually existed

Ask three integrations when plcmt arrived and you get two answers, because the specification's release notes and its text disagreed for six months.

SourceSays
2.6-202303 release notes, April 5, 2023New plcmt attribute in Object: Video, deprecation of placement, and example code in the implementation guide.
2.6-202303 specification documentNo occurrence of plcmt anywhere in the document. The Video table still carries placement with no deprecation marker.
2.6-202309 specification document, September 28, 2023plcmt present in the Video table, pointing at the AdCOM list, and placement marked deprecated.
Current specification textThe placement entry reads "Deprecated as of OpenRTB 2.6-202303. Use plcmt instead.", dating the change to the release that announced it rather than the one that carried it.

This is why every secondary source, this site included, dates the change to 2.6-202303: it is quoting the specification correctly. The 202303 document simply never said it. AdCOM took the same date, annotating its legacy Placement Subtypes list "deprecated as of the 2.6-202303 release". So both dates are defensible, and which one is correct depends on which artifact you validate against. RTBlint validates against the specification text, snapshot by snapshot, so 2.6-202309 is the first version where a payload carrying plcmt passes without a finding. Sent against an earlier snapshot, the validator says the field is not defined for that version rather than silently accepting it, which is the behaviour that catches a bidder pinned to a snapshot older than the field it is reading.

The practical answer for a seller: if a partner disputes whether plcmt is valid for the version you agreed at integration time, the disagreement is real and it is theirs to resolve, not a bug in your request. Name the snapshot in the conversation.

Fields that answer a different question

Four fields on the Video object look like they overlap with plcmt. They do not, and the mistakes come from treating them as interchangeable.

FieldAnswersDoes not answer
plcmtWhere does this ad play, relative to content the viewer asked for?What the creative looks like, or where on the screen it sits.
placementThe same question, in the pre-deprecation vocabulary with five different values.A synonym. The old and new lists are not a renaming, so do not map them one to one.
linearityIs the expected VAST response linear or non-linear?Whether the placement is instream or outstream. That is plcmt.
posWhere on the screen is the slot, above or below the fold?Anything about content context.
startdelayPre-, mid-, or post-roll, in seconds.Whether the video content exists at all. A standalone placement has no roll position to describe.

The linearity confusion is worth calling out because the spec itself addresses it: the field describes the expected VAST response, not whether a placement is instream or outstream. A request declaring linearity 1 tells a buyer nothing about whether the video content exists.

What a validator reports, and why

What you sentFinding
"plcmt": 12openrtb.value.invalid naming the AdCOM list and its allowed values
plcmt on OpenRTB 2.5 or an early 2.6 snapshotopenrtb.field.not_yet_available, naming the version the field arrives in rather than calling it a typo
placement on 2.6-202309 or lateropenrtb.field.deprecated, a warning: deprecated is not removed, and dual-sending is still the norm
"plcmt": "1"openrtb.type.mismatch. The field is an integer, and a quoted one is a common templating slip

What no validator can tell you is whether the value is the right one. A request that says "plcmt": 1 for a muted autoplay player beside an article is valid OpenRTB and misdescribed inventory. That distinction is the reason buyers audit plcmt distributions against measured player behaviour rather than trusting the field.

A minimal instream request

{
  "id": "auc-1",
  "imp": [
    {
      "id": "1",
      "video": {
        "mimes": ["video/mp4"],
        "plcmt": 1,
        "placement": 1,
        "linearity": 1,
        "startdelay": 0,
        "w": 1920,
        "h": 1080,
        "protocols": [2, 3, 5, 6]
      }
    }
  ],
  "site": { "id": "s-1", "domain": "example.com" }
}

Both placement fields are present on purpose. Drop placement when your partners confirm they read plcmt, not before. Paste this into the tester and change the version selector to watch the finding change with the snapshot.

FAQ

Which OpenRTB version added plcmt?

The 2.6-202303 release notes, published April 5, 2023, announce the new plcmt attribute and the deprecation of placement. The specification document published at that same tag contains no occurrence of the string plcmt anywhere. The field first appears in the spec text at 2.6-202309, published September 28, 2023, which is also where placement is first marked deprecated. If you validate against the spec text, send plcmt on 2.6-202309 and later.

Should I send both plcmt and placement?

Yes, for now, and expect to for a while. placement is deprecated but not removed, so it still validates, and buyers that never migrated still filter on it. Sending only placement makes the inventory invisible to any buyer that filters on plcmt; sending only plcmt does the reverse for the ones that did not migrate. Sending both costs one integer.

Is plcmt 1 the same as placement 1?

No, and treating them as equivalent is the most common migration bug. The plcmt definition of Instream requires sound on by default at player start, or explicit user intent to watch, and requires the video to be the primary content in view. Plenty of inventory that qualified as placement 1 does not qualify as plcmt 1, and belongs at 2, 3, or 4.

Can plcmt appear on anything other than video?

No. It is a field on the Video object, imp.video.plcmt. Audio has no equivalent, and banner placements describe themselves with pos and the display-specific fields.

Related