schain Builder & Validator
Build and validate the IAB SupplyChain object (schain) for OpenRTB, and export both the source.ext.schain JSON and the serialized string — all in your browser.
The schain Builder & Validator runs entirely in your browser. The seller ids, domains, and supply chain nodes you build or paste stay on your device and are never uploaded to ArrayKit.
Open the OpenRTB Enum Reference
About SupplyChain (schain) Builder
The schain Builder & Validator assembles the IAB Tech Lab SupplyChain object that rides in OpenRTB bid requests at source.ext.schain. Add each intermediary as an ordered node with its asi, sid, and hp (payment) flag, set the complete and ver values, then copy both the JSON object and the URL-encoded serialized string exchanges expect. Switch to Validate mode to paste an existing schain — as JSON or as a serialized string — and instantly see missing required fields, a bad complete flag, or an unexpected version, with the hop chain drawn out node by node. Ad-ops, SSP, and header-bidding engineers can audit and repair supply paths right here; the nodes and seller ids you paste are parsed on your device and never uploaded.
Features
- Add, reorder, and remove ordered supply chain nodes (asi, sid, hp, rid, name, domain)
- Toggle the complete flag and pin ver to the current 1.0 spec
- Exports the OpenRTB source.ext.schain JSON object ready to drop into a bid request
- Generates the URL-encoded serialized string exchanges accept (ver,complete!node!node)
- Validate mode accepts either a JSON schain or a serialized string
- Flags missing asi, sid, or hp, an invalid complete flag, and an unexpected ver
- Visualizes the hop chain so you can confirm node order at a glance
- Runs entirely in your browser — seller ids and domains stay on your device
How to use the SupplyChain (schain) Builder
- Keep the Build tab selected and fill in asi, sid, and the hp flag for each node
- Add more nodes and use the arrows to put them in publisher-to-exchange order
- Set the complete flag (1 when the whole path is declared) and copy the JSON or serialized string
- Switch to Validate and paste an existing schain to check required fields and node order
Example
Input
asi: exchange1.com
sid: 1234
hp: 1
complete: 1
Output
1.0,1!exchange1.com,1234,1
One node serializes to ver,complete!asi,sid,hp; the JSON goes in source.ext.schain.
Common errors & troubleshooting
- Validate reports a node is missing asi, sid, or hp. — Every node needs all three required fields: asi is the advertising system's canonical domain, sid is the seller/reseller id from that system, and hp must be 0 or 1.
- The exchange rejects the serialized string. — Fields must be URL-encoded and ordered asi,sid,hp,rid,name,domain, with commas between fields and ! between nodes; the header segment is ver,complete.
- complete is set to 1 but you dropped an upstream reseller. — complete=1 asserts every intermediary is declared. If any hop is unknown, set complete=0 so downstream bidders know the path is partial.
- sid does not match the seller id in sellers.json. — The sid on each node must equal the seller_id the corresponding system publishes in its sellers.json, or buyers will treat the path as unverified.
Frequently asked questions
- What is the schain (SupplyChain) object?
- It is an IAB Tech Lab object carried in OpenRTB at source.ext.schain that lists, in order, every advertising system that touched the bid request between the publisher and the exchange, so buyers can verify the supply path.
- What do asi, sid, and hp mean on each node?
- asi is the canonical domain of the advertising system, sid is the seller or reseller account id within that system (matching its sellers.json), and hp is 1 when that node is involved in the payment flow. All three are required per node.
- What is the difference between the JSON object and the serialized string?
- The JSON object is the full source.ext.schain structure used in a bid request body. The serialized string is a compact URL-encoded form — ver,complete!node!node — where each node is asi,sid,hp,rid,name,domain, used where a header or query parameter is needed.
- When should complete be 0 versus 1?
- Set complete=1 only when every intermediary from the publisher onward is declared in the nodes array. If any upstream hop is unknown or omitted, set complete=0 so bidders know the chain is incomplete.
- Does this tool fetch my ad tag or bid request from a server?
- No. You paste or build the schain and everything — serialization, parsing, and validation — happens locally in your browser. The seller ids, domains, and node data you enter are never sent to ArrayKit.
- Can it validate a schain I copied from a live bid request?
- Yes. Paste it into Validate mode as either the JSON object (including a wrapping source.ext.schain) or the serialized string, and the tool checks the required node fields, the complete flag, the ver, and draws the hop chain.
Related tools
All ArrayKit tools