Skip to main content
商品は、3つの独立した軸に沿ってインベントリを表現します:
  • パブリッシャープロパティ — 広告が配信される場所(youtube.com、spotify.com)
  • 番組/エピソード — 広告が挿入されるコンテンツ(特定のシリーズとその各回)
  • プレースメント — 広告が表示されるポジション(プレロール、ミッドロール、ホストリード)
番組とプレースメントは並列なディメンションであり、階層関係ではありません。「プレロール」はポジションで、「Pinnacle Challenge」はコンテンツです。商品はそれらを組み合わせる:「Acme Streaming の Pinnacle Challenge でのプレロール」。

show オブジェクト

番組(show)は、時間をかけてエピソードを生み出す継続的なコンテンツプログラムです。番組はプロパティと同じように機能する — パブリッシャーが adagents.json で宣言し、商品は publisher_domainshow_ids を持つ shows セレクターで参照します。
フィールド必須説明
show_idstringYesパブリッシャーが割り当てる識別子。パブリッシャーの adagents.json で宣言されます。商品は shows セレクターで番組を参照します。クロスセラーマッチングには配信識別子を使うこと。
namestringYes人間が読める番組名
descriptionstringNo番組の内容
genrestring[]Noジャンルタグ。genre_taxonomy が存在する場合、値はタクソノミーID(例:IAB Content Taxonomy 3.0)。それ以外は自由形式。
genre_taxonomystringNoジャンル値のタクソノミーシステム(例:iab_content_3.0)。機械可読なブランドセーフティのために推奨。
languagestringNo主要言語(BCP 47)
content_ratingobjectNo基準レーティング:system + rating。システム:tv_parentalmpaapodcastesrbbbfcfskacbcustom。エピソードで上書き可能。
cadencestringNodailyweeklyseasonaleventirregular
seasonstringNo現在またはもっとも最近のシーズン識別子(例:"3""2026"
statusstringNoactivehiatusendedupcoming
production_qualitystringNoprofessionalprosumerugc。セラー申告。OpenRTB の content.prodq に対応。
talentarrayNoホスト、レギュラーキャスト、クリエイター。各エントリは rolename、および brand.json へのリンクとなるオプションの brand_url を持ちます。
specialobjectNo存在する場合、この番組は特番 — 現実世界のイベントやシーンに紐付いたコンテンツ。特番とリミテッドシリーズを参照。
limited_seriesobjectNo存在する場合、この番組はリミテッドシリーズ — 定義されたアークと終了日を持つ有限の放送。特番とリミテッドシリーズを参照。
distributionarrayNoこの番組が配信されている場所と、パブリッシャーごとのプラットフォーム固有識別子。
related_showsarrayNo他の番組との関係:spinoffcompanionsequelprequelcrossover。各エントリは show_id + relationship を持ちます。参照は同じパブリッシャーの adagents.json 内にスコープされます。対称型(companioncrossover)は両方の番組が宣言する必要はない。
{
  "$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_idstringYes番組内の一意識別子
show_idstring必要な場合親番組。商品が複数の番組にまたがる場合に必須。
namestringNoエピソードタイトル
seasonstringNoシーズン識別子(例:"1""2026"
episode_numberstringNoシーズン内のエピソード番号
scheduled_atdatetimeNoエピソードの放送または公開日時
statusstringNoscheduledtentativelivepostponedcancelledairedpublished
duration_secondsintegerNo想定される尺
flexible_endbooleanNo終了時刻が概算かどうか(ライブイベント)
valid_untildatetimeNoこのデータの有効期限。暫定エピソードに予算をコミットする前に、エージェントは再クエリすべきです。
content_ratingobjectNo存在する場合に番組の基準を上書きする
topicsstring[]Noブランドセーフティのためのエピソードレベルのコンテンツトピック。存在する場合は番組の genre_taxonomy を使用します。
specialobjectNoエピソード固有のイベントコンテキスト。存在する場合、このエピソードは現実世界のイベントに紐付く。番組レベルの special を上書きします。
guest_talentarrayNoエピソード固有のゲスト。番組のレギュラー talent に追加されます。
ad_inventoryobjectNoブレークベースの広告インベントリ設定
derivative_ofobjectNoこのエピソードがフルエピソードから派生したクリップ、ハイライト、または要約である場合。episode_id + typecliphighlightrecaptrailerbonus)を持ちます。ソースの episode_id は同じレスポンス内になければなりません。

エピソードステータスのライフサイクル

ステータス意味
scheduled確定済み、放送される
tentative放送されない可能性がある(外部条件次第)
live現在放送中またはライブストリーミング中
postponedスケジュールされていたが将来の日付に延期された
cancelled放送されない
aired既に放送済み — バックカタログとリプレイインベントリ用
published既に公開済み — オンデマンドのキャッチアップインベントリ用
想定される遷移:scheduled または tentativeliveaired または publishedscheduled エピソードは postponed(延期)または cancelled になる場合があります。postponed エピソードは再スケジュール時に scheduled に戻る。tentative エピソードは scheduledcancelled、または 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 を上書きします)。
フィールド必須説明
namestringYesイベントの名称(例:“Olympics 2028”、“Super Bowl LXI”)
categorystringNoawardschampionshipconcertconferenceelectionfestivalgalaholidaypremiereproduct_launchreuniontribute
startsdatetimeNoイベントの開始日時
endsdatetimeNoイベントの終了日時。単日イベントの場合は省略します。
{
  "$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_episodesintegerNo予定エピソード数
startsdatetimeNoシリーズの開始日時
endsdatetimeNoシリーズの終了日時
{
  "$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 はそのドメインを指します。単一の正規ソースなしに同じ番組が複数のプラットフォームに存在する場合、番組オブジェクトの配信識別子がクロスセラーマッチングを担う。

アイデンティティ解決の優先順位

バイヤーエージェントは次の順番で番組のアイデンティティを解決すべきです:
  1. 正規パブリッシャー — クリエイター自身の adagents.jsonpublisher_domain + show_id。最も強いシグナル。
  2. プラットフォーム非依存識別子 — 番組の distribution 配列の imdb_idgracenote_ideidr_id。正規パブリッシャーが存在しない場合の信頼できるクロスリファレンス。
  3. プラットフォーム固有識別子 — 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_idtt1234567プラットフォームを横断する汎用リファレンス
gracenote_idEP012345678TVメタデータの業界標準
eidr_id10.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_idspotify_show_idrss_urlpodcast_guidamazon_music_idiheart_idpodcast_index_id。利用可能なビデオ/CTV型:youtube_channel_idyoutube_playlist_idamazon_title_idroku_channel_idpluto_channel_idtubi_idpeacock_idtiktok_idtwitch_channel。その他:domainsubstack_id

広告インベントリ

エピソードは ad_inventory オブジェクトにブレークベースの広告インベントリを宣言します:
フィールド説明
expected_breaksinteger予定広告ブレーク数
total_ad_secondsinteger全ブレーク合計の広告秒数
max_ad_duration_secondsintegerブレーク内の1広告の最大尺
unplanned_breaksbooleanfalse:全ブレーク事前定義済み。true:ライブ状況(スポーツのタイムアウト、ライブニュース)によってブレークが発生。
supported_formatsstring[]ブレークでサポートされるフォーマット型(例:"video""audio"
ホストリード、カスタムインテグレーション、スポンサーシップなどのノンブレーク広告フォーマットには、代わりに商品のプレースメントを使うこと。ポッドキャスト商品は「ミッドロールホストリード(60秒)」のプレースメントを持つかもしれない — それは ad_inventory の一部ではなく商品のプレースメントです。

LEAP との関係

エピソードモデルは、ライブストリーミングイベント向けの IAB Tech Lab の LEAP Forecasting API に合わせています:
LEAP コンセプトAdCP の対応
UpcomingEventEpisode(scheduled_at + status
Content(AdCOM 1.0)番組メタデータ(genrecontent_ratingtalent
AdInventoryConfigurationEpisode の ad_inventory + 商品プレースメント
Event statusEpisode の statusscheduledtentativecancelled
Unplanned breaksad_inventory.unplanned_breaks
Flexible end timeEpisode の 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" }
      ]
    }
  ]
}

関連項目