OpenRTB Bid Response Validator

Check a bid response for missing fields, mistyped prices and the macros exchanges expect.

The OpenRTB Bid Response Validator runs entirely in your browser, so responses carrying real deal ids and pricing are checked on your device.

Validate a bid request

About OpenRTB Bid Response Validator

A bid response is the short half of the OpenRTB conversation, and almost everything that goes wrong with one is structural rather than clever: a bid with no impid to tie it to an impression, a price sent as a string, a creative that never declares its advertiser domain, or a win notice that forgets the auction price macro and so reports the wrong clearing price. This validator walks the response the way an exchange would, separating the fields the specification requires from the ones buyers and publishers reject in practice. Every finding carries a JSON path, so it points at the offending bid rather than at the document as a whole.

Features

How to use the OpenRTB Bid Response Validator

  1. Paste the JSON your bidder returned
  2. Pick the protocol version the exchange is running
  3. Work through the errors first, then the warnings
  4. Use the JSON path on each finding to locate the bid it refers to

Example

Input

{ "id": "1", "seatbid": [{ "bid": [{ "id": "b1", "impid": "1", "price": "2.15" }] }] }

Output

error seatbid[0].bid[0].price — price has to be a number, not a string

A quoted price is the single most common reason a bid is silently discarded.

Common errors & troubleshooting

Frequently asked questions

What fields are required in an OpenRTB bid response?
The response needs an id echoing the request. Each bid needs an id, an impid matching an impression, a price, and markup as either adm or nurl. Everything else is optional in the specification, though not in practice.
What does the nbr field mean?
No-bid reason. It is an integer code explaining why no bid was returned — 2 for an invalid request, 8 for an unmatched user, and so on — and it lets an exchange report on why a bidder passes.
Why does nurl need the AUCTION_PRICE macro?
Because the exchange substitutes the clearing price into it when the bid wins. Without the macro the win notice fires with no price, so your logs record the bid rather than what you actually paid.
What is the difference between adm and nurl?
adm carries the creative markup inline in the response; nurl is a URL the exchange calls to fetch it on a win. Inline markup is the norm today because it removes a round trip from the render path.
Does mtype replace anything from 2.5?
It makes explicit what used to be inferred. In 2.5 the media type came from which object the impression carried, which broke down for multi-format impressions; 2.6 has the bid state it outright.

Related tools

All ArrayKit tools