> [!IMPORTANT]
> **Key Point:** Verify bid requests comply with the DV360 OpenRTB specification.

> [!WARNING]
> **Warning:** Existing integrations may be using incompatible extension specifications.

Have the [OpenRTB 2.6
Specification](https://github.com/InteractiveAdvertisingBureau/openrtb2.x/blob/main/2.6.md)
available while consulting this page.

Display and Video 360 does not support every field in the OpenRTB specification,
and nuances can apply. Sections of this document contain information and
recommendations specific to the Display and Video 360 implementation. You should
also follow the guidelines presented in the OpenRTB specification unless
instructed otherwise.

Some fields are not supported, but are still parsed. These fields must be
formatted correctly but won't affect the bidding outcome.

## Bid request specification

A bid request is an HTTP Post request with a body of a [bid request
object](https://developers.google.com/display-video/ortb-spec#bid-request-object). The format of the body is defined in the
`Content-Type` header.

The corresponding response is either an HTTP 204 with no body for a no-bid, or
an HTTP 200 with a body of a [bid response](https://developers.google.com/display-video/ortb-spec#bid-response-specification).

If a bid request is malformed, an HTTP 200 with a body of a [bid
response](https://developers.google.com/display-video/ortb-spec#bid-response-specification) with the `nbr` field populated may be
returned.

The response format is controlled by the `Accept` header.

### JSON Format

The default format is used when no accepted MIME type is provided.

JSON requests and responses follow the IAB [OpenRTB 2.6
Specification](https://github.com/InteractiveAdvertisingBureau/openrtb2.x/blob/main/2.6.md).
The following documentation describes extensions and field support.

The header `Content-Type`: `application/json` indicates a JSON bid request,
`Accept`: `application/json` indicates the bid responses should be in JSON
format.

### Protobuf Format

NOTE: Protobuf support is in beta, please contact DV360 if you are interested.

JSON requests and responses follow the IAB [OpenRTB 2.6 Protobuf
Specification](https://github.com/InteractiveAdvertisingBureau/openrtb2.x/blob/proto-editions/proto/src/main/com/iabtechlab/openrtb/v2/openrtb.proto).

Extensions have limited support, contact DV360 if you are interested.

Send the header `Content-Type`: `application/x-protobuf` to indicate a Protobuf
bid request, and set `Accept`: `application/x-protobuf` to receive Protobuf bid
responses.

### Bid request object

| Field | Type | Details |
|---|---|---|
| `id` | String | Required. Unique ID of the bid request. This can be used to identify individual requests for a very limited time after they are served. |
| `imp` | [Imp](https://developers.google.com/display-video/ortb-spec#imp-object) array | At least 1 `imp` object is required. For audio pods, more than one `imp` object is supported. For other use cases (e.g., multiple independent slots on page) the first `imp` object is used, the rest are discarded. |
| `site` | [Site](https://developers.google.com/display-video/ortb-spec#site-object) | Required for website requests. `site` and `app` are mutally exclusive. |
| `app` | [App](https://developers.google.com/display-video/ortb-spec#app-object) | Required for app requests. `app` and `site` are mutally exclusive. |
| `device` | [Device](https://developers.google.com/display-video/ortb-spec#device-object) | Required. |
| `user` | [User](https://developers.google.com/display-video/ortb-spec#user-object) | Required. |
| `test` | Integer | No Not supported. |
| `at` | Integer | `1`: First price auction where the advertiser is charged their bid amount. `2` (default): Second price auction where the advertiser is charged just above the second highest bidder. `3`: The floor price is in the request, and has nothing to do with competing bids. |
| `tmax` | Integer | Optional, default is custom per integration. |
| `wseat` | String array | List of allowed buyer seats. Recommended unless all advertisers are allowed to bid. Unset implies no restrictions. |
| `bseat` | String array | List of buyer seats whose bids should be blocked. Listed buyers will be blocked from bidding on deals and open-auction. |
| `allimps` | Integer | No Not supported. |
| `cur` | String array | Optional, but highly recommended. Default is per integration. Currency in the bid request must match one of the currencies registered during integration. It is highly recommended to support single currency per exchange. |
| `wlang` | String array | No Not supported. |
| `bcat` | String array | Blocked advertiser categories using the IAB content categories. Unset is no blocked categories. |
| `badv` | String array | Specify the blocked advertiser based on the domain provided by the advertiser. Unset is no blocked advertisers. |
| `bapp` | String array | No Not supported. |
| `source` | [Source](https://developers.google.com/display-video/ortb-spec#source-object) | Semi-required for `schain`. |
| `regs` | [Regs](https://developers.google.com/display-video/ortb-spec#regs-object) | Optional. |
| `ext` | [Bid request extensions](https://developers.google.com/display-video/ortb-spec#bid-request-extensions-object) | Optional. |

### Bid request extensions object

| Field | Type | Details |
|---|---|---|
| `schain` | [Supply chain](https://developers.google.com/display-video/ortb-spec#supply-chain-object) | new integrations should use the field `BidRequest.source.schain` in [Source](https://developers.google.com/display-video/ortb-spec#source-object) instead. |
| `purch` | Integer | The Purchased Traffic parameter is the traffic that is redirected from properties other than owned, acquired, or otherwise incentivized activity. This is per the new [MRC IVT 2.0 Spec](http://mediaratingcouncil.org/IVT%20Addendum%20Update%20062520.pdf). This will be called *Publisher Traffic Source* in buyer facing reporting and will have one of the following values : `0` (default): Undefined - Value not sent in bid requests. Unable to capture value; `1`: Purchased - Traffic redirected from properties other than owned (acquired or otherwise incentivized activity). `2`: Organic - Direct URL entry, site search or app download. |
| `gdemsignals` | String | A SCAR API signal blob from the GMA SDK. Recommended if GMA SDK traffic, forbidden otherwise. |
| `disable_gma_format` | int | Optional if `gdemsignals` is provided, forbidden otherwise. `0` (default): When `gdemsignals` is populated the bid response adm is a json blob. `1`: An ad tag will also be provided instead of the json blob. |

### Source object

| Field | Type | Details |
|---|---|---|
| `fd` | Integer | Entity responsible for the final impression sale decision `0` (Default): Exchange decides. `1`: An upstream source decides. |
| `tid` | String | No Not supported. |
| `pchain` | String | No Not supported. |
| `schain` | [Supply chain](https://developers.google.com/display-video/ortb-spec#supply-chain-object) | Required in almost all cases. This field is preferred over providing `schain` via [Bid request extensions](https://developers.google.com/display-video/ortb-spec#bid-request-extensions-object) or [Source extensions](https://developers.google.com/display-video/ortb-spec#source-extensions-object). |
| `ext` | [Source extensions](https://developers.google.com/display-video/ortb-spec#source-extensions-object) | Optional. |

### Source extensions object

This extension is highly recommended since it impacts how viewability
measurements are reported in DV3 to the customer. If the OMID partner name is
NOT on the [IAB
certification](https://omsdkcomplianceapi.iabtechlab.com/compliance/latest)
list, we are required by MRC to report the viewability metrics separately from
the MRC certified metrics. [Learn
more](https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/master/OpenRTB%20support%20for%20OMSDK.md#openrtb-and-adcom).

| Field | Type | Details |
|---|---|---|
| `omidpn` | String | Identifier of the OM SDK integration. This is the same as the "name" parameter of the OMID Partner object. |
| `omidpv` | String | Version of the OM SDK integration. This is the same as the "versionString" parameter of the OMID Partner object. |
| `schain` | [Supply chain](https://developers.google.com/display-video/ortb-spec#supply-chain-object) | new integrations should use the field `schain` in [Source](https://developers.google.com/display-video/ortb-spec#source-object) instead. |

### Regs object

| Field | Type | Details |
|---|---|---|
| `coppa` | Integer | `0` (default): COPPA is not applicable to this request. `1`: This request is COPPA applicable. |
| `gdpr` | String | Flag that indicates whether or not the request is subject to GDPR regulations, 0 = no, 1 = yes, omission indicates unknown. See [DV360's GDPR documentation](https://support.google.com/displayvideo/answer/9634508) for more detail. Only one of `regs.gdpr` and `regs.ext.gdpr` is expected. |
| `us_privacy` | String | Communicates signals regarding consumer privacy under US privacy regulation. See [US Privacy String specifications](https://iabtechlab.com/standards/ccpa/). When we receive the `us_privacy` string in the bid request and the IAB string indicates a user has *opted out* , Display \& Video 360 considers the request ineligible for personalized bids. We do not propagate the IAB signal further to other vendors. Only one of `regs.us_privacy`, `user.us_privacy` and `user.ext.us_privacy` is expected. |
| `gpp` | String | Contains the [Global Privacy Protocol's consent string](https://iabtechlab.com/gpp/). DV360 accepts only some GPP sections, including US National, California, and others. IAB Europe TCF sections are not accepted; use `user.consent` or `user.ext.consent` instead. |
| `gpp_sid` | Integer array | Array of the section(s) of the [Global Privacy Protocol consent string](https://iabtechlab.com/gpp/) which should be applied for this transaction. |
| `ext` | [Regs extensions](https://developers.google.com/display-video/ortb-spec#regs-extensions-object) | Optional. |

### Regs extensions object

| Field | Type | Details |
|---|---|---|
| `gdpr` | Integer | Flag that indicates whether or not the request is subject to GDPR regulations, as described in [`regs.gdpr` above](https://developers.google.com/display-video/ortb-spec#regs_gdpr). Only one of `regs.gdpr` and `regs.ext.gdpr` is expected. |
| `us_privacy` | String | See [`regs.us_privacy`](https://developers.google.com/display-video/ortb-spec#regs_us_privacy) documentation. Only one of `regs.us_privacy`, `regs.ext.us_privacy` and `user.ext.us_privacy` is expected. |

### Imp object

| Field | Type | Details |
|---|---|---|
| `id` | String | A unique identifier for this impression within the context of the bid request (typically, value starts with 1, and increments up to n for n impressions). |
| `metric` | Object | No Not supported. |
| `banner` | [Banner](https://developers.google.com/display-video/ortb-spec#banner-object) | Required for banner ad opportunities. |
| `video` | [Video](https://developers.google.com/display-video/ortb-spec#video-object) | Required for video ad opportunities. |
| `audio` | [Audio](https://developers.google.com/display-video/ortb-spec#audio-object) | Required for audio ad opportunities. |
| `native` | [Native](https://developers.google.com/display-video/ortb-spec#native-object) | Required for native ad opportunities. |
| `pmp` | [Pmp](https://developers.google.com/display-video/ortb-spec#pmp-object) | Private marketplace deals in effect for this impression. |
| `displaymanager` | String | Name of ad mediation partner, SDK technology, or player responsible for rendering ad (typically video or mobile). Used by some ad servers to customize ad code by partner. Recommended for video and/or apps. |
| `displaymanagerver` | String | Version of ad mediation partner, SDK technology, or player responsible for rendering ad (typically video or mobile). Used by some ad servers to customize ad code by partner. Recommended for video and/or apps. |
| `instl` | Integer | `0` (default): not interstitial. `1`: the ad is interstitial or full screen. |
| `tagid` | String | Identifier for specific ad placement or ad tag that was used to initiate the auction. This can be useful for debugging of any issues, or for optimization by the buyer. |
| `bidfloor` | Float | Minimum bid for this impression expressed in CPM. |
| `bidfloorcur` | String | Currency specified using ISO-4217 alpha codes. |
| `clickbrowser` | Integer | Indicates the type of browser opened upon clicking the creative in an app. `0` (default): embedded `1`: native Note that the Safari View Controller in iOS 9.x devices is considered a native browser for purposes of this field. |
| `secure` | Integer | If this impression requires a secure HTTPS URL, or an insecure HTTP URL. `0` (default):insecure `1`: secure |
| `iframebuster` | String array |   |
| `exp` | Integer | Bid expiration is set by DV 360 without regard to the value sent by a partner in this field. Impression events received after the impression staleness window (generally 1 hour) are discarded as stale and are not considered billable by DV360. |
| `rwdd` | Integer | Indicates whether the user receives a reward for viewing the ad. `0` (default): Not rewarded `1`: Rewarded Typically, video ad implementations let users read an additional news article for free, receive an extra life in a game, or get a sponsored ad-free music session. The reward is typically distributed after the video ad is completed. |

#### Imp extension object

| Field | Type | Details |
|---|---|---|
| `bcrid` | String | List of creative ids that should be blocked. |

### Banner object

| Field | Type | Details |
|---|---|---|
| `format` | [Format](https://developers.google.com/display-video/ortb-spec#format-object) array | A list of supported formats. |
| `w` | Integer | `h` and `w` are merged into the `format` field. It is recommended to use `format` instead. |
| `h` | Integer | `h` and `w` are merged into the `format` field. It is recommended to use `format` instead. |
| `wmax` | Integer | No Not supported. |
| `hmax` | Integer | No Not supported. |
| `wmin` | Integer | No Not supported. |
| `hmin` | Integer | No Not supported. |
| `btype` | Integer array | A list of blocklisted Banner ad types: `1`: HTML Text ads `2`: HTML banner ads `3`: Javascript ads `4`: IFrame ads |
| `battr` | Integer array | Support following values: `1`: Audio auto play `2`: Audio user initiated `3`: Expandable automatic `4`: Expandable click initiated `5`: Expandable rollover initiated `6`: Video in banner auto play `7`: Video in banner user initiated `8`: Pop(over/under/on-exit) `9`: Provocative or suggestive `10`: "Annoying", Eg: Shaky, Flashing, Flickering, Extreme Animation, Smileys `11`: Surveys `12`: Text only `13`: User interactive (games) `14`: Windows dialog or alert style `15`: Has audio on/off button `16`: Ad can be skipped `17`: Flash |
| `pos` | Integer | The position of the ad: `0` (default): Unknown `1`: Above the fold `2`: **No Not supported:** Likely below the fold `3`: Below the fold `4`: Header `5`: Footer `6`: Sidebar `7`: Fullscreen |
| `mimes` | String array | No Not supported. DV360 will use text/html for all banner creatives. |
| `topframe` | Integer | `0` (default): The banner is delivered in an iframe. `1`: **No Not supported:** The banner is delivered in the top frame. |
| `expdir` | Integer array | `1`: Left `2`: Right `3`: Up `4`: Down `5`: Expandable Fullscreen |
| `api` | Integer array | Supported API Frameworks `1`: Left `2`: Right `3`: Up `4`: Down `5`: Expandable Fullscreen |
| `id` | String | An identifier for the banner object and should be unique in the impression. Recommended when `banner` objects are used with a [video object](https://developers.google.com/display-video/ortb-spec#video-object). |
| `vcm` | Integer | Only relevant for a `banner` used with a [video object](https://developers.google.com/display-video/ortb-spec#video-object). `0`: The banner is concurrently visible with the video creative. `1`: The banner is an end card after the video. |

### Format object

| Field | Type | Details |
|---|---|---|
| `w` | Integer | Width in device independent pixels (DIPS). |
| `h` | Integer | Height in device independent pixels (DIPS). |
| `wratio` | Integer | No Not supported. |
| `hratio` | Integer | No Not supported. |
| `wmin` | Integer | No Not supported. |

### Video object

We strongly recommend specifying video placement in the bid request. A missing
placement field is classified as an unknown placement. See the [article on
position targeting](https://support.google.com/displayvideo/answer/9272003) for more
detail.

| Field | Type | Details |
|---|---|---|
| `mimes` | String array | At least one mime type is required. `video/flv` or `video/x-f4v` `video/mp4`, `video/x-mp4`, or `application/mp4` `video/webm` or `video/x-webm` `video/x-ms-wmv` `video/3gpp` `video/ogg` or `application/ogg` `application/javascript` or `application/x-javascript` |
| `minduration` | Integer | The minimum duration of the video in seconds, default is no minimum. |
| `maxduration` | Integer | The maximum duration of a video in seconds, default is no maximum. |
| `protocols` | Integer array | At least one supported protocol is required. `1`: VAST 1.0 `2`: VAST 2.0 `3`: VAST 3.0 `4`: VAST 1.0 Wrapper `5`: VAST 2.0 Wrapper `6`: VAST 3.0 Wrapper `7`: VAST 4.0 `8`: VAST 4.0 Wrapper `9`: DAAST 1.0 `10`: DAAST 1.0 Wrapper |
| `w` | Integer | Width of the video player in device independent pixels (DIPS). |
| `h` | Integer | Height of the video player in device independent pixels (DIPS). |
| `startdelay` | Integer | Start delay in seconds for pre-roll, mid-roll, or post-roll ad placements. |
| `placement` | Integer | Strongly recommended to specify plcmt (and/or) placement of video in the bid request. Missing both fields will be classified as an unknown placement. `0` (default): Unknown `1`: In stream `2`: In banner `3`: In article `4`: In feed `5`: Floating **Note:** To be considered In-Stream (Placement or Plcmt Type 1), video placements/impressions must be set to "sound on" and be correctly signaled in Playback Method (Values of 1, 3, 4, and 5 all qualify). |
| `plcmt` | Integer | Strongly recommended to specify plcmt (and/or) placement of video in the bid request. Missing both fields will be classified as an unknown placement. `0` (default): Unknown `1`: In stream `2`: Accompanying Content `3`: Interstitial `4`: No Content/Standalone **Note:** To be considered In-Stream (Placement or Plcmt Type 1), video placements/impressions must be set to "sound on" and be correctly signaled in Playback Method (Values of 1, 3, 4, and 5 all qualify). **Note:** If providing both `plcmt` and `placement`, `plcmt` will have precedence. See the [IAB Guide](https://github.com/InteractiveAdvertisingBureau/openrtb2.x/blob/main/implementation.md#7102---using-plcmt-attribute-in-object-video) on migrating to plcmt. **Note:** `plcmt: Accompanying Content (2)` is considered `placement: In Article (3)` `plcmt: No Content/Standalone (4)` is considered `placement: In feed (4)` `placement: In Banner` has no mapping in `plcmt` |
| `linearity` | Integer | No Not supported. |
| `skip` | Integer | If the video player will allow the ad to be skipped. `0` (default): Not skippable `1`: Skippable |
| `skipmin` | Integer | No Not supported. |
| `skipafter` | Integer | No Not supported. |
| `sequence` | Integer | If multiple ad impressions are offered in the same bid request, the sequence number will allow for the coordinated delivery of multiple creatives. |
| `battr` | Integer array | Blocked creative attributes. |
| `maxextended` | Integer | Maximum extended video ad duration, if extension is allowed. `0` (default): Extension is not allowed `-1`: extension is allowed, and there is no time limit imposed `>0`: the number of seconds of extended play supported beyond the maxduration value. |
| `minbitrate` | Integer | Minimum bit rate in Kbps. |
| `maxbitrate` | Integer | Maximum bit rate in Kbps. |
| `boxingallowed` | Integer | Indicates if letter-boxing of 4:3 content into a 16:9 window is allowed `0`: not allowed `1` (default): Allowed |
| `playbackmethod` | Integer array | Playback methods that may be in use. If none are specified, any method may be used. `0` (default): Unknown `1`: Auto play, sound on `2`: Auto play, sound off `3`: Click to play `4`: Mouse over `5`: Initiate on entering viewport, sound on `6`: Initiate on entering viewport, sound off **Note:** All impressions with Default Sound Off (Playback Method of 2, 6, or 0) must signal an out-stream Placement of type 2, 3, 4, or 5 (oRTB 2.5) or Plcmt Subtype of 2, 3, or 4. |
| `playbackend` | Integer | The event that causes playback to end. `1`: Video completion or user terminated `2`: Leaving viewport or user terminated `3`: On leaving viewport, continues as a floating window until complete or user terminated |
| `delivery` | Integer array | Supported delivery methods. If none specified, assume all are supported. `1`: Streaming `2`: Progressive |
| `pos` | Integer | Ad position on screen. `0` (default): Unknown `1`: Above the fold `2`: **No Not supported:** Likely below the fold `3`: Below the fold `4`: Header `5`: Footer `6`: Sidebar `7`: Fullscreen |
| `companionad` | [Banner](https://developers.google.com/display-video/ortb-spec#banner-object) array | Companion ads, if available. |
| `api` | Integer array | `0` (default): Unknown `1`: VPAID 1 `2`: VPAID 2 `3`: MRAID 1 `4`: ORMMA `5`: MRAID 2 `6`: MRAID 3 `7`: OMID 1 - required to enable measurement using OMID for Active View. `8`: SIMID 1 |
| `companiontype` | Integer array | No Not supported. |
| `maxseq` | Integer | The maximum number of ads to be returned in a dynamic video pod. |
| `poddur` | Integer array | The maximum length of a dynamic video pod in seconds. |

### Supported extension for video object

| Field | Type | Details |
|---|---|---|
| `rewarded` | Integer | This field is to signal if the requests are rewarded or not. This should be sent as an integer. `0` (default): not rewarded `1`: rewarded |

### Audio object

| Field | Type | Details |
|---|---|---|
| `mimes` | String array | At least one mime type is required. `audio/m4a`, `audio/mp4`, or `audio/x-m4a` `audio/mpeg` or `audio/mp3` `audio/ogg` or `audio/x-ogg` |
| `minduration` | Integer | Minimum ad duration in seconds. |
| `maxduration` | Integer | Maximum ad duration in seconds. |
| `protocols` | Integer array | `3`: VAST 3.0 `6`: VAST 3.0 Wrapper `7`: VAST 4.0 `8`: VAST 4.0 Wrapper |
| `startdelay` | Integer | The start delay in seconds for pre-roll, mid-roll, or post-roll ad placements. `-2`: Post-roll `-1`: Mid-roll `0`: Pre-roll `>0`: Mid-roll |
| `sequence` | Integer | No Not supported. |
| `battr` | Integer array | No Not supported. |
| `maxextended` | Integer | No Not supported. |
| `minbitrate` | Integer | The minimum bit rate in Kbps. |
| `maxbitrate` | Integer | The maximum bit rate in Kbps. |
| `delivery` | Integer array | No Not supported. |
| `companionad` | [Banner object](https://developers.google.com/display-video/ortb-spec#banner-object) array | Any banner companion creative slots. |
| `api` | Integer array | List of supported API frameworks for this impression. `7`: Omid V1 |
| `companiontype` | Integer array | No Not supported. |
| `maxseq` | Integer array | No Not supported. |
| `feed` | Integer | Type of audio feed. Refer to [List: Feed Types](https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/main/AdCOM%20v1.0%20FINAL.md#list--feed-types-) in AdCOM 1.0. `1`: Music streaming service `2`: FM/AM broadcast (live content broadcast over the air but also available using online streaming) `3`: Podcast (original, prerecorded content distributed as episodes in a series) `4`: Catch-up radio (recorded segment of a radio show that was originally broadcast live) `5`: Web radio (live content only available using online streaming, not as AM/FM broadcast) `6`: Video game (background audio in video games) `7`: Text to speech (audio books, website plugin that can read article) |
| `stitched` | Integer | No Not supported. |
| `nvol` | Integer | No Not supported. |

### Native object

See the [DV360 native ads
specifications](https://support.google.com/displayvideo/answer/9020755) for more
detail.

| Field | Type | Details |
|---|---|---|
| `request` | String | The string encoded native json object. |
| `ver` | String | `1.0`: No Not supported `1.1`: No Not supported `1.2` |
| `api` | Integer array | List of supported API frameworks for this impression. `7`: Omid V1 |
| `battr` | Integer array | No Not supported. |

### PMP object

| Field | Type | Details |
|---|---|---|
| `private_auction` | Integer | `0` (Default): All bids allowed `1`: Deals only |
| `deals` | [Deal object](https://developers.google.com/display-video/ortb-spec#deal-object) array | The deals to include. |

### Deal object

| Field | Type | Details |
|---|---|---|
| `id` | String | PMP object cannot contain more than one deal object per ID. |
| `bidfloor` | Double | Minimum bid for this impression in CPM. Required if `at=3`. |
| `bidfloorcur` | String | Currency specified using ISO-4217 alpha codes. Defaults to the bid request currency if unspecified. |
| `at` | Integer | Default matches `bid_request.at` if unspecified. `1`: First price `2`: Second price `3`: Fixed price |
| `wseat` | String array | The partner IDs of the partners elligable for the deal. No seats implies no seat restrictions. |
| `wadomain` | String array | The advertiser domains allowed to bid on this deal. No seats implies no domain restrictions. |
| `guar` | Integer | This field is to signal if the deal is a guaranteed deal. This should be sent as an integer. An exchange must be allowlisted for DV360 to accept guaranteed deals; [reach out](https://support.google.com/displayvideo/contact/exchange) to request this. If your exchange currently uses a different mechanism to signal guaranteed deals with DV360, [reach out](https://support.google.com/displayvideo/contact/exchange) to discuss moving to this preferred extension. `0` (default): Not guaranteed `1`: Guaranteed |
| `ext` | [Deal extensions](https://developers.google.com/display-video/ortb-spec#supported-extension-for-deal-object) | Optional. |

### Supported extension for deal object

| Field | Type | Details |
|---|---|---|
| `guaranteed` | Integer | This field is to signal if the deal is a guaranteed deal. This should be sent as an integer. An exchange must be allowlisted for DV360 to accept guaranteed deals; [reach out](https://support.google.com/displayvideo/contact/exchange) to request this. If your exchange currently uses a different mechanism to signal guaranteed deals with DV360, [reach out](https://support.google.com/displayvideo/contact/exchange) to discuss moving to this preferred extension. `0` (default): Not guaranteed `1`: Guaranteed It is recommended to use `deal.guar` instead of this field. |

### Site object

| Field | Type | Details |
|---|---|---|
| `id` | String | The ID of the site on the exchange. |
| `name` | String | No Not supported. |
| `domain` | String | The domain of the site. It is recommended to send a full URL in site.page rather than only populating site.domain. |
| `cat` | String array | No Not supported. |
| `sectioncat` | String array | No Not supported. |
| `pagecat` | String array | No Not supported. |
| `page` | String | The full URL where the impression is to be shown. It is recommended to send the full URL for targeting purposes. |
| `ref` | String | The referrer URL that caused navigation to the current page. |
| `search` | String | No Not supported. |
| `mobile` | Integer | No Not supported. |
| `privacypolicy` | Integer | No Not supported. |
| `publisher` | [Publisher object](https://developers.google.com/display-video/ortb-spec#publisher-object) | Details about the publisher of the site. |
| `content` | [Content object](https://developers.google.com/display-video/ortb-spec#content-object) | Details about the content within a site. |
| `keywords` | String (CSV format) | No Not supported. |
| `ext` | [Site extensions](https://developers.google.com/display-video/ortb-spec#site-extension-object) | Extensions for the site object. |

### Site extension object

| Field | Type | Details |
|---|---|---|
| `inventorypartnerdomain` | String | Used for CTV inventory sharing, see the [IAB CTV app adds explainer](https://iabtechlab.com/wp-content/uploads/2021/03/ctv-app-ads-explainer-guide.pdf). |

### App object

| Field | Type | Details |
|---|---|---|
| `id` | String | Application ID on the exchange. |
| `name` | String | Applications names, which may be aliased on publishers request. App names for SDK-less requests (mostly connected TVs) can be provided by the publisher directly in the request. |
| `bundle` | String | Required. For iOS, it is required to be the numeric app store ID. We do not accept the reverse DNS style bundle ID. For CTV app, we recommend passing the store-defined app identifier. Please adhere to the recently published [IAB OTT/CTV Store Assigned ID guidelines](https://iabtechlab.com/wp-content/uploads/2020/08/IAB-Tech-Lab-OTT-store-assigned-App-Identification-Guidelines-2020.pdf). |
| `domain` | String | The domain, for example `mygame.foo.com` |
| `storeurl` | String | Required for app-ads.txt verification and Connected TV app store validation. |
| `cat` | String array | No Not supported. |
| `sectioncat` | String array | No Not supported. |
| `pagecat` | String array | No Not supported. |
| `ver` | String | No Not supported. |
| `privacypolicy` | Integer | No Not supported. |
| `paid` | Integer | No Not supported. |
| `publisher` | [Publisher object](https://developers.google.com/display-video/ortb-spec#publisher-object) | Information on the app publisher. |
| `content` | [Content object](https://developers.google.com/display-video/ortb-spec#content-object) | Information on the app content. |
| `keywords` | String (csv format) | No Not supported. |
| `ext` | [App extensions](https://developers.google.com/display-video/ortb-spec#app-extension-object) | Extensions for the app object. |

### App extension object

| Field | Type | Details |
|---|---|---|
| `inventorypartnerdomain` | String | Used for CTV inventory sharing, see the [IAB CTV app adds explainer](https://iabtechlab.com/wp-content/uploads/2021/03/ctv-app-ads-explainer-guide.pdf). |

### Content object

We recommend passing these attributes where available.

| Field | Type | Details |
|---|---|---|
| `id` | String | An ID uniquely identifying the content. |
| `episode` | Integer | Content episode number (normally for video content). |
| `title` | String | Recommended for CTV, video and audio requests. |
| `series` | String | Recommended for CTV, video and audio requests. |
| `season` | String | A label for the season of the content. |
| `artist` | String | The artist credited with the content. |
| `genre` | String | Genre that best describes the content. DV360 recommends providing this signal for CTV, video and audio requests. DV360 supports a few taxonomies of video genre values for this field: - Google list of genres ([Download](https://developers.google.com/static/display-video/ortb-spec/Google-genres.csv)) - Google list of Audio genres ([Download](https://developers.google.com/static/display-video/ortb-spec/Google-audio-genres.csv)) - IAB TV/Movie/Sports categories ([Download](https://developers.google.com/static/display-video/ortb-spec/IAB-TV_Movie_Sports-categories.xlsx)) - Nielsen's Gracenote Video Genre Taxonomy |
| `album` | String | The album to which the content belongs, typically for audio. |
| `isrc` | String | International Standard Recording Code conforming to ISO-3901. |
| `producer` | [Producer object](https://developers.google.com/display-video/ortb-spec#producer-object) | Details about the contents producer. |
| `url` | String | URL of the content. |
| `cat` | String array | IAB content categories that describe the content. |
| `prodq` | Integer | Production quality: `0` (Default): Unknown `1`: Professional `2`: Prosumer `3`: User generated |
| `videoquality` | Integer | No Not supported. |
| `context` | Integer | Type of content: `1`: Video `2`: Game `3`: Music `4`: Application `5`: Text `6`: Other `7`: Unknown |
| `contentrating` | String | Recommended for Audio \& Video/CTV, as we will start decisioning on this attribute. |
| `userrating` | String | Number of stars, likes, etc... |
| `qagmediarating` | Integer | Media rating per \[QAG guidelines\](http://www.iab.net/ne_guidelines). `1`: All audiences `2`: 12+ `3`: Mature |
| `keywords` | String (csv format) | No Not supported. |
| `livestream` | Integer | If the content is livestream content. `0`: Not live `1`: Content is live |
| `sourcerelationship` | Integer | `0`: Indirect `1`: Direct |
| `len` | Integer | The content length in seconds. Recommended for CTV/video and audio requests. |
| `language` | String (ISO-639-1-alpha-2) | The language of the content. |
| `embeddable` | Integer | Indicator of whether or not the content is embeddable (e.g., an embeddable video player) `0`: Not embeddable `1`: Embeddable |
| `data` | Array of [Data objects](https://developers.google.com/display-video/ortb-spec#data-object) | Additional data. |
| `network` | [Network object](https://developers.google.com/display-video/ortb-spec#network-object) | Details about the network the content is on. |
| `channel` | [Channel object](https://developers.google.com/display-video/ortb-spec#channel-object) | Details about the channel the content is on. |

### Producer object

| Field | Type | Details |
|---|---|---|
| `id` | String | No Not supported. |
| `name` | String | No Not supported. |
| `cat` | String array | No Not supported. |
| `domain` | String | Highest level domain of the producer. |

### Data object

| Field | Type | Details |
|---|---|---|
| `id` | String | An ID of the data provider. |
| `name` | String | Exchange name for the data provider. |
| `segment` | Array of [Segment objects](https://developers.google.com/display-video/ortb-spec#segment-object) | The actual data values. |
| `ext` | [Data extensions](https://developers.google.com/display-video/ortb-spec#supported-extensions-for-data-object) | Extensions for the Data object. |

### Supported extensions for data object

| Field | Type | Details |
|---|---|---|
| `segtax` | Integer | Taxonomy Id, see [Segment Taxonomies](https://github.com/InteractiveAdvertisingBureau/openrtb/blob/master/extensions/community_extensions/segtax.md#enumeration-of-taxonomies) for more details. |
| `segclass` | String | The version of the classifier which produced the segment IDs within the taxonomy. |

### Segment object

| Field | Type | Details |
|---|---|---|
| `id` | String | An ID of the data segment specific to the data provider. |
| `name` | String | Name of the data segment. |
| `value` | String | Value of the data segment. |

### Network object

| Field | Type | Details |
|---|---|---|
| `id` | String | A unique identifier assigned by the publisher. |
| `name` | String | Network the content is on. |
| `domain` | String | The primary domain of the network. |

### Channel object

| Field | Type | Details |
|---|---|---|
| `id` | String | A unique identifier assigned by the publisher. |
| `name` | String | Channel the content is on. |
| `domain` | String | The primary domain of the channel. |

### Publisher object

| Field | Type | Details |
|---|---|---|
| `id` | String | Required. |
| `name` | String | No Not supported. |
| `cat` | String array | No Not supported. |
| `domain` | String | No Not supported. |

### Device object

| Field | Type | Details |
|---|---|---|
| `ua` | String | Required. |
| `sua` | [UserAgent object](https://developers.google.com/display-video/ortb-spec#sua-object) | Structured user agent information. |
| `geo` | [Geo object](https://developers.google.com/display-video/ortb-spec#geo-object) | The location of the device. |
| `dnt` | Integer | The Do Not Track flag as set in the header of the browser. `0`: Tracking is unrestricted `1`: Do not track |
| `lmt` | Integer | The Limit Ad Tracking signal commercially endorsed. `0`: Tracking is unrestricted `1`: Tracking must be limited per commercial guidelines |
| `ip` | String | Required if IPv4. If IP address is truncated, it must be declared in the `device.ext.truncated_ip`. |
| `ipv6` | String | Required if IPv6. If IP address is truncated, it must be declared in the `device.ext.truncated_ip`. |
| `devicetype` | Integer | Highly recommended for all inventory types. Used to enhance device type recognition. |
| `make` | String |   |
| `model` | String |   |
| `os` | String | The operating system of the device. `ios`: In an [App](https://developers.google.com/display-video/ortb-spec#app-object) request, this identifies IOS traffic. `android`: Identifies an android device if `ua` or `sua` do not identify the device. `*[anything else]*`: Used in diagnostics to isolate issues. This field is case insensitive. |
| `osv` | String | No Not supported. |
| `hwv` | String | The hardware version of the device. |
| `h` | Integer | Physical height of the screen in pixels. |
| `w` | Integer | Physical width of the screen in pixels. |
| `ppi` | Integer | No Not supported. |
| `pxratio` | Double | The ratio of physical pixels to device independent pixels. |
| `js` | Integer | No Not supported. |
| `geofetch` | Integer | No Not supported. |
| `flashver` | String | No Not supported. |
| `language` | String (ISO-639-1-alpha-2) | The device language. |
| `carrier` | String | No Not supported. |
| `mccmnc` | String | No Not supported. |
| `connectiontype` | Integer | Network connection type |
| `ifa` | String | ID sanctioned for the advertiser to use in the clear. |
| `didsha1` | String | No Not supported. |
| `didmd5` | String | No Not supported. |
| `dpidsha1` | String | No Not supported. |
| `dpidmd5` | String | No Not supported. |
| `macsha1` | String | No Not supported. |
| `macmd5` | String | No Not supported. |
| `ext` | [Device extensions](https://developers.google.com/display-video/ortb-spec#supported-extension-for-device-object) | Extensions for the device object. |

### Supported extension for device object

If `ip` is changed or truncated, we strongly recommend sending the following
extensions to prevent traffic being declared as invalid traffic.

| Field | Type | Details |
|---|---|---|
| `truncated_ip` | Integer | Indicate whether the IP address in the `device.ip` field of the bid request is truncated. `0`: Not truncated `1`: Truncated Default is not truncated, and required if the IP address is truncated. If not declared the bid request might be classified as invalid traffic. |
| `ifa_type` | String | Indicate the origin of the device.ifa field, whether it was provided from the device itself or generated by publisher or SSP in the supply chain. `aaid`: Android TV `rida`: Roku `afai`: Amazon Fire `idfa`: Apple tvOS `msai`: Xbox/Microsoft `dpid`: Generic device platform ID `ppid`: Publisher provided ID `sspid`: SSP provided ID `sessionid`: Short-lived session ID (fcapping only) |
| `attestation_token` | String (base64 encoding) | A device-based attestation token for exchanges that support that level of device validation. |
| `atts` | Integer | (iOS Only) An integer passed to represent the app's app tracking authorization status. `0`: Not determined `1`: Restricted `2`: Denied `3`: Authorized |
| `cdep` | String | Chrome third party cookies deprecation label. See [Chrome-facilitated testing](https://developer.chrome.com/en/docs/privacy-sandbox/chrome-testing/) and the [IAB Community Specification](https://github.com/InteractiveAdvertisingBureau/openrtb/blob/master/extensions/community_extensions/deprecation_test_label.md) |

### UserAgent object

| Field | Type | Details |
|---|---|---|
| `browsers` | Array of [BrandVersion objects](https://developers.google.com/display-video/ortb-spec#brand-version-object) | Each BrandVersion object identifies a browser or similar software component. |
| `platform` | [BrandVersion object](https://developers.google.com/display-video/ortb-spec#brand-version-object) | Identifies the platform. |
| `mobile` | Integer | `0` (default): The agent prefers the "desktop" or "full" content. `1`: The agent prefers "mobile" content. |
| `architecture` | String | Device architecture, for example, "x86" or "arm". |
| `bitness` | String | Device's bitness, for example, "64" for 64-bit architecture. |
| `model` | String | Device model. |
| `source` | Integer | The source of data used to create this object, see [List: User-Agent Source](https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/master/AdCOM%20v1.0%20FINAL.md#list--user-agent-source-). Recommended when passing [UserAgent object](https://developers.google.com/display-video/ortb-spec#sua-object). |

### BrandVersion object

| Field | Type | Details |
|---|---|---|
| `brand` | String | Brand identifier, for example, "Chrome" or "Windows". Required. |
| `version` | String array | A sequence of version components, in descending hierarchical order (major, minor, micro, and so on). |

### Geo object

| Field | Type | Details |
|---|---|---|
| `lat` | Double | No Not supported. |
| `lon` | Double | No Not supported. |
| `type` | Integer | No Not supported. |
| `accuracy` | Integer | No Not supported. |
| `lastfix` | Integer | No Not supported. |
| `ipservice` | Integer | No Not supported. |
| `country` | String | No Not supported. |
| `region` | String | No Not supported. |
| `regionfips104` | String | No Not supported. |
| `metro` | String | No Not supported. |
| `city` | String | No Not supported. |
| `zip` | String | No Not supported. |
| `utcoffset` | Integer | No Not supported. |

### User object

| Field | Type | Details |
|---|---|---|
| `id` | String | Supported if Google hosts the ID match table. |
| `buyeruid` | String | Supported if the SSP host the ID match table. |
| `yob` | Integer | Recommended for demographics targeting. |
| `gender` | String | Recommended for demographics targeting. |
| `keywords` | String (CSV) | No Not supported. |
| `customdata` | String | No Not supported. |
| `geo` | [Geo object](https://developers.google.com/display-video/ortb-spec#geo-object) | No Not supported. |
| `data` | Array of [Data objects](https://developers.google.com/display-video/ortb-spec#data-object) | Additional data. |
| `consent` | String (web-safe base64) | When GDPR regulations are in effect this attribute contains the IAB Transparency and Consent Framework's Consent String data structure. The value is a web-safe base64 encoded binary string using a [IAB's format](https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework). [DV360's GDPR documentation](https://support.google.com/displayvideo/answer/9634508) explains how DV360 uses this signal. Only one of `user.consent` and `user.ext.consent` is expected. |
| `eids` | Array of [Extended ID objects](https://developers.google.com/display-video/ortb-spec#extended-id-object) | Extended ID instances provided by the exchange. |
| `ext` | [User extensions](https://developers.google.com/display-video/ortb-spec#supported-extensions-for-user-object) | Extensions for the user object. |

### Supported extensions for user object

| Field | Type | Details |
|---|---|---|
| `consent` | String (web-safe base64) | GDPR consent string, as described in [`user.consent`](https://developers.google.com/display-video/ortb-spec#user_consent) above. Only one of `user.consent` and `user.ext.consent` is expected. |
| `eids` | Array of [Extended ID objects](https://developers.google.com/display-video/ortb-spec#extended-id-object) | Extended ID instances provided by the exchange. |
| `consented_providers_settings`.`consented_providers` | Outer object (consented_providers_settings) wrapping an inner Integer array (consented_providers). | When GDPR consent is collected via TCF, this field lists user-consented ad technology providers who do not participate in TCF. See '[Google Additional Consent technical specification](https://support.google.com/displayvideo/answer/9681920).' |
| `us_privacy` | String | See [`regs.us_privacy`](https://developers.google.com/display-video/ortb-spec#regs_us_privacy) documentation. Only one of `regs.us_privacy`, `regs.ext.us_privacy` and `user.ext.us_privacy` is expected. |

### Extended ID object

| Field | Type | Details |
|---|---|---|
| `source` | String | The provider of the identifier |
| `uids` | Array of [Extended ID UID objects](https://developers.google.com/display-video/ortb-spec#extended-id-uid-object) | The actual identifiers |

### Extended ID UID object

| Field | Type | Details |
|---|---|---|
| `id` | String | The identifier itself. |
| `atype` | Integer | The type of user agent associated with this ID. |

### Supply chain object

| Field | Type | Details |
|---|---|---|
| `complete` | Integer | `0` (default): The supply chain is incomplete. `1`: The supply chain is complete back to the publisher. |
| `ver` | String | Required. The value is formatted "major.minor", for instance, version 1.0 is the string "1.0". |
| `nodes` | [Supply chain node](https://developers.google.com/display-video/ortb-spec#supply-chain-node-object) array | Required. In a complete supply chain, the first node represents the initial advertising system and seller ID involved in the transaction, i.e., the owner of the site, app, or other medium. In an incomplete supply chain, it represents the first known node. The last node represents the entity sending this bid request. |

### Supply chain node object

| Field | Type | Details |
|---|---|---|
| `asi` | String | The canonical domain name of the SSP, Exchange, Header Wrapper, etc. system that bidders connect to. This may be the operational domain of the system, if that is different than the parent corporate domain, to facilitate WHOIS and reverse IP lookups to establish 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. |
| `sid` | String | The identifier associated with the seller or reseller account within the advertising system. This must contain the same value used in transactions (i.e. OpenRTB bid requests) in the field specified by the SSP/exchange. Typically, in OpenRTB, this is publisher.id. For OpenDirect it is typically the publisher's organization ID. Should be limited to 64 characters in length. |
| `rid` | String | The OpenRTB RequestId of the request as issued by this seller. |
| `name` | String | The name of the company (the legal entity) that is paid for inventory transacted under the given seller_id. This value is optional and should NOT be included if it exists in the advertising system's sellers.json file. |
| `domain` | String | The business domain name of the entity represented by this node. This value is optional and should NOT be included if it exists in the advertising system's sellers.json file. |
| `hp` | Integer | Indicates whether this node will be involved in the flow of payment for the inventory. `1`: The advertising system in the asi field pays the seller in the sid field, who is responsible for paying the previous node in the chain. `0`: This node is not involved in the flow of payment for the inventory. For version 1.0 of SupplyChain, this property should always be 1. It is explicitly required to be included as it is expected that future versions of the specification will introduce non-payment handling nodes. Implementers should ensure that they support this field and propagate it onwards when constructing SupplyChain objects in bid requests sent to a downstream advertising system. |

## Bid response specification

### BidResponse object

| Attribute | Supported | Implementation details | Always passed |
|---|---|---|---|
| id | Yes | If a parse error occurs, this may be '0' instead of the bid request ID. | Yes |
| seatbid | Yes |   |   |
| bidid | Yes |   |   |
| cur | Yes | If a parse error occurs, this is not passed. For valid bid request traffic cur is always provided. | Yes |
| customdata | No |   |   |
| nbr | Yes | This is included only if an issue was found with the bid request. Possible values include: `2`: Invalid Request `12`: Ads.txt Authorization Violation `16`: Incomplete SupplyChain `17`: Blocked SupplyChain Node **Note:** When a specific violation of (app-)ads.txt or SupplyChain is detected, one of codes 12, 16, or 17 will be populated on a fraction (1%) of the responses. Code 2 will be populated for all other invalid requests. Requests that include NBR will look similar to this: ``` { "id": "0", "nbr": 2, "ext": { "err": "Bid request body was empty.", "errHelp": "https://.../ortb-spec" } } ``` |   |
| ext | Yes | If there is a problem with the bid request ext may contain information to help diagnose the error, where supported. |   |

### Supported extensions for BidResponse object

| Attribute | Implementation details |
|---|---|
| err | A human readable description of the error with the bid request. Response cases include: - Bid request body was empty. - Bid request was not in a currency allowlisted for the particular exchange. - Bid request did not contain an accepted mime type. |
| errHelp | A link to this page. |

### Seatbid object

| Attribute | Supported | Implementation details | Always passed |
|---|---|---|---|
| bid | Yes |   | yes |
| seat | Yes |   | yes |
| group | No |   |   |

### Bid object

| Attribute | Supported | Implementation details | Always passed |
|---|---|---|---|
| id | Yes |   | yes |
| impid | Yes |   | yes |
| price | Yes |   | yes |
| nurl | Yes |   |   |
| burl | No |   |   |
| lurl | Yes |   |   |
| adm | Yes |   |   |
| adid | Yes |   |   |
| adomain | Yes |   |   |
| bundle | No |   |   |
| iurl | Yes |   |   |
| cid | Yes |   | yes |
| crid | Yes |   | yes |
| tactic | No |   |   |
| cat | No |   |   |
| attr | Yes |   |   |
| api | Yes |   |   |
| protocol | No |   |   |
| qagmediarating | No |   |   |
| language | Yes |   |   |
| dealid | Yes |   |   |
| w | Yes |   |   |
| h | Yes |   |   |
| wratio | No |   |   |
| hratio | No |   |   |
| exp | No |   |   |

### Supported extensions for bid object

| Attribute | Implementation details |
|---|---|
| `apis` | DV360 will send `seatbid.bid.apis` if both OMID and MRAID are supported. DV360 will set both OMID_1 and MRAID as an integer array. |

## Ad serve options

In section 4.3 of the [OpenRTB
specification](https://www.iab.com/wp-content/uploads/2015/05/OpenRTB_API_Specification_Version_2_3_1.pdf),
there are two different serving options:

- Markup served on the win notice
- Markup served in the bid

DV360 supports both options.

- For Banner ad, DV360 always returns markup in the `adm` field. Markup served on win notice is optional.
- For Video/Audio ad using VAST protocol, DV360 supports returning VAST XML in the `adm` field or in the response of win notice based on requirements from exchange partners.

Refer to the OpenRTB specification to know the pros and cons of these two
options.

## Best practices

It is highly recommended to use the Partner ID of Display and Video 360 as
the seat ID. The use of exchange-specific seat ID is not recommended.

Ensure your publishers have ads.txt files, or applications with app-ads.txt
files associated, and they list you in the file as an authorized seller or
reseller. [Learn more](https://support.google.com/displayvideo/answer/7509551).

Also ensure consistent information is passed in bid requests. For example, the
`app.bundle` must be consistent with the mobile device information and
`app.storeurl`.

#### Connected TV

Adhere to the [IAB OTT IFA
guidelines](https://iabtechlab.com/wp-content/uploads/2018/12/OTT-IFA-guidelines.final_Dec2018.pdf)
in passing `device.ifa` and `device.lmt`. You should also implement
`device.ext.ifa_type` to be compliant with the guidelines. All of our CTV
frequency capping and audience targeting capabilities will require the presence
of an IFA.

Also adhere to the recently published [IAB OTT/CTV Store Assigned ID
guidelines](https://iabtechlab.com/wp-content/uploads/2019/12/OTT_Store_Assigned_App_Identification_Guidelines_IABTechLab_2019-12.pdf)---this
defines how `app.bundle` should be passed for CTV apps---largely using the
app store defined ID.

#### Active View measurement

Active View is a Google technology used to measure if an impression was viewable
and for how long. Active View uses OMID for both display and video ads. To enable
measurement using OMID, exchanges must add the following fields in OpenRTB
requests so that DV360 knows the client's support of OMID.

- Required: Add an API Framework (`Video.api=7` for [`Web Video OMSDK`](https://compliance.iabtechnologylab.com/docs/WebVideo/Onboarding%2BGuide%2Bfor%2BIntegrators.pdf), `Native.api=7` for [`Native App OMSDK`](https://compliance.iabtechnologylab.com/omsdk-demo-files/docs/Open%2BMeasurement%2BSDK%2BOnboarding_version_1.4.pdf), `Banner.api=7` or `Audio.api=7`) to bid requests. This is **mandatory** for Active View to enable measurement using OMID.
- Recommended: Adding `omidpn` and `omidpv` to [`Source.Ext`](https://developers.google.com/display-video/ortb-spec#supported-extensions-for-regs-object) is **highly recommended** because it will impact how viewability measurements are reported in DV360 to the customer. If the OMID partner name is **not** on the [IAB certification](https://omsdkcomplianceapi.iabtechlab.com/compliance/latest) list, we are required by MRC to report the viewability metrics separately from the MRC certified metrics. [Learn more](https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/master/OpenRTB%20support%20for%20OMSDK.md#openrtb-and-adcom).

##### Active View measurement for Native Ads

To enable Active View measurement for Native ads, DV360 requires publishers and exchanges to take additional steps.

- **Native display ads:** DV360 adds the following `eventtrackers` in the bid response under the `adm.native` object:

      "eventtrackers": [
        {
          "event": 555,
          "method": 2,
          "url": "https://pagead2.googlesyndication.com/pagead/managed/js/activeview/current/rx_omid.js",
          "ext": {
            "vendorKey": "doubleclickbygoogle.com-omid-dsp",
            "verification_parameters": ""
          }
        }
      ]

  Exchanges should pass additional event trackers to the publishers and publishers should take the following steps:
  1. Install [OMSDK](https://iabtechlab.com/standards/open-measurement-sdk/).
  2. Load OMSDK when rendering native ads.
  3. Execute JavaScript in `eventtrackers.url` with the given parameters.
- **Native video ads:** DV360 enables viewability measurement by adding the standard `AdVerifications` extension within the VAST XML:

      <Extension type="AdVerifications">
        <AdVerifications>
          <Verification vendor="doubleclickbygoogle.com-omid-video">
            <JavaScriptResource apiFramework="omid" browserOptional="true">
              <![CDATA[ https://www.googletagservices.com/activeview/js/current/rx_omid_video.js ]]>
            </JavaScriptResource>
            <VerificationParameters>
              <![CDATA[ {"activeview_flags":"...","activeview_metadata":"...", ...} ]]>
            </VerificationParameters>
            <TrackingEvents>
              <Tracking event="verificationNotExecuted">
                <![CDATA[ https://ade.googlesyndication.com/ddm/activity/... ]]>
              </Tracking>
            </TrackingEvents>
          </Verification>
        </AdVerifications>
      </Extension>

  No extra action is required from publishers who already support video ad
  viewability measurement. Otherwise, publishers need to either handle the new
  extension in their video player or ignore it.

> [!NOTE]
> **Note:** DV360 follows the [Secure Interactive Media Interface Definition (SIMID) Version 1.0](https://iabtechlab.com/standards/simid/). See [IAB Open Measurement SDK](https://iabtechlab.com/standards/open-measurement-sdk/) for additional details.

#### EU AI Regulation for Native on 3PE

To enable advertisers to comply with emerging transparency regulations.
AI regulations in the European Union, India and New York State require that
ads with certain AI-generated or edited assets include disclosures to inform
consumers that the ads were made with AI. Starting in
July 2026, Display \& Video 360 (DV360) will allow advertisers to add a label
that indicates that the creative is generated or modified using AI to help
advertisers comply with emerging AI transparency regulations.

Advertisers can add these labels directly to their creatives or use the AI
label setting through Display \& Video 360 UI and API. Learn more about
[how to use AI content label settings to label your ads](https://support.google.com/displayvideo/answer/17233038?hl=en&ref_topic=3528231).

For ads rendered by Google, our chosen compliance strategy utilizes a minimal
pre-click AI label and a post-click disclosure in the `About This Ad` (ATA)
panel.

For Native ad formats on 3PE, Google does not control the final rendering of
the ad. In these instances, this attestation signal will be propagated as part
of the ad response for exchange or publishers to render the final ad inclusive
of the AI label or disclosure. The signal will be part of the `adm.native.ext`
field of the Native ad response. The new field `adm.native.ext` is in the
following format:

      "ext" {
         "should_disclose_ai": "true",
         "ai_disclosure_url": ""
      }

- `should_disclosure_ai` (true or false) indicates whether the final ad needs include an AI label.
- `ai_disclosure_url` field may or may not be present. Only when `should_disclosure_ai` is set to true and `native.privacy` URL field is empty, it will be present. In this case, clicking on the AI label should take the user to the URL provided in that field. Otherwise, clicking on the AI label should lead the user to the standard`native.privacy` URL field.

These signals should be propagated to publishers, so they are able to render
the ad with the AI label.

## FAQ

Does DV360 Support exchange custom extensions?
:   Yes, in addition to the extensions listed in this specification, Display and
    Video 360 may also support custom extensions on a case-by-case basis. It is
    recommended to specify and test the custom extension during the integration
    period.

Does DV360 support rewarded video?
:   Yes, send us the [rewarded video
    extension](https://developers.google.com/display-video/ortb-spec#supported-extension-for-video-object).

A lot of my inventory is showing up as demographics unknown, how do I improve demographic coverage?
:   Populate `user.yob` and `user.gender` in bid requests to DV360 to increase
    coverage.

Does DV360 have endpoints for each region?
:   No, we use a single endpoint globally and we automatically route requests to
    the nearest data center, so there's no region-specific endpoint we can provide.

What are the requirements for server-to-server (s2s) requests?
:   [Reach
    out](https://support.google.com/displayvideo/contact/exchange) to request
    addition to our allowlist. The client User Agent has to be forwarded, and ensure that
    cookies are disabled/ignored in the response to an s2s VAST fetch.

Does DV360 support OMID?
:   We are able to measure viewability using OMID as long as it is declared as
    OMID-enabled at bid request time. Details about this are summarized on [pages
    24-25](https://s3-us-west-2.amazonaws.com/omsdk-files/docs/Open+Measurement+SDK+Onboarding_version_1.2.pdf).

Which version of Native do you support? Do you have any Native requirements?
:   We only support Native Ver1.2. [Native
    specification](https://support.google.com/displayvideo/answer/9020755).

Does DV360 support bid requests sent as GZIP?
:   DV360 can receive gzip compressed bid requests, and will respond with gzip
    compressed responses if Accept-Encoding header indicates it's supported.

Does DV360 support DBURL?
:   Not at the moment.

Does DV360 support loss notification?
:   Yes, DV360 populates the `bid.lurl` field in bid responses.
    If the bid loses, the exchange may ping this URL with a reason, and
    that reason will be shown to advertisers. These reasons can advise
    advertisers how to avoid losses in the future.

Does DV360 require App.name for targeting?
:   No, DV360 using App.name for reference but it is not required for targeting,
    `App.bundle` is used for targeting.

Can DV360 support multiple ad sizes sent in a single bid request?
:   Yes, we will consider all eligible creative sizes in banner.format.

Does DV360 support multiple formats in the same bid request?
:   We have limited support for multi-format bid requests, but are working on
    improving. We support display \& video formats for interstitials, but do not
    currently support display \& native. If you are sending multi-format bid
    requests, please reach out to request a test.

Does DV360 support mixed impression types in the same request?
:   Currently we only support video/banner interstitials. We are working on
    native/banner \& video/banner. If there are other combinations please [reach
    out](https://support.google.com/displayvideo/contact/exchange) to our team.

Can multiple seats each send multiple bids on one or more of such impression opportunities in the same request?
:   Yes.

Does DV360 have a solution or particular need regarding capping or displaying the same advertiser for multiple such impression opportunities in the same request?
:   DV360 places enforcement that one advertiser can only bid up to one imp
    opportunities for each request. We expect SSPs to group imp objects
    meaningfully; e.g., all on the same page, all in the same app, etc.

Does DV360 support multiple impressions in the same bid request?
:   DV360 currently supports multiple impression audio objects. However, we will need to test/enable each
    exchange that would like to use this feature. See [bid request specification](https://developers.google.com/display-video/ortb-spec#bid-request-specification) for more information. We are working on expanding this to other formats:

    ```
    {
    id: "2bbdc94f-7289-4fe2-9a5f-e2a530e06b38",
    seatbid {
    bid {
      id: "0",
      impid: "234232",
      price: 41.373926619828261,
      adid: "123",
      adm: "...",
      adomain: "xxx.com",
      cid: "0",
      crid: "123",
      dealid: "sample-deal-id-1",
      language: "xx",
    },
    bid {
      id: "1",
      impid: "234255",
      price: 2.34192037470726,
      adid: "234",
      adm: "...",
      adomain: "xyz.com",
      cid: "0",
      crid: "234",
      dealid: "sample-deal-id-2",
      language: "xx",
    },
    seat: "123456"
    },
    cur: "EUR"
    }
    ```

## Contact us

If you have any questions or issues, [reach
out](https://support.google.com/displayvideo/contact/exchange) to our exchange
support team.