---
title: "Supply chain for DSPs and header bidding"
description: "Scenarios 1 and 2 of the supply-chain setup — a publisher's site sold to DSPs over OpenRTB, and a site sold through header bidding with other bidders in the tag — with the exact settings, the sellers.json entry, the schain node and the ads.txt block each produces, and how the non-advertiser bidders get their lines."
type: "howto"
audience: [network-manager, admin, publisher]
keywords: [schain, supply chain, OpenRTB, DSP partner, Send supply chain, seller ID, sellers.json entry, header bidding, Prebid bidder, header-bidding partners, Additional ads.txt lines, adf, Adform, bidder code, Line missing, Live, DIRECT, complete]
ui_path: "Account → Publishers → site → Basic info → Supply chain"
---

Fetch the complete documentation index at: https://epom.com/ad-server/docs/llms.txt. Use this file to discover all available pages before exploring further. Append .md to any documentation page URL to get its markdown version.

# Supply chain for DSPs and header bidding

## What it is and why

These are the two setups where the network's own chain reaches buyers: in the OpenRTB bid
request sent to a DSP partner, and in the header-bidding tag that runs on the publisher's page.
Each needs the site's seller ID to agree across sellers.json, the schain node and the publisher's
ads.txt. The one-time network setup — seller domain, Publish sellers.json, the listed sites — is
on [Set up the network as a seller](https://epom.com/ad-server/docs/guides/inventory/supply-chain-ads-txt-setup-network.md).

**Example.** The network *Northwind Ads* sells *Sports Daily* to DSPs. The bid request says
`asi: northwind-ads.example, sid: 4831207`; `https://northwind-ads.example/sellers.json` lists
seller `4831207` as *Sports Daily Media Ltd*, `sportsdaily.example`; and
`https://sportsdaily.example/ads.txt` contains `northwind-ads.example, 4831207, DIRECT`. One
check on each of the three files and the buyer knows the sale is authorised end to end.

## Typical scenarios

| You sell… | Set | Then read |
|---|---|---|
| A publisher's site to **DSPs over OpenRTB** | **Send supply chain** on the DSP partner; the site listed in sellers.json, *Publisher* type, generated ID | [Scenario 1](#scenario-1-the-network-sells-a-publisher-to-dsps-over-openrtb) |
| Through **header bidding**, with other bidders in the tag | A filled **Seller ID** (say `nw-sd-01`) so the tag carries your chain; each non-advertiser bidder's line in the site's **Additional ads.txt lines** | [Scenario 2](#scenario-2-header-bidding) |

## Step by step

### Scenario 1: the network sells a publisher to DSPs over OpenRTB

**Setup.** The DSP endpoints are DSP partners; their banners run on the publisher's placements. On
the DSP partner, switch on **Send supply chain** (see [DSP partners](https://epom.com/ad-server/docs/guides/admin/dsp-partners.md)).
On the site *Sports Daily*, leave **Seller ID** empty to use the generated ID, keep **Seller
type** = *Publisher*, tick **List in sellers.json**.

**sellers.json entry** (the generated ID is an example). The name is the company of the site's
owner, the domain the root domain of the site URL:

```json
{ "seller_id": "4831207", "is_confidential": 0, "seller_type": "PUBLISHER",
  "name": "Sports Daily Media Ltd", "domain": "sportsdaily.example" }
```

**schain node buyers receive** (`source.schain` on OpenRTB 2.6, `source.ext.schain` on 2.5). It
names the seller domain and the site's seller ID because **Publish sellers.json** is on; with it
off, the node keeps the installation domain and the generated ID:

```json
{ "ver": "1.0", "complete": 1,
  "nodes": [ { "asi": "northwind-ads.example", "sid": "4831207", "hp": 1 } ] }
```

**ads.txt the publisher publishes** at `https://sportsdaily.example/ads.txt`:

```text
northwind-ads.example, 4831207, DIRECT
meridian-ssp.example, MRD-5512, RESELLER, 7c1e2a90b3d54f6a
```

The second line comes from the network-wide lines in
[step 3 of the network setup](https://epom.com/ad-server/docs/guides/inventory/supply-chain-ads-txt-setup-network.md#step-by-step).

### Scenario 2: header bidding

**Setup.** Header-bidding tags carry a supply chain only when both the White Label **Seller
domain** and the site's **Seller ID** are filled in, because in header bidding the buyer may pay
the publisher directly. If you resell the inventory, set the site's seller ID — for example
`nw-sd-01` — and keep the site listed.

**sellers.json entry:** as in scenario 1, with `"seller_id": "nw-sd-01"`.

**schain in the tag** (set as `ortb2.source.ext.schain` for Prebid):

```json
{ "ver": "1.0", "complete": 1,
  "nodes": [ { "asi": "northwind-ads.example", "sid": "nw-sd-01", "hp": 1 } ] }
```

**ads.txt:** `northwind-ads.example, nw-sd-01, DIRECT` plus a line from every other bidder in the
tag. See [Header bidding settings](https://epom.com/ad-server/docs/guides/inventory/header-bidding-settings.md#reselling-the-supply-chain).
While the site has an active tag that carries this chain, its block asks for this pair whether or
not **Publish sellers.json** is on, because the tag sends it either way. If DSP partners also buy
the site, the block keeps the line their bid requests name it by as well — with sellers.json off
that is the installation domain and the generated ID; with it on, both name the same pair and one
line covers both. A site sold only through header bidding is not asked for the OpenRTB line.

**The other bidders.** Say *Sports Daily*'s tag also offers every slot to Adform, as Prebid bidder
`adf`. Adform is not an advertiser in your account — it bids in the publisher's page, not through
a banner — so it has no advertiser to carry its line. The site's ads.txt block lists it in the
**Header-bidding partners** table, one row per bidder:

```text
Partner             Bidder code   Status
Adform adform.com   adf           Line missing — ask Adform for its line
```

1. Ask Adform for the line it gives this site, for example `adform.com, 2817, RESELLER`.
2. Open the site's **Supply chain** section, paste the line into **Additional ads.txt lines** and
   press **Add lines**. The line appears under **Saved lines** and joins the block under
   *This site*, and Adform's status changes to *Added, not on the live file yet*.
3. The publisher copies or downloads the block as before. Once a check finds the line in the
   publisher's file, Adform's status reads *Live*.

The status always combines the block with the last check of the live file. When there is no
check that read the file — never checked, the file was not found or could not be fetched — a
partner whose line is in the block reads *In the list above — not confirmed on the live file*,
because nothing can be said about the file yet. A line added after the last check counts as not
on the live file until the next check, nightly or **Re-check now**.

Each bidder is mapped from its Prebid code to the ad system it sells under, from a list checked
against each company's own sellers.json and publisher documentation: `adf` adform.com, `appnexus`
appnexus.com, `criteo` criteo.com, `rubicon` rubiconproject.com, `ix` indexexchange.com,
`pubmatic` pubmatic.com, `openx` openx.com, `sovrn` lijit.com, `smartadserver`
smartadserver.com, `triplelift` triplelift.com, `sharethrough` sharethrough.com, `gumgum`
gumgum.com, `teads` teads.tv, `yieldmo` yieldmo.com, `onetag` onetag.com, `richaudience`
richaudience.com, `improvedigital` improvedigital.com, `amx` amxrtb.com, `medianet` media.net.
Any other bidder is listed as *Unknown ad system — ask the partner*.

**The live check** counts a known bidder's system as missing when the publisher's file has no
record for that domain at all, and shows it under **Missing from the live file** as *Any line
from Adform (adform.com)*. A record you did not paste still satisfies it — the publisher may have
Adform's line from another seller.

## Caveats and exceptions

**A header-bidding partner is listed from the site's active tags only.** Switch a tag off and its
bidders drop out of the block and of the check.

The caveats that apply to every supply-chain setting — who can do this, what a seller ID change
touches, which line the network's own entry is — are on
[Supply chain, sellers.json and ads.txt: setup by scenario](https://epom.com/ad-server/docs/guides/inventory/supply-chain-ads-txt-setup.md#caveats-and-exceptions).

## Not working?

1. **The bid request carries no chain.** Where: the DSP partner's **Send supply chain** switch
   (**Admin → DSP partners → the partner**).
2. **The header-bidding tag carries no chain.** Where: both the White Label **Seller domain** and
   the site's **Seller ID** — the tag sends a chain only when both are filled in.
3. **A bidder reads *Unknown ad system — ask the partner*.** Where: its Prebid code is not in the
   mapped list above; ask the partner which ad system it sells under and for its line.

The causes of **Missing lines: N**, *File not found* and *Could not check* are on
[Supply chain, sellers.json and ads.txt: setup by scenario](https://epom.com/ad-server/docs/guides/inventory/supply-chain-ads-txt-setup.md#not-working).

## Reference

The terms (`asi`, `sid`, `complete`, `DIRECT`, `RESELLER`) are in the hub's
[Glossary](https://epom.com/ad-server/docs/guides/inventory/supply-chain-ads-txt-setup.md#glossary); every setting and its page in
[Where things live](https://epom.com/ad-server/docs/guides/inventory/supply-chain-ads-txt-setup.md#where-things-live). The tag-side settings:
[Header bidding settings](https://epom.com/ad-server/docs/guides/inventory/header-bidding-settings.md).

## Related

- [Supply chain, sellers.json and ads.txt: setup by scenario](https://epom.com/ad-server/docs/guides/inventory/supply-chain-ads-txt-setup.md)
- [Set up the network as a seller](https://epom.com/ad-server/docs/guides/inventory/supply-chain-ads-txt-setup-network.md)
- [Demand partners' ads.txt lines](https://epom.com/ad-server/docs/guides/inventory/supply-chain-ads-txt-setup-demand-partners.md)
- [Intermediary sites and CTV channels](https://epom.com/ad-server/docs/guides/inventory/supply-chain-ads-txt-setup-intermediary-and-ctv.md)
- [DSP partners](https://epom.com/ad-server/docs/guides/admin/dsp-partners.md)
- [Header bidding settings](https://epom.com/ad-server/docs/guides/inventory/header-bidding-settings.md)