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
IAB1for Arts and Entertainment,IAB1-7for Television orIAB17for Sports. Send several as a CSV, for examplecontent_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_catdescribes the app as a whole, andcontent_catdescribes 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