Field required by the declared exchange profile
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.