---
title: "Intermediary sites and CTV channels"
description: "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."
type: "howto"
audience: [network-manager, admin, publisher]
keywords: [intermediary, Seller type, Both, Confidential, is_confidential, complete 0, incomplete chain, RESELLER, test sites, List in sellers.json, CTV, FAST channel, SSAI, stitcher, SpringServe, schain macro, app-ads.txt, INVENTORYPARTNERDOMAIN, IO deal, insertion order]
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.

# Intermediary sites and CTV channels

## 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](https://epom.com/ad-server/docs/guides/inventory/supply-chain-ads-txt-setup-network.md).

**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… | Set | Then read |
|---|---|---|
| A site that is itself a **reseller**, or a staging site to keep out | **Seller type** *Intermediary* (+ **Confidential**); **List in sellers.json** off for test sites | [Scenario 5](#scenario-5-an-intermediary-publisher-and-sites-kept-out) |
| A **CTV channel** whose stitcher calls your VAST tag | **Seller type** *Intermediary* + the stitcher on the video placement, so its `schain` reaches buyers with your node appended | [Scenario 7](#scenario-7-a-ctv-channel-sold-through-a-stitcher) |

## 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**:

```json
{ "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](https://epom.com/ad-server/docs/guides/inventory/video-ssai.md)); the tag then carries
`schain={{SCHAIN}}`, and SpringServe fills in the chain it received:

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

DSPs receive that chain with your node appended:

```json
{ "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:

```json
{ "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](https://epom.com/ad-server/docs/guides/inventory/supply-chain-ads-txt-setup.md#caveats-and-exceptions).

## 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](https://epom.com/ad-server/docs/guides/inventory/supply-chain-ads-txt-setup.md#not-working).

## Reference

The terms (`complete`, `RESELLER`, `INVENTORYPARTNERDOMAIN`) 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 stitcher settings and
the `schain` macro: [Video behind server-side ad insertion (SSAI)](https://epom.com/ad-server/docs/guides/inventory/video-ssai.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)
- [Supply chain for DSPs and header bidding](https://epom.com/ad-server/docs/guides/inventory/supply-chain-ads-txt-setup-dsp-and-header-bidding.md)
- [Demand partners' ads.txt lines](https://epom.com/ad-server/docs/guides/inventory/supply-chain-ads-txt-setup-demand-partners.md)
- [Video behind server-side ad insertion (SSAI)](https://epom.com/ad-server/docs/guides/inventory/video-ssai.md)
- [Supply chain and sellers.json](https://epom.com/ad-server/docs/guides/inventory/supply-chain-and-sellers-json.md)