Documentation Index
Fetch the complete documentation index at: https://adcp-docs-ja.pier1.co.jp/llms.txt
Use this file to discover all available pages before exploring further.
商品は、3つの独立した軸に沿ってインベントリを表現します:
- パブリッシャープロパティ — 広告が配信される場所(youtube.com、spotify.com)
- 番組/エピソード — 広告が挿入されるコンテンツ(特定のシリーズとその各回)
- プレースメント — 広告が表示されるポジション(プレロール、ミッドロール、ホストリード)
番組とプレースメントは並列なディメンションであり、階層関係ではありません。「プレロール」はポジションで、「Pinnacle Challenge」はコンテンツです。商品はそれらを組み合わせる:「Acme Streaming の Pinnacle Challenge でのプレロール」。
show オブジェクト
番組(show)は、時間をかけてエピソードを生み出す継続的なコンテンツプログラムです。番組はプロパティと同じように機能する — パブリッシャーが adagents.json で宣言し、商品は publisher_domain と show_ids を持つ shows セレクターで参照します。
| フィールド | 型 | 必須 | 説明 |
|---|
show_id | string | Yes | パブリッシャーが割り当てる識別子。パブリッシャーの adagents.json で宣言されます。商品は shows セレクターで番組を参照します。クロスセラーマッチングには配信識別子を使うこと。 |
name | string | Yes | 人間が読める番組名 |
description | string | No | 番組の内容 |
genre | string[] | No | ジャンルタグ。genre_taxonomy が存在する場合、値はタクソノミーID(例:IAB Content Taxonomy 3.0)。それ以外は自由形式。 |
genre_taxonomy | string | No | ジャンル値のタクソノミーシステム(例:iab_content_3.0)。機械可読なブランドセーフティのために推奨。 |
language | string | No | 主要言語(BCP 47) |
content_rating | object | No | 基準レーティング:system + rating。システム:tv_parental、mpaa、podcast、esrb、bbfc、fsk、acb、custom。エピソードで上書き可能。 |
cadence | string | No | daily、weekly、seasonal、event、irregular |
season | string | No | 現在またはもっとも最近のシーズン識別子(例:"3"、"2026") |
status | string | No | active、hiatus、ended、upcoming |
production_quality | string | No | professional、prosumer、ugc。セラー申告。OpenRTB の content.prodq に対応。 |
talent | array | No | ホスト、レギュラーキャスト、クリエイター。各エントリは role、name、および brand.json へのリンクとなるオプションの brand_url を持ちます。 |
special | object | No | 存在する場合、この番組は特番 — 現実世界のイベントやシーンに紐付いたコンテンツ。特番とリミテッドシリーズを参照。 |
limited_series | object | No | 存在する場合、この番組はリミテッドシリーズ — 定義されたアークと終了日を持つ有限の放送。特番とリミテッドシリーズを参照。 |
distribution | array | No | この番組が配信されている場所と、パブリッシャーごとのプラットフォーム固有識別子。 |
related_shows | array | No | 他の番組との関係:spinoff、companion、sequel、prequel、crossover。各エントリは show_id + relationship を持ちます。参照は同じパブリッシャーの adagents.json 内にスコープされます。対称型(companion、crossover)は両方の番組が宣言する必要はない。 |
{
"$schema": "https://adcontextprotocol.org/schemas/latest/core/show.json",
"show_id": "pinnacle_challenge",
"name": "The Pinnacle Challenge",
"description": "Competition reality show with extreme physical and mental challenges",
"genre": ["IAB1", "IAB1-6"],
"genre_taxonomy": "iab_content_3.0",
"language": "en",
"content_rating": {
"system": "tv_parental",
"rating": "TV-PG"
},
"cadence": "weekly",
"season": "1",
"status": "active",
"production_quality": "professional",
"talent": [
{
"role": "host",
"name": "Jordan Vega",
"brand_url": "https://jordanvega.example.com/brand.json"
}
],
"distribution": [
{
"publisher_domain": "youtube.com",
"identifiers": [
{ "type": "youtube_channel_id", "value": "UCexample123456" }
]
},
{
"publisher_domain": "acmestreaming.example.com",
"identifiers": [
{ "type": "imdb_id", "value": "tt9876543" }
]
}
]
}
episode オブジェクト
エピソードは番組の特定の回です。すべてのエピソードが事前にわかるとは限らない — 週次ポッドキャストは翌週のエピソードしかスケジュールされていないかもしれないし、一部のエピソードは暫定的(プレーオフ第7戦は第6戦の結果次第)なこともあります。
| フィールド | 型 | 必須 | 説明 |
|---|
episode_id | string | Yes | 番組内の一意識別子 |
show_id | string | 必要な場合 | 親番組。商品が複数の番組にまたがる場合に必須。 |
name | string | No | エピソードタイトル |
season | string | No | シーズン識別子(例:"1"、"2026") |
episode_number | string | No | シーズン内のエピソード番号 |
scheduled_at | datetime | No | エピソードの放送または公開日時 |
status | string | No | scheduled、tentative、live、postponed、cancelled、aired、published |
duration_seconds | integer | No | 想定される尺 |
flexible_end | boolean | No | 終了時刻が概算かどうか(ライブイベント) |
valid_until | datetime | No | このデータの有効期限。暫定エピソードに予算をコミットする前に、エージェントは再クエリすべきです。 |
content_rating | object | No | 存在する場合に番組の基準を上書きする |
topics | string[] | No | ブランドセーフティのためのエピソードレベルのコンテンツトピック。存在する場合は番組の genre_taxonomy を使用します。 |
special | object | No | エピソード固有のイベントコンテキスト。存在する場合、このエピソードは現実世界のイベントに紐付く。番組レベルの special を上書きします。 |
guest_talent | array | No | エピソード固有のゲスト。番組のレギュラー talent に追加されます。 |
ad_inventory | object | No | ブレークベースの広告インベントリ設定 |
derivative_of | object | No | このエピソードがフルエピソードから派生したクリップ、ハイライト、または要約である場合。episode_id + type(clip、highlight、recap、trailer、bonus)を持ちます。ソースの episode_id は同じレスポンス内になければなりません。 |
エピソードステータスのライフサイクル
| ステータス | 意味 |
|---|
scheduled | 確定済み、放送される |
tentative | 放送されない可能性がある(外部条件次第) |
live | 現在放送中またはライブストリーミング中 |
postponed | スケジュールされていたが将来の日付に延期された |
cancelled | 放送されない |
aired | 既に放送済み — バックカタログとリプレイインベントリ用 |
published | 既に公開済み — オンデマンドのキャッチアップインベントリ用 |
想定される遷移:scheduled または tentative → live → aired または published。scheduled エピソードは postponed(延期)または cancelled になる場合があります。postponed エピソードは再スケジュール時に scheduled に戻る。tentative エピソードは scheduled、cancelled、または postponed に解決されます。
番組からの継承
エピソードは上書きしない番組レベルのフィールドを継承します:
content_rating:エピソードの値が番組の基準を上書きします。存在しない場合は番組のレーティングが適用されます。
special:エピソードの値が番組レベルの special を上書きします。存在しない場合は番組の special が適用されます。通常の番組でもイベントに紐付いたエピソードを持てる(例:選挙夜特番のある日刊ニュース番組)。
guest_talent:番組のレギュラー talent に追加される — 置き換えではありません。
topics:ブランドセーフティのための追加コンテキストであり、番組の genre の代替ではありません。
バイヤーエージェントは両方のレベルを評価します:番組のベースラインがデフォルトのセーフティプロファイルを提供し、エピソードフィールドが特定の回を絞り込む。
{
"$schema": "https://adcontextprotocol.org/schemas/latest/core/episode.json",
"episode_id": "s1e03_the_wall",
"show_id": "pinnacle_challenge",
"name": "The Wall",
"season": "1",
"episode_number": "3",
"scheduled_at": "2026-04-07T20:00:00Z",
"status": "scheduled",
"duration_seconds": 3600,
"valid_until": "2026-04-06T20:00:00Z",
"content_rating": {
"system": "tv_parental",
"rating": "TV-14"
},
"topics": ["IAB17-18"],
"guest_talent": [
{
"role": "guest",
"name": "Samira Okafor",
"brand_url": "https://samiraokafor.example.com/brand.json"
}
],
"ad_inventory": {
"expected_breaks": 4,
"total_ad_seconds": 480,
"max_ad_duration_seconds": 120,
"unplanned_breaks": false,
"supported_formats": ["video", "audio"]
}
}
特番とリミテッドシリーズ
番組はバイヤーエージェントにその性質を伝えるオプションのアノテーションを持てる。これらは組み合わせ可能 — ある番組は特番かつリミテッドシリーズ(例:4話構成のオリンピックドキュメンタリー)になれる。
特番は現実世界のイベントやシーンに紐付いたコンテンツです。special オブジェクトは番組とエピソードの両方に付けられます。番組に付いている場合は番組全体がイベントに紐付くことを意味します。エピソードに付いている場合はそのエピソードがイベントに紐付くことを意味し(content_rating と同じ継承パターンに従い、存在する場合は番組レベルの special を上書きします)。
| フィールド | 型 | 必須 | 説明 |
|---|
name | string | Yes | イベントの名称(例:“Olympics 2028”、“Super Bowl LXI”) |
category | string | No | awards、championship、concert、conference、election、festival、gala、holiday、premiere、product_launch、reunion、tribute |
starts | datetime | No | イベントの開始日時 |
ends | datetime | No | イベントの終了日時。単日イベントの場合は省略します。 |
{
"$schema": "https://adcontextprotocol.org/schemas/latest/core/show.json",
"show_id": "apex_finals_2026",
"name": "Apex Championship Finals 2026",
"genre": ["IAB17", "IAB17-12"],
"genre_taxonomy": "iab_content_3.0",
"cadence": "event",
"status": "upcoming",
"special": {
"name": "Apex Championship Finals 2026",
"category": "championship",
"starts": "2026-05-18T19:00:00Z",
"ends": "2026-05-25T23:00:00Z"
},
"talent": [
{ "role": "host", "name": "Deshawn Moreaux" }
]
}
special フィールドは cadence とは別物です。cadence はリリース頻度を表す(event = 単発または散発的)。special オブジェクトはコンテンツを紐付ける現実世界のイベントと、それがいつ起きるかを表す — バイヤーエージェントがタイミングの関連性とプレミアム価格を評価するために必要な情報です。
リミテッドシリーズ
リミテッドシリーズは、定義されたアークを持つ有限のコンテンツ放送です。継続中のシリーズとは異なり、リミテッドシリーズには計画された終了があります。
| フィールド | 型 | 必須 | 説明 |
|---|
total_episodes | integer | No | 予定エピソード数 |
starts | datetime | No | シリーズの開始日時 |
ends | datetime | No | シリーズの終了日時 |
{
"$schema": "https://adcontextprotocol.org/schemas/latest/core/show.json",
"show_id": "ember_s3",
"name": "The Ember",
"description": "Award-winning drama following a chef navigating the pressure of running a top restaurant",
"genre": ["IAB1", "IAB1-7"],
"genre_taxonomy": "iab_content_3.0",
"cadence": "weekly",
"status": "active",
"limited_series": {
"total_episodes": 8,
"starts": "2026-02-28T21:00:00Z",
"ends": "2026-04-18T21:00:00Z"
}
}
これはバイヤーエージェントに The Ember が有限の機会 — 7週間で8エピソード — であることを伝える。limited_series フィールドは season とは別物です:シリーズはリミテッドでなくても season を持てる(継続中のシリーズも season を持つ)。リミテッドシリーズは番組に計画された終了があるという構造的なコミットメントです。
商品が番組を参照する方法
商品は shows — パブリッシャーの adagents.json で宣言された番組を指す {publisher_domain, show_ids} セレクターの配列 — を通じて番組を参照します。これは publisher_properties と同じパターンです。バイヤーはパブリッシャーの adagents.json から完全な番組オブジェクトを解決します。同じ番組の異なるエピソードをスコープする商品が存在し得るため、エピソードは商品ごとに episodes 配列で列挙されます。
ラン・オブ・ショー(特定のエピソードなし)
商品はエピソードを列挙せずに番組を参照できます。これは「フライト期間中に放送されるエピソードを問わず、この番組全体のインベントリ」を意味します:
{
"product_id": "pinnacle_run_of_show",
"name": "Pinnacle Challenge Run of Show",
"shows": [{ "publisher_domain": "acmestreaming.example.com", "show_ids": ["pinnacle_challenge"] }],
"placements": [
{ "placement_id": "pre_roll", "name": "Pre-roll" }
],
"delivery_type": "non_guaranteed",
"pricing_options": [
{ "pricing_option_id": "cpm", "pricing_model": "cpm", "floor_price": 25.00, "currency": "USD" }
]
}
特定のエピソード
プレミアムまたはギャランティードバイの場合、セラーは特定のエピソードにスコープします:
{
"product_id": "pinnacle_finale",
"name": "Pinnacle Challenge Season Finale Sponsorship",
"shows": [{ "publisher_domain": "acmestreaming.example.com", "show_ids": ["pinnacle_challenge"] }],
"episodes": [
{
"episode_id": "s1e10_finale",
"name": "The Grand Finale",
"scheduled_at": "2026-06-02T20:00:00Z",
"status": "scheduled",
"ad_inventory": {
"expected_breaks": 6,
"total_ad_seconds": 720,
"unplanned_breaks": false
}
}
],
"delivery_type": "guaranteed",
"pricing_options": [
{ "pricing_option_id": "flat", "pricing_model": "flat_rate", "fixed_price": 2000000, "currency": "USD" }
]
}
get_products レスポンス構造
商品は shows セレクターで番組を参照する — publisher_properties と同じパターンです。各セレクターは publisher_domain と、そのパブリッシャーの adagents.json で宣言された番組を指す show_ids 配列を持ちます。バイヤーは adagents.json から完全な番組オブジェクトを解決します。
{
"products": [
{
"product_id": "pinnacle_april_bundle",
"name": "Pinnacle Challenge April Sponsorship",
"shows": [{ "publisher_domain": "acmestreaming.example.com", "show_ids": ["pinnacle_challenge"] }],
"episodes": [
{
"episode_id": "s1e03",
"name": "The Wall",
"scheduled_at": "2026-04-07T20:00:00Z",
"status": "scheduled",
"content_rating": { "system": "tv_parental", "rating": "TV-14" },
"guest_talent": [{ "role": "guest", "name": "Samira Okafor" }],
"valid_until": "2026-04-06T20:00:00Z"
},
{
"episode_id": "s1e04",
"name": "TBD",
"scheduled_at": "2026-04-14T20:00:00Z",
"status": "tentative",
"valid_until": "2026-04-07T20:00:00Z"
}
],
"placements": [
{ "placement_id": "pre_roll", "name": "Pre-roll" },
{ "placement_id": "mid_roll", "name": "Mid-roll" }
],
"delivery_type": "guaranteed",
"pricing_options": [
{ "pricing_option_id": "flat", "pricing_model": "flat_rate", "fixed_price": 500000, "currency": "USD" }
]
}
]
}
番組の正規アイデンティティ
番組のアイデンティティは {publisher_domain, show_id} — adagents.json で宣言するパブリッシャーにスコープされます。つまり、番組クリエイターは自身が正規のレジストリとして機能できます。
クリエイターを正規パブリッシャーとして
MrBeast のようなクリエイターは mrbeast.com/adagents.json で番組を宣言します。そのクリエイターのインベントリをパッケージングするセラー — YouTube セールスハウス、CTV ディストリビューター、クリエイター自身のチーム — はすべて同じ正規ソースを参照します:
{
"products": [
{
"product_id": "beast_games_youtube",
"name": "Beast Games - YouTube Pre-roll",
"shows": [
{ "publisher_domain": "mrbeast.com", "show_ids": ["beast_games"] }
],
"publisher_properties": [
{ "publisher_domain": "youtube.com", "property_ids": ["UCX6OQ3DkcsbYNE6H8uQQuVA"] }
],
"delivery_type": "non_guaranteed",
"pricing_options": [
{ "pricing_option_id": "cpm", "pricing_model": "cpm", "floor_price": 18.00, "currency": "USD" }
]
}
]
}
バイヤーは、どのセラーやプラットフォームからインベントリが来ても、mrbeast.com + beast_games を目にします。IMDb IDや配信識別子のクロスリファレンスは不要 — クリエイターのドメインがレジストリそのものです。
クリエイターが adagents.json を公開していない場合
すべての番組がクリエイター所有のドメインを持つわけではありません。ストリーミングプラットフォームのオリジナルシリーズは、そのプラットフォームの adagents.json にしか存在しない場合があります。その場合、プラットフォームが正規パブリッシャーとなり、shows はそのドメインを指します。単一の正規ソースなしに同じ番組が複数のプラットフォームに存在する場合、番組オブジェクトの配信識別子がクロスセラーマッチングを担う。
アイデンティティ解決の優先順位
バイヤーエージェントは次の順番で番組のアイデンティティを解決すべきです:
- 正規パブリッシャー — クリエイター自身の
adagents.json の publisher_domain + show_id。最も強いシグナル。
- プラットフォーム非依存識別子 — 番組の
distribution 配列の imdb_id、gracenote_id、eidr_id。正規パブリッシャーが存在しない場合の信頼できるクロスリファレンス。
- プラットフォーム固有識別子 — Spotify、Apple、YouTube のID。プラットフォーム内では有用だが普遍的ではありません。
ディスカバリーの例
エピソード付き CTV 番組
既知の番組と予定エピソードに対してスポンサーシップを販売するストリーミングプラットフォーム:
{
"products": [
{
"product_id": "nova_kitchen_april",
"name": "Nova Kitchen - April Episodes",
"shows": [{ "publisher_domain": "novastreaming.example.com", "show_ids": ["nova_kitchen"] }],
"publisher_properties": [{
"publisher_domain": "novastreaming.example.com",
"selection_type": "all"
}],
"episodes": [
{
"episode_id": "s3e09",
"name": "Fire and Ice",
"scheduled_at": "2026-04-05T21:00:00Z",
"status": "scheduled",
"duration_seconds": 2700,
"ad_inventory": {
"expected_breaks": 3,
"total_ad_seconds": 360,
"max_ad_duration_seconds": 30,
"unplanned_breaks": false,
"supported_formats": ["video"]
}
},
{
"episode_id": "s3e10",
"scheduled_at": "2026-04-12T21:00:00Z",
"status": "tentative",
"valid_until": "2026-04-06T00:00:00Z"
}
],
"placements": [
{ "placement_id": "pre_roll", "name": "Pre-roll (15s)" },
{ "placement_id": "mid_roll", "name": "Mid-roll (30s)" }
],
"delivery_type": "guaranteed",
"pricing_options": [
{ "pricing_option_id": "cpm_fixed", "pricing_model": "cpm", "fixed_price": 38.00, "currency": "USD" }
]
}
]
}
関連番組と派生コンテンツ
メイン番組とその companion アフターショー、およびハイライトクリップを提供するストリーミングプラットフォーム:
{
"products": [
{
"product_id": "nova_highlights",
"name": "Nova Kitchen Highlights Package",
"shows": [{ "publisher_domain": "novastreaming.example.com", "show_ids": ["nova_kitchen"] }],
"episodes": [
{
"episode_id": "s3e09",
"name": "Fire and Ice",
"status": "aired",
"duration_seconds": 2700
},
{
"episode_id": "s3e09_highlights",
"name": "Fire and Ice - Best Moments",
"status": "published",
"duration_seconds": 180,
"derivative_of": {
"episode_id": "s3e09",
"type": "highlight"
}
}
],
"placements": [
{ "placement_id": "pre_roll", "name": "Pre-roll (15s)" }
],
"delivery_type": "non_guaranteed",
"pricing_options": [
{ "pricing_option_id": "cpm", "pricing_model": "cpm", "floor_price": 12.00, "currency": "USD" }
]
}
]
}
ハイライトクリップは derivative_of でソースエピソードを参照します。companion のアフターショーはメイン番組の related_shows でリンクされている — Nova Kitchen をターゲティングするバイヤーはアフターショーを追加のリーチ機会として発見できます。
配信付きポッドキャスト
複数の配信プラットフォームにまたがって販売するポッドキャストネットワーク。adagents.json の番組の distribution 配列が完全な配信フットプリントを記録し、バイヤーはクロスセラーマッチングに配信識別子を使う:
{
"products": [
{
"product_id": "wonderstruck_april",
"name": "Wonderstruck Weekly - April Episodes",
"shows": [{ "publisher_domain": "wonderstruck.example.com", "show_ids": ["wonderstruck_weekly"] }],
"episodes": [
{
"episode_id": "ep47",
"name": "The future of autonomous supply chains",
"scheduled_at": "2026-04-07T10:00:00Z",
"status": "scheduled",
"guest_talent": [
{ "role": "guest", "name": "Kai Tanaka", "brand_url": "https://kaitanaka.example.com/brand.json" }
]
},
{
"episode_id": "ep48",
"scheduled_at": "2026-04-14T10:00:00Z",
"status": "tentative"
},
{
"episode_id": "ep49",
"scheduled_at": "2026-04-21T10:00:00Z",
"status": "tentative"
}
],
"placements": [
{ "placement_id": "pre_roll", "name": "Pre-roll (30s)" },
{ "placement_id": "mid_roll", "name": "Mid-roll host read (60s)" }
],
"delivery_type": "guaranteed",
"pricing_options": [
{ "pricing_option_id": "flat_monthly", "pricing_model": "flat_rate", "fixed_price": 15000, "currency": "USD" },
{ "pricing_option_id": "per_episode", "pricing_model": "flat_rate", "fixed_price": 5000, "currency": "USD" }
]
}
]
}
暫定エピソード(ep48、ep49)には名前もゲスト情報もない — まだ制作されていないからです。バイヤーは番組のベースラインプロファイルと ep47 の既知の詳細に基づいて評価します。
テンタティブエピソード付きライブイベント
ライブイベントシリーズに対してスポンサーシップを販売するスポーツリーグ。ライブ放送はゲーム時間が読めないため flexible_end を使い、広告ブレークがタイムアウトやピリオド間など試合の流れに従うため unplanned_breaks を使います。テンタティブな第5戦はシリーズの結果次第 — 4試合でどちらのチームも勝てなかった場合にのみ開催されます。
{
"products": [
{
"product_id": "apex_finals_sponsorship",
"name": "Apex Championship Finals — Category Sponsorship",
"shows": [{ "publisher_domain": "apexleague.example.com", "show_ids": ["apex_championship_2026"] }],
"episodes": [
{
"episode_id": "finals_game4",
"name": "Game 4: Titan City vs Coastal FC",
"scheduled_at": "2026-05-18T19:00:00Z",
"status": "scheduled",
"flexible_end": true,
"ad_inventory": {
"expected_breaks": 8,
"total_ad_seconds": 960,
"max_ad_duration_seconds": 30,
"unplanned_breaks": true,
"supported_formats": ["video"]
}
},
{
"episode_id": "finals_game5",
"name": "Game 5 — If necessary",
"scheduled_at": "2026-05-21T19:00:00Z",
"status": "tentative",
"flexible_end": true,
"valid_until": "2026-05-19T06:00:00Z",
"ad_inventory": {
"expected_breaks": 8,
"total_ad_seconds": 960,
"max_ad_duration_seconds": 30,
"unplanned_breaks": true,
"supported_formats": ["video"]
}
}
],
"placements": [
{ "placement_id": "in_game_overlay", "name": "In-game overlay (10s)" },
{ "placement_id": "halftime", "name": "Halftime feature (60s)" }
],
"delivery_type": "guaranteed",
"exclusivity": "category",
"pricing_options": [
{ "pricing_option_id": "per_game", "pricing_model": "flat_rate", "fixed_price": 750000, "currency": "USD" }
]
}
]
}
このパターンはライブインベントリ向けに設計された複数の機能を組み合わせています:cadence: "event" は非繰り返しシリーズを示し、flexible_end は放送時間が概算であることをバイヤーに伝え、unplanned_breaks: true は広告ブレークが予定されたスケジュールではなく試合の流れに従うことを示します。テンタティブな第5戦には valid_until が含まれており、バイヤーエージェントはいつ再クエリすべきかを知ることができる — シリーズが4試合で終われば、そのエピソードは cancelled に解決されます。バイヤーは暫定エピソードに予算をコミットする前に常に valid_until を確認すべきです。
番組のディスカバリー
バイヤーは標準の get_products ワークフローで番組を発見します。自然言語のブリーフが番組の選択を導く:
{
"buying_mode": "brief",
"brief": "Podcast sponsorships for technology shows reaching startup founders in April",
"filters": {
"channels": ["podcast"],
"start_date": "2026-04-01",
"end_date": "2026-04-30"
}
}
セラーは shows セレクター付きの商品を返します。バイヤーは各パブリッシャーの adagents.json から完全な番組オブジェクトを解決します。番組専用のディスカバリーエンドポイントは存在しない — 番組はプロダクトディスカバリーと adagents.json のクローリングを通じて発見されます。
ブランドセーフティ
番組は2レベルのブランドセーフティモデルを提供します:番組のベースラインとエピソードごとの上書き。
番組ベースライン
番組のデフォルトブランドセーフティプロファイルは次から構成されます:
content_rating — 番組の申告されたレーティングシステムと値
genre — コンテンツカテゴリ(機械可読な評価のために genre_taxonomy の使用を推奨)
talent — ホストとレギュラーキャスト。より深い評価のためにオプションで brand.json 参照付き
これが、個別のエピソードコンテンツがまだ不明な場合にバイヤーが評価するものです。
エピソードの上書き
エピソードの詳細が利用可能な場合、セーフティプロファイルを変える可能性があります:
- 番組ベースラインと異なる
content_rating(今週は TV-PG ではなく TV-14)
- タレントプロファイルを変える
guest_talent(問題のあるゲスト)
- エピソード固有のコンテンツシグナルを追加する
topics
モデル化されていないもの
AdCP は未知の将来のエピソードのコンテンツセーフティを予測しません。「4月の全エピソード」にコミットするバイヤーは番組のベースラインプロファイルに基づいて購入し、変動を受け入れる。セラーのコンテンツ基準と番組の実績がバイヤーにとっての判断根拠となります。
配信識別子
各番組の distribution 配列は、プラットフォーム固有の識別子で番組を特定のパブリッシャープラットフォームにマッピングします。これにより、2つの異なるセラーが同じ番組の商品を提供している場合に、バイヤーエージェントが共通識別子でそれらを照合できます。
クロスセラーマッチング
プラットフォーム非依存識別子が重複排除に最も信頼できます:
| 型 | 例 | 備考 |
|---|
imdb_id | tt1234567 | プラットフォームを横断する汎用リファレンス |
gracenote_id | EP012345678 | TVメタデータの業界標準 |
eidr_id | 10.5240/XXXX-XXXX-XXXX-XXXX-XXXX-C | 映像コンテンツの ISO 10528 |
番組が利用可能な場合は少なくとも1つのプラットフォーム非依存識別子を含めるべきです。
プラットフォーム固有識別子
{
"distribution": [
{
"publisher_domain": "spotify.com",
"identifiers": [{ "type": "spotify_show_id", "value": "4rOoJ6Egrf8K2IrywzwOMk" }]
},
{
"publisher_domain": "apple.com",
"identifiers": [{ "type": "apple_podcast_id", "value": "1234567890" }]
},
{
"publisher_domain": "feeds.example.com",
"identifiers": [{ "type": "rss_url", "value": "https://feeds.example.com/show.xml" }]
}
]
}
利用可能なポッドキャスト型:apple_podcast_id、spotify_show_id、rss_url、podcast_guid、amazon_music_id、iheart_id、podcast_index_id。利用可能なビデオ/CTV型:youtube_channel_id、youtube_playlist_id、amazon_title_id、roku_channel_id、pluto_channel_id、tubi_id、peacock_id、tiktok_id、twitch_channel。その他:domain、substack_id。
広告インベントリ
エピソードは ad_inventory オブジェクトにブレークベースの広告インベントリを宣言します:
| フィールド | 型 | 説明 |
|---|
expected_breaks | integer | 予定広告ブレーク数 |
total_ad_seconds | integer | 全ブレーク合計の広告秒数 |
max_ad_duration_seconds | integer | ブレーク内の1広告の最大尺 |
unplanned_breaks | boolean | false:全ブレーク事前定義済み。true:ライブ状況(スポーツのタイムアウト、ライブニュース)によってブレークが発生。 |
supported_formats | string[] | ブレークでサポートされるフォーマット型(例:"video"、"audio") |
ホストリード、カスタムインテグレーション、スポンサーシップなどのノンブレーク広告フォーマットには、代わりに商品のプレースメントを使うこと。ポッドキャスト商品は「ミッドロールホストリード(60秒)」のプレースメントを持つかもしれない — それは ad_inventory の一部ではなく商品のプレースメントです。
LEAP との関係
エピソードモデルは、ライブストリーミングイベント向けの IAB Tech Lab の LEAP Forecasting API に合わせています:
| LEAP コンセプト | AdCP の対応 |
|---|
| UpcomingEvent | Episode(scheduled_at + status) |
| Content(AdCOM 1.0) | 番組メタデータ(genre、content_rating、talent) |
| AdInventoryConfiguration | Episode の ad_inventory + 商品プレースメント |
| Event status | Episode の status(scheduled、tentative、cancelled) |
| Unplanned breaks | ad_inventory.unplanned_breaks |
| Flexible end time | Episode の flexible_end |
LEAP は SSP から DSP へのプラミングを対象とします。AdCP は購入決定が行われるエージェント間交渉レイヤーで動作します。
番組ターゲティング
複数の番組を持つ商品はデフォルトでバンドル — バイヤーは列挙されたすべての番組を取得します。セラーは show_targeting_allowed: true を設定して、プロパティの property_targeting_allowed と同じパターンでバイヤーがサブセットをターゲティングできるようにすることができます。
show_targeting_allowed | 意味 |
|---|
false(デフォルト) | バンドル — バイヤーは全番組を取得する |
true | バイヤーはメディアバイで特定の番組を選択できる |
マルチショーバンドル
1つの商品は shows に複数の show ID を列挙することで複数の番組にまたがれる。商品が複数の番組を持つ場合、各エピソードはバイヤーエージェントがどのエピソードがどの番組に属するかを判断できるよう show_id を含めなければなりません。
{
"products": [
{
"product_id": "technet_april_bundle",
"name": "TechNet Podcast Bundle - April",
"shows": [{ "publisher_domain": "technet.example.com", "show_ids": ["tech_weekly", "startup_hour"] }],
"episodes": [
{ "episode_id": "tw_ep12", "show_id": "tech_weekly", "scheduled_at": "2026-04-07T10:00:00Z", "status": "scheduled" },
{ "episode_id": "tw_ep13", "show_id": "tech_weekly", "scheduled_at": "2026-04-14T10:00:00Z", "status": "tentative" },
{ "episode_id": "sh_ep30", "show_id": "startup_hour", "scheduled_at": "2026-04-09T14:00:00Z", "status": "scheduled" },
{ "episode_id": "sh_ep31", "show_id": "startup_hour", "scheduled_at": "2026-04-16T14:00:00Z", "status": "tentative" }
],
"delivery_type": "guaranteed",
"pricing_options": [
{ "pricing_option_id": "bundle", "pricing_model": "flat_rate", "fixed_price": 25000, "currency": "USD" }
]
}
]
}
関連項目