Rule reference

openrtb.payload.root_not_object

errorRequest or response

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.