Description
Bidders (confirmed with Kargo) are returning 204 No Content for all OpenRTB requests sent through Prebid Server. The root cause is that the device.ua field is never populated in the OpenRTB bid request payload.
When device.ua is absent, Prebid Server falls back to the User-Agent HTTP header of the server-to-server request itself (e.g. curl/8.7.1 or the Fastly compute runtime UA), which bidders reject as non-browser traffic.
Reproduction
Sending the same OpenRTB request directly to Kargo with a real browser UA returns 200 (bid). With a non-browser UA it returns 204 (no bid). All other fields (banner formats, buyeruid, geo) had no effect.
| Test | Change | Result |
|---|---|---|
| Baseline (as sent by Prebid) | None | 204 |
| + 10 banner formats | Formats only | 204 |
| + Real Chrome UA | UA only | 200 |
| + buyeruid | buyeruid only | 204 |
Root Cause
Two issues:
- The OpenRTB
Devicestruct has nouafield, so user-agent is never serialized into the bid request JSON. DeviceInfoconstruction informats.rsis gated on geo lookup succeeding -- ifGeoInfo::from_requestreturnsNone, the entireDeviceInfo(including user-agent) is dropped.
Expected Behavior
The original browser User-Agent header should be forwarded as device.ua in every OpenRTB bid request, regardless of whether geo information is available.
Activity