> ## Documentation Index
> Fetch the complete documentation index at: https://docs.adcontextprotocol.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Migrating channels

> Migrate AdCP channels from v2 to v3. Maps v2's 9 format-oriented channels to v3's 20 planning-oriented media channels with field-by-field examples.

# Migrating channels

AdCP 3.0 replaces v2's 9 channels with 20 planning-oriented channels that reflect how buyers allocate budgets. Five channels carry over unchanged, the rest are split, removed, or renamed, and several channels — including `sponsored_intelligence` for AI surfaces — are net-new in v3 with no v2 equivalent.

## Why the channel model changed

v2 mixed format-oriented channels (`video`, `audio`, `native`) with planning-oriented ones (`social`, `ctv`, `dooh`). Buyers don't plan budgets around rendering technology — they plan around media types. A video budget gets split between OLV, CTV, and cinema. An audio budget spans radio, streaming, and podcasts.

v3 channels consistently match how agencies structure media plans.

## Channel mapping

| v2 channel | v3 channel(s) | Notes |
| - | - | - |
| `display` | `display` | Unchanged |
| `video` | `olv`, `linear_tv`, `cinema` | Split by distribution (`ctv` was already separate in v2) |
| `audio` | `radio`, `streaming_audio` | Split by distribution (`podcast` was already separate in v2) |
| `native` | Removed | Use format-level properties instead |
| `social` | `social` | Unchanged |
| `ctv` | `ctv` | Unchanged |
| `podcast` | `podcast` | Unchanged |
| `dooh` | `dooh` | Unchanged |
| `retail` | `retail_media` | Renamed for clarity |

## Complete v3 channel enum

All 20 values from the `channels.json` schema:

```
display, olv, social, search, ctv, linear_tv,
radio, streaming_audio, podcast, dooh, ooh,
print, cinema, email, gaming, retail_media,
influencer, affiliate, product_placement,
sponsored_intelligence
```

| Channel | Description |
| - | - |
| `display` | Digital display advertising (banners, native, rich media) across web and app |
| `olv` | Online video advertising outside CTV (pre-roll, outstream, in-app video) |
| `social` | Social media platforms |
| `search` | Search engine advertising and search networks |
| `ctv` | Connected TV and streaming on television screens |
| `linear_tv` | Traditional broadcast and cable television |
| `radio` | Traditional AM/FM radio broadcast |
| `streaming_audio` | Digital audio streaming services |
| `podcast` | Podcast advertising (host-read or dynamically inserted) |
| `dooh` | Digital out-of-home buying context, including venue-operated screens and audio players |
| `ooh` | Classic out-of-home (physical billboards, transit, etc.) |
| `print` | Newspapers, magazines, and other print publications |
| `cinema` | Movie theater advertising |
| `email` | Email advertising and sponsored newsletter content |
| `gaming` | In-game advertising across platforms (intrinsic in-game, rewarded video, playable ads) |
| `retail_media` | Retail media networks and commerce marketplaces |
| `influencer` | Creator and influencer marketing partnerships |
| `affiliate` | Affiliate networks, comparison sites, and performance-based partnerships |
| `product_placement` | Product placement, branded content, and sponsorship integrations |
| `sponsored_intelligence` | Sponsored Intelligence — advertising within AI assistants, AI search, and generative AI experiences via the reversed data flow (net-new in v3; no v2 equivalent) |

> [!NOTE]
>
> The `gaming` channel covers all in-game advertising. Rewarded video in gaming apps could also be classified as `olv` — use `gaming` when the inventory comes from a gaming budget, `olv` when it comes from a video budget.

## Migrating `video` products

The v2 `video` channel must be split across 3 v3 channels based on distribution (`ctv` was already a separate v2 channel):

* **`olv`** — Online video (web, mobile app, social): pre-roll, outstream, in-app video
* **`linear_tv`** — Traditional broadcast and cable television
* **`cinema`** — Movie theater pre-show advertising

A single publisher may support multiple channels. A streaming service might declare both `olv` and `ctv` if their inventory serves both mobile and TV.

## Migrating `audio` products

The v2 `audio` channel splits into 2 v3 channels (`podcast` was already a separate v2 channel):

* **`radio`** — Traditional AM/FM radio broadcast
* **`streaming_audio`** — Digital audio streaming services (music platforms)

## Migrating `native` products

v3 removes `native` as a channel. Native is a rendering style, not a budget category.

If you have products tagged `native` in v2, assign the appropriate v3 channel based on how the budget is planned:

* Native display ads -> `display`
* Native social ads -> `social`
* Native content recommendations -> `display` or `affiliate` depending on model

## Migrating `retail` products

Simple rename from `retail` to `retail_media`.

## Multi-channel products

v3 products declare an array of channels, so a single product can span multiple channels. Here's a capabilities response showing a seller that supports multiple channels:

```json theme={null}
{
  "$schema": "https://adcontextprotocol.org/schemas/3.3.0-beta.0/protocol/get-adcp-capabilities-response.json",
  "status": "completed",
  "adcp": {
    "major_versions": [3],
    "idempotency": { "supported": true, "replay_ttl_seconds": 86400 }
  },
  "supported_protocols": ["media_buy"],
  "account": {
    "supported_billing": ["operator", "agent"],
    "supported_account_currency_modes": ["fixed", "per_media_buy"]
  },
  "media_buy": {
    "portfolio": {
      "primary_channels": ["display", "olv", "ctv"],
      "publisher_domains": ["pinnaclemedia.example.com"],
      "primary_countries": ["US"]
    }
  }
}
```

When products are returned from `get_products`, each product's `channels` array declares which channels that product is sold as:

```json theme={null}
{
  "channels": ["olv", "ctv"]
}
```

## Preparing product channels for 4.0

[`Product.channels` is proposed to become required in 4.0](https://github.com/adcontextprotocol/adcp/issues/7869), with at least one value from the existing `MediaChannel` enum. The 3.x schemas still accept omitted or empty arrays, and the existing property-based inheritance remains unchanged. Sellers SHOULD populate an explicit nonempty declaration on every product now.

For each product, declare the channels in which that inventory is sold. Use `ctv` for connected TV, `olv` for online video, and the relevant audio channels such as `radio`, `streaming_audio`, or `podcast`. A product sold in multiple buying contexts declares all applicable values. Product channels SHOULD be a subset of the union of their properties' `supported_channels`.

Do not derive the declaration from creative format alone: a VAST video format can serve both `ctv` and `olv`. Do not copy a seller-wide channel list onto every product; a seller can sell different channels on different products.

Format options keep optional `applies_to_channels` as a narrowing of the product declaration. Every listed value must belong to the product's `channels`. When the narrowing is omitted, the format option applies to all channels declared on that product. It does not independently declare the product's channels.

Buyers reading 3.x products should request `channels` in any `fields` projection before classifying products. Omission from a projection that did not request the field does not establish that the seller omitted its declaration. Existing 3.x property-based inheritance remains supported; this preparation does not replace it with automatic exclusion from discovery or proposal routing. Omission is not a wildcard for every channel in the taxonomy. Declared channels describe buying contexts, not independent evidence of actual delivery or per-channel totals.

The proposed 4.0 change would require an explicit nonempty declaration on the product, removing reliance on omission-based inheritance. Its treatment of missing channel details and sparse projections needs to be specified as part of that change. Buyers that also read 3.x responses still need to preserve the 3.x compatibility behavior.

## Declaring channel support in capabilities

Buyers should call `get_adcp_capabilities` before filtering `get_products`
requests. When present, `portfolio.primary_channels` is the seller's complete
brief-routing channel allowlist, so a buyer may skip the seller when no requested
channel intersects it. Omission means unknown scope, not support for every
channel. A match is not an availability guarantee; call `get_products` to
resolve current inventory and the rest of the brief.

AdCP 3.2 applies the same exhaustive routing meaning to
`portfolio.primary_countries`. Sellers upgrading from 3.1 that populated either
`primary_*` array with only representative values MUST expand it to the complete
brief-routing scope or omit it until they can do so. Empty and duplicate arrays
remain wire-valid in 3.2 for compatibility but produce Canary advisories; 4.0 is
expected to require non-empty, unique declarations. The country array does not
replace `media_buy.execution.targeting` geo capabilities or product
`overlay_support`.

## Migration steps

**1. Audit channel usage**

Find all places your code reads or writes channel values.

**2. Map old to new**

Use the mapping table above to convert each value. Note that `display`, `social`, `ctv`, `podcast`, and `dooh` are unchanged.

**3. Handle multi-mapping**

Where v2 `video` or `audio` maps to multiple v3 channels, classify each product by its distribution context.

**4. Update filters**

If your buyer agent filters by channel, update to the new values.

**5. Update capabilities**

Implement `get_adcp_capabilities` with correct channel declarations.

**6. Test validation**

v3 schema validation will reject old channel values like `video`, `audio`, `native`, and `retail`.

> **[Media channel taxonomy](/dist/docs/3.3.0-beta.0/reference/media-channel-taxonomy)**
>
> Full definitions and design rationale for all 20 v3 channels.

***

**Related:** [Pricing](/dist/docs/3.3.0-beta.0/reference/migration/pricing) | [Geo targeting](/dist/docs/3.3.0-beta.0/reference/migration/geo-targeting) | [Creatives](/dist/docs/3.3.0-beta.0/reference/migration/creatives) | [Catalogs](/dist/docs/3.3.0-beta.0/reference/migration/catalogs) | [Attribution](/dist/docs/3.3.0-beta.0/reference/migration/attribution) | [AdCP 3.0 overview](/dist/docs/3.3.0-beta.0/reference/whats-new-in-v3)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.