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.
| Value | Name | What qualifies | Available from |
|---|---|---|---|
1 | Instream | Pre-, 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 |
2 | Accompanying Content | The 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 |
3 | Interstitial | No streaming video content. The ad takes the majority of the viewport and cannot be scrolled away while it plays. | 2.6-202309 |
4 | No Content / Standalone | No streaming video content. Slideshows, native feeds, in-content, sticky or floating players. | 2.6-202309 |
5 | Pause | Shown while requested video content is paused. The player remains the focus of the visit. | AdCOM 1.0-202607 |
6 | Screensaver | Shown when an OS or app screensaver starts. | AdCOM 1.0-202607 |
7 | Overlay | Placed over program content, outside the traditional ad break, often as a banner or picture in picture. | AdCOM 1.0-202607 |
8 | Squeezeback | The 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 |
9 | In-scene | Branded 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.
| Source | Says |
|---|---|
2.6-202303 release notes, April 5, 2023 | New plcmt attribute in Object: Video, deprecation of placement, and example code in the implementation guide. |
2.6-202303 specification document | No occurrence of plcmt anywhere in the document. The Video table still carries placement with no deprecation marker. |
2.6-202309 specification document, September 28, 2023 | plcmt present in the Video table, pointing at the AdCOM list, and placement marked deprecated. |
| Current specification text | The 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.
| Field | Answers | Does not answer |
|---|---|---|
plcmt | Where does this ad play, relative to content the viewer asked for? | What the creative looks like, or where on the screen it sits. |
placement | The 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. |
linearity | Is the expected VAST response linear or non-linear? | Whether the placement is instream or outstream. That is plcmt. |
pos | Where on the screen is the slot, above or below the fold? | Anything about content context. |
startdelay | Pre-, 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 sent | Finding |
|---|---|
"plcmt": 12 | openrtb.value.invalid naming the AdCOM list and its allowed values |
plcmt on OpenRTB 2.5 or an early 2.6 snapshot | openrtb.field.not_yet_available, naming the version the field arrives in rather than calling it a typo |
placement on 2.6-202309 or later | openrtb.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.