openrtb.payload.root_not_object
What it means
The payload parses as JSON, but the root is an array, a string, a number, or a bare literal instead of an object. An OpenRTB bid request or bid response is always a single JSON object at the top level.
Why it matters
A typed consumer fails to bind the payload and drops it. The usual causes are batching requests as a JSON array, or double encoding, where the root parses to a string that itself contains the real JSON document.
How to fix it
Send one object per request. If the root is a string, you are JSON-encoding twice; encode exactly once. If you batch, use the transport's framing (one request per HTTP call, or newline-delimited JSON where a partner explicitly supports it).
Example that trips it
["{\"id\":\"req-1\"}"]An array wrapping a double-encoded request: two mistakes in one payload.
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.