AdCP 3.0 提案 - この仕様は AdCP 3.0 向けに開発中です。フィードバックは GitHub Discussions から歓迎します。
概要
メディアバイプロトコルは、AI による広告自動化のための標準インターフェースを定義します。このプロトコルにより、AIエージェントは広告インベントリの発見、キャンペーンの作成・管理、クリエイティブアセットの同期、自然言語インタラクションを通じたパフォーマンストラッキングを行えるようになります。プロトコルの概要
メディアバイプロトコルが提供する機能:- キャンペーンブリーフに基づく自然言語によるインベントリ発見
- パッケージレベルの予算とターゲティングを伴うキャンペーン作成
- クリエイティブアセットの管理と同期
- パフォーマンストラッキングと最適化フィードバック
- 人間参加型の承認ワークフロー
トランスポート要件
セールスエージェントは以下のトランスポートのうち少なくとも1つをサポートしなければなりません。| トランスポート | プロトコル | 説明 |
|---|---|---|
| MCP | Model Context Protocol | JSON-RPC によるツールベースのインタラクション |
| A2A | Agent-to-Agent | メッセージベースのインタラクション |
get_adcp_capabilities を通じてメディアバイプロトコルのサポートを宣言しなければなりません。
コアコンセプト
リクエストロール
すべてのメディアバイリクエストには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内の各商品エントリおよびプロポーザルエントリにscope、id、actionを提供しなければなりません - オーケストレーターは単一の
refine配列に同一の商品IDまたはプロポーザルIDを持つ複数のエントリを含めてはなりません - セールスエージェントはブリーフが提供された場合、ブリーフ条件に一致する商品を返さなければなりません
- セールスエージェントは各商品に
product_idとpricing_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_timeとend_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を返さなければなりません。キャンペーンレベルのフィールド(例:paused、start_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_id、media_buy_ids、status_filterでフィルタリングしてもよい - オーケストレーターは広範なスコープのクエリに対してカーソルページネーション(
pagination.max_results/pagination.cursor)を使用すべきです - セールスエージェントは一致した各メディアバイの現在のメディアバイステータスとパッケージレベルの運用状態を返さなければなりません
- セールスエージェントはメディアバイ通貨を含めなければならず、通貨フィールドを一貫して表示しなければなりません(
snapshot.currency->package.currency->media_buy.currency) - セールスエージェントは利用可能な場合、クリエイティブ承認結果と保留中のフォーマット要件を含めるべきです
include_snapshotが true でパッケージのスナップショットデータが省略される場合、セールスエージェントはsnapshot_unavailable_reasonを返さなければなりませんinclude_snapshotが true でスナップショットが返される場合、各スナップショットはas_ofとstaleness_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_id、event_type、event_timeを持つ少なくとも1つのイベントを含めなければなりません - セールスエージェントは
events_receivedとevents_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 を使用しなければなりません。認証
- オーケストレーターは有効な認証情報を使用してセールスエージェントに対して認証しなければなりません
- セールスエージェントはリクエストを処理する前に認証情報を検証しなければなりません
- セールスエージェントはインベントリアクセスを決定するためにアカウントコンテキストを使用しなければなりません
予算認可
- セールスエージェントはアカウントが要求された予算レベルに対して認可されているかを検証しなければなりません
- セールスエージェントは明示的な承認なしに認可された予算上限を超えてはなりません
クリエイティブセキュリティ
- セールスエージェントはポリシー準拠のためにクリエイティブコンテンツを検証しなければなりません
- セールスエージェントはクリエイティブのマルウェアおよび悪意のあるコンテンツをスキャンすべきです
- セールスエージェントはセキュリティ検証に失敗したクリエイティブを配信してはなりません
適合性
セールスエージェントの適合性
適合するメディアバイプロトコルのセールスエージェントは以下を行わなければなりません:- 指定されたトランスポート(MCP または A2A)のうち少なくとも1つをサポートします
- スキーマに従ってすべてのタスクを実装します
- レスポンススキーマで定義された必須フィールドを返す
- 指定されたエラーコードを使用します
- 非同期オペレーションを適切に処理します
- 認証と認可を強制します
オーケストレーターの適合性
適合するメディアバイプロトコルのオーケストレーターは以下を行わなければなりません:- セールスエージェントに対して認証します
- リクエストスキーマで定義された必須フィールドを含めます
- 非同期レスポンス(submitted、working、pending_approval)を処理します
- 後続の操作でメディアバイを参照するために
media_buy_idを使用します - クリエイティブアップロードの
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_buy、sync_creatives)では、オーケストレーターは安全なリトライのために idempotency_key(16〜255文字)を含めてもよい。レスポンスなしでリクエストが失敗した場合、同じ idempotency_key で再送することで最大1回の実行が保証されます。
人間参加型
セールスエージェントはどの操作に対しても人間の承認を要求してもよい。承認が必要な場合:- セールスエージェントは
status: "pending_approval"を返さなければなりません - セールスエージェントは推定承認タイムラインを提供すべきです
- オーケストレーターはステータス更新のための Webhook ハンドラーを実装すべきです
スキーマリファレンス
| スキーマ | 説明 |
|---|---|
media-buy/get-products-request.json | get_products リクエスト |
media-buy/get-products-response.json | get_products レスポンス |
media-buy/create-media-buy-request.json | create_media_buy リクエスト |
media-buy/create-media-buy-response.json | create_media_buy レスポンス |
media-buy/update-media-buy-request.json | update_media_buy リクエスト |