Guaranteed Outcomes Bidder Integration Guide
This page outlines the specifications that define the method by which Xandr enables a Bidder to bid for, and to be billed for, an outcome (view and/or complete) vs. the typical served impression. In addition, since different buyers have different standards for what constitutes a "viewable impression", the specification is designed to support a variety of standards, including different definitions (e.g., IAB vs. GroupM) and different measurement technology vendors (e.g. DoubleVerify). In the future, the specification may also be used to support additional transaction events, for example, an in demo impression.
For more information see Guaranteed Outcomes.
Implementation
At a high level, our approach to the implementation follows what has been described in the OpenRTB specification as a "billing notice", from OpenRTB Specification 2.4, Section 7.2.
"Winning the auction, however, does not guarantee that the ad will be successfully delivered to the client or that it ? will meet viewability expectations. Furthermore, policies vary among exchanges as to the criteria for billing. Most consider an ad billable upon some form of delivery or rendering vs. the auction win alone. This aligns better with the buyer’s obvious goal of ensuring that the impressions they pay for are actually displayed.To abstract the concept, let us refer to “billing notice” as the firing of some notification URL at the time when the clearing price of the impression will be booked as spend. This is irrespective of whether the actual OpenRTB win notice URL is delegated to the client for firing or some other tracking URL is used."
The billing notification concept has been further developed in the OpenRTB Specification 2.5. Highlighting relevant content from section 4.2.3.
BEST PRACTICE: The essential function of the win notice is to inform a bidder that they won an auction. It does not necessarily imply ad delivery, creative viewability, or billability. Exchanges are highly encouraged to publish to their bidders, their event triggers, billing policies, and any other meaning they attach to the win notice.
BEST PRACTICE: Firing of the billing notice should be server-side and as “close” as possible to where the exchange books revenue in order to minimize discrepancies between exchange and bidder.
Protocol summary
A summary of the components required to enable bidding for and purchasing outcomes is as follows:
Bid request
Xandr will indicate in the bid request that it will accept outcome based bids, which outcomes (views and/or completes), and the rate that the exchange will use to generate an eCPM value for ranking.
Bid response
Bidder will indicate that the bid is an outcome based bid, specify which outcome (payment_type), specify the outcome based bid price (vCPM for views, CPCV for completes), and provide a billing notify url.
Win notify
Xandr will indicate that the winning bid was for an outcome, specify which outcome, and quote the winning, outcome-based price that the Bidder will be charged if the ad achieves the desired outcome post-serve. Note that at this point the Bidder is notified of winning the auction and that an impression was served—but they aren’t charged until the outcome is verified.
Billing notify
After the creative is served and Xandr receives a positive signal that the desired outcome occurred, Xandr calls the billing notify url to indicate that the outcome occured and the Bidder is charged the winning outcome-based price.
Specification
Bid request
Impression AppNexus object
Xandr supports the following fields in the appnexus
extension object of the imp
object:
Field | Type | Description |
---|---|---|
allowed_payment_types |
array of objects | Specifies the allowable payments types for this impression. If this field is not present, then the only allowed payment type is 'impression' . |
Allowed payment type object
Xandr supports the following fields in the allowed_payment_type
object of the impression ext
object:
Field | Type | Description |
---|---|---|
payment_type |
integer | Specifies the ID of a payment type that is acceptable for this impression. See Currently supported payment types below. |
conversion_rate |
double | Optional. Specifies the rate that Xandr will use to convert an outcome-based bid to an impression-based eCPM price for ranking in the auction. A Bidder may use this for internal bid ranking and/or budgeting/pacing. |
Currently supported payment types
ID | Description | Bid Type |
---|---|---|
1 | Impression | CPM |
2 | Views - Standard Display | vCPM |
6 | Views - Custom Display - 100pv1s | vCPM |
8 | Views - Standard Video | vCPM |
9 | Views - Custom Video - 100pv50pd | vCPM |
10 | Complete – Standard Video | CPCV |
Bid response
Bid object
Field | Type | Description |
---|---|---|
price |
float | (Required) The bid price expressed in CPM. If the bid_payment_type is omitted or set to 'Impression', then price is used in the auction and to populate the ${AUCTION_PRICE} macro.If the bid_payment_type is something other than Impression, then price must still be set; however, the payment_type_price field will be used in the auction and to populate the ${AUCTION_PRICE} macro. |
nurl |
string | The win notify URL. The Xandr server will call this URL when it receives a client-side notification from the device, which indicates that Xandr won the auction. This occurs at the same time that Xandr records the impression and is when the Bidder should record a served impression as well. Note: The win notify does not signify a transaction, just that the impression served. The billing notify will signal a transaction. Win notify URLs sent as HTTPS are not supported and will be treated as HTTP requests. The following macros are supported in the notify URL: ${AUCTION_ID} - Xandr auction_id_64 ${AUCTION_BID_ID} - ID of the bid specified in the bidid field in the bid response${AUCTION_IMP_ID} - ID of the impression from the impid field in the bid object of the seatbid object${AUCTION_SEAT_ID} - ID of the winning seat from the seat field in the seatbid object${AUCTION_AD_ID} - ID of the buyer's creative, from the adid field in the bid object of the seatbid object${AUCTION_PRICE} - Clearing price of the impression in the currency specified in the cur field in the bid response. If bid_payment_type is present and something other than Impression, then the AUCTION_PRICE will reflect price to be paid only if the billing notify is called.${AUCTION_CURRENCY} - Currency of the clearing price, as specified in the cur field in the bid response${CREATIVE_CODE} - The code field set on the creative object via the API when registering a creative${AN_PAYMENT_TYPE} - The payment_type of bid specified in the bid_payment_type field of the bid response |
burl |
string | The billing notify URL. The Xandr server will call this URL when it determines that the impression is billable. This event occurs at the same time that Xandr records the buyer cost for the impression. At this point, the Bidder incurs cost and should record a transaction. Billing notify URL is only relevant for bids that have specified a bid_payment_type other than Impression.Billing notify URLs sent as HTTPS are not supported and will be treated as HTTP requests. The following macros are supported in the billing notify URL: ${AUCTION_ID} - Xandr auction_id_64 ${AUCTION_BID_ID} - ID of the bid specified in the bidid field in the bid response${AUCTION_IMP_ID} - ID of the impression from the impid field in the bid object of the seatbid object${AUCTION_SEAT_ID} - ID of the winning seat from the seat field in the seatbid object${AUCTION_AD_ID} - ID of the buyer's creative from the adid field in the bid object of the seatbid object${AUCTION_PRICE} - Clearing price for the payment_type specified in the bid_payment_type field of the bid response, in the currency specified in the cur field in the bid response.${AUCTION_CURRENCY} - Currency of the clearing price, as specified in the cur field in the bid response${CREATIVE_CODE} - The code field set on the creative object via the API when registering a creative${AN_PAYMENT_TYPE} - The payment_type of bid specified in the bid_payment_type field of the bid response |
Bid response AppNexus object
Xandr supports the following fields in the appnexus
extension object of the bid object:
Field | Type | Description |
---|---|---|
bid_payment_type |
object | Required to submit Guaranteed Outcomes bid. Specifies the payment type for which the Bidder is bidding. If omitted, then Xandr will consider the bid to be for a standard Impression. |
Bid payment type object
Xandr supports the following fields in the bid_payment_type
object of the bid response ext
object:
Field | Type | Description |
---|---|---|
payment_type |
integer | Specifies the payment type for which the Bidder is bidding and will be billed. If the payment type is not 'impression' , then a billing notify url must be set on the bid object. See Currently supported values for bid payment type object below. |
price |
double | Specifies the bid price for the payment type, expressed on an outcome basis (see Bid Type in the Currently supported values for bid payment type object) below. For example, if the payment_type is set to 2 ('Views - Standard Display'), price is interpreted as a vCPM value. It is also the maximum charge, which is only accrued if the creative is served and measured viewable, according to the IAB definition and the Xandr viewability measurement script. Note: Only USD bids are supported for payment types other than Impression. |
Currently supported values for bid payment type object
ID | Description | Bid Type |
---|---|---|
1 | Impression | CPM |
2 | Views - Standard Display | vCPM |
6 | Views - Custom Display - 100pv1s | vCPM |
8 | Views - Standard Video | vCPM |
9 | Views - Custom Video - 100pv50pd | vCPM |
10 | Complete – Standard Video | CPCV |