Browse the help center

Intermediary sites and CTV channels

Scenarios 5 and 7 of the supply-chain setup — a site that is itself a reseller (Seller type Intermediary, Confidential), test sites kept out of sellers.json, and a CTV channel whose SSAI stitcher passes its chain on your VAST tag — with the sellers.json entry, the complete or incomplete schain and the RESELLER line each produces.

How-to network manager admin publisher Account → Publishers → site → Basic info → Supply chain

What it is and why

A site’s Seller type tells buyers whether you sell it as its publisher or as a reseller. An Intermediary site is paired with RESELLER in ads.txt, and the chain sent for it admits that a seller before you exists: it stays incomplete until that seller’s chain reaches your tag — the CTV case, where a stitcher passes it on. The one-time network setup is on Set up the network as a seller.

Example. The FAST channel Harbor TV reaches smart-TV apps through its inventory partner Channel Partner, whose stitcher calls your VAST tag with schain=1.0,1!channel-partner.example,cp-42,1. With the site set to Intermediary, DSPs receive a two-node chain — the partner’s node, then yours (adnetwork.example, nw-ht-11) — marked complete: 1. Bought by an insertion order with no chain on the tag, the same site sends your node alone, marked complete: 0.

Typical scenarios

You sell…SetThen read
A site that is itself a reseller, or a staging site to keep outSeller type Intermediary (+ Confidential); List in sellers.json off for test sitesScenario 5
A CTV channel whose stitcher calls your VAST tagSeller type Intermediary + the stitcher on the video placement, so its schain reaches buyers with your node appendedScenario 7

Step by step

Scenario 5: an intermediary publisher, and sites kept out

Intermediary. A site Harbor Point Exchange is itself a reseller. Set Seller type = Intermediary (or Both if it also owns inventory). To hide its name in sellers.json, tick Confidential:

{ "seller_id": "nw-hp-07", "is_confidential": 1, "seller_type": "INTERMEDIARY" }

The schain node is the same shape as scenario 1 with "sid": "nw-hp-07", but the chain is sent with "complete": 0, in bid requests and header-bidding tags alike: a seller before you exists and the request does not name it. Pass that seller’s chain on the ad tag to complete it (scenario 7); a header-bidding tag cannot carry one.

ads.txt: buyers pair an INTERMEDIARY entry with RESELLER, so the site’s block names you as a reseller — northwind-ads.example, nw-hp-07, RESELLER — and the live check looks for that line. A Both site keeps DIRECT, which buyers accept for BOTH as they accept RESELLER.

Test and internal sites. Leave List in sellers.json off. Sites start unlisted, so a staging site never reaches the file. With the file on and no site listed, sellers.json is still a valid file with an empty sellers list.

Scenario 7: a CTV channel sold through a stitcher

A FAST channel Harbor TV reaches smart-TV apps through its inventory partner Channel Partner, whose SSAI stitcher (here SpringServe) calls your VAST tag. Set the site’s Seller type = Intermediary (a chain on the tag is ignored on a Publisher site). On the video placement set Server-side ad insertion = SpringServe (Magnite) (see Video behind server-side ad insertion); the tag then carries schain={{SCHAIN}}, and SpringServe fills in the chain it received:

schain=1.0,1!channel-partner.example,cp-42,1

DSPs receive that chain with your node appended:

{ "ver": "1.0", "complete": 1,
  "nodes": [
    { "asi": "channel-partner.example", "sid": "cp-42", "hp": 1 },
    { "asi": "adnetwork.example", "sid": "nw-ht-11", "hp": 1 }
  ] }

The app lists the partner in its app-ads.txt (INVENTORYPARTNERDOMAIN=channel-partner.example), and the partner’s file lists you as its reseller: adnetwork.example, nw-ht-11, RESELLER. That is also the line the site’s block asks for, since the own line of an Intermediary site is RESELLER (scenario 5).

Bought by an IO, no chain on the tag. When you buy the channel directly by an insertion order and the tag brings no chain, the same Intermediary seller type makes the request say honestly that the chain is incomplete:

{ "ver": "1.0", "complete": 0,
  "nodes": [ { "asi": "adnetwork.example", "sid": "nw-ht-11", "hp": 1 } ] }

Many buyers bid less on an incomplete chain, or not at all. The lasting fix is outside the platform: the channel lists you in its app-ads.txt as a reseller, or passes its chain on the tag.

Caveats and exceptions

Stitcher macros and schain. MediaTailor and Brightcove fill schain only from what the player passes to the stitcher’s session, and the IAB and Google DAI macro sets have none. Without it the request falls back to the chain without upstream nodes.

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.

Not working?

  1. The chain on the tag is not passed on. Where: the site’s Seller type — a chain on the tag is ignored on a Publisher site; set Intermediary.
  2. Buyers receive complete: 0. Where: the tag — an Intermediary site sends an incomplete chain until the seller before you passes its chain on the tag (a header-bidding tag cannot carry one), or lists you as a reseller in its app-ads.txt.
  3. The site’s block asks for a RESELLER line, not DIRECT. Where: the Seller type — that is the own line of an Intermediary site; a Both site keeps DIRECT.

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.

Reference

The terms (complete, RESELLER, INVENTORYPARTNERDOMAIN) are in the hub’s Glossary; every setting and its page in Where things live. The stitcher settings and the schain macro: Video behind server-side ad insertion (SSAI).

Related pages

Please disable Adblock
Are you using adblock? Disable it and reload the page to proceed to the destination page.

A registration has already been submitted from this page. Please try again in 10 minutes.