> ## Documentation Index
> Fetch the complete documentation index at: https://agenticadvertisingorg-snap-format-preview-links.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Broadcast TV

> Broadcast TV ad formats in AdCP define spot file delivery, creative identifier integration, and measurement maturation windows for linear television.

This guide covers how AdCP represents broadcast television (linear TV) advertising — traditional over-the-air, cable, and satellite television spots.

Broadcast TV differs from CTV in fundamental ways: there is no ad server, no VAST tags, no impression pixels, and no clickthrough URLs. A broadcast spot is a video file delivered to a station and played during a scheduled avail. Measurement comes from panel data and set-top box telemetry, not from pixel fires.

The protocol-level operations (`list_creative_formats`, `build_creative`, `sync_creatives`) work identically for broadcast as for any other format. The broadcast-specific details are in format definitions, asset requirements, and measurement models covered below.

## Metadata ownership in broadcast syndication

Linear broadcast carriage is not the same as web syndication. In web syndication, an embedding publisher can add its own context, decisioning, and audience layer around another party's content. In linear broadcast, an affiliate or station usually carries a scheduled asset under the originating seller's order; it does not fork or materially transform the creative.

That distinction keeps AdCP metadata simple:

* The creative record stays singular and stable. Use `creative_id` plus `industry_identifiers` for the canonical asset and traffic identity.
* Network, national, or rep-firm buys are usually one seller product with multi-market fulfillment, not a chain of per-affiliate AdCP instances.
* Local spot, station-group, and market-cleared syndication buys may be genuinely multi-seller. Each seller reports its own delivery; the buyer aggregates across sellers.
* Station, market, daypart, placement, and measurement-window differences belong in delivery reporting and product/package context, not by mutating the creative metadata.

When a single spot performs differently across markets or dayparts, preserve that difference as delivery signal. Do not merge it into one evolving creative metadata object.

## How broadcast differs from CTV

|                   | Broadcast                                                              | CTV                                      |
| ----------------- | ---------------------------------------------------------------------- | ---------------------------------------- |
| **Delivery**      | Spot file to station                                                   | VAST tag or SSAI muxed file              |
| **Tracking**      | No impression pixels                                                   | Pixel fires, VAST tracking events        |
| **Clickthrough**  | None (no interaction)                                                  | Clickthrough URL, QR codes               |
| **Measurement**   | Panel/STB data, arrives days later                                     | Server logs, real-time or near-real-time |
| **Creative ID**   | Industry identifier (usually Ad-ID, with market-specific alternatives) | Protocol creative\_id                    |
| **Financial ref** | Agency Estimate Number                                                 | PO number                                |

## Format characteristics

Broadcast spots are:

* **Video files only** — H.264 or MPEG-4 HD, delivered as MP4 or MOV
* **Fixed durations** — :15, :30, and :60 are standard
* **No tracker assets** — No impression pixels, no VAST, no JavaScript
* **No interactive elements** — No clickthrough, no companion, no overlay
* **Identified by traffic/clearance ID** — Ad-ID, ISCI, Clearcast clock number, IDcrea, or another market-specific creative identifier that ties the spot to rotation instructions

## Standard broadcast formats

### :30 spot (standard)

```json theme={null}
{
  "$schema": "/schemas/core/format.json",
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org/",
    "id": "broadcast_spot_30s"
  },
  "name": "Broadcast TV Spot - 30 seconds",
  "description": "30-second broadcast television spot. H.264 HD video file delivered directly to station.",
  "type": "video",
  "assets": [
    {
      "item_type": "individual",
      "asset_id": "video_file",
      "asset_type": "video",
      "required": true,
      "requirements": {
        "min_duration_ms": 30000,
        "max_duration_ms": 30000,
        "containers": ["mp4", "mov"],
        "codecs": ["h264"],
        "min_width": 1920,
        "max_width": 1920,
        "min_height": 1080,
        "max_height": 1080,
        "min_bitrate_kbps": 15000,
        "frame_rates": [29.97, 30],
        "frame_rate_type": "constant",
        "scan_type": "progressive",
        "gop_type": "closed",
        "min_gop_interval_seconds": 1,
        "max_gop_interval_seconds": 2,
        "audio_required": true,
        "audio_codecs": ["aac", "pcm"],
        "audio_sample_rates": [48000],
        "audio_channels": ["stereo"],
        "loudness_lufs": -24,
        "loudness_tolerance_db": 2,
        "true_peak_dbfs": -2
      }
    },
    {
      "item_type": "individual",
      "asset_id": "captions_file",
      "asset_type": "url",
      "required": false,
      "requirements": {
        "description": "Closed captions file (SRT or WebVTT)"
      }
    }
  ]
}
```

The :15 and :60 formats are identical except for `min_duration_ms` and `max_duration_ms`. All three are available in the reference agent as `broadcast_spot_15s`, `broadcast_spot_30s`, and `broadcast_spot_60s`.

### What is absent

Broadcast formats deliberately exclude assets that exist in CTV and digital video formats:

* No `impression_tracker` — there is no pixel to fire on a television
* No `vast_tag` — stations play files, not VAST XML
* No `click_url` — there is no clickthrough on a TV screen
* No `overlay_html` — no interactive overlay capability
* No `companion_image` — no companion banner slot

### Third-party tracker support

Whether a creative format supports third-party tracking is determined by whether the format defines a tracker asset slot. Broadcast formats have no `impression_tracker` or `tracker_pixel` asset — a buyer agent inspecting the format's `assets` array can confirm this. Digital and CTV formats include optional tracker slots; broadcast formats do not.

A buyer agent that requires third-party measurement (DoubleVerify viewability, IAS brand safety) should check the format's assets before assigning creatives. If no tracker slot exists, those measurement vendors cannot instrument the creative. Measurement for broadcast comes from panel and set-top box data through the measurement vendor declared in `billing_measurement`, not from creative-level pixels.

## Creative identifier integration

AdCP separates its protocol `creative_id` from the creative identifier used by traffic, clearance, and broadcast operations. Put Ad-ID, ISCI, Clearcast clock number, IDcrea, or another market-specific code in `industry_identifiers`.

Ad-ID is common for US television workflows and is often represented as a 12-character alphanumeric code (4-character company prefix + 8-character unique identifier). Other markets and legacy traffic systems use different identifiers. The protocol should preserve the identifier the workflow already uses rather than forcing every broadcaster or agency into Ad-ID.

Industry identifiers serve two purposes in broadcast:

1. **Asset identification** — uniquely identifies the spot across all systems
2. **Rotation instructions** — when a buy has multiple creatives, the identifier tells the station which spot to run in which window

### Creative with industry identifier

```json theme={null}
{
  "creative_id": "nova_spring_broadcast_30s",
  "name": "Nova Spring Campaign :30",
  "industry_identifiers": [
    { "type": "ad_id", "value": "NOVA1234000H" }
  ],
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org/",
    "id": "broadcast_spot_30s"
  },
  "assets": {
    "video_file": {
      "url": "https://cdn.nova-brands.example/broadcast/spring_30s_1080p.mp4",
      "width": 1920,
      "height": 1080,
      "duration_ms": 30000,
      "container_format": "mp4",
      "video_codec": "h264",
      "video_bitrate_kbps": 15000,
      "frame_rate": "29.97",
      "frame_rate_type": "constant",
      "gop_type": "closed",
      "gop_interval_seconds": 2,
      "has_audio": true,
      "audio_codec": "aac",
      "audio_sampling_rate_hz": 48000,
      "audio_channels": "stereo",
      "audio_loudness_lufs": -24,
      "audio_true_peak_dbfs": -2
    }
  }
}
```

When the same source creative has different cuts (:15 and :30), each cut gets its own traffic identifier. Use `industry_identifiers` on the manifest level to assign distinct Ad-IDs, ISCI codes, clock numbers, or IDcrea values per format version.

### Supported identifier types

| Type              | Description                                                                                                 |
| ----------------- | ----------------------------------------------------------------------------------------------------------- |
| `ad_id`           | Ad-ID registry code, common in US television and accepted by some audio workflows                           |
| `isci`            | Industry Standard Coding Identification, still used in legacy traffic systems and broadcast radio workflows |
| `clearcast_clock` | UK Clearcast clock number                                                                                   |
| `idcrea`          | France ARPP.PUB IDcrea identifier for post-transition creative IDs                                          |

If a broadcast workflow depends on another shared identifier scheme, add it to `creative-identifier-type` by PR with evidence that the scheme is used across multiple participants. Do not use `industry_identifiers` for seller-local traffic codes.

## Agency Estimate Number

The Agency Estimate Number is the financial reference that ties a broadcast order to the agency's media plan. It originates from the agency's billing system and must travel with the order through the transaction lifecycle.

In AdCP, the estimate number appears on the media buy and optionally on individual packages:

```json theme={null}
{
  "account": { "brand": { "domain": "nova-brands.example" } },
  "brand": { "domain": "nova-brands.example" },
  "po_number": "PO-2026-1847",
  "agency_estimate_number": "EST-2026-04821",
  "start_time": "2026-04-01T00:00:00Z",
  "end_time": "2026-06-30T23:59:59Z",
  "packages": [
    {
      "product_id": "onx-prime-30s",
      "budget": 50000,
      "pricing_option_id": "cpm_guaranteed"
    }
  ]
}
```

When different packages within a buy correspond to different agency estimates (different flights or stations), the package-level `agency_estimate_number` overrides the buy-level value.

## Measurement windows

Broadcast measurement matures over time as time-shifted (DVR) viewing accumulates. This is fundamentally different from digital measurement, where data is available in real-time or near-real-time.

### Standard windows

| Window | Duration | Description                           |
| ------ | -------- | ------------------------------------- |
| `live` | 0 days   | Real-time viewers only                |
| `c3`   | 3 days   | Live + 3 days of time-shifted viewing |
| `c7`   | 7 days   | Live + 7 days of time-shifted viewing |

### How it works

1. A spot airs on March 1
2. The measurement vendor (VideoAmp, Nielsen, Comscore) collects data from set-top boxes, smart TV ACR, and panels
3. Data is deduplicated across sources and delivered \~15 days after broadcast
4. The C7 window (live + 7 days DVR) is typically the guarantee basis for reconciliation

Sellers declare available measurement windows on their products:

```json theme={null}
{
  "reporting_capabilities": {
    "available_reporting_frequencies": ["daily"],
    "expected_delay_minutes": 1440,
    "timezone": "America/New_York",
    "supports_webhooks": true,
    "available_metrics": ["impressions", "spend"],
    "date_range_support": "date_range",
    "measurement_windows": [
      {
        "window_id": "live",
        "description": "Live broadcast impressions only",
        "duration_days": 0,
        "expected_availability_days": 15,
        "is_guarantee_basis": false
      },
      {
        "window_id": "c3",
        "description": "Live plus 3 days of time-shifted viewing",
        "duration_days": 3,
        "expected_availability_days": 18,
        "is_guarantee_basis": false
      },
      {
        "window_id": "c7",
        "description": "Live plus 7 days of time-shifted viewing",
        "duration_days": 7,
        "expected_availability_days": 22,
        "is_guarantee_basis": true
      }
    ]
  }
}
```

Buyers reference the guarantee basis window in measurement terms:

```json theme={null}
{
  "measurement_terms": {
    "billing_measurement": {
      "vendor": { "domain": "videoamp.com" },
      "measurement_window": "c7",
      "max_variance_percent": 10
    }
  }
}
```

## Related documentation

* [CTV and connected TV](/docs/creative/channels/ctv) — CTV format specs, SSAI/CSAI delivery, VAST tag generation
* [Video ads](/docs/creative/channels/video) — Video format specs, codecs, and encoding details
* [Accountability](/docs/media-buy/advanced-topics/accountability) — Performance standards, measurement terms, makegood policy
* [Optimization and reporting](/docs/media-buy/media-buys/optimization-reporting) — Delivery reporting, delayed data, reconciliation
* [Creative manifests](/docs/creative/creative-manifests) — Manifest structure and asset specifications
