Rule reference

Field required by the declared exchange profile

openrtb.profile.field_requirederrorBid request

An exchange profile was declared, and a field that exchange documents as required is missing or empty.

What it means

The payload was validated against an exchange profile (google-ab, prebid-server, xandr, or magnite). That profile documents extra required fields the OpenRTB specification leaves optional. Google's bid request requires Imp.ext.billing_id. Prebid Server requires storedrequest.id (and storedauctionresponse.id) whenever those objects are present, and ext.prebid.channel.name when channel is present. Xandr requires ext.appnexus.seller_member_id and video.ext.appnexus.context. Magnite requires imp.ext.rp.zone_id, site/app ext.rp.site_id, and publisher.ext.rp.account_id.

Why it matters

A payload that is valid OpenRTB can still be undeliverable on a specific exchange. Without the profile, billing_id is just another extension and at: 3 is an illegal auction type. A storedrequest object without id cannot be merged. Xandr cannot attribute the seller without seller_member_id. Magnite cannot map inventory without zone/site/account ids. Declaring the profile is how the extra protocol is asked for rather than guessed.

How to fix it

Populate the field the profile names, or drop --profile / profile if you meant the specification only. Floors, blocklists, and other business policy are not encoded here.

Example that trips it

{ "id": "req-1", "imp": [{ "id": "1", "banner": { "w": 300, "h": 250 } }] }

Validated with --profile google-ab. The same payload is valid against the specification, which does not require Imp.ext.billing_id.

Check your payload

Paste a bid request or response into the tester to see whether this code fires against it, or gate on the id in CI with the CLI: the id is stable, wording is not.

Back to the full diagnostic code reference.