openrtb.schain.duplicate_location
What it means
The request carries a chain in both places: source.schain, which is where OpenRTB 2.6 put the object, and source.ext.schain, which is where it lived as a community extension before that.
Why it matters
The two copies can disagree, and receivers differ on which one they read. A request that verifies cleanly at one buyer can fail at the next, and a stale extension copy is a common way for a chain to keep naming a partner that was already removed from the canonical one.
How to fix it
Emit one chain. On 2.6 and later that is source.schain. Keep the ext copy only while a named partner still requires it, and generate both from the same source so they cannot drift.
Example that trips it
{ "source": { "schain": { "ver": "1.0", "complete": 1, "nodes": [] }, "ext": { "schain": { "ver": "1.0", "complete": 1, "nodes": [] } } } }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.