AdCP 3.0 提案 - この仕様は AdCP 3.0 向けに開発中です。フィードバックは GitHub Discussions から歓迎します。
3.1 の正準フォーマット: このページは v1 の仕様モデルを説明します。正準フォーマットのモデル(プロダクト上のインラインステータス: コメント募集中 最終更新: 2026年3月 このドキュメントの “MUST”、“MUST NOT”、“REQUIRED”、“SHALL”、“SHALL NOT”、“SHOULD”、“SHOULD NOT”、“RECOMMENDED”、“MAY”、“OPTIONAL” というキーワードは RFC 2119 に記載の通りに解釈します。format_options、validate_inputプリミティブ)については、canonical-formats とマイグレーションガイドを参照してください。
概要
クリエイティブプロトコルは、クリエイティブフォーマット発見、マニフェスト検証、クリエイティブ生成、プレビューレンダリングのための標準インターフェースを定義します。このプロトコルにより、AI エージェントが広告プラットフォーム全体でフォーマット仕様を発見し、準拠したクリエイティブアセットをビルドし、プレビューを生成できます。プロトコル概要
クリエイティブプロトコルが提供するもの:- 完全な技術仕様を持つフォーマット発見
- フォーマット要件に対するマニフェスト検証
- AI 搭載のクリエイティブ生成と変換
- クリエイティブ検証のためのプレビューレンダリング
- クロスプラットフォームトラッキング用ユニバーサルマクロ
トランスポート要件
クリエイティブエージェントは以下のトランスポートのうち少なくとも1つをサポートしなければなりません (MUST):
クリエイティブエージェントは優先トランスポートとして MCP をサポートすべきだ (SHOULD)。
クリエイティブエージェントは
get_adcp_capabilities を通じてクリエイティブプロトコルのサポートを宣言しなければなりません (MUST):
creative ケイパビリティはバイヤーに対してこのエージェントがサポートするインタラクションモデルを伝える。以下のインタラクションモデルを参照。
コアコンセプト
クリエイティブエージェント
クリエイティブエージェントはクリエイティブプロトコルを実装するすべてのエージェントです。スタンドアロンサービス(広告サーバー、クリエイティブ管理プラットフォーム、ジェネレーティブツール)と、supported_protocols に "creative" を宣言するセールスエージェントを含みます。クリエイティブエージェントは:
- 自身が所有するフォーマットを定義・文書化します
- フォーマット要件に対してマニフェストを検証します
- クリエイティブがどのようにレンダリングされるかを示すプレビューを生成します
- オプションで自然言語ブリーフからクリエイティブを生成または変換します
インタラクションモデル
クリエイティブエージェントはケイパビリティに応じてさまざまな役割を担う。バイヤーはget_adcp_capabilities を使用してどのインタラクションモデルが適用されるかを判断する:
これらのモデルは組み合わせ可能だ — エージェントは複数をサポートできます。
supports_generation: true と has_creative_library: true を持つクリエイティブ広告サーバーは、ブリーフからクリエイティブを生成することも、ライブラリから既存のものを取得することもできます。supports_compliance フラグは直交している — どのインタラクションモデルもブリーフのコンプライアンス要件をサポートできます。
モデル別バイヤーワークフロー:
- 変換:
list_creative_formats→build_creative(creative_manifest+target_format_idを使用) - 生成:
list_creative_formats→build_creative(message+target_format_idを使用) - ライブラリ取得:
list_creatives→build_creative(creative_id+target_format_idを使用)
list_creative_formats で pricing_options を公開し、build_creative のレスポンスで価格を返します。ビルド出力に creative_id を永続化するエージェントは、list_creatives でも価格を公開できます。無料の変換エージェントはステートレスのまま、変更されません。
フォーマットオーソリティ
各フォーマットはフォーマット ID のagent_url で識別される唯一の権威あるクリエイティブエージェントを持ちます:
フォーマット
フォーマットはアセットがどのようにアセンブルされてレンダリングされるかを定義します。フォーマットは以下を指定します:- メディアファミリ(display、video、audio、dooh)
- 必須および任意アセットタイプ
- 技術的制約(ディメンション、デュレーション、ファイルサイズ、コーデック)
- レンダリング動作とインタラクション期待値
アセット
アセットはクリエイティブの構成要素です。アセットタイプには以下が含まれます:- image: 静止画像(JPEG、PNG、WebP、GIF)
- video: ビデオファイル(MP4、WebM、MOV)または VAST タグ
- audio: オーディオファイル(MP3、M4A)または DAAST タグ
- text: ヘッドライン、説明文、CTA
- html: HTML5 クリエイティブまたはサードパーティタグ
- javascript: JavaScript タグ
- url: トラッキングピクセル、クリックスルー URL
マニフェスト
マニフェストはフォーマット仕様と実際のアセットコンテンツを組み合わせます。マニフェストは以下を提供します:- フォーマット参照(agent_url + id)
- フォーマットの asset_id をキーとしたアセット値
- トラッキング URL とマクロ
ユニバーサルマクロ
AdCP はクロスプラットフォームトラッキング用のユニバーサルマクロを定義します。クリエイティブエージェントはトラッキング URL でこれらのマクロをサポートしなければなりません (MUST):{TIMESTAMP}: Unix タイムスタンプ{CACHEBUSTER}: ランダムなキャッシュ無効化値{CLICK_URL}: クリックトラッキング URL{REDIRECT_URL}: 最終宛先 URL
クリエイティブステータスのライフサイクル
スキーマ:enums/creative-status.json
ライブラリ内のクリエイティブは、定義された状態の集合を進みます。ほとんどの遷移はセラー起点です(processing、review、approval/rejection)。suspended は、依存関係が利用不能になった承認済みクリエイティブ(例: 期限切れの公開済み投稿の認可)のための回復可能なオフライン状態です。archived は、バイヤーのクリーンアップによって、またはアクティブな割り当てのないクリエイティブに対するセラー側のライフサイクルポリシーによって到達します——下記のルールを参照。
processing→pending_review: 取り込みとトランスコードが成功したときに自動processing→rejected: 処理が失敗したときに自動(破損ファイル、サポートされないコーデック、制約違反)pending_review→approved: セラーがコンテンツポリシーのレビュー後に承認pending_review→rejected: セラーがrejection_reasonとともに拒否approved→suspended: セラーが回復可能な依存関係/認可の喪失を検出(例:published_post参照のidentity_authorization_revoked、identity_authorization_expired、source_private)。セラーは影響を受けるアクティブなバイに対応するimpairmentを表面化しなければなりません(MUST)。suspended→approved: セラーが依存関係が回復されたことを観測し、必要な再レビューが通る。suspended→rejected: セラーが、以前は回復可能だった依存関係/認可の喪失をこのクリエイティブについて回復できない、または置換/再提出が必要と判断。例:published_post参照の失効したアイデンティティ/投稿の認可を再認可できない。セラーは、クリエイティブが置換・再割り当てされるか、パッケージ/バイがそれ以外の方法で是正されるまで、影響を受けるアクティブなバイを impaired に保たなければなりません(MUST)。approved→archived(バイヤー起点): バイヤーがsync_creativesを通じてアーカイブを発行approved→archived(セラー起点): セラーが、非アクティブ、フライト後の期限切れ、またはストレージポリシーのために未割り当てのクリエイティブをアーカイブ。セラーは、アクティブなパッケージ割り当てを持つクリエイティブをセラーアーカイブしてはなりません(MUST NOT)——アクティブな配信が関与する場合、影響を受けるバイにimpairmentを伴うapproved→rejected(失効)のパスが唯一の準拠ルートです。セラー起点のアーカイブの状態変更の可観測性はクリエイティブ保持の契約に従います——最小限、新しいstatusが次のlist_creativesの読み取りで可視でなければなりません(MUST)。archived→approved:sync_creativesを通じたバイヤー起点(アーカイブ解除)。セラーは再レビューを要求し、代わりにpending_reviewへ遷移してもよい(MAY)。rejected→processing: バイヤーがクリエイティブを修正しsync_creativesを通じて再提出。クリエイティブは完全な処理とレビューのパイプラインに再入します。approved→pending_review: セラー起点の再レビュー(例: ポリシー変更)。以前承認されたクリエイティブが再レビューのために引き戻されたとき、セラーはcreative.status_changedを通じてサブスクライバーに通知しなければなりません(MUST)(event_types[]にこの値を含む各notification_configs[]サブスクライバーに発火——下記を参照)。
rejected クリエイティブを参照する操作(例: パッケージへの割り当て)をエラーコード CREATIVE_REJECTED で拒否しなければなりません(MUST)。クリエイティブエージェントはまた、依存関係が回復されるまで suspended クリエイティブの配信を防がなければなりません(MUST)。
クリエイティブエージェントは、list_creatives レスポンスに status と(拒否時は)rejection_reason を含めなければなりません(MUST)。
ライフサイクルウェブフック
セラー起点およびシステム起点の遷移は、アカウントのnotification_configs[] サブスクライバーに対してプッシュ通知を発火します——event_types[] に発火されたタイプを含む各エントリが独立した発火を受け取ります。二つのイベントタイプがこの面をカバーします:
creative.status_changed— すべてのセラー起点またはシステム起点の遷移で発火:pending_review → approved/rejected、approved → pending_review(再レビュー)、approved → suspended(回復可能な依存関係/認可の喪失)、suspended → approved(回復)、suspended → rejected(終端の依存関係/認可の喪失)、approved → rejected(承認後の失効)、approved → archived(セラー起点)。ペイロード:creative-status-changed-webhook.json。creative.purged— クリエイティブが破棄されたときに発火(保持のスイープ、テイクダウン、法的消去)。softパージはlist_creatives(include_purged: true)上に 30 日間トゥームストーンを保持します。hardパージはレコードを保持しません——ウェブフックがバイヤーの唯一のシグナルです。ペイロード:creative-purged-webhook.json。
sync_creatives のレスポンスパスで確認応答されます。プッシュチャネルは、バイヤーが起こさなかった遷移のためだけに存在します。
両イベントは、creative-event-reason-code.json から引かれるカテゴリカルな reason_code を運びます。理由コードごとのバイヤー側の是正は、列挙の enumDescriptions にインラインで文書化されています。
クリエイティブがアクティブな配信を壊す状態(approved → suspended、approved → rejected、suspended → rejected、または割り当てが存在する間のセラー起点の approved → archived——これは非準拠。上記の遷移ルールを参照)へ遷移するとき、セラーはそのクリエイティブを参照するすべてのメディアバイに対応する impairment も表面化しなければなりません(MUST)(メディアバイの健全性を参照)。クリエイティブ側の creative.status_changed とバイ側の impairment はペアだが別個のシグナルです。バイヤーは creative_id で相関させます。二つの面は異なるアンカーを持ちます: クリエイティブイベントはアカウントレベルで発火し(サブスクリプションは任意の一つのバイより長生き)、impairment はバイごとに発火します。ペアの発火の間に順序の保証はありません——バイヤーは一方が他方より前に届くと仮定してはなりません(MUST NOT)。スナップショット(list_creatives と get_media_buys)を介して突き合わせてください。
セラーは、サポートするイベントタイプとタイプごとの合体ウィンドウを get_adcp_capabilities を通じて宣言します。デフォルトの合体は creative.status_changed で 5 分です。セラーは creative.purged を合体してはなりません(MUST NOT)。遡及的な契約: セラーがこれらのイベントタイプのサポートを宣言すると、その義務はライブラリ内のすべてのクリエイティブをカバーします——既存のクリエイティブに猶予期間はありません。
バイヤーは、include_webhook_activity: true を伴う list_creatives を通じて、クリエイティブごとの最近のウェブフック発火をプルしてもよい(MAY)。読み取り面は webhook_activity[] の採用チェックリストに従います——30 日保持、三状態の存在セマンティクス、バイヤー側のエンドポイントログへの idempotency_key 相関。
価格
サービスに課金するクリエイティブエージェントは、シグナルエージェントやコンテンツ標準エージェントが使うのと同じ 発見 → ビルド → レポート のループを通じて価格を公開します。価格発見の面
価格は、エージェントのインタラクションモデルに応じて二つの面を通じて発見されます:list_creatives— アドサーバーとライブラリベースのエージェントは、各クリエイティブにpricing_options[]を公開します。バイヤーは使いたい特定のクリエイティブの価格を発見します。list_creative_formats— 変換および生成エージェントは、各フォーマットにpricing_options[]を公開します。バイヤーは、クリエイティブが存在する前に、エージェントが生成できるフォーマットの価格を発見します。
vendor-pricing-option オブジェクトの同じ pricing_options[] 配列を使います。両方ともリクエストに account と include_pricing: true を必要とします。
エージェントは両方の面で価格を公開してもよい(MAY)(例: ライブラリと変換機能の両方を持つクリエイティブ管理プラットフォーム)。
価格のフロー
- アカウントのセットアップ — レートカードが合意されます。後続のすべての操作の価格を決定します。
- 発見 —
accountとinclude_pricing: trueを伴うlist_creativesまたはlist_creative_formatsがpricing_options[]を返します。ベンダーは複数のオプションを提供できます(ボリュームティア、コンテキスト固有のレート、プロダクトラインごとの異なるモデル)。 - ビルド —
accountを伴うbuild_creative。エージェントがコストを計算し、レスポンスでpricing_option_id、vendor_cost、currency、consumptionを返します。 - レポート — 照合のための
creative_idとpricing_option_idを伴うreport_usage。
価格モデル
クリエイティブエージェントは、vendor-pricing-option.json で定義されたベンダー価格モデルを再利用します:
消費の詳細
スキーマ:core/creative-consumption.json
build_creative のレスポンスには、何が消費されたかについての構造化された詳細を持つ consumption オブジェクトが含まれます。既知のフィールド: tokens(消費された LLM トークン)、images_generated、renders(レンダーパス)、duration_seconds(処理時間)。エージェントは追加のフィールドを含めてもよい(MAY)。
consumption オブジェクトは情報提供です——バイヤーが vendor_cost がレートカードと整合していることを検証できるようにします。vendor_cost が請求の信頼できる情報源です。
アカウントの要件
サービスに課金するクリエイティブエージェントは、Accounts プロトコルを実装しなければなりません(MUST)。これは価格を持つ任意のクリエイティブエージェントに適用されます——アドサーバー、生成プラットフォーム、使用に課金する変換エージェント。バンドルモード
パブリッシャーがクリエイティブエージェントを内部で(バンドルして)使う場合、バイヤーはクリエイティブエージェントの価格を決して見ません。コストはプロダクト価格に吸収されます。セールスエージェントがクリエイティブエージェントとの関係におけるバイヤーです——アカウントを確立し、build_creative を呼び、report_usage を扱います。プロトコルの面は同じです。
タスク
クリエイティブプロトコルは以下のタスクを定義します。完全なリクエスト/レスポンスのスキーマと例についてはタスクリファレンスページを参照。list_creative_formats
リファレンス:list_creative_formats タスク
クリエイティブフォーマットとその仕様を発見します。
要件:
- クリエイティブエージェントは自身が所有するフォーマットの完全なフォーマット仕様を返さなければなりません (MUST)
- クリエイティブエージェントは各フォーマットの権威あるエージェントを識別する
agent_urlを含めなければなりません (MUST) - クリエイティブエージェントはフォーマット定義に技術的制約(ディメンション、デュレーション、ファイルタイプ)を含めなければなりません (MUST)
- クリエイティブエージェントは追加フォーマットを提供する他のクリエイティブエージェントへの参照を含めてもよい (MAY)
format_idsでフィルタリングする場合、クリエイティブエージェントはリクエストされたフォーマットのみを返さなければなりません (MUST)
list_transformers
リファレンス:list_transformers タスク
クリエイティブエージェントが提供する、アカウントスコープのトランスフォーマーを発見します——メディアバイのプロダクトのクリエイティブ版: エージェントが提供する選択可能なビルド能力の単位(声、モデル、スタイル)で、build_creative の transformer_id で選択します。get_adcp_capabilities で creative.supports_transformers: true を宣言するエージェントのみが提供します。
要件:
creative.supports_transformers: trueを設定するクリエイティブエージェントはlist_transformersを実装しなければなりません(MUST)- クリエイティブエージェントは、呼び出し元のアカウント向けにトランスフォーマー、その列挙可能なオプション値、価格を解決しなければなりません(MUST)——そのアカウント向けに設定されたカスタム値(例: クローンされた声)を含む
- クリエイティブエージェントは、
expand_paramsで名指しされた各fieldについて、アカウントスコープのオプション値をparams[].options[]にインラインで返さなければならず(MUST)、それ以外では省略すべきです(SHOULD) include_pricingが true の場合、課金するクリエイティブエージェントは各トランスフォーマーにpricing_options(per_unitモデル)を含めなければなりません(MUST)
build_creative
リファレンス:build_creative タスク
クリエイティブマニフェストを変換、生成、または取得します。3つのモードをサポートする:
- 生成: ブリーフまたはシードアセットからマニフェストを作成します
- 変換: 既存のマニフェストを別のフォーマットに適応させる
- ライブラリ取得: エージェントのライブラリから
creative_idを解決し、広告配信アセット(HTML/JavaScript/VAST タグ)を含むマニフェストを返す
- クリエイティブエージェントはフォーマット要件に対して入力マニフェストを検証しなければなりません (MUST)
- クリエイティブエージェントは成功時にターゲットフォーマットの有効なマニフェストを返さなければなりません (MUST)
- クリエイティブエージェントは変換が完了できない場合に検証エラーを返さなければなりません (MUST)
- クリエイティブエージェントは変換中にトラッキング URL とマクロを保持すべきだ (SHOULD)
- クリエイティブエージェントはジェネレーティブタスクの
qualityを尊重すべきだ (SHOULD)("draft"は高速反復、"production"は最終配信)。非ジェネレーティブ変換では無視してもよい (MAY) - クリエイティブエージェントは
item_limitが存在する場合、item_limitとフォーマットのmax_itemsの小さい方を使用すべきだ (SHOULD) - クリエイティブエージェントは生成タスクに AI/LLM 処理を使用してもよい (MAY)
creative_idが提供された場合、クリエイティブエージェントはライブラリからクリエイティブを解決しなければなりません (MUST)macro_valuesが提供された場合、クリエイティブエージェントは出力マニフェストのアセット内で指定されたマクロを代入し、未解決のマクロを{MACRO}プレースホルダーとして残すべきだ (SHOULD)- クリエイティブエージェントは
macro_valuesの未認識のマクロキーを無視しなければなりません (MUST) — 未知のマクロはエラーではありません - クリエイティブエージェントはグローバルに一意な
creative_id値を割り当てるべきだ (SHOULD)。一意性を保証できない場合、concept_idはbuild_creativeリクエストで曖昧さを解消するために REQUIRED だ build_creativeは重大な時間がかかる生成および変換タスクに対して非同期レスポンス(context_idポーリングを持つstatus: "working")をサポートします。ライブラリ取得は通常同期的ですaccountが提供されエージェントが課金する場合、レスポンスはpricing_option_id、vendor_cost、currencyを含めなければなりません(MUST)。consumptionオブジェクトは関連する場合に含めるべきです(SHOULD)- 非同期ビルドでは、価格フィールドは中間のステータスレスポンスではなく、最終的な完了レスポンスにのみ現れます
- 課金するクリエイティブエージェントが
accountなしでbuild_creativeリクエストを受け取り、そのエージェントがアカウントを必要とする場合、エージェントはエラーを返さなければなりません(MUST)
preview_creative
リファレンス:preview_creative タスク
クリエイティブマニフェストのプレビューレンダリングを生成します。
要件:
- クリエイティブエージェントはプレビュー生成前にマニフェストを検証しなければなりません (MUST)
- クリエイティブエージェントは有効なマニフェストのプレビュー URL または HTML を返さなければなりません (MUST)
- クリエイティブエージェントは、プレビュー URL をその
expires_atタイムスタンプまで参照解決可能に保たなければなりません(MUST)。expires_atが省略された場合、プレビュー URL はプロトコル層では期限切れにならず、エージェントが帯域外で明示的に失効させるまで有効なままです。 - クリエイティブエージェントは、時間制限付きのプレビュー URL には
expires_atを含めるべきだ (SHOULD) - クリエイティブエージェントは複数のクリエイティブのバッチプレビューをサポートすべきだ (SHOULD)
- クリエイティブエージェントは複数の出力フォーマット(URL、HTML、画像)をサポートしてもよい (MAY)
list_creatives
スキーマ:creative/list-creatives-request.json / creative/list-creatives-response.json
リファレンス: list_creatives タスク
クリエイティブライブラリ内のクリエイティブアセットを閲覧・フィルタリングします。クリエイティブライブラリをホストするすべてのエージェント — 広告サーバー、クリエイティブ管理プラットフォーム、クリエイティブを管理するセールスエージェント — が実装します。
要件:
- エージェントは認証済みアカウントからアクセス可能なクリエイティブを返さなければなりません (MUST)
- エージェントは各クリエイティブの承認ステータスを含めなければなりません (MUST)
- エージェントはフォーマット、ステータス、タグ、日付範囲によるフィルタリングをサポートすべきだ (SHOULD)
- プラットフォームがクリエイティブをコンセプトに整理する場合、エージェントは
concept_idsとformat_idsによるフィルタリングをサポートすべきだ (SHOULD) - エージェントは
include_variables=trueの場合にダイナミックコンテンツ変数定義を含めてもよい (MAY) - エージェントは
include_snapshot=trueの場合に軽量な配信スナップショットを含めてもよい (MAY)。スナップショットは「このクリエイティブはアクティブか?」「最後にいつ配信されたか?」などの運用上の質問のためにライフタイムインプレッションと最終配信日時を提供する — 詳細分析はget_creative_deliveryが担う accountとinclude_pricing=trueが提供された場合、課金するエージェントは各クリエイティブにpricing_options——vendor-pricing-optionオブジェクトの配列——を含めなければなりません(MUST)。ベンダーはクリエイティブごとに複数のオプションを提供できます(ボリュームティア、コンテキスト固有のレート、異なる価格モデル)。
- サービスに課金するクリエイティブエージェントは、Accounts プロトコルを実装しなければなりません(MUST)。これは価格を持つ任意のクリエイティブエージェントに適用されます——アドサーバー、生成プラットフォーム、使用に課金する変換エージェント。
- ライブラリをホストするが課金しないクリエイティブエージェントは、バイヤーがクエリ前にアクセスを確立できるよう Accounts プロトコルを実装すべきだ(SHOULD)。
- これはセールスエージェントが使用するのと同じ accounts プロトコルだ — 別バージョンはない。
- メディアバイのために accounts を既に実装しているセールスエージェントは追加対応不要です。
sync_creatives
スキーマ:creative/sync-creatives-request.json / creative/sync-creatives-response.json
リファレンス: sync_creatives タスク
ライブラリにクリエイティブアセットをアップロードして同期します。クリエイティブライブラリをホストするすべてのエージェント — 広告サーバー、クリエイティブ管理プラットフォーム、クリエイティブを管理するセールスエージェント — が実装します。
要件:
- エージェントはフォーマット仕様に対してクリエイティブを検証しなければなりません (MUST)
- エージェントは非準拠クリエイティブの検証エラーを返さなければなりません (MUST)
- エージェントはクリエイティブが使用可能になる前に承認を要求してもよい (MAY)
- エージェントは変更を適用せずに検証するための
dry_runをサポートすべきだ (SHOULD) - エージェントは
delete_missing: trueとcreative_idsを組み合わせるリクエストを拒否しなければなりません (MUST) —delete_missingはライブラリ全体に適用され、フィルタされたサブセットには適用されない - メディアバイも管理するエージェントは一括クリエイティブ-パッケージマッピングのための
assignmentsフィールドをサポートすべきだ (SHOULD) - メディアバイを管理しないスタンドアロンクリエイティブエージェントは
assignmentsフィールドを無視すべきだ (SHOULD)
get_creative_delivery
リファレンス:get_creative_delivery タスク
バリアントレベルのメトリクスを含むクリエイティブ配信データを取得します。
要件:
- エージェントはリクエストされたクリエイティブの配信データを返さなければなりません (MUST)
- エージェントは利用可能な場合にバリアントレベルの内訳を含めるべきだ (SHOULD)
- クリエイティブプロトコルを実装するセールスエージェントは、自身のプロダクトがクリエイティブバリアントを生成または最適化する場合にこのタスクをサポートすべきだ (SHOULD)
エラー処理
クリエイティブエージェントは標準 AdCP エラースキーマを使用してエラーを返さなければなりません (MUST)。 一般的なエラーコード:REFERENCE_NOT_FOUND: リクエストされたフォーマットが存在しない、またはアクセスできない(error.fieldがformat_idを特定する)VALIDATION_ERROR: マニフェストがフォーマット検証に失敗しましたASSET_MISSING: 必須アセットがマニフェストに提供されていませんASSET_INVALID: アセットがフォーマット制約を満たさないGENERATION_FAILED: クリエイティブ生成を完了できなかった
セキュリティの考慮事項
トランスポートセキュリティ
すべてのクリエイティブプロトコル通信は TLS 1.2 以上を使用した HTTPS を使用しなければなりません (MUST)。アセットセキュリティ
- クリエイティブエージェントはアセット URL がアクセス可能であることを検証すべきだ (SHOULD)
- クリエイティブエージェントはマルウェアと悪意あるコンテンツのためにアセットをスキャンすべきだ (SHOULD)
- クリエイティブエージェントは検証中に信頼されていない JavaScript を実行してはなりません (MUST NOT)
プレビューセキュリティ
- プレビュー URL は時間制限があるべきだ (SHOULD)(
expires_atで示されます) - プレビュー URL は、エージェントが URL の表明されたライフタイムにわたってその状態を保証できない限り、ポッドローカルまたはプロセスローカルの状態に依存してはなりません (MUST NOT)
- クリエイティブエージェントはスクリプト実行を防ぐために HTML プレビューをサンドボックス化すべきだ (SHOULD)
output_format: "html"の消費者は信頼されたクリエイティブエージェントのみを使用しなければなりません (MUST)
適合性
クリエイティブエージェントの適合性
適合するクリエイティブプロトコルエージェントは以下を満たさなければなりません (MUST):- 指定されたトランスポート(MCP または A2A)のうち少なくとも1つをサポートします
- フォーマット発見のための
list_creative_formatsを実装します - 自身が所有するフォーマットの権威あるフォーマット定義のみを返す
- フォーマット仕様に対してマニフェストを検証します
- 指定されたエラーコードを使用します
- クリエイティブ生成のための
build_creativeを実装します - プレビューレンダリングのための
preview_creativeを実装します - トラッキング URL でユニバーサルマクロをサポートします
- エージェントがクリエイティブライブラリをホストする場合、
list_creativesを実装します - エージェントがクリエイティブアップロードを受け入れる場合、
sync_creativesを実装します - エージェントがクリエイティブライブラリをホストする場合、
build_creativeでcreative_idをサポートします - クリエイティブライブラリをホストする場合、accounts プロトコル(
sync_accounts/list_accounts)を実装します - バイヤーが正しいインタラクションモデルを判断できるよう
get_adcp_capabilitiesでsupports_generation、supports_transformation、has_creative_libraryを宣言します
コンシューマの適合性
適合するクリエイティブプロトコルコンシューマは以下を満たさなければなりません (MUST):- フォーマット ID の
agent_urlを使用して権威あるクリエイティブエージェントを識別します - 提出前にフォーマット仕様に対してマニフェストを検証します
- 検証エラーを適切に処理します
- 無限ループを避けるためにフォーマットを再帰的に発見する際に訪問済み URL を追跡します
実装ノート
レスポンスタイムの期待値
クリエイティブエージェントは以下のレスポンスタイムを目標とすべきだ (SHOULD):再帰的フォーマット発見
クリエイティブエージェントはlist_creative_formats レスポンスで他のクリエイティブエージェントを参照してもよい (MAY):
フォーマット対応検証
マニフェスト検証はフォーマット仕様のコンテキストで実行されなければなりません (MUST):- 権威あるクリエイティブエージェントからフォーマット定義を検索します
- マニフェストの各アセットについて、フォーマットの
assets配列内の対応するエントリを見つける - フォーマットで定義されたタイプと制約に対してアセット値を検証します
標準フォーマットとカスタムフォーマット
- 標準フォーマット: IAB 仕様に基づき、リファレンスクリエイティブエージェント(
https://creative.adcontextprotocol.org)がホスト - カスタムフォーマット: 特殊なインベントリのために個別のパブリッシャーやクリエイティブプラットフォームが定義
agent_url フィールドが各フォーマットに対してどのエージェントが権威あるかを識別します。
スキーマリファレンス
一部のクリエイティブプロトコルスキーマ(
build_creative、list_creative_formats、preview_creative)は、もともとメディアバイプロトコルの一部としてリリースされたため、media-buy/ 以下にパスがあります。スキーマパスは安定した識別子であり、タスクが属するプロトコルには影響しません。