Skip to main content
プロダクト は AdCP における中核の販売単位です。本ドキュメントではプロダクトモデル、価格/配信種別、発見方法や構造について説明します。
価格モデル プロダクトはサポートする価格モデルを宣言し、バイヤーはメディアバイ作成時に具体的な価格オプションを選択します。CPM、CPCV、CPP、CPC、vCPM、定額料金などの詳細は Pricing Models Guide を参照してください。

プロダクトモデル

  • product_id (string, required)
  • name (string, required)
  • description (string, required)
  • formats (list[Format], required): Creative Formats を参照。
  • placements (list[Placement], optional): プロダクト内の特定プレースメント。提供される場合、バイヤーはクリエイティブ割り当て時に個別プレースメントをターゲティングできる。Placements を参照。
  • delivery_type (string, required): "guaranteed" または "non_guaranteed"
  • pricing_options (list[PricingOption], required): 利用可能な価格モデルの配列。Pricing Models を参照。
  • measurement (Measurement, optional): 含まれる計測機能。リテールメディアで一般的。
  • creative_policy (CreativePolicy, optional): クリエイティブ要件/制限。
  • is_custom (bool, optional): 特定ブリーフに基づき生成された場合は true
  • expires_at (datetime, optional): is_custom の場合、プロダクトの有効期限。
  • product_card (object, optional): UI 表示用のビジュアルカード定義。Product Cards を参照。

価格モデル

パブリッシャーは各プロダクトでサポートする価格モデルを宣言し、バイヤーはメディアバイ作成時に利用可能なオプションから選択します。このアプローチにより:
  • 1 プロダクトに複数価格モデル - 同一在庫を異なる価格体系で提供可能
  • 複数通貨対応 - パブリッシャーがサポート通貨を宣言し、バイヤーはその通貨を使用
  • 柔軟な価格設定 - CPM、CPCV、CPP (GRP ベース)、CPA などをサポート

サポートされる価格モデル

  • CPM (Cost Per Mille) - 1,000 インプレッションあたりのコスト(ディスプレイで一般的)
  • CPC (Cost Per Click) - クリックあたりのコスト
  • CPCV (Cost Per Completed View) - 100% 再生完了あたりのコスト
  • CPV (Cost Per View) - パブリッシャー定義の視聴条件でのコスト
  • CPA (Cost Per Action) - コンバージョン/獲得あたりのコスト
  • CPL (Cost Per Lead) - リード獲得あたりのコスト
  • CPP (Cost Per Point) - GRP あたりのコスト(TV/オーディオ)
  • Flat Rate - 配信量に関わらず固定費

PricingOption 構造

各価格オプションの例:
{
  "$schema": "https://adcontextprotocol.org/schemas/v2/pricing-options/cpcv-option.json",
  "pricing_option_id": "cpcv_usd_guaranteed",
  "pricing_model": "cpcv",
  "fixed_price": 0.15,
  "currency": "USD",
  "min_spend_per_package": 5000
}
オークション型(fixed_price なし)の場合、floor_price を必須制約として、price_guidance を任意の目安として使用します。
{
  "$schema": "https://adcontextprotocol.org/schemas/v2/pricing-options/cpm-option.json",
  "pricing_option_id": "cpm_usd_auction",
  "pricing_model": "cpm",
  "currency": "USD",
  "floor_price": 10.00,
  "price_guidance": {
    "p25": 12.50,
    "p50": 15.00,
    "p75": 18.00,
    "p90": 22.00
  }
}

デリバリー計測(必須)

すべてのプロダクトは計測プロバイダーを宣言する必要があります。
{
  "delivery_measurement": {
    "provider": "Google Ad Manager with IAS viewability verification",
    "notes": "MRC-accredited viewability. 50% in-view for 1s display / 2s video."
  }
}
一般的な例:
  • "Google Ad Manager with IAS viewability"
  • "Nielsen DAR for P18-49 demographic measurement"
  • "Geopath DOOH traffic counts updated monthly"
  • "Comscore vCE for video completion tracking"
  • "Self-reported impressions from proprietary ad server"

Measurement オブジェクト

計測を含むプロダクト(リテールメディアで一般的)の例:
{
  "type": "incremental_sales_lift",
  "attribution": "deterministic_purchase",
  "window": "30_days",
  "reporting": "weekly_dashboard"
}

CreativePolicy オブジェクト

クリエイティブ要件や制限を定義します。
{
  "$schema": "https://adcontextprotocol.org/schemas/v2/core/creative-policy.json",
  "co_branding": "required",
  "landing_page": "retailer_site_only",
  "templates_available": true
}

Placements

プロダクトは、在庫内の特定プレースメントを任意で宣言できます。プレースメントが提供される場合:
  • バイヤーはプロダクト全体を購入 - パッケージは常にプロダクト全体を対象とし、個別プレースメント単位では購入しない
  • プレースメントターゲティングはクリエイティブ割り当て時に実施 - 異なるクリエイティブを別プレースメントに割り当て可能
  • プレースメント指定を省略 - placement_ids を指定しないクリエイティブはパッケージ内の全プレースメントで配信

Placement オブジェクト構造

{
  "$schema": "https://adcontextprotocol.org/schemas/v2/core/placement.json",
  "placement_id": "homepage_banner",
  "name": "Homepage Banner",
  "description": "Above-the-fold banner on the homepage",
  "format_ids": [
    {"agent_url": "https://creative.adcontextprotocol.org", "id": "display_728x90"},
    {"agent_url": "https://creative.adcontextprotocol.org", "id": "display_970x250"}
  ]
}

例: プレースメント付きプロダクト

{
  "product_id": "news_site_premium",
  "name": "News Site Premium Package",
  "description": "Premium placements across news site",
  "format_ids": [
    {"agent_url": "https://creative.adcontextprotocol.org", "id": "display_728x90"},
    {"agent_url": "https://creative.adcontextprotocol.org", "id": "display_300x250"}
  ],
  "placements": [
    {
      "placement_id": "homepage_banner",
      "name": "Homepage Banner",
      "format_ids": [{"agent_url": "https://creative.adcontextprotocol.org", "id": "display_728x90"}]
    },
    {
      "placement_id": "article_sidebar",
      "name": "Article Sidebar",
      "format_ids": [{"agent_url": "https://creative.adcontextprotocol.org", "id": "display_300x250"}]
    }
  ],
  "delivery_type": "guaranteed",
  "pricing_options": [...]
}
メディアバイ作成時に、バイヤーは異なるクリエイティブを別プレースメントに割り当てられます。
{
  "packages": [
    {
      "product_id": "news_site_premium",
      "creative_assignments": [
        {
          "creative_id": "creative_1",
          "placement_ids": ["homepage_banner"]
        },
        {
          "creative_id": "creative_2",
          "placement_ids": ["article_sidebar"]
        }
      ]
    }
  ]
}
詳細は Creative Assignment and Placement Targeting を参照してください。

カスタム/プリンシパル固有のプロダクト

サーバーは汎用カタログを提供しつつ、以下も返せます。
  • Principal-Specific Products: 特定クライアント向けまたは交渉済みのプロダクト
  • Custom Products: is_custom: trueexpires_at を持つ動的生成プロダクト

プロダクトの例

標準 CTV プロダクト(複数の価格オプション)

{
  "product_id": "connected_tv_prime",
  "name": "Connected TV - Prime Time",
  "description": "Premium CTV inventory 8PM-11PM",
  "format_ids": [
    {
      "agent_url": "https://creative.adcontextprotocol.org",
      "id": "video_15s"
    },
    {
      "agent_url": "https://creative.adcontextprotocol.org",
      "id": "video_30s"
    }
  ],
  "delivery_type": "guaranteed",
  "pricing_options": [
    {
      "pricing_option_id": "cpm_usd_guaranteed",
      "pricing_model": "cpm",
      "fixed_price": 45.00,
      "currency": "USD",
      "min_spend_per_package": 10000
    },
    {
      "pricing_option_id": "cpcv_usd_guaranteed",
      "pricing_model": "cpcv",
      "fixed_price": 0.18,
      "currency": "USD",
      "min_spend_per_package": 10000
    },
    {
      "pricing_option_id": "cpp_usd_p18-49",
      "pricing_model": "cpp",
      "fixed_price": 250.00,
      "currency": "USD",
      "parameters": {
        "demographic": "P18-49",
        "min_points": 50
      },
      "min_spend_per_package": 12500
    }
  ],
  "delivery_measurement": {
    "provider": "Nielsen DAR for P18-49 demographic measurement",
    "notes": "Panel-based measurement for GRP delivery. Impressions measured via Comscore vCE."
  }
}

オークション型ディスプレイプロダクト

{
  "product_id": "custom_abc123",
  "name": "Custom - Gaming Enthusiasts",
  "description": "Custom audience package for gaming campaign",
  "format_ids": [
    {
      "agent_url": "https://creative.adcontextprotocol.org",
      "id": "display_300x250"
    },
    {
      "agent_url": "https://creative.adcontextprotocol.org",
      "id": "display_728x90"
    }
  ],
  "delivery_type": "non_guaranteed",
  "pricing_options": [
    {
      "pricing_option_id": "cpm_usd_auction",
      "pricing_model": "cpm",
      "currency": "USD",
      "floor_price": 5.00,
      "price_guidance": {
        "p50": 8.00,
        "p75": 12.00
      }
    },
    {
      "pricing_option_id": "cpc_usd_auction",
      "pricing_model": "cpc",
      "currency": "USD",
      "floor_price": 0.50,
      "price_guidance": {
        "p50": 1.20,
        "p75": 2.00
      }
    }
  ],
  "delivery_measurement": {
    "provider": "Google Ad Manager with IAS viewability",
    "notes": "MRC-accredited viewability. 50% in-view for 1s display."
  },
  "is_custom": true,
  "expires_at": "2025-02-15T00:00:00Z"
}

計測付きリテールメディアプロダクト

{
  "product_id": "albertsons_pet_category_offsite",
  "name": "Pet Category Shoppers - Offsite Display & Video",
  "description": "Target Albertsons shoppers who have purchased pet products in the last 90 days. Reach them across premium display and video inventory.",
  "format_ids": [
    {
      "agent_url": "https://creative.adcontextprotocol.org",
      "id": "display_300x250"
    },
    {
      "agent_url": "https://creative.adcontextprotocol.org",
      "id": "display_728x90"
    },
    {
      "agent_url": "https://creative.adcontextprotocol.org",
      "id": "video_15s"
    }
  ],
  "delivery_type": "guaranteed",
  "pricing_options": [
    {
      "pricing_option_id": "cpm_usd_guaranteed",
      "pricing_model": "cpm",
      "fixed_price": 13.50,
      "currency": "USD",
      "min_spend_per_package": 10000
    }
  ],
  "delivery_measurement": {
    "provider": "Self-reported impressions from proprietary ad server",
    "notes": "Impressions counted per IAB guidelines. Viewability measured via IAS."
  },
  "measurement": {
    "type": "incremental_sales_lift",
    "attribution": "deterministic_purchase",
    "window": "30_days",
    "reporting": "weekly_dashboard"
  },
  "creative_policy": {
    "co_branding": "optional",
    "landing_page": "must_include_retailer",
    "templates_available": true
  }
}

Product Cards

プロダクトカードは、UI でプロダクトを視覚的に示すための定義です。パブリッシャーは、カードフォーマットと必要アセットを含むカード定義を任意で提供できます。

カードタイプ

パブリッシャーは少なくとも Standard カードを、必要に応じて詳細カードも提供してください。 Standard Card (product_card):
  • プロダクトのグリッド/リスト表示向けコンパクトカード(300x400px)
  • Retina 向けに 2x 密度画像をサポート
  • プロダクトを素早く視覚的に把握
Detailed Card (product_card_detailed, 任意):
  • ヒーローカルーセルとテキスト説明を並べたレスポンシブレイアウト
  • 下部に Markdown 仕様セクション
  • メディアキットのような詳細ドキュメント

構造

{
  "product_id": "ctv_premium",
  "name": "Premium CTV Inventory",
  // ... other product fields ...

  "product_card": {
    "format_id": {
      "agent_url": "https://creative.adcontextprotocol.org",
      "id": "product_card_standard"
    },
    "manifest": {
      "display_name": "Premium CTV - Living Room Audiences",
      "hero_image_url": "https://cdn.example.com/products/ctv_hero.jpg",
      "brief_highlight": "Perfect for reaching cord-cutters and premium streaming audiences"
    }
  },

  "product_card_detailed": {
    "format_id": {
      "agent_url": "https://creative.adcontextprotocol.org",
      "id": "product_card_detailed"
    },
    "manifest": {
      "display_name": "Premium CTV - Living Room Audiences",
      "description": "Reach high-income households with premium CTV inventory during peak viewing hours...",
      "carousel_images": [
        "https://cdn.example.com/products/ctv_context1.jpg",
        "https://cdn.example.com/products/ctv_context2.jpg"
      ],
      "specifications_markdown": "# Technical Specifications\n\n..."
    }
  }
}

カードの描画

カード表示には 2 つの方法があります。
  1. preview_creative を使用: カードフォーマットとマニフェストを渡してレンダリング
  2. 事前レンダリング: パブリッシャーがカードを生成し、静的に配信
インフラに合わせて動的生成と静的ホスティングを選択できます。

標準カードフォーマット

リファレンスクリエイティブエージェントは次の 2 種の標準カードフォーマットを定義します。
  • product_card_standard (300x400px) - プロダクトブラウズ用コンパクトカード
  • product_card_detailed (レスポンシブ) - カルーセルと詳細仕様を含むリッチカード
パブリッシャーはブランドに合わせたり、独自の特徴を強調したりするためにカスタムカードフォーマットを定義できます。 Note: 標準カードフォーマットの定義はプロトコル仕様ではなく creative-agent repository で管理されています。

プロダクトカードを含めるべき場面

プロダクトカードは任意ですが、次のケースで推奨されます。
  • 強いビジュアルアイデンティティを持つプロダクト(番組、イベント、媒体など)
  • プレミアムプロダクトで、見た目が価値向上につながる場合
  • 複雑なプロダクトで、ビジュアルハイライトが理解を助ける場合
  • 特定オーディエンスを狙う際、ビジュアルで訴求したい場合
メディアキットのような詳細ドキュメントを提供したい場合は detailed カードを使用してください。

クライアント描画ガイドライン

UI でプロダクトを表示する際のフォールバック順:
  1. product_card があるpreview_creative で描画、または事前レンダリング画像を表示
  2. どちらもない → テキストのみ(プロダクト名 + 説明)を表示
  3. カード描画に失敗 → テキストのみ表示にフォールバック
利用可能なメタデータにかかわらず、一貫したユーザー体験を提供できます。

プロポーザル

パブリッシャーはプロダクトと一緒に プロポーザル(予算配分付きの構造化メディアプラン)を返すことができます。バイヤーは会話的に調整し、そのまま実行できます。

プロポーザルとは

プロポーザルは、提案予算配分とともにプロダクトをグルーピングした推奨購入戦略です。従来の営業担当が行っていたようなメディアプランニングの知見をエンコードします。 主な特徴:
  • 実行可能: proposal_id を指定して create_media_buy で直接実行
  • リファイン可能: その後の get_products コールで自然言語による変更要望を反映
  • 予算非依存: 配分をパーセンテージで保持するため、任意の予算にスケール可能

プロポーザル構造

{
  "proposal_id": "swiss_balanced_v1",
  "name": "Swiss Multi-Channel Plan",
  "description": "Balanced coverage across devices and language regions",
  "allocations": [
    {
      "product_id": "ch_desktop_de",
      "allocation_percentage": 20,
      "pricing_option_id": "cpm_usd_fixed",
      "rationale": "Primary desktop audience in German Switzerland",
      "tags": ["desktop", "german"]
    },
    {
      "product_id": "ch_desktop_fr",
      "allocation_percentage": 30,
      "tags": ["desktop", "french"]
    },
    {
      "product_id": "ch_mobile_de",
      "allocation_percentage": 8,
      "tags": ["mobile", "german"]
    },
    {
      "product_id": "ch_mobile_fr",
      "allocation_percentage": 12,
      "tags": ["mobile", "french"]
    },
    {
      "product_id": "ch_inapp_de",
      "allocation_percentage": 12,
      "tags": ["in-app", "german"]
    },
    {
      "product_id": "ch_inapp_fr",
      "allocation_percentage": 18,
      "tags": ["in-app", "french"]
    }
  ],
  "total_budget_guidance": {
    "min": 30000,
    "recommended": 50000,
    "currency": "USD"
  },
  "brief_alignment": "Achieves 50/20/30 channel split (desktop/mobile/in-app) and 40/60 language split (German/French)"
}
tags フィールドで配分を次元別に集計できます。
  • チャネル別: desktop (50%) + mobile (20%) + in-app (30%) = 100%
  • 言語別: German (40%) + French (60%) = 100%

会話的なリファイン

プロポーザルは自然言語での反復調整をサポートします。
// 初回リクエスト
get_products({
  brief: "Swiss campaign, $50k, 50% desktop/20% mobile/30% in-app, 40% German/60% French"
})

// レスポンスにプロポーザル "swiss_balanced_v1" を含む

// リファインリクエスト
get_products({
  proposal_id: "swiss_balanced_v1",
  brief: "focus more on German speakers - try 60/40 instead of 40/60"
})

// レスポンスに調整済み "swiss_balanced_v2" を含む
パブリッシャーは自然言語指示を解釈して更新版を返します。これは従来のメディアプランニングにおける対話を再現します。

プロポーザルの実行

create_media_buyproposal_idtotal_budget を指定して実行します。
{
  "buyer_ref": "swiss_q1_campaign",
  "proposal_id": "swiss_balanced_v2",
  "total_budget": {
    "amount": 50000,
    "currency": "USD"
  },
  "brand_manifest": { ... },
  "start_time": "2025-04-01T00:00:00Z",
  "end_time": "2025-04-30T23:59:59Z"
}
パブリッシャーは配分パーセンテージをパッケージに変換します。
  • ch_desktop_de: 20% × 50,000=50,000 = 10,000
  • ch_desktop_fr: 30% × 50,000=50,000 = 15,000
  • など
複数ラインアイテムの複雑なキャンペーンを単一のプロポーザル実行に簡略化できます。

プロポーザルを返す場面

パブリッシャーは次の場合にプロポーザルを含めます。
  • ブリーフに特定の配分戦略(チャネル配分、言語配分など)が求められる
  • キャンペーン目標に基づく戦略的ガイダンスを提供できる
  • 複数プロダクトを組み合わせた方が効果的
プロポーザルは任意で、配分ガイダンスが不要ならプロダクトのみ返しても構いません。

ディスカバリーとの統合

プロダクトは自然言語でキャンペーンブリーフにマッチさせる Product Discovery プロセスで見つけ、特定後に create_media_buy で購入します。

関連情報