Integration with OpenRTB 2.6 protocol
This page outlines how Xandr's supply partners integrate using the OpenRTB protocol. Xandr supports the OpenRTB 2.6 protocol for receiving impressions across all media types. This document highlights the top-level objects that have changes or updates, including new fields that are added or implemented. Additionally, it outlines the fields that have been transitioned from their previous location in OpenRTB 2.4/2.5 to their new location in OpenRTB 2.6.
Implementation
Endpoint
To make OpenRTB 2.6 requests on the sell side, you must use the OpenRTB version header. The inclusion of this header is mandatory. If it is not included, the system will default to OpenRTB 2.4.
The header and version to use is:
x-openrtb-version : 2.6
Top-level bid request object
The OpenRTB 2.6 protocol introduces several changes and updates to the top-level objects and their associated fields that were previously supported by OpenRTB 2.4. The following sections detail these changes and updates, outlining the specific objects and fields that have been modified or added as a part of the OpenRTB 2.6 implementation.
Note
Any field(s) not listed here remains supported in its original location as documented in the OpenRTB 2.4 protocol.
Field | Type | Description |
---|---|---|
imp |
array of objects | (Required). The impressions offered in this bid request. See Impression Object below. Note: The imp is not a new field in the OpenRTB 2.6 protocol guide. It is included in this document solely as a reference to the rwdd field in the below section. |
Impression object
The Imp
object defines an ad placement or impression being auctioned. A single bid request can include multiple Imp
objects, which is useful for exchanges that support selling all ad positions on a given page. Each Imp object requires an ID, allowing bids to reference them individually.
Note
Any field(s) not listed here remains supported in its original location as documented in the OpenRTB 2.4 protocol.
As a part of the OpenRTB 2.6 implementation, Xandr has added the following field(s) to the Imp Object
.
Field | Type | Description |
---|---|---|
rwdd |
integer | This field indicates whether the user receives a reward for viewing the ad, with 0 representing "no" and 1 representing "yes." Typically, video ad implementations grant rewards such as access to an additional news article for free, an extra life in a game, or a sponsored ad-free music session. The reward is usually provided after the video ad is fully viewed. |
video |
object | This field is required if the impression is offered as a video ad. See Video Object below. Note: The video is not a new field in the OpenRTB 2.6 protocol guide. It is included in this document solely as a reference to the plcmt field in the below section. |
Video object
The Video
object represents a video impression. While many of its fields are non-essential for minimally viable transactions, they are included to provide fine control when necessary. Video in OpenRTB generally adheres to the VAST standard. Consequently, companion ads are supported by optionally including an array of Banner
objects that define these companion ads. For more details, see Banner object
Note
Any field(s) not listed here remains supported in its original location as documented in the [OpenRTB 2.4 protocol] (incoming-bid-request-from-ssps.md).
As part of the OpenRTB 2.6 implementation, Xandr has added the following field(s) to the Video
Object:
Field | Type | Description |
---|---|---|
plcmt |
integer | The video placement type for the impression references the List: Plcmt Subtypes - Video in AdCOM 1.0. |
Using Plcmt
, Placement
, and Context
fields together
The OpenRTB 2.6 specification replaces the placement
field (imp.video.placement
) from OpenRTB 2.4/2.5 with the plcmt
field (imp.video.plcmt
). However, some bidders may still use OpenRTB 2.4/2.5. To maximize demand sources, include both the placement
and plcmt
fields in your requests.
Refer to the table below to find the correct values. Start by comparing your OpenRTB 2.4/2.5 placement
values with their corresponding "plcmt" fields in OpenRTB 2.6.
Note
Instream
placements are now divided into Instream
and a new Accompanying Content
value.
In addition to the plcmt
and placement
fields, include the context
field in the AppNexus video extension object (imp.video.ext.appnexus.context
) in your bid requests. This field provides crucial information about the video's position (e.g., pre-roll, mid-roll, or post-roll) that the plcmt
or placement
fields alone do not convey (see the "Xandr Extension" column below). Ensure your bid requests include all three fields.
Video Ad type | Description | OpenRTB 2.4/2.5 | OpenRTB 2.6 | Xandr extensions |
---|---|---|---|---|
Instream |
Pre-roll, mid-roll, and post-roll ads play before, during, or after the streaming video content requested by the consumer. The instream video must start with “sound on” by default or have clear user intent to view the video content explicitly. While additional content may surround the player, the video content should be the primary focus of the user's visit. It must remain the main content on the page and the sole video player visible with audio capabilities during playback. If the player transitions to floating or sticky mode, subsequent ad calls should accurately reflect the updated player size. NOTE: The start delay determines the appropriate context (pre-roll, mid-roll, or post-roll) when placement = 1 and plcmt = 1. |
imp.video.placement = 1 |
imp.video.plcmt = 1 |
imp.video.ext.appnexus.context = 1 (pre-roll), imp.video.ext.appnexus.context = 2 (mid-roll), imp.video.ext.appnexus.context = 3 (post-roll) |
In-Article (formerly known as Appnexus Outstream format) |
Video ads played independently of streaming video content, appearing in placements such as slideshows, native feeds, within content, or as sticky/floating elements. These ads dynamically load and play between paragraphs of editorial content, presenting as distinct branded messages. | imp.video.placement = 3 |
imp.video.plcmt = 4 |
imp.video.ext.appnexus.context = 4 (outstream) |
In Banner |
This format resides within a web banner that utilizes the banner space to provide a video experience instead of a static or rich media format. It depends on the availability of display ad inventory on the page for delivery. | imp.video.placement = 2 |
imp.video.plcmt = 4 |
imp.video.ext.appnexus.context = 5 (bannerstream) |
In Feed |
This ad format appears in content, social, or product feeds. | imp.video.placement = 4 |
imp.video.plcmt = 2 |
imp.video.ext.appnexus.context = 6 (in-feed) |
Interstitial |
This ad format plays video without accompanying video content. During playback, it must maintain primary focus on the page, occupy the majority of the viewport, and remain fixed without scrolling out of view. This can occur in placements such as in-app video or slideshows. | imp.instl = 1 ,imp.video.placement = 5 |
imp.video.plcmt = 3 |
imp.video.ext.appnexus.context = 7 (interstitial) |
Accompanying Content |
Pre-roll, mid-roll, and post-roll ads that are played before, during, or after streaming video content. The video player loads and plays before, between, or after paragraphs of text or graphical content, and starts playing only when it enters the viewport. Accompanying content should only start playback upon entering the viewport. It may convert to a Pre-roll, mid-roll, and post-roll ads play before, during, or after streaming video content. The video player loads and initiates playback before, between, or after paragraphs of text or graphical content, beginning only when it comes into view. Accompanying content starts playback when it enters the viewport. The player may convert to a floating or sticky position as it scrolls off the page. NOTE: The start delay determines the context (pre-roll, mid-roll, or post-roll) to use when placement = 1 and plcmt = 2. |
imp.video.placement = 1 |
imp.video.plcmt = 2 |
imp.video.ext.appnexus.context = 8 (pre-roll) , imp.video.ext.appnexus.context = 9 (mid-roll), imp.video.ext.appnexus.context = 10 (post-roll) |
Updated field locations
A number of fields have moved from the old location in OpenRTB 2.4/2.5 to the new location in OpenRTB 2.6.
Note
Any field(s) not listed here remains supported in its original location as documented in the [OpenRTB 2.4 protocol] (incoming-bid-request-from-ssps.md).
Old location (OpenRTB 2.4/2.5) | New location (OpenRTB 2.6) | Type | Description |
---|---|---|---|
regs.ext.gdpr |
regs.gdpr |
integer | The flag indicating GDPR regulation applicability is set as follows: - 0 signifies No - 1 signifies Yes - omission denotes Unknown See Regs Resources for detailed information. |
regs.ext.us_privacy |
regs.us_privacy |
string | Communicate consumer privacy signals under US privacy regulation. See Regs Resources for detailed information. |
ext.schain |
source.schain |
object | This object represents the links in the supply chain and indicates whether the supply chain is complete. See Supply chain for detailed information. |
ext.schain.complete |
schain.complete |
integer | Indicates whether the chain includes all nodes involved in the transaction, tracing back to the owner of the site, app, or other inventory medium. A value of 0 means no, and 1 means yes. |
ext.schain.nodes |
source.schain.nodes |
object array | Represents an array of SupplyChainNode objects in the order of the chain. In a complete supply chain, the first node is the initial advertising system and seller ID involved in the transaction, such as the site, app, or other medium owner. In an incomplete supply chain, it represents the first known node. The last node represents the entity sending this bid request. |
ext.schain.ver |
source.schain.ver |
string | Indicates the version of the supply chain specification in use, formatted as “major.minor.” For example, use the string “1.0” for version 1.0 of the specification. |
ext.schain.nodes.asi |
source.schain.nodes.asi |
string | Indicates the canonical domain name of the SSP, Exchange, Header Wrapper, or other system that bidders connect to. This domain may be the operational domain of the system, if different from the parent corporate domain, to facilitate WHOIS and reverse IP lookups for establishing clear ownership of the delegate system. This should be the same value as used to identify sellers in an ads.txt file if one exists. |
ext.schain.nodes.sid |
source.schain.nodes.sid |
string | The identifier associated with the seller or reseller account within the advertising system. This value must match the one used in transactions (e.g., OpenRTB bid requests) in the field specified by the SSP/exchange. Typically, this is publisher.id in OpenRTB and the publisher's organization ID in OpenDirect. Limit this value to 64 characters in length. |
ext.schain.nodes.rid |
source.schain.nodes.rid |
string | The OpenRTB RequestId issued by this seller for the request. |
ext.schain.nodes.hp |
source.schain.nodes.hp |
integer | Indicates whether this node participates in the payment flow for the inventory. When set to 1, the advertising system in the asi field pays the seller in the sid field, who is then responsible for paying the previous node in the chain. When set to 0, this node does not participate in the payment flow for the inventory. For SupplyChain version 1.0, this property should always be 1. Implementers must ensure they propagate this field when constructing SupplyChain objects in bid requests sent to downstream advertising systems. |
device.ext.sua |
device.sua |
UserAgent object | The bid request includes structured user agent information defined by the UserAgent object. If both ua and sua are provided, sua should be prioritized as it offers a more accurate representation of the device attributes. This preference is due to the possibility that ua may contain a frozen or truncated UserAgent string. |
device.ext.user_agent_data.browsers |
UserAgent.browsers |
array of BrandVersion objects | Each BrandVersion object identifies a browser or similar software component. Implementers must transmit brands and versions obtained from the Sec-CH-UA-Full-Version-List header. See BrandVersion for detailed information. |
device.ext.user_agent_data.platform |
UserAgent.platform |
BrandVersion object | The BrandVersion object, outlined in BrandVersion, serves to identify the execution platform or operating system (OS) of the user agent. To ensure accurate transmission of this information, implementers are advised to follow specific guidelines when handling headers related to user agent platform details. Identifying the Brand and Version: - Brand (Platform): Extract the brand information from the Sec-CH-UA-Platform header. This header typically contains data that specifies the platform or OS type. - Version (Platform Version): Extract the version information from the Sec-CH-UA-Platform-Version header. This header provides the specific version number associated with the platform or OS. |
device.ext.user_agent_data.mobile |
UserAgent.mobile |
integer | The value indicating whether the agent prefers a "mobile" version of the content, if available, optimized for small screens or touch input, should be derived from the Sec-CH-UA-Mobile header. |
device.ext.user_agent_data.architecture |
UserAgent.architecture |
string | Retrieve the device's major binary architecture, such as "x86" or "arm", from the Sec-CH-UA-Arch header. Implementers must extract this value to identify the primary architecture of the user agent's device |
device.ext.user_agent_data.bitness |
UserAgent.bitness |
string | Retrieve the device's bitness, such as "64" for 64-bit architecture, from the Sec-CH-UA-Bitness header. Implementers must extract this value to determine the bitness of the user agent's device. |
device.ext.user_agent_data.model |
UserAgent.model |
string | Retrieve the device model from the Sec-CH-UA-Model header. Implementers must extract this value to identify the specific model of the user agent's device. |
device.ext.user_agent_data.browsers.brand |
BrandVersion.brand |
string | The brand identifier, such as "Chrome" or "Windows", originates from the User-Agent Client Hints headers. It represents either the user agent brand, extracted from the Sec-CH-UA-Full-Version header, or the platform brand, derived from the Sec-CH-UA-Platform header. |
device.ext.user_agent_data.browsers.version |
BrandVersion.version |
array of string | It comprises a sequence of version components arranged in descending hierarchical order: major, minor, micro, and so forth. |
user.ext.consent |
user.consent |
string | When GDPR regulations are in effect, this attribute holds the Transparency and Consent Framework's Consent String data structure. |
user.ext.eids |
user.eids |
object array | This section details the support of a standard protocol for multiple third-party identity providers. See Object EID for more details. |
user.ext.eids.source |
EID.source |
string | The source or technology provider responsible for the set of included IDs is represented as a top-level domain. |
user.ext.eids.uids |
EID.uids |
object array | It consists of an array of extended ID UID objects sourced from the specified origin. Object UID for more details. |
user.ext.eids.uids.id |
UID.id |
string | This represents the user's identifier. |