Why is my bid response being dropped by the exchange?
Answer
Check the contract fields first: BidResponse.id must echo the request id, every bid.impid must exactly match an imp.id from the request, price must be a JSON number (CPM), and the bid must carry markup in adm or a win-notice URL in nurl. After structure, the common filters are currency (cur must be one the request allows), bids under the floor, missing adomain or crid where the exchange requires them for audit, and creative attributes colliding with battr. Exchanges rarely explain a dropped response inline, so compare your sent-bid logs against the exchange's reported received bids, then work the list.
Fields in this answer
Go deeper
More questions on debugging, no-bids, and validation
- Why is my bidder not receiving bid requests? Work the path from the exchange inward: confirm the endpoint the exchange has on file matches what you deployed (scheme, host, path), that your endpoint returns a well-formed response or HTTP 204 quickly enough to stay under the exchange's timeout, and that traffic filters on the exchange side (geo, media type, QPS caps, pretargeting) are not excluding you.
- Why is my bid rate low even though I receive requests? Start by separating deliberate no-bids from failures.
- How do I find out why my bids are losing auctions? Ask for loss reasons via the loss notice URL.
- How do I debug a systematic OpenRTB no-bid? If the bidder returns a BidResponse with nbr set, the code tells you where to look: nbr 2 is Invalid Request, which means the bidder could not parse or accept your bid request, so run the request through a validator before anything else.
- What does HTTP 204 mean in OpenRTB, and how is it different from nbr? HTTP 204 No Content is the spec's preferred way for a bidder to say it has no bid: no body, cheapest possible round trip.
- How do I validate an OpenRTB bid request? Paste it into a validator that checks against the actual spec catalog, not just JSON syntax.
All 93 questions are listed in the OpenRTB FAQ.