After your application processes the bid request from Google, it must build
and send a response. This guide explains how to code your application to build
the response.

## Create BidResponse message

To submit a bid, your bidding application must respond to a bid request with
a `BidResponse` containing a `Bid` in your configured
format. If you're using the JSON format, your response must set the
`Content-Type` header to
`application/json; charset=utf-8` and include the JSON
`BidResponse` in the body. If you're using the Protobuf format, your
application must set the `Content-Type` header to
`application/octet-stream` and include the serialized
`BidResponse` in the body.

To build and serialize a `BidResponse` for the Protobuf format,
you must generate and use Protobuf libraries based on
**openrtb.proto** and **openrtb-adx.proto** , which
implement the standard OpenRTB `BidResponse` fields and Google
extensions in Protobuf respectively. These can be found in
[Protos \& Reference Data](https://developers.google.com/authorized-buyers/rtb/data.md.txt#protos).

If you don't want to bid on an impression, you must return an empty HTTP
204 response. Your application must return a response to every
`BidRequest`. Timeouts and responses that cannot be parsed are
considered errors and Google throttles bidders with high error rates.

### Creative ID

Your `BidResponse` specifies a creative through the
`BidResponse.seatbid.bid.crid` field (128 bytes limit). Even similar
creatives must have unique values for this field if they differ in
any notable characteristics, including but not limited to: size, declared URL,
creative attributes, and vendor types. In other words, you must give different
creative IDs to any two ads which:

- Look or behave differently.
- Render to different images.
- Render by different means (for example, one ad consists of an image, while the other is a video).

As you design your application, you should decide on a systematic way of
generating identifiers that makes sense for the kinds of creatives you plan
to submit.

### Ad attributes

Google recommends declaring creative attributes to describe your ad's
characteristics and its targeting using either a combination of
`BidResponse.seatbid.bid.apis` and
`BidResponse.seatbid.bid.attr`, or the
`BidResponse.seatbid.bid.ext.attribute` extension. The following
describes how you can declare attributes:

- `VPAID` Set `BidResponse.seatbid.bid.apis` to `VPAID_1`, or `VPAID_2`. For the JSON format, this can be set to `1` or `2` respectively.
- `MRAID` Set `BidResponse.seatbid.bid.apis` to `MRAID_1`, or `3` for the JSON format.
- `SIZELESS` Set `BidResponse.seatbid.bid.attr` to `RESPONSIVE`, or `18` for the JSON format.
- `PLAYABLE` This is indicated by setting `BidResponse.seatbid.bid.attr` to `USER_INTERACTIVE`, or `13` for the JSON format.

> [!NOTE]
> **Note:** If you are using the `BidResponse.seatbid.bid.ext.attribute` extension, you can use values found in [buyer-declarable-creative-attributes.txt](https://storage.googleapis.com/adx-rtb-dictionaries/buyer-declarable-creative-attributes.txt) to declare these attributes.

See the
[Creatives resource](https://developers.google.com/authorized-buyers/apis/v1.4/creatives)
for an explanation on how to get feedback regarding the detected properties of
your creatives.

### Open Bidding fields

Bid responses sent by exchange and network bidders participating in Open
Bidding are similar to those of Authorized Buyers participating in standard
real-time bidding. Open Bidding customers can specify a small number of
additional fields, and a few existing fields may have alternative uses. These
include the following:

| Field | Details |
|---|---|
| `BidResponse.imp.pmp.deals.id` | The deal ID from the exchange's namespace that is associated with this bid and reported to publishers. **Note:** This field is only sent to closed beta participants. |
| `BidResponse.seatbid.bid.ext.exchange_deal_type` | The type of deal reported to publishers, affecting how the deal is treated in the auction. **Note:** This field is only sent to closed beta participants. |
| `BidResponse.seatbid.bid.ext.third_party_buyer_token` | Token used to identify end third-party buyer information if the exchange as an Open Bidder is an intermediary. This is obtained from the third-party buyer and must be passed to Google unaltered in the bid response. |

### Recommendations

- **Enable persistent HTTPS connections (also known as "keep-alive" or
  "connection reuse") on your servers.** Set the timeout to 10 seconds at minimum---higher values are beneficial in many cases. Google verifies this during the initial latency tests of your application, because Authorized Buyers sends requests at a high rate and needs to avoid the latency overhead of establishing a separate TCP connection for each request.
- Include the optional impression tracking URL to track when the
  impression renders rather than when the bidder wins. Because of the dropoff
  between wins and renderings, this yields more accurate tracking
  statistics.

  **Note:** When using OpenRTB, the standard field for this is `BidResponse.seatbid.bid.burl`.
- Keep your bidder code free of dependencies on [deprecated fields](https://developers.google.com/authorized-buyers/rtb/request-guide#adapt), which can cause your bids to fail with errors.
- Include `BidResponse.seatbid.bid.w` and `BidResponse.seatbid.bid.h` in your `BidResponse`. A `BidResponse` to a request that includes multiple ad sizes must include these fields or it will be dropped from the auction.
- Limit your response size to under 8K. Very large responses may increase network latency and cause timeouts.
- Follow the [guidelines for
  bids on iOS inventory that require SKAdNetwork attribution](https://developers.google.com/authorized-buyers/rtb/skadnetwork).

## Example bid response

The following examples represent human-readable samples of the Protobuf and
JSON requests.

### OpenRTB Protobuf

#### Show me the example

[Serialized response](https://developers.google.com/authorized-buyers/rtb/data/request-response/openrtb_protobuf_html_snippet_ad_response.bin)  

```
id: "vm4393rgIKgSTA70U7v712"
seatbid {
  bid {
    id: "Tc07Y44PN3p1m6C51BF"
    impid: "1"
    price: 4.018524169921875
    adm: "<iframe marginwidth=0 marginheight=0 height=600 frameborder=0 width=160 scrolling=no src=\"https://test.com/ads?id=123456&curl=%%CLICK_URL_ESC%%&wprice=%%WINNING_PRICE_ESC%%\"></iframe>"
    crid: "test_creative_id_168019"
    dealid: "0"
    w: 320
    h: 50
    burl: "https://test.com/imp?id=123456"
    [com.google.doubleclick.bid] {
      event_notification_token {
        payload: "token"
      }
      billing_id: 47329549763
      dsa {
        adrender: true
      }
      clickurl: "google.com"
    }
  }
}
cur: "JPY"
[com.google.doubleclick.bid_response] {
  processing_time_ms: 16
}
```

### OpenRTB JSON

#### Show me the example

```
{
  "id": "vm4393rgIKgSTA70U7v712",
  "seatbid": [
    {
      "bid": [
        {
          "id": "Tc07Y44PN3p1m6C51BF",
          "impid": "1",
          "price": 4.018524169921875,
          "adm": "<iframe marginwidth=0 marginheight=0 height=600 frameborder=0 width=160 scrolling=no src=\"https://test.com/ads?id=123456&curl=%%CLICK_URL_ESC%%&wprice=%%WINNING_PRICE_ESC%%\"></iframe>",
          "crid": "test_creative_id_168019",
          "dealid": "0",
          "w": 320,
          "h": 50,
          "burl": "https://test.com/imp?id=123456",
          "ext": {
            "event_notification_token": {
              "payload": "token"
            },
            "billing_id": "47329549763",
            "dsa": {
              "adrender": 1
            },
            "clickurl": [
              "google.com"
            ]
          }
        }
      ]
    }
  ],
  "cur": "JPY",
  "ext": {
    "processing_time_ms": 16
  }
}
```

**Important:** The Protobuf messages depicted in the
samples are represented here as human-readable text. However, that is not how
the messages are sent over the wire. When using the OpenRTB Protobuf format,
only serialized BidResponse messages will be accepted.

You can create and serialize a `BidResponse` message using the
following C++ code:

```
BidResponse bid_response;
// fill in bid response with bid information
string post_response;
if (bid_response.SerializeToString(&post_response)) {
  // respond to the POST with post_response as the content
} else {
  // return an error to the POST
}
```

## Specify creative

Your bid response specifies the creative to serve if your bid wins. Your bid
must include one of the supported ad formats (AMP, video, native). In this
example, we specify the creative using the `html_snippet` field.

Alternatively, you can specify your creative using **one** of the
following fields, based on ad format:

- SDK rendered ad
  - `BidResponse.seatbid.bid.ext.sdk_rendered_ad`
- AMP
  - `BidResponse.seatbid.bid.amp_ad_url`
- Video
  - `BidResponse.seatbid.bid.adm`
- Native
  - `BidResponse.seatbid.bid.adm_native`

Specify an ad that is hosted on your own server(s) using an HTML snippet in
the `BidResponse.seatbid.bid.adm` field. The snippet is enclosed in
an iFrame inserted in the web page, resulting in the ad being retrieved and
rendered when the page is loaded. You must craft the HTML snippet so that the
ad (banner or interstitial) renders correctly inside an iFrame, and at an
appropriate size for the ad slot you are bidding on.

In addition, the ad size declared in the bid response must match exactly one
of the size combinations in the bid request when:

- An ad is a regular banner (not video, native, or interstitial).
- The bidder has declared the size in the bid response. Size declaration is required whenever more than one size is present in the request.
- An exception is made for interstitial ads. For interstitials the width must be at least 50% of the screen width and the height to at least 40% of the screen height.

You can specify an HTML snippet creative using any valid HTML code that
renders properly, but keep in mind the restrictions on specifying the
`crid` field in the
[Create BidResponse message](https://developers.google.com/authorized-buyers/rtb/get-started/response-guide.md.txt#create-bidresponse-message) section.
One use for this is to put extra information into arguments of the URLs that
are fetched from your servers as part of rendering the ad. This lets you pass
arbitrary data about the impression back to your own servers.

Most policies for HTML snippets returned in bid responses are the same as
for third-party ads. See [Authorized Buyers
Program Guidelines](https://www.google.com/doubleclick/adxbuyer/guidelines.html), [Requirements for third-party
ad serving](https://support.google.com/adspolicy/answer/94230), and [Declare
click-through URLs in ads](https://support.google.com/authorizedbuyers/answer/173410) for more information.

### Use consistent clickthrough URLs

The clickthrough URL you specify in the
`BidResponse.seatbid.bid.ext.clickurl` field must be identical to the
landing page URL specified in your creative. The following are examples of
creatives in supported formats that are consistent with the
`clickurl` field set to
`https://play.google.com/store/apps/details?id=com.example.myawesomeapp&referrer=utm_source%3Dgoogle_ab%26utm_medium%3Dcpc%26utm_campaign%3Dinstall_campaign_1`:

#### HTML

```html
<div id="my-app-install-ad"
     style="font-family: sans-serif; border: 1px solid #ddd; padding: 10px;
            display: flex; align-items: center; width: 100%; height: 100%;
            box-sizing: border-box; cursor: pointer;"
     onclick="window.open('https://play.google.com/store/apps/details?id=com.example.myawesomeapp&referrer=utm_source%3Dgoogle_ab%26utm_medium%3Dcpc%26utm_campaign%3Dinstall_campaign_1', '_blank')">
  <img src="https://example.com/path/to/app_icon.png" alt="App Icon"
       style="width: 60px; height: 60px; margin-right: 10px;
              border-radius: 8px;">
  <div style="flex-grow: 1;">
    <h4 style="margin: 0 0 5px 0; font-size: 16px; color: #1a73e8;">
      My Awesome App
    </h4>
    <p style="margin: 0 0 10px 0; font-size: 14px; color: #5f6368;">
      The best app for doing awesome things! Download now and get started!
    </p>
    <span style="background-color: #1a73e8; color: white; padding: 8px 12px;
                 text-align: center; text-decoration: none;
                 display: inline-block; border-radius: 4px; font-size: 14px;
                 font-weight: bold;">Install</span>
  </div>
</div>
```

#### VAST XML

```
<VAST version="3.0">
  <Ad id="creative_id_789">
    <InLine>
      <AdSystem>MyBidderSystem</AdSystem>
      <AdTitle>My Awesome App Install Video</AdTitle>
      <Description>Install My Awesome App now!</Description>
      <Error>
        <![CDATA[https://tracking.example.com/vast_error?errorcode=[ERRORCODE]]]>
      </Error>
      <Impression>
        <![CDATA[https://tracking.example.com/vast_impression]]>
      </Impression>
      <Creatives>
        <!-- Main Video Creative -->
        <Creative>
          <Linear>
            <Duration>00:00:15</Duration>
            <TrackingEvents>
              <Tracking event="start">
                <![CDATA[https://tracking.example.com/vast_event?label=start]]>
              </Tracking>
              <Tracking event="firstQuartile">
                <![CDATA[https://tracking.example.com/vast_event?label=firstQuartile]]>
              </Tracking>
              <Tracking event="midpoint">
                <![CDATA[https://tracking.example.com/vast_event?label=midpoint]]>
              </Tracking>
              <Tracking event="thirdQuartile">
                <![CDATA[https://tracking.example.com/vast_event?label=thirdQuartile]]>
              </Tracking>
              <Tracking event="complete">
                <![CDATA[https://tracking.example.com/vast_event?label=complete]]>
              </Tracking>
            </TrackingEvents>
            <VideoClicks>
              <ClickThrough id="gplay-video">
                <![CDATA[https://play.google.com/store/apps/details?id=com.example.myawesomeapp&referrer=utm_source%3Dgoogle_ab%26utm_medium%3Dcpc%26utm_campaign%3Dinstall_campaign_1]]>
              </ClickThrough>
              <ClickTracking id="bidder-tracker-video">
                <![CDATA[https://tracking.example.com/vast_click]]>
              </ClickTracking>
            </VideoClicks>
            <MediaFiles>
              <MediaFile delivery="progressive" type="video/mp4" width="640"
                         height="360" bitrate="800" scalable="true"
                         maintainAspectRatio="true">
                <![CDATA[https://cdn.example.com/myawesomeapp_video.mp4]]>
              </MediaFile>
            </MediaFiles>
          </Linear>
        </Creative>
        <!-- Companion Ad Creative -->
        <Creative>
          <CompanionAds>
            <Companion id="companion1" width="300" height="250"
                       assetWidth="300" assetHeight="250">
              <StaticResource creativeType="image/png">
                <![CDATA[https://cdn.example.com/companion_banner_300x250.png]]>
              </StaticResource>
              <TrackingEvents>
                <Tracking event="creativeView">
                  <![CDATA[https://tracking.example.com/vast_companion_view]]>
                </Tracking>
              </TrackingEvents>
              <CompanionClickThrough>
                <![CDATA[https://play.google.com/store/apps/details?id=com.example.myawesomeapp&referrer=utm_source%3Dgoogle_ab%26utm_medium%3Dcpc%26utm_campaign%3Dinstall_campaign_1]]>
              </CompanionClickThrough>
              <CompanionClickTracking>
                <![CDATA[https://tracking.example.com/vast_companion_click]]>
              </CompanionClickTracking>
            </Companion>
          </CompanionAds>
        </Creative>
      </Creatives>
    </InLine>
  </Ad>
</VAST>
```

#### Native

```
{
  "ver": "1.2",
  "assets": [
    {
      "id": 1,
      "title": {
        "text": "My Awesome App"
      }
    },
    {
      "id": 2,
      "img": {
        "url": "https://example.com/path/to/app_icon.png",
        "w": 60,
        "h": 60
      }
    },
    {
      "id": 3,
      "data": {
        "value":
          "The best app for doing awesome things! Download now and get started!"
      }
    },
    {
      "id": 4,
      "data": {
        "value": "Install"
      }
    }
  ],
  "link": {
    "url": "https://play.google.com/store/apps/details?id=com.example.myawesomeapp&referrer=utm_source%3Dgoogle_ab%26utm_medium%3Dcpc%26utm_campaign%3Dinstall_campaign_1",
    "clicktrackers": [
      "https://tracking.example.com/native_click"
    ]
  },
  "imptrackers": [
    "https://tracking.example.com/native_impression"
  ]
}
```

## Specify macros

Macros are formatted text embedded into some bid response fields containing
URLs that are replaced with a relevant value at ad serving time. For example,
if your winning bid included the `AUCTION_PRICE` macro in the HTML
snippet creative included with your bid, the macro would be replaced with a
value you could decrypt to determine the amount you paid for the impression in
the auction.

You can include macros in the following fields:

- `BidResponse.seatbid.bid.adm`

  Macros are supported for HTML snippet, native, video URL, and video VAST
  XML formats.
- `BidResponse.seatbid.bid.adm_native.eventtrackers.url`

- `BidResponse.seatbid.bid.adm_native.imptrackers`

- `BidResponse.seatbid.bid.ext.amp_ad_url`

  Only the Google-specific `WINNING_PRICE` and
  `WINNING_PRICE_ESC` macros are supported for AMP creatives.
- `BidResponse.seatbid.bid.burl`

- `BidResponse.seatbid.bid.ext.impression_tracking_url`

  Use this instead of `BidResponse.seatbid.bid.burl` if you
  require more than one billing URL.

As an example, you could include a macro as part of an HTML snippet by
embedding `${MACRO}` within the URL used to fetch the creative,
where `MACRO` is one of the supported macros described in the
[OpenRTB specification](https://github.com/InteractiveAdvertisingBureau/openrtb2.x/blob/main/2.6.md#44---substitution-macros-).

### Google macros

Google supports additional macros aside from those found in the OpenRTB
spec. These are formatted differently, and would appear as
`%%MACRO%%` if embedded in a URL. The following table describes
these macros:

| **Macro** | **Description** |
|---|---|
| `ADVERTISING_IDENTIFIER` | Allows buyers to receive iOS IDFA or Android's Advertising ID on impression rendering. See [Decrypting Advertiser Identifiers](https://developers.google.com/authorized-buyers/rtb/response-guide/decrypt-device-id-ano.md.txt) for details. |
| `CACHEBUSTER` | A string representation of a random, unsigned, four-byte integer. |
| `CLICK_URL_UNESC` | The unescaped click URL for the ad. In the snippet, an escaped version of the third party click URL should directly follow the macro. For example, if the third-party click URL is `http://my.adserver.com/some/path/handleclick?click=clk`, then the following code could be used with the single-escaped version of the third party click URL following the macro invocation: ``` <a href="%%CLICK_URL_UNESC%%http%3A%2F%2Fmy.adserver.com%2Fsome%2Fpath%2Fhandleclick%3Fclick%3Dclk"></a> ``` At ad serving time, this is expanded to: ``` <a href="http://google-click-url?...&ad_url=http%3A%2F%2Fmy.adserver.com%2Fsome%2Fpath%2Fhandleclick%3Fclick%3Dclk"></a> ``` The URL will first register the click with Google, and then redirect to the third party click URL. |
| `CLICK_URL_ESC` | The escaped click URL for the ad. Use this instead of `CLICK_URL_UNESC` if you need to first pass the value through another server that will then return a redirect. For example, the following code could be used in an HTML snippet: ``` <a href="http://my.adserver.com/click?google_click_url=%%CLICK_URL_ESC%%"></a> ``` At ad serving time, this is expanded to: ``` <a href="http://my.adserver.com/click?google_click_url=http://google-click- url%3F...%26ad_url%3D"></a> ``` This will register the click with `my.adserver.com` which will then be responsible for redirecting to the URL passed in the `google_click_url` parameter. This assumes that `my.adserver.com` unescapes the `google_click_url` parameter. You can append a double-escaped URL after `%%CLICK_URL_ESC%%`. After the unescaping is done by `my.adserver.com`, that leaves a single-escaped version of the URL appended to the `google_click_url`. When the `google_click_url` is fetched, it will unescape once more and then redirect. |
| `CLICK_URL_ESC_ESC` | The double-escaped URL for the ad. Use this instead of `CLICK_URL_UNESC` if you need to first pass the value through another server that will then return a redirect. For example, the following code could be used in an HTML snippet: ``` <a href="http://my.adserver.com/click?google_click_url=%%CLICK_URL_ESC_ESC%%"></a> ``` At ad serving time, this is expanded to: ``` <a href="http://my.otheradserver.com/click?google_click_url=http%3A%2F%2Fmy.adserver.com%2Fclick%3Fgoogle_click_url%3Dhttp%3A%2F%2Fgoogle-click-%20url%253F...%2526ad_url%253D"></a> ``` |
| `SCHEME` | Expanded to `http:` if the bid request does not require SSL or to `https:` if the bid request requires SSL. |
| `SITE` | The url-escaped domain of the content URL or the anonymous ID for anonymous inventory. |
| `SITE_URL` | Deprecated. Replaced by the SITE macro which provides identical functionality. |
| `TZ_OFFSET` | The time-zone offset. |
| `VERIFICATION` | The different values for production and when the creative is scanned in the verification pipeline. The format is: `%%?VERIFICATION:true-val:false-val%%` where any values except macros can be used for `true-val` and `false-val`, including empty strings. For Open Bidding, we recommend that exchanges use this macro; once they do so, demand-side platforms don't need to make changes. For example if a creative were to include `%%?VERIFICATION:-1:5000%%` then the text replacement would be `5000` on serving and `-1` in the verification pipeline. This is to help differentiate between these two sets of pings. |
| `WINNING_PRICE` | The encoded impression cost (that is, CPI rather than CPM) in micros of the account currency. For example, a winning CPM of $5 USD corresponds to 5,000,000 micros CPM, or 5,000 micros CPI. The decoded value of `WINNING_PRICE` in this case would be 5,000. The winning price is specified in CPI. To parse this macro, you will need to implement an application that decrypts price confirmations. Refer to the [Decrypting Price Confirmations](https://developers.google.com/authorized-buyers/rtb/response-guide/decrypt-price.md.txt) page for more information. |
| `WINNING_PRICE_ESC` | URL-escaped `WINNING_PRICE`. |

Google requires that you use either the `CLICK_URL_UNESC` or
`CLICK_URL_ESC` macro within the creative of the third-party served
ad. Google uses the `CLICK_URL` macros for click tracking.

URL escaping in macros uses the following scheme:

- The space character is replaced by a plus sign (`+`).
- Alphanumeric characters (0-9, a-z, A-Z) and characters from the set !()\*,-./:_\~ remain unchanged.
- All other characters are replaced by `%XX`, where `XX` is the hexadecimal number representing the character.

## Publisher restrictions and requirements

The bid request includes information about the kinds of restrictions and
requirements that publishers place on creatives in the auction.

- `BidRequest.bcat`
  - You can compare blocked categories specified by this field to those detected for your submitted creatives using Real-time Bidding API's [`detectedCategories`](https://developers.google.com/authorized-buyers/apis/realtimebidding/reference/rest/v1/bidders.creatives.md.txt#Creative.CreativeServingDecision.FIELDS.detected_categories) field.
- `BidRequest.imp.ext.allowed_vendor_type`
- `BidRequest.imp.secure`
  - In practice this will always be set `true` because Google requires SSL support for all creatives.
- `BidRequest.imp.{audio/banner/native/video}`
- `BidRequest.imp.{audio/banner/native/video}.api`
- `BidRequest.imp.{audio/banner/native/video}.battr`
- `BidRequest.imp.{audio/banner/video}.mimes`

Never bid with an ad containing a restricted feature. For allowed features
such as vendor type, return an ad only if its vendor type is in the
`allowed_vendor_type` list in the `BidRequest`. Only ad
formats specified in the bid request by populating fields such as
`BidRequest.imp.banner` should be included in your bid. See the
comments for these fields in the `BidRequest` protocol buffer
definition for more details.

If an ad is returned in `BidResponse`, you are required to
accurately set `BidResponse.seatbid.bid.attr`,
`BidResponse.seatbid.bid.cat`, and either
`BidResponse.seatbid.bid.adomain` or
`BidResponse.seatbid.bid.adm_native.link.url` fields in the
`BidResponse`. If an ad has multiple applicable values for these
fields, then you must include every value. See the comments for these fields in
the `BidResponse` protocol buffer definition for more details.
Responses that don't have these fields set are discarded.

## Open Measurement

Open Measurement lets you specify third-party vendors that provide independent
measurement and verification services for ads served to mobile app
environments.

Supported ad formats include video, banner, and interstitial ads. For more
information on how to use Open Measurement in a bid response containing these
formats, refer to the [Open Measurement SDK](https://support.google.com/authorizedbuyers/answer/9115752)
Help Center article.

## Sample bid responses

The following sections show sample bid responses for different ad types.

> [!NOTE]
> **Note:** The Protobuf samples include download links to similar serialized bid responses. They are not guaranteed to be identical.

### App banner

### OpenRTB Protobuf

#### Show me the example

[Serialized response](https://developers.google.com/authorized-buyers/rtb/data/request-response/openrtb_protobuf_mobile_app_banner_ad_response.bin)  

```
id: "jpDn0m2Uh64155fX2f6YMa"
seatbid {
  bid {
    id: "57kg29jvvr728r256cC"
    impid: "1"
    price: 0.7643815515382839
    adm: "<iframe marginwidth=0 marginheight=0 height=600 frameborder=0 width=160 scrolling=no src=\"https://test.com/ads?id=123456&curl=%%CLICK_URL_ESC%%&wprice=%%WINNING_PRICE_ESC%%\"></iframe>"
    adomain: "google.com"
    crid: "test_creative_id_168019"
    cat: "10013"
    w: 320
    h: 50
    cattax: GOOGLE_CATEGORIES
    [com.google.doubleclick.bid] {
      impression_tracking_url: "https://test.com/impression?id=123456"
      impression_tracking_url: "https://test.com/impression?id=123456"
      event_notification_token {
        payload: "token"
      }
      billing_id: 21036061270
      app_promotion_type: INSTALLS
      clickurl: "google.com"
    }
  }
}
bidid: "47g32DO6-4Dxo0660-l5f7-30c3uJjX5f21"
cur: "TWD"
```

### OpenRTB JSON

#### Show me the example

```
{
  "id": "jpDn0m2Uh64155fX2f6YMa",
  "seatbid": [
    {
      "bid": [
        {
          "id": "57kg29jvvr728r256cC",
          "impid": "1",
          "price": 0.7643815515382839,
          "adm": "<iframe marginwidth=0 marginheight=0 height=600 frameborder=0 width=160 scrolling=no src=\"https://test.com/ads?id=123456&curl=%%CLICK_URL_ESC%%&wprice=%%WINNING_PRICE_ESC%%\"></iframe>",
          "adomain": [
            "google.com"
          ],
          "crid": "test_creative_id_168019",
          "cat": [
            "10013"
          ],
          "w": 320,
          "h": 50,
          "cattax": 500,
          "ext": {
            "impression_tracking_url": [
              "https://test.com/impression?id=123456",
              "https://test.com/impression?id=123456"
            ],
            "event_notification_token": {
              "payload": "token"
            },
            "billing_id": "21036061270",
            "app_promotion_type": 1,
            "clickurl": [
              "google.com"
            ]
          }
        }
      ]
    }
  ],
  "bidid": "47g32DO6-4Dxo0660-l5f7-30c3uJjX5f21",
  "cur": "TWD"
}
```

### App Interstitial

### OpenRTB Protobuf

#### Show me the example

[Serialized response](https://developers.google.com/authorized-buyers/rtb/data/request-response/openrtb_protobuf_mobile_app_interstitial_ad_response.bin)  

```
id: "56nH9UgS46aVT1TJ4X68EI"
seatbid {
  bid {
    id: "R2C52L8049V5hYeJ127"
    impid: "1"
    price: 0.011901371679192948
    adm: "<iframe marginwidth=0 marginheight=0 height=600 frameborder=0 width=160 scrolling=no src=\"https://test.com/ads?id=123456&curl=%%CLICK_URL_ESC%%&wprice=%%WINNING_PRICE_ESC%%\"></iframe>"
    adomain: "google.com"
    crid: "test_creative_id_273207"
    w: 412
    h: 774
    burl: "https://test.com/imp?id=123456"
    [com.google.doubleclick.bid] {
      exchange_deal_type: OPEN_AUCTION
      attribute: 21
      event_notification_token {
        payload: "token"
      }
      billing_id: 83032532617
      clickurl: "google.com"
    }
  }
}
bidid: "RNV7V1D2-rO5KC9s1-401V-jM28m07dFnN4"
[com.google.doubleclick.bid_response] {
  processing_time_ms: 49
}
```

### OpenRTB JSON

#### Show me the example

```
{
  "id": "56nH9UgS46aVT1TJ4X68EI",
  "seatbid": [
    {
      "bid": [
        {
          "id": "R2C52L8049V5hYeJ127",
          "impid": "1",
          "price": 0.011901371679192948,
          "adm": "<iframe marginwidth=0 marginheight=0 height=600 frameborder=0 width=160 scrolling=no src=\"https://test.com/ads?id=123456&curl=%%CLICK_URL_ESC%%&wprice=%%WINNING_PRICE_ESC%%\"></iframe>",
          "adomain": [
            "google.com"
          ],
          "crid": "test_creative_id_273207",
          "w": 412,
          "h": 774,
          "burl": "https://test.com/imp?id=123456",
          "ext": {
            "exchange_deal_type": 0,
            "attribute": [
              21
            ],
            "event_notification_token": {
              "payload": "token"
            },
            "billing_id": "83032532617",
            "clickurl": [
              "google.com"
            ]
          }
        }
      ]
    }
  ],
  "bidid": "RNV7V1D2-rO5KC9s1-401V-jM28m07dFnN4",
  "ext": {
    "processing_time_ms": 49
  }
}
```

### App interstitial video

### OpenRTB Protobuf

#### Show me the example

[Serialized response](https://developers.google.com/authorized-buyers/rtb/data/request-response/openrtb_protobuf_mobile_app_interstitial_video_ad_response.bin)  

```
id: "eW3q768m3k93fv93a80tGQ"
seatbid {
  bid {
    id: "0uMc95E6ClImM3p5FSe"
    impid: "1"
    price: 0.034745
    adm: "https://video.test.com/ads?id=123456&wprice=%%WINNING_PRICE%%"
    adomain: "google.com"
    crid: "test_creative_id_168019"
    cat: "7"
    w: 320
    h: 480
    cattax: GOOGLE_CATEGORIES
    [com.google.doubleclick.bid] {
      attribute: 47
      attribute: 50
      billing_id: 61170857882
      app_promotion_type: INSTALLS
      clickurl: "google.com"
    }
  }
}
[com.google.doubleclick.bid_response] {
  processing_time_ms: 30
}
```

### OpenRTB JSON

#### Show me the example

```
{
  "id": "eW3q768m3k93fv93a80tGQ",
  "seatbid": [
    {
      "bid": [
        {
          "id": "0uMc95E6ClImM3p5FSe",
          "impid": "1",
          "price": 0.034745,
          "adm": "https://video.test.com/ads?id=123456&wprice=%%WINNING_PRICE%%",
          "adomain": [
            "google.com"
          ],
          "crid": "test_creative_id_168019",
          "cat": [
            "7"
          ],
          "w": 320,
          "h": 480,
          "cattax": 500,
          "ext": {
            "attribute": [
              47,
              50
            ],
            "billing_id": "61170857882",
            "app_promotion_type": 1,
            "clickurl": [
              "google.com"
            ]
          }
        }
      ]
    }
  ],
  "ext": {
    "processing_time_ms": 30
  }
}
```

### App native

### OpenRTB Protobuf

#### Show me the example

[Serialized response](https://developers.google.com/authorized-buyers/rtb/data/request-response/openrtb_protobuf_mobile_app_native_ad_response.bin)  

```
id: "wi1EB8O44Z90130Of669NX"
seatbid {
  bid {
    id: "jj4bYcFx82B228O3iB7"
    impid: "1"
    price: 0.69
    adomain: "google.com"
    crid: "test_creative_id_168019"
    w: 0
    h: 0
    cattax: GOOGLE_CATEGORIES
    adm_native {
      assets {
        id: 1
        title {
          text: "Luxury Mars Cruises"
        }
      }
      assets {
        id: 2
        data {
          value: "Visit the planet in a luxury spaceship."
        }
      }
      assets {
        id: 3
        data {
          value: "Book today"
        }
      }
      assets {
        id: 4
        img {
          url: "https://native.test.com/image?id=123456"
          w: 1200
          h: 627
        }
      }
      assets {
        id: 5
        img {
          url: "https://native.test.com/icon?id=123456"
          w: 120
          h: 120
        }
      }
      link {
        url: "https://www.google.com"
      }
      eventtrackers {
        event: IMPRESSION
        method: IMG
        url: "https://test.com/event?id=123456"
      }
    }
    [com.google.doubleclick.bid] {
      impression_tracking_url: "https://test.com/impression?id=123456"
      attribute: 47
      attribute: 50
      billing_id: 94483515670
      app_promotion_type: INSTALLS
      clickurl: "google.com"
    }
  }
}
[com.google.doubleclick.bid_response] {
  processing_time_ms: 20
}
```

### OpenRTB JSON

#### Show me the example

```
{
  "id": "wi1EB8O44Z90130Of669NX",
  "seatbid": [
    {
      "bid": [
        {
          "id": "jj4bYcFx82B228O3iB7",
          "impid": "1",
          "price": 0.69,
          "adomain": [
            "google.com"
          ],
          "crid": "test_creative_id_168019",
          "w": 0,
          "h": 0,
          "cattax": 500,
          "ext": {
            "impression_tracking_url": [
              "https://test.com/impression?id=123456"
            ],
            "attribute": [
              47,
              50
            ],
            "billing_id": "94483515670",
            "app_promotion_type": 1,
            "clickurl": [
              "google.com"
            ]
          },
          "adm": "{\"assets\":[{\"id\":1,\"title\":{\"text\":\"Luxury Mars Cruises\"}},{\"id\":2,\"data\":{\"value\":\"Visit the planet in a luxury spaceship.\"}},{\"id\":3,\"data\":{\"value\":\"Book today\"}},{\"id\":4,\"img\":{\"url\":\"https://native.test.com/image?id=123456\",\"w\":1200,\"h\":627}},{\"id\":5,\"img\":{\"url\":\"https://native.test.com/icon?id=123456\",\"w\":120,\"h\":120}}],\"link\":{\"url\":\"https://www.google.com\"},\"eventtrackers\":[{\"event\":1,\"method\":1,\"url\":\"https://test.com/event?id=123456\"}]}"
        }
      ]
    }
  ],
  "ext": {
    "processing_time_ms": 20
  }
}
```

### Web video

### OpenRTB Protobuf

#### Show me the example

[Serialized response](https://developers.google.com/authorized-buyers/rtb/data/request-response/openrtb_protobuf_web_video_ad_response.bin)  

```
id: "3Jgw964m43JgH402NeS6L3"
seatbid {
  bid {
    id: "59Ajg063pha8234W83w"
    impid: "1"
    price: 0.45312494349310345
    adm: "https://video.test.com/ads?id=123456&wprice=%%WINNING_PRICE%%"
    adomain: "google.com"
    crid: "test_creative_id_420920"
    [com.google.doubleclick.bid] {
      impression_tracking_url: "https://test.com/impression?id=123456"
      event_notification_token {
        payload: "token"
      }
      billing_id: 61339160186
      buyer_reporting_id: "6rH6Luv"
      clickurl: "google.com"
    }
  }
}
[com.google.doubleclick.bid_response] {
  processing_time_ms: 11
}
```

### OpenRTB JSON

#### Show me the example

```
{
  "id": "3Jgw964m43JgH402NeS6L3",
  "seatbid": [
    {
      "bid": [
        {
          "id": "59Ajg063pha8234W83w",
          "impid": "1",
          "price": 0.45312494349310345,
          "adm": "https://video.test.com/ads?id=123456&wprice=%%WINNING_PRICE%%",
          "adomain": [
            "google.com"
          ],
          "crid": "test_creative_id_420920",
          "ext": {
            "impression_tracking_url": [
              "https://test.com/impression?id=123456"
            ],
            "event_notification_token": {
              "payload": "token"
            },
            "billing_id": "61339160186",
            "buyer_reporting_id": "6rH6Luv",
            "clickurl": [
              "google.com"
            ]
          }
        }
      ]
    }
  ],
  "ext": {
    "processing_time_ms": 11
  }
}
```

### Mobile web banner for exchange bidder

### OpenRTB Protobuf

#### Show me the example

[Serialized response](https://developers.google.com/authorized-buyers/rtb/data/request-response/openrtb_protobuf_eb_callout_response.bin)  

```
id: "681568f2i8k4t4B51n4f98"
seatbid {
  bid {
    id: "6B21VmNY7WuI96gf6e3"
    impid: "1"
    price: 0.04
    adm: "<iframe marginwidth=0 marginheight=0 height=600 frameborder=0 width=160 scrolling=no src=\"https://test.com/ads?id=123456&curl=%%CLICK_URL_ESC%%&wprice=%%WINNING_PRICE_ESC%%\"></iframe>"
    adomain: "google.com"
    crid: "test_creative_id_168019"
    w: 728
    h: 90
    mtype: CREATIVE_MARKUP_BANNER
    [com.google.doubleclick.bid] {
      impression_tracking_url: "https://test.com/impression?id=123456"
      impression_tracking_url: "https://test.com/impression?id=123456"
      event_notification_token {
        payload: "token"
      }
      billing_id: 79775275767
    }
  }
  seat: "3931:9794:197708"
}
seatbid {
  bid {
    id: "H1TY3v0lyQi8z2d40vE"
    impid: "1"
    price: 0.04
    adm: "<iframe marginwidth=0 marginheight=0 height=600 frameborder=0 width=160 scrolling=no src=\"https://test.com/ads?id=123456&curl=%%CLICK_URL_ESC%%&wprice=%%WINNING_PRICE_ESC%%\"></iframe>"
    adomain: "google.com"
    crid: "test_creative_id_168019"
    w: 728
    h: 90
    mtype: CREATIVE_MARKUP_BANNER
    [com.google.doubleclick.bid] {
      impression_tracking_url: "https://test.com/impression?id=123456"
      impression_tracking_url: "https://test.com/impression?id=123456"
      event_notification_token {
        payload: "token"
      }
    }
  }
  seat: "3931:9794:197708"
}
bidid: "47g32DO6-4Dxo0660-l5f7-30c3uJjX5f21"
[com.google.doubleclick.bid_response] {
  processing_time_ms: 50
}
```

### OpenRTB JSON

#### Show me the example

```
{
  "id": "681568f2i8k4t4B51n4f98",
  "seatbid": [
    {
      "bid": [
        {
          "id": "6B21VmNY7WuI96gf6e3",
          "impid": "1",
          "price": 0.04,
          "adm": "<iframe marginwidth=0 marginheight=0 height=600 frameborder=0 width=160 scrolling=no src=\"https://test.com/ads?id=123456&curl=%%CLICK_URL_ESC%%&wprice=%%WINNING_PRICE_ESC%%\"></iframe>",
          "adomain": [
            "google.com"
          ],
          "crid": "test_creative_id_168019",
          "w": 728,
          "h": 90,
          "mtype": 1,
          "ext": {
            "impression_tracking_url": [
              "https://test.com/impression?id=123456",
              "https://test.com/impression?id=123456"
            ],
            "event_notification_token": {
              "payload": "token"
            },
            "billing_id": "79775275767"
          }
        }
      ],
      "seat": "3931:9794:197708"
    },
    {
      "bid": [
        {
          "id": "H1TY3v0lyQi8z2d40vE",
          "impid": "1",
          "price": 0.04,
          "adm": "<iframe marginwidth=0 marginheight=0 height=600 frameborder=0 width=160 scrolling=no src=\"https://test.com/ads?id=123456&curl=%%CLICK_URL_ESC%%&wprice=%%WINNING_PRICE_ESC%%\"></iframe>",
          "adomain": [
            "google.com"
          ],
          "crid": "test_creative_id_168019",
          "w": 728,
          "h": 90,
          "mtype": 1,
          "ext": {
            "impression_tracking_url": [
              "https://test.com/impression?id=123456",
              "https://test.com/impression?id=123456"
            ],
            "event_notification_token": {
              "payload": "token"
            }
          }
        }
      ],
      "seat": "3931:9794:197708"
    }
  ],
  "bidid": "47g32DO6-4Dxo0660-l5f7-30c3uJjX5f21",
  "ext": {
    "processing_time_ms": 50
  }
}
```