# CTV Content Metadata

Source: https://docs.ezoic.com/docs/ctv/content-metadata/


CTV buyers buy context: what the show is, its genre and length, and whether it is live. Some large CTV buyers require content signals and skip requests that lack them. If your catalog has this data, send it.

## Priority order

**Tier 1, brand-safety keys. Send these always:**

| Parameter | Example | Why |
|---|---|---|
| `content_cat` | `IAB1-7` | IAB content category. The main brand-safety filter. |
| `content_len` | `310` | Duration in seconds. Buyers will not run a 2-minute spot against a 90-second clip. |

**Tier 2, required by some major buyers. Send these when you have them:**

| Parameter | Example | Notes |
|---|---|---|
| `content_id` | `abc123` | Your stable content identifier. |
| `content_title` | `How It's Made: Glass` | |
| `content_genre` | `Documentary` | Free-text genre. |
| `content_rating` | `TV-PG` | Required by some of the largest CTV buyers. |
| `livestream` | `0` | See the rules below. |
| `content_language` | `en` | ISO-639-1. |

**Tier 3, completeness for episodic and network content:**

| Parameter | Example |
|---|---|
| `content_series` | `How It's Made` |
| `content_episode` and `content_season` | `7` and `2` |
| `content_url` | Public watch-page URL |
| `content_prodq` | `1` professional, `2` prosumer, `3` user-generated |
| `content_channel` and `content_channel_domain` | `Example Channel` and `example.com` |
| `content_network` and `content_network_domain` | `Example Network` and `network.example.com` |

## `livestream`: get this right

`livestream=1` means the content is live at the moment of the impression. Everything else is `0`:

- Video on demand: `0`.
- A recorded replay of something that once streamed live: `0`.
- A live event, linear feed or 24/7 stream while it is airing: `1`.

Buyers price and measure live inventory differently. Labelling replays as live misrepresents the inventory, and it harms buyer trust in all your inventory, not only the mislabelled requests. When in doubt, send `0`.

## IAB categories

- Use IAB Content Taxonomy codes, for example `IAB1` for Arts and Entertainment, `IAB1-7` for Television or `IAB17` for Sports. Send several as a CSV, for example `content_cat=IAB1,IAB1-7`.
- Include the parent category with the subcategory. Some buyers match only at parent level.
- Map your internal categories once, in your catalog, and send the output per title. Do not guess per request in player code.
- The same codes work at app level through `app_cat`. `app_cat` describes the app as a whole, and `content_cat` describes the specific title.

## Where to put this in your integration

Content metadata belongs in your feed or catalog pipeline, not hand-built in player code. Your CMS already has the title, duration, category, series and rating. Emit them into the object your player uses to build the tag URL.

Some deep links and autoplay flows start playback before full metadata loads. Send what you have rather than delaying the ad request. If your architecture lets you fetch the context first, the fill is better with the full set.

URL-encode every value. Titles contain spaces, colons and non-ASCII characters.

## Example

```
&content_id=qszC-b8ZAcVI
&content_title=Restoring%20a%201962%20Example%20Guitar
&content_series=Guitar%20Restorations
&content_genre=Documentary
&content_cat=IAB1,IAB1-7
&content_len=1147
&content_language=en
&content_rating=TV-G
&content_prodq=2
&livestream=0
```

