> For the complete documentation index, see [llms.txt](https://docs.exoclick.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.exoclick.com/rtb/advertisers/open-rtb/adv-open-rtb-2.4-response.md).

# Open RTB 2.4 Bid Response

The response for a bid request should have the following structure:

## Bid Response Object

| Attribute | Required? | Description                                                                |
| --------- | --------- | -------------------------------------------------------------------------- |
| id        | Yes       | ID of the bid request to which this is a response (string)                 |
| seatbid   | Yes       | Collection of bids made by the bidder on behalf of a specific seat (array) |

{% hint style="info" %}
**Note:** The id must match the one provided in the request
{% endhint %}

### seatbid

| Attribute | Required? | Description                                                |
| --------- | --------- | ---------------------------------------------------------- |
| bid       | Yes       | Array of the bid object related to the targeted impression |

### seatbid.bid

| Attribute | Required?   | Description                                                                              |
| --------- | ----------- | ---------------------------------------------------------------------------------------- |
| id        | Yes         | ID for the bid object, used for tracking (string)                                        |
| impid     | Yes         | ID of the impression object in the related bid request.                                  |
| price     | Yes         | Bid price in CPM or CPC (float)                                                          |
| adm       | Yes         | XML/JSON Ad Markup (string)                                                              |
| nurl      | Yes         | Win notification URL, it is recommended to use **HTTP** over HTTPS for nurl (string)     |
| burl      | No          | Billing notification URL, it is recommended to use **HTTP** over HTTPS for burl (string) |
| crid      | Recommended | Creative ID to assist with ad quality checking (string)                                  |
| iurl      | Recommended | URL of creative                                                                          |
| ext       | No          | ExoClick specific extension (object)                                                     |

{% hint style="info" %}
**Notes:**

* We support video in both banner and interstitial placements.
* The impid must match the one provided in the request.
* The adm must be provided in JSON or XML based on the ad format targeted: JSON for Native, In-Stream and Push Notifications; XML for all the other formats.
* The nURL must be notified in order to ensure campaign capping and avoid getting the same response every time.
* The bURL is called when impressions or clicks have been delivered, depending on CPM or CPC from btype field (default CPM).
  {% endhint %}

### seatbid.bid.ext

| Attribute | Required?   | Description                                                                                                                       |
| --------- | ----------- | --------------------------------------------------------------------------------------------------------------------------------- |
| btype     | Recommended | Pricing Model. Values: 1 = CPM, 2 = CPC. Default = 1 (int). When the response is for an Email Clicks zone request, 1 = Smart CPC. |
|           |             | **Note**: Only Push Notification, Native ads, Direct Link, and Email Clicks may bid with the CPC pricing model.                   |

### seatbid.bid.ext.dsa

| Attribute | Required? | Description                                                                                                                                                                                        |
| --------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| behalf    | Yes       | Advertiser Transparency: Free UNICODE text string with a name of whose behalf the ad is displayed. Maximum 100 characters. (string)                                                                |
| paid      | Yes       | Advertiser Transparency: Free UNICODE text string of who paid for the ad. Must always be included even if it's the same as what is listed in the behalf attribute. Maximum 100 characters (string) |
| adrender  | Yes       | Flag to indicate that buyer/advertiser will render their own DSA transparency information inside the creative. 0 = buyer/advertiser will not render, 1 = buyer/advertiser will render (int)        |

### seatbid.bid.dsa.transparency

| Attribute | Required? | Description                                                                                                                                                                                                   |
| --------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| domain    | Yes       | Domain of the entity that applied user parameters (string)                                                                                                                                                    |
| params    | Yes       | Array of buy-side applied user parameter targeting (using the list provided by DSA Transparency Taskforce). Include support for multiple vendors who may add their own user-targeting parameters. (int array) |

## No Bid Response

To answer to a bid request without making an actual bid, an HTTP response code 204 "No Content" should be sent.

## Win and Billing Notification URLs

If either the **nURL** or the **bURL** are in the bid response and are valid URLs, ExoClick platform will send a GET request to them.\
These URLs can have a few tokens to be replaced by ExoClick before doing the GET:

```
${AUCTION_ID} - ID of the bid request; from "Bid Request Object -> id" attribute.
${AUCTION_BID_ID} - ID of the bid; from "Bid Response Object -> bidid" attribute.
${AUCTION_IMP_ID} - ID of the impression just won; from "Bid Request Object -> Impression Object -> id" attribute.
${AUCTION_SEAT_ID} - ID of the bidder seat for whom the bid was made; from "Bid Response Object -> Seat Bid Object -> Bid Object -> id" attribute.
${AUCTION_AD_ID} - ID of the ad markup the bidder wishes to serve; from "Bid Response Object -> Seat Bid Object -> Bid Object -> adid" attribute.
${AUCTION_PRICE} - Settlement price using the same currency and units as the account; from "Bid Response Object -> Seat Bid Object -> Bid Object -> price" attribute.
${AUCTION_CURRENCY} - The currency used in the bid (explicit or implied); for confirmation only.
```

Example:

```
https://mysite.com/my_notification_url?id=${AUCTION_ID}&bidid=${AUCTION_BID_ID}&price=${AUCTION_PRICE}&currency=${AUCTION_CURRENCY}
```

If you are using both **nURL** and **bURL**, ExoClick will make a call to both of them.

## ADM structure

Depending on the ad format, the **adm** parameter can contain a piece of XML or JSON. You can find detailed examples of adm structures in our [**examples page**](/rtb/advertisers/open-rtb/open-rtb-advertiser-code-examples.md)

When creating the ADM, please bear in mind the following:

* **iFrame markups** (Banner, Fullpage Interstitial) must be enabled in your ExoClick account in order to be able to use them.
* **In-Stream, Native** and **Push Notification ads** should contain a JSON encoded string in the adm.
* The adm parameter from **In-Stream** can follow one of two structures: **Remote VAST** or **Local VAST**. In Remote VAST, you simply need to declare the URL where the VAST Wrapper is located, whereas in Local VAST you need to declare any **"trackingEvents"** you want to track in addition to the "videoURL" and "clickURL".

Currently we support **impression**, **progress** and **complete** events. Impression and progress events are **compulsory**, whereas complete can be added only if you are using Local VAST.

The ADM **must** follow the same structure as shown in our [example](/rtb/advertisers/open-rtb/open-rtb-advertiser-code-examples.md) above.

* As an optional parameter, you can include **crop\_anchor\_point** in the JSON string from the **Native Ads** adm to determine where the anchor point of your native image is located. The available values are:
  * MIDDLE\_CENTER = 0,
  * TOP\_LEFT = 1,
  * TOP\_CENTER = 2,
  * TOP\_RIGHT = 3,
  * MIDDLE\_LEFT = 4,
  * MIDDLE\_RIGHT = 5,
  * BOTTOM\_LEFT = 6,
  * BOTTOM\_CENTER = 7,
  * BOTTOM\_RIGHT= 8

Here is a visualization of the available anchor points:

![crop anchor point](/files/6195738188adc14a7668ea7c4b6b789518c55916)

* Also, regarding **Native Ads**, make sure that you are adding your **eventtrackers** according to the [latest native specification](https://www.iab.com/wp-content/uploads/2018/03/OpenRTB-Native-Ads-Specification-Final-1.2.pdf)

Note that, while we also allow **imptrackers** in Native Ads, we strongly recommend using **eventtrackers** instead.

* **Push Notification** ads only allow one image asset per notification. The width and height depend on what's coming from the request, which can be 192x192 or 720x480. Note that the adm must also be a JSON encoded string as the request will be coming from a Native object.
* Lastly, **Push Notification** ads allow only one **"imptracker" URL**

## Examples

You can find detailed examples from Bid responses and ADM structures in our [Advertiser Response example page](/rtb/advertisers/open-rtb/open-rtb-advertiser-code-examples.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.exoclick.com/rtb/advertisers/open-rtb/adv-open-rtb-2.4-response.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
