ads.txt and sellers.json are promises written down in advance. But when a real bid request travels from a publisher through two or three middlemen to a buyer, how does the buyer know it actually took the path everyone promised? The bid carries a receipt: the SupplyChain object.
The SupplyChain object (schain) rides inside each OpenRTB bid request and records the actual ordered chain of intermediaries that this specific impression passed through. Static files say what *should* happen; schain shows what *did*.
The object
schain carries a version, a complete flag (0 or 1), and an ordered nodes[] array running from the publisher outward. Each node has three key fields:
| Node field | Meaning |
|---|---|
| asi | Advertising System Identifier: the SSP’s canonical domain. Matches a sellers.json host. |
| sid | The seller id at that system. Matches a seller_id in that SSP’s sellers.json. |
| hp | Whether this node is in the paid path (1 = should be paid). |
The first node is closest to the publisher; each later node is one hop further toward the buyer.
How a buyer verifies it
- 1Take node 1’s
(asi, sid), fetch that asi’s sellers.json, look up the sid, confirm the seller. - 2Repeat for node 2, then node 3, all the way out.
- 3Every node checks out and
complete = 1? The whole path is verified. - 4A node is missing or unverifiable? The buyer cannot trust the path.
Key idea
complete = 1 asserts the chain contains every node from the publisher to here. complete = 0 means nodes are missing, so the buyer cannot see the full path. That is a buy-side red flag: a hidden node could be an undisclosed reseller or an unauthorized hop.
Quick check
A schain lists 3 nodes but sets `complete = 0`. Why is that a warning sign for a buyer?
Every node is a hop: an intermediary taking a margin and adding a place where fraud or discrepancy can creep in. From ads.txt alone you can only infer a minimum depth (a RESELLER line implies at least two hops), but you cannot know the real runtime path. schain is the proof of what actually happened.
Note
In a live report, read inferHops / hop complexity and the hop-depth chart. A RESELLER line whose seller is recorded as a PUBLISHER is the kind of anomaly hop inference flags.