Sponsors: Xandr, Magnite, CafeMedia, Media.net
There’s an ongoing effort in the industry for exchanges to provide publishers with insights into why seats do not bid. Insights include reasons why the exchange did not request a bid from a seat, why a seat did not bid, and why a bid was considered invalid. Publishers want to use this information to learn how to improve performance and increase efficiency.
This proposal introduces an extension on the BidResponse
object to enable each seat to provide a reason for not bidding, or for the exchange to provide a reason for not requesting a bid or rejecting a bid from a particular seat.
The OpenRTB 2.x BidResponse
object defines the nbr
field to provide one reason for not bidding. There's no structure defined to convey granular information when some seats bid and others do not.
The Bid
object cannot be extended for non bid scenarios since it constitutes an offer to buy an impression and requires a price. Similarly, the SeatBid
object cannot be extended as it requires at least one Bid
.
Exchanges and publishers who do not wish to emit or act upon these insights may choose to ignore this extension. Exchanges may provide an option to publishers for including this level of detail.
There are many reasons for a non bid scenario and it is understood not all can be included in a standardized enumeration. Exchanges may use 500+ values to define their own reason codes as appropriate.
{
"id": "1234567890",
"ext": {
"seatnonbid": [{
"seat": "512",
"nonbid": [{
"impid": "102",
"statuscode": 301
}]
}]
}
}
Attribute | Type | Description |
ext.seatnonbid
|
object array |
Optional array of SeatNonBid objects.
|
Attribute | Type | Description |
nonbid
|
object array; required |
Array of 1+ NonBid objects each related to an impression. Multiple non bids may relate to the same
impression.
|
seat
|
string | ID of the buyer seat (e.g., advertiser, agency) on whose behalf this bid is made. |
ext
|
object | Placeholder for future extensions. |
Attribute | Type | Description |
impid
|
string; required |
ID of the Imp object in the related bid request.
|
statuscode
|
integer; required | Reason for non bid. Refer to the Non Bid Status Codes list in this document. |
ext
|
object | Placeholder for future extensions. |
Value | Description |
---|---|
0 | No Bid - General |
1 | No Bid - Internal Technical Error |
2 | No Bid - Invalid Request |
3 | No Bid - Known Web Crawler |
4 | No Bid - Suspected Non-Human Traffic |
5 | No Bid - Cloud, Data Center, or Proxy IP |
6 | No Bid - Unsupported Device |
7 | No Bid - Blocked Publisher or Site |
8 | No Bid - Unmatched User |
9 | No Bid - Daily User Cap Met |
10 | No Bid - Daily Domain Cap Met |
11 | No Bid - Ads.txt Authorization Unavailable |
12 | No Bid - Ads.txt Authorization Violation |
13 | No Bid - Ads.cert Authentication Unavailable |
14 | No Bid - Ads.cert Authentication Violation |
15 | No Bid - Insufficient Auction Time |
16 | No Bid - Incomplete SupplyChain |
17 | No Bid - Blocked SupplyChain Node |
100 | Error - General |
101 | Error - Timeout |
102 | Error - Invalid Bid Response |
103 | Error - Bidder Unreachable |
200 | Request Blocked - General |
201 | Request Blocked - Unsupported Channel (app/site/dooh) |
202 | Request Blocked - Unsupported Media Type (banner/video/native/audio) |
203 | Request Blocked - Optimized |
204 | Request Blocked - Privacy |
300 | Response Rejected - General |
301 | Response Rejected - Below Floor |
302 | Response Rejected - Duplicate |
303 | Response Rejected - Category Mapping Invalid |
304 | Response Rejected - Below Deal Floor |
350 | Response Rejected - Invalid Creative |
351 | Response Rejected - Invalid Creative (Size Not Allowed) |
352 | Response Rejected - Invalid Creative (Not Secure) |
353 | Response Rejected - Invalid Creative (Incorrect Format) |
354 | Response Rejected - Invalid Creative (Malware) |
355 | Response Rejected - Invalid Creative (Advertiser Exclusions) |
356 | Response Rejected - Invalid Creative (Advertiser Blocked) |
357 | Response Rejected - Invalid Creative (Category Exclusion) |
500+ | Vendor-specific codes. |
Advertiser Exclusions vs Advertiser Blocked: "Exclusion" refers to scenarios of competitive separation, while "Blocked" refers to publisher driven block lists.
-
Exchanges are encouraged to provide as much detail as possible, but it is acceptable to use the general codes (0, 100, 200, 300) when details aren't known.
-
The values 1-17 intentionally overlap with the OpenRTB 3.0 No-Bid Reason Codes such that seats which provide a
nbr
can easily mapping to astatuscode
.
Non Bid Status Code values are purposefully organized into the following ranges to assist with high level classification:
Range | Description | Interpretation | Action |
---|---|---|---|
0-99 | No Bid | Auction ran successfully without demand for the impression. | Seats with low demand may be re-evaluated or optimized. |
100-199 | Error | Technical problem occurred during the auction. | Seat may need investigation to determine root cause. |
200-299 | Request Rejected | Impression was explicitly not sent to the seat. | Bid Request should be re-evaluated for unsupported impressions. May be expected due to exchange configuration. |
300-399 | Response Rejected | Seat responded with a bid that was rejected by the exchange. | Seat may need to resolve. |