Skip to main content
AdCP 3.0 提案 - この仕様は AdCP 3.0 向けに開発中です。フィードバックは GitHub Discussions から歓迎します。
ステータス: コメント募集中 最終更新: 2026年2月 本ドキュメントにおけるキーワード「MUST」「MUST NOT」「REQUIRED」「SHALL」「SHALL NOT」「SHOULD」「SHOULD NOT」「RECOMMENDED」「MAY」「OPTIONAL」は、RFC 2119 に記載された定義に従って解釈されます。

概要

メディアバイプロトコルは、AI による広告自動化のための標準インターフェースを定義します。このプロトコルにより、AIエージェントは広告インベントリの発見、キャンペーンの作成・管理、クリエイティブアセットの同期、自然言語インタラクションを通じたパフォーマンストラッキングを行えるようになります。

プロトコルの概要

メディアバイプロトコルが提供する機能:
  • キャンペーンブリーフに基づく自然言語によるインベントリ発見
  • パッケージレベルの予算とターゲティングを伴うキャンペーン作成
  • クリエイティブアセットの管理と同期
  • パフォーマンストラッキングと最適化フィードバック
  • 人間参加型の承認ワークフロー

トランスポート要件

セールスエージェントは以下のトランスポートのうち少なくとも1つをサポートしなければなりません。
トランスポートプロトコル説明
MCPModel Context ProtocolJSON-RPC によるツールベースのインタラクション
A2AAgent-to-Agentメッセージベースのインタラクション
セールスエージェントは優先トランスポートとして MCP をサポートすべきです。 セールスエージェントは get_adcp_capabilities を通じてメディアバイプロトコルのサポートを宣言しなければなりません。
{
  "$schema": "https://adcontextprotocol.org/schemas/v3/protocol/get-adcp-capabilities-response.json",
  "adcp": { "major_versions": [2] },
  "supported_protocols": ["media_buy"]
}

コアコンセプト

リクエストロール

すべてのメディアバイリクエストには3つのエンティティが関与します。
  • オーケストレーター: APIリクエストを行うプラットフォーム(例: DSP、トレーディングデスク)
  • アカウント: 請求関係 — 誰に請求が行き、どのレートが適用されるか(account_id で識別)
  • エージェント: バイを実行するエンティティ(認証トークンで識別)

セールスエージェントの種類

パブリッシャーセールスエージェント — 単一パブリッシャーのインベントリを代表する:
  • セールスエージェントは販売を許可されたインベントリの商品のみを返さなければなりません
  • セールスエージェントは該当する場合 adagents.json を通じて認可を検証しなければなりません
アグリゲーターセールスエージェント — 複数のパブリッシャーを代表する:
  • セールスエージェントは各商品のソースパブリッシャーを明確に特定しなければなりません
  • セールスエージェントはインベントリの出所を偽って伝えてはなりません

識別子

  • media_buy_id: メディアバイの一意識別子。セールスエージェントは作成成功時にこれを返さなければなりません。オーケストレーターはメディアバイに対するすべての後続操作にこれを使用しなければなりません。
  • package_id: メディアバイ内のパッケージの一意識別子。セールスエージェントは作成された各パッケージに対してこれを返さなければなりません。
  • idempotency_key: 安全なリトライのためのクライアント生成の一意キー。同じアカウントに対して重複キーを受け取ったセールスエージェントは、再実行するのではなく元のレスポンスを返さなければなりません。

非同期オペレーション

メディアバイプロトコルは設計上非同期です。オペレーションは即座に返ってくる場合も、延長された処理が必要な場合もある:
  • 同期レスポンス: セールスエージェントは完了した結果を即座に返してもよい
  • 非同期レスポンス: セールスエージェントはタスクリファレンスとともに status: "submitted" または status: "working" を返してもよい
  • 人間参加型: セールスエージェントは手動承認を要求してもよく、その場合 status: "pending_approval" で示します
  • 拒否: セールスエージェントは作成後にメディアバイを拒否してもよく、その場合 status: "rejected" で示します。オーケストレーターは rejected を終端状態として扱わなければなりません。
オーケストレーターはすべてのレスポンスタイプを処理しなければならず、同期完了を前提としてはなりません。

タスク

メディアバイプロトコルは以下のタスクを定義します。完全なリクエスト/レスポンススキーマと例については、タスクリファレンスページを参照すること。

get_products

スキーマ: media-buy/get-products-request.json / media-buy/get-products-response.json リファレンス: get_products タスク 自然言語ブリーフまたは明示的なホールセールインテントを使って広告インベントリを発見します。 要件:
  • オーケストレーターは buying_mode"brief""wholesale"、または "refine" に設定しなければなりません
  • オーケストレーターは buying_mode"brief" の場合に brief を含めなければなりません
  • オーケストレーターは buying_mode"wholesale" または "refine" の場合に brief を含めてはなりません
  • オーケストレーターは buying_mode"refine" の場合に refine を含めなければなりません
  • オーケストレーターは buying_mode"brief" または "wholesale" の場合に refine を含めてはなりません
  • オーケストレーターは refine 内の各商品エントリおよびプロポーザルエントリに scopeidaction を提供しなければなりません
  • オーケストレーターは単一の refine 配列に同一の商品IDまたはプロポーザルIDを持つ複数のエントリを含めてはなりません
  • セールスエージェントはブリーフが提供された場合、ブリーフ条件に一致する商品を返さなければなりません
  • セールスエージェントは各商品に product_idpricing_options を含めなければなりません
  • セールスエージェントは複数の商品が一致する場合、関連性スコアを含めるべきです
リファインメント要件: buying_mode: "refine" を持つ各 get_products リクエストは自己完結している — セールスエージェントはトランスポートレベルのセッション状態に依存してはなりません。各リクエストの refine 配列と filters がリファインメントの意図を完全に指定します。セラーは自身の商品およびプロポーザルレジストリを維持します。「ステートレス」とは、プロトコル交換がコール間で暗黙的な状態を持たないことを意味します。これによりステートレスな実装と安全なリトライが可能になります。
  • セールスエージェントは action: "omit" を持つ商品をレスポンスから除外しなければなりません
  • セールスエージェントは action: "omit" を持つプロポーザルをレスポンスから除外しなければなりません
  • セールスエージェントは action: "include" を持つ商品を更新された価格とともに返さなければなりません
  • セールスエージェントは action: "include" を持つ商品エントリの ask を満たすべきです
  • セールスエージェントは action: "more_like_this" を持つ商品に類似した追加商品を元の商品とともに返すべきです
  • セールスエージェントはレスポンスを構成する際にリクエストレベルの ask(scope: "request")を考慮すべきだ — これにより明示的に参照された商品以外の追加商品が含まれる場合があります。商品ごとのアクションはリクエストレベルの指示より優先されます。
  • セールスエージェントは action: "include" を持つプロポーザルエントリの ask を満たすべきです
  • セールスエージェントはレスポンスに refinement_applied を含めるべきで、位置でマッチした各変更リクエストに1エントリを持ちます
  • セールスエージェントはオーケストレーターがプロポーザルエントリを含めていない場合でも、リファインモードで商品と並んでプロポーザルを返してもよい

list_creative_formats

スキーマ: media-buy/list-creative-formats-request.json / media-buy/list-creative-formats-response.json リファレンス: list_creative_formats タスク クリエイティブフォーマットの要件と仕様を発見します。 要件:
  • セールスエージェントはサポートするすべてのクリエイティブフォーマットを返さなければなりません
  • セールスエージェントは各フォーマットの技術仕様を含めなければなりません
  • セールスエージェントは該当する場合、クリエイティブプロトコルの標準フォーマットIDを参照すべきです

create_media_buy

スキーマ: media-buy/create-media-buy-request.json / media-buy/create-media-buy-response.json リファレンス: create_media_buy タスク 選択したパッケージからメディアバイを作成するか、プロポーザルを実行します。 要件:
  • オーケストレーターは packages 配列または proposal_id のいずれかを含めなければなりません
  • オーケストレーターはキャンペーンの start_timeend_time を含めなければなりません
  • セールスエージェントは作成成功時に media_buy_id を返さなければなりません
  • セールスエージェントはクリエイティブをアップロードしなければなりません期限を示す creative_deadline を返さなければなりません
  • セールスエージェントは価格オプションに対して予算を検証しなければなりません
  • 検証失敗時、セールスエージェントは errors 配列を返さなければなりません

update_media_buy

スキーマ: media-buy/update-media-buy-request.json / media-buy/update-media-buy-response.json リファレンス: update_media_buy タスク 既存のメディアバイの予算、ターゲティング、または設定を変更します。 要件:
  • オーケストレーターは media_buy_id を含めなければなりません
  • セールスエージェントは PATCH セマンティクスを適用しなければなりません: 指定されたフィールドのみ更新され、省略されたフィールドは変更されない
  • セールスエージェントはステータスが completed のメディアバイへの更新をエラーコード INVALID_STATE で拒否しなければなりません
  • セールスエージェントは更新適用後(または承認保留中の場合は提案された状態)の直接変更された各パッケージの状態を含む affected_packages を返さなければなりません。キャンペーンレベルのフィールド(例: pausedstart_time)のみが更新される場合は空の配列も有効です
  • 手動承認が必要な場合、セールスエージェントは保留中の更新リクエストを永続化しなければならず、implementation_date: null を返さなければならず、空の affected_packages を返してはなりません
  • セールスエージェントは更新されたメディアバイの状態を返すべきです

sync_catalogs

スキーマ: media-buy/sync-catalogs-request.json / media-buy/sync-catalogs-response.json リファレンス: sync_catalogs タスク セラーアカウントのカタログ(商品、インベントリ、ストア、垂直フィード)を同期します。 要件:
  • オーケストレーターは account_id を含めなければなりません
  • catalogs が提供される場合、少なくとも1つのカタログを含めなければなりません
  • catalogs が省略された場合、そのコールは発見のみを目的とし、変更なしに既存のカタログを返す
  • セールスエージェントはカタログごとの結果を返さなければならず、取られたアクションとアイテムレベルの問題を含めます
  • セールスエージェントは変更を適用せずに検証するための dry_run をサポートすべきです

list_creatives

list_creativesクリエイティブプロトコル で定義されています。クリエイティブライブラリをホストするセールスエージェントはクリエイティブプロトコルの一部として list_creatives を実装してもよい。list_creatives タスクリファレンスを参照すること。

sync_creatives

sync_creativesクリエイティブプロトコル で定義されています。クリエイティブライブラリをホストするエージェントはクリエイティブプロトコルの一部として sync_creatives を実装します。sync_creatives タスクリファレンスを参照すること。

get_media_buys

スキーマ: media-buy/get-media-buys-request.json / media-buy/get-media-buys-response.json リファレンス: get_media_buys タスク パッケージステータス、クリエイティブ承認、不足フォーマット、オプションの配信スナップショットを含む運用上のメディアバイ状態を取得します。 要件:
  • オーケストレーターは account_idmedia_buy_idsstatus_filter でフィルタリングしてもよい
  • オーケストレーターは広範なスコープのクエリに対してカーソルページネーション(pagination.max_results / pagination.cursor)を使用すべきです
  • セールスエージェントは一致した各メディアバイの現在のメディアバイステータスとパッケージレベルの運用状態を返さなければなりません
  • セールスエージェントはメディアバイ通貨を含めなければならず、通貨フィールドを一貫して表示しなければなりません(snapshot.currency -> package.currency -> media_buy.currency
  • セールスエージェントは利用可能な場合、クリエイティブ承認結果と保留中のフォーマット要件を含めるべきです
  • include_snapshot が true でパッケージのスナップショットデータが省略される場合、セールスエージェントは snapshot_unavailable_reason を返さなければなりません
  • include_snapshot が true でスナップショットが返される場合、各スナップショットは as_ofstaleness_seconds を含めなければなりません
  • デフォルトの status_filter: ["active"]media_buy_ids が省略された場合のみ適用されます

get_media_buy_delivery

スキーマ: media-buy/get-media-buy-delivery-request.json / media-buy/get-media-buy-delivery-response.json リファレンス: get_media_buy_delivery タスク パフォーマンス指標とキャンペーン配信をトラッキングします。 要件:
  • オーケストレーターは media_buy_id を含めなければなりません
  • セールスエージェントはパッケージレベルで配信指標を返さなければなりません
  • セールスエージェントはリクエストされた場合、次元ごとの内訳を含めるべきです
  • セールスエージェントはデータの鮮度を示す as_of タイムスタンプを含めなければなりません

provide_performance_feedback

スキーマ: media-buy/provide-performance-feedback-request.json / media-buy/provide-performance-feedback-response.json リファレンス: provide_performance_feedback タスク パブリッシャーの最適化を可能にするためのパフォーマンスシグナルを送信します。 要件:
  • オーケストレーターは media_buy_id とパフォーマンス指標を含めなければなりません
  • セールスエージェントはフィードバックの受信を確認しなければなりません
  • セールスエージェントはキャンペーン制約内での配信最適化にフィードバックを使用すべきです

sync_event_sources

スキーマ: media-buy/sync-event-sources-request.json / media-buy/sync-event-sources-response.json リファレンス: sync_event_sources タスク アップサートセマンティクスでコンバージョントラッキング用のイベントソースをセラーアカウントに設定します。 要件:
  • オーケストレーターは account_id を含めなければなりません
  • event_sources が提供される場合、少なくとも1つのイベントソースを含めなければなりません
  • event_sources が省略された場合、そのコールは発見のみを目的とし、変更なしにアカウントのすべてのイベントソースを返す
  • セールスエージェントは何が起きたかを示す action を含むソースごとの結果を返さなければなりません
  • セールスエージェントは存在する場合、セラー管理のイベントソースをレスポンスに含めなければなりません
  • セールスエージェントは新しく作成されたイベントソースの setup 手順を返すべきです
  • セールスエージェントはセラーのプラットフォームでのクロスリファレンス用に seller_id を含めてもよい

log_event

スキーマ: media-buy/log-event-request.json / media-buy/log-event-response.json リファレンス: log_event タスク アトリビューションと最適化のためのコンバージョンまたはマーケティングイベントを送信します。 要件:
  • オーケストレーターは設定済みのイベントソースを参照する event_source_id を含めなければなりません
  • オーケストレーターは event_idevent_typeevent_time を持つ少なくとも1つのイベントを含めなければなりません
  • セールスエージェントは events_receivedevents_processed のカウントを返さなければなりません
  • セールスエージェントは event_id + event_type + event_source_id でイベントを重複排除しなければなりません
  • セールスエージェントは個別に失敗したイベントの partial_failures を報告すべきです
  • セールスエージェントはユーザーマッチングが試みられた場合、match_quality スコアを返すべきです

sync_audiences

スキーマ: media-buy/sync-audiences-request.json / media-buy/sync-audiences-response.json リファレンス: sync_audiences タスク セラーアカウントでファーストパーティ CRM オーディエンスを管理します。ハッシュ化された顧客リストをアップロードし、マッチングステータスを確認し、ターゲティングオーバーレイで結果のオーディエンスを参照します。 要件:
  • オーケストレーターは account_id を含めなければなりません
  • オーケストレーターはハッシュ化されたメンバーデータを持つ少なくとも1つのオーディエンスを含めなければなりません
  • セールスエージェントはマッチングステータスを含むオーディエンスごとの結果を返さなければなりません
  • セールスエージェントは非同期マッチング完了のための push_notification_config をサポートすべきです
  • セールスエージェントはプライバシーコンプライアンスのために SHA-256 ハッシュ化された識別子を受け入れなければなりません

エラーハンドリング

セールスエージェントは AdCP 標準エラースキーマ を使用してエラーを返さなければなりません。 一般的なエラーコード:
  • MEDIA_BUY_NOT_FOUND: 参照されたメディアバイが存在しません
  • PACKAGE_NOT_FOUND: 参照されたパッケージが存在しません
  • PRODUCT_NOT_FOUND: 参照された商品が存在しません
  • BUDGET_EXCEEDED: 操作が割り当て予算を超過します
  • CREATIVE_REJECTED: クリエイティブが検証または承認に失敗しました
  • INVALID_STATE: メディアバイの現在のステータスではその操作が許可されていない(例: 完了したメディアバイの更新)
  • VALIDATION_ERROR: リクエストフォーマットまたはパラメータのエラー
  • UNAUTHORIZED: 操作に対する権限が不足しています

セキュリティの考慮事項

トランスポートセキュリティ

すべてのメディアバイプロトコル通信は TLS 1.2 以上の HTTPS を使用しなければなりません。

認証

  • オーケストレーターは有効な認証情報を使用してセールスエージェントに対して認証しなければなりません
  • セールスエージェントはリクエストを処理する前に認証情報を検証しなければなりません
  • セールスエージェントはインベントリアクセスを決定するためにアカウントコンテキストを使用しなければなりません

予算認可

  • セールスエージェントはアカウントが要求された予算レベルに対して認可されているかを検証しなければなりません
  • セールスエージェントは明示的な承認なしに認可された予算上限を超えてはなりません

クリエイティブセキュリティ

  • セールスエージェントはポリシー準拠のためにクリエイティブコンテンツを検証しなければなりません
  • セールスエージェントはクリエイティブのマルウェアおよび悪意のあるコンテンツをスキャンすべきです
  • セールスエージェントはセキュリティ検証に失敗したクリエイティブを配信してはなりません

適合性

セールスエージェントの適合性

適合するメディアバイプロトコルのセールスエージェントは以下を行わなければなりません:
  1. 指定されたトランスポート(MCP または A2A)のうち少なくとも1つをサポートします
  2. スキーマに従ってすべてのタスクを実装します
  3. レスポンススキーマで定義された必須フィールドを返す
  4. 指定されたエラーコードを使用します
  5. 非同期オペレーションを適切に処理します
  6. 認証と認可を強制します

オーケストレーターの適合性

適合するメディアバイプロトコルのオーケストレーターは以下を行わなければなりません:
  1. セールスエージェントに対して認証します
  2. リクエストスキーマで定義された必須フィールドを含めます
  3. 非同期レスポンス(submitted、working、pending_approval)を処理します
  4. 後続の操作でメディアバイを参照するために media_buy_id を使用します
  5. クリエイティブアップロードの creative_deadline を遵守します

実装ノート

レスポンスタイムの目安

セールスエージェントは以下のレスポンスタイムを目標とすべきだ:
オペレーション種別目標レイテンシ
単純な参照(list_creative_formats)1秒未満
AI/LLM を使った発見(get_products)60秒未満
レポートクエリ(get_media_buy_delivery)60秒未満
キャンペーン操作(create、update、sync)非同期でも可

冪等性

セールスエージェントは idempotency_key を使った冪等なオペレーションをサポートすべきだ:
  • 同じアカウントに対して idempotency_key が以前に見られた場合、セールスエージェントは既存のリソースを返すべきです
  • これにより重複作成なしに安全なリトライが可能になります
ミューテーションタスク(update_media_buysync_creatives)では、オーケストレーターは安全なリトライのために idempotency_key(16〜255文字)を含めてもよい。レスポンスなしでリクエストが失敗した場合、同じ idempotency_key で再送することで最大1回の実行が保証されます。

人間参加型

セールスエージェントはどの操作に対しても人間の承認を要求してもよい。承認が必要な場合:
  • セールスエージェントは status: "pending_approval" を返さなければなりません
  • セールスエージェントは推定承認タイムラインを提供すべきです
  • オーケストレーターはステータス更新のための Webhook ハンドラーを実装すべきです

スキーマリファレンス

スキーマ説明
media-buy/get-products-request.jsonget_products リクエスト
media-buy/get-products-response.jsonget_products レスポンス
media-buy/create-media-buy-request.jsoncreate_media_buy リクエスト
media-buy/create-media-buy-response.jsoncreate_media_buy レスポンス
media-buy/update-media-buy-request.jsonupdate_media_buy リクエスト