- Manual Mode:
packages配列で明示的にラインアイテムを指定 - Proposal Mode:
proposal_idとtotal_budgetを指定し、get_productsのプロポーザルを実行
completed、120 秒未満の working、数時間〜数日の submitted)
Request Schema: /schemas/v3/media-buy/create-media-buy-request.json
Response Schema: /schemas/v3/media-buy/create-media-buy-response.json
クイックスタート
2 つのパッケージでシンプルなメディアバイを作成:リクエストパラメーター
| Parameter | Type | Required | Description |
|---|---|---|---|
account | account-ref | Yes | アカウント参照。{ "account_id": "..." } または、セラーが暗黙的な解決をサポートする場合は { "brand": {...}, "operator": "..." } を渡します。請求とポリシー評価に必要。 |
proposal_id | string | No* | get_products のプロポーザル ID。packages の代替 |
total_budget | TotalBudget | No* | プロポーザル実行時の総予算。配分割合はパブリッシャーが適用 |
packages | Package[] | No* | パッケージ構成の配列(下記)。proposal_id を使わない場合は必須 |
brand | BrandRef | Yes | ブランド参照 — 実行時に完全なアイデンティティに解決されます。brand.json 参照 |
start_time | string | Yes | "asap" または ISO 8601 日時 |
end_time | string | Yes | ISO 8601 日時(指定がなければ UTC) |
po_number | string | No | 発注番号 |
idempotency_key | string | No | 安全なリトライのための一意キー。同じキーとアカウントのリクエストがすでに処理済みの場合、セラーは既存のメディアバイを返します。(セラー、リクエスト)ペアごとに一意でなければなりません。最低 16 文字。 |
context | object | No | レスポンスにそのまま返される不透明な相関データ。内部トラッキング、トレース ID、その他の呼び出し元固有の識別子に使用。 |
reporting_webhook | ReportingWebhook | No | レポーティングの自動配信設定 |
packages OR (proposal_id + total_budget) must be provided.
TotalBudget オブジェクト
| Parameter | Type | Required | Description |
|---|---|---|---|
amount | number | Yes | 総予算額 |
currency | string | Yes | ISO 4217 通貨コード |
Package オブジェクト
| Parameter | Type | Required | Description |
|---|---|---|---|
product_id | string | Yes | get_products で取得した product_id |
pricing_option_id | string | Yes | プロダクトの pricing_options 配列にある価格オプション ID |
format_ids | FormatID[] | Yes | 使用するフォーマット ID(プロダクトでサポートされている必要あり) |
budget | number | Yes | 価格オプションの通貨での予算 |
impressions | number | No | このパッケージのインプレッション目標 |
paused | boolean | No | 一時停止状態で作成する場合(デフォルト: false) |
pacing | string | No | "even"(デフォルト)、"asap"、"front_loaded" |
bid_price | number | No | オークション価格の場合の入札額。選択した価格オプションに max_bid: true がない限り、指定した金額がそのまま入札/価格として扱われる。max_bid: true の場合はバイヤーの最大支払い意思額(上限)として扱われる。 |
optimization_goals | OptimizationGoal[] | No | このパッケージの最適化ターゲット。各ゴールは kind: "event"(event_sources 配列を持つコンバージョンイベント。オプションで cost_per、per_ad_spend、maximize_value ターゲットを指定可)または kind: "metric"(オプションで cost_per または threshold_rate ターゲットを持つセラー独自のメトリクス)。イベントゴールにはプロダクトの conversion_tracking.supported_targets が必要。メトリクスゴールには metric_optimization.supported_metrics が必要。 |
targeting_overlay | TargetingOverlay | No | 追加ターゲティング条件(Targeting 参照) |
start_time | string | No | このパッケージのフライト開始日時(ISO 8601)。省略するとメディアバイの start_time を継承。メディアバイの日付範囲内である必要があります。"asap" はサポートしません。 |
end_time | string | No | このパッケージのフライト終了日時(ISO 8601)。省略するとメディアバイの end_time を継承。メディアバイの日付範囲内である必要があります。 |
creative_assignments | CreativeAssignment[] | No | 既存ライブラリのクリエイティブを重み/プレースメント指定付きで割り当て |
creatives | CreativeAsset[] | No | 新規アセットをアップロードして割り当て(creative_id は未使用であること) |
context | object | No | パッケージレスポンスにそのまま返される不透明な相関データ。セラーが割り当てた package_id を内部ラインアイテム、キャンペーン構造、トラッキング状態にマッピングするために使用。 |
レスポンス
成功レスポンス
| Field | Description |
|---|---|
media_buy_id | パブリッシャーの一意 ID |
creative_deadline | クリエイティブ提出期限 (ISO 8601) |
packages | 作成されたパッケージの配列(完全な状態付き) |
エラーレスポンス
| Field | Description |
|---|---|
errors | 失敗理由を示すエラーオブジェクト配列 |
errors を確認してください。
主なシナリオ
ターゲティング付きキャンペーン
地理制限やフリークエンシーキャップを追加:コンバージョン最適化付きキャンペーン
コンバージョン最適化配信のために per_ad_spend ターゲットを設定します。プロダクトがconversion_tracking.supported_targets でサポートを宣言しており、sync_event_sources 経由でイベントソースが設定済みである必要があります:
カタログ連動パッケージ
カタログ連動パッケージは、カタログ全体のアイテムに対して単一の予算枠を割り当てます。アイテムごとにパッケージを個別作成する代わりに、プラットフォームがパフォーマンスに基づいてカタログ全アイテムへの配信を最適化します。これは Google Performance Max や Meta Dynamic Product Ads などのカタログベースのキャンペーンタイプに相当する AdCP の機能です。 パッケージにカタログ連動を設定するにはcatalogs フィールドを含めます。各カタログはそれぞれ異なるタイプ(例:プロダクトカタログ 1 件、ストアカタログ 1 件)を持つ必要があります。参照するカタログは sync_catalogs 経由で事前に同期されている必要があります。
同期済みジョブカタログを使ったジョブキャンペーン:
test=false
test=false
by_catalog_item ブレークダウンを返す get_media_buy_delivery を使用します。カタログ連動パッケージのクリエイティブバリアントは、広告としてレンダリングされた個別のカタログアイテムを表します。
クリエイティブをインライン指定したキャンペーン
キャンペーン作成と同時にクリエイティブをアップロードします:レポート用 Webhook を設定したキャンペーン
自動レポート通知を受け取ります。プロポーザルの実行
get_products のプロポーザルを、パッケージを手作業で組まずに実行します。
- パブリッシャーが
total_budgetを使って配分割合を実額に変換 - 配分に基づきパッケージが自動生成
- それ以外のフィールド(brand、start_time、end_time など)は Manual モードと同じ
エラーハンドリング
よくあるエラーと解決策:| Error Code | Description | Resolution |
|---|---|---|
PRODUCT_NOT_FOUND | Invalid product_id | Verify product exists via get_products |
FORMAT_INCOMPATIBLE | Format not supported by product | Check product’s format_ids field |
BUDGET_INSUFFICIENT | Budget below product minimum | Increase budget or choose different product |
TARGETING_TOO_NARROW | Targeting yields zero inventory | Broaden geographic or audience criteria |
POLICY_VIOLATION | Brand/product violates policy | Review publisher’s content policies |
INVALID_PRICING_OPTION | pricing_option_id not found | Use ID from product’s pricing_options |
CREATIVE_ID_EXISTS | Creative ID already exists in library | Use a different creative_id, assign existing creatives via creative_assignments, or update via sync_creatives |
Key Concepts
フォーマット指定
フォーマット ID は各パッケージで必須です。理由は以下の通りです:- パブリッシャーが正しい仕様でアドサーバーにプレースホルダーを作成します
- 双方が必要なクリエイティブアセットを正確に把握できます
- バリデーションによりプロダクトが要求フォーマットをサポートするか確認できます
- 進捗トラッキングで不足アセットを可視化できます
ブランド参照
brand フィールドはポリシー準拠とビジネス目的のために広告主を識別します。
価格と通貨
各パッケージはpricing_option_id を指定し、以下を決定します:
- 通貨(USD、EUR など)
- 価格モデル(CPM、CPCV、CPP など)
- レートと固定/オークションの区別
ターゲティングオーバーレイ
使用は最小限に — ターゲティングの大部分はブリーフに含め、プロダクト選択で処理されるべきです。 オーバーレイは以下に限定して使用します:- 地理的制限(RCT テスト、規制対応)
- フリークエンシーキャップ
- AXE セグメントの包含/除外
フォーマットワークフロー
フォーマット指定が重要な理由
メディアバイ作成時にフォーマットを指定すると次が可能になります:- プレースホルダー作成 - パブリッシャーが正しい仕様でアドサーバーにプレースホルダーを用意
- 検証 - 要求フォーマットをプロダクトがサポートするかシステムが検証
- 期待値の明確化 - 双方が必要なものを正確に把握
- 進捗トラッキング - 不足アセットと必須アセットを可視化
- 技術セットアップ - クリエイティブ到着前にアドサーバーを設定
完全なワークフロー
フォーマット検証
パブリッシャーが必ず検証する事項:- すべてのフォーマットがプロダクトでサポートされています
- フォーマット仕様が
list_creative_formatsの出力と一致 - 期限内にクリエイティブ要件を満たせる
フライト日程バリデーション
パッケージにstart_time または end_time を指定した場合、セラーは以下を検証すべきだ:
- 両日程がメディアバイの日付範囲内に収まっています
start_timeがend_timeより前です
INVALID_REQUEST エラーを返すべきだ:
非同期オペレーション
このタスクは即時完了する場合も、複雑さや承認要件によっては日数を要する場合もあります。レスポンスのstatus フィールドで結果と次のアクションを確認してください。
| Status | Meaning | Your Action |
|---|---|---|
completed | 即時完了 | 結果を処理 |
working | 処理中(約2分) | 高頻度でポーリング or Webhook を待つ |
submitted | 長時間(数時間〜日) | Webhook を使うか低頻度でポーリング |
input-required | 追加情報が必要 | メッセージを読み、情報を返す |
failed | エラー発生 | エラーに対応 |
- MCP
- A2A
使用上の注意
- 総予算は各パッケージの個別の
budget値に基づいて配分されます - クリエイティブアセットはキャンペーン有効化のためにデッドライン前にアップロードしなければなりません
- AXE セグメントにより高度なオーディエンスターゲティングが可能
working、submittedなどの保留状態は正常であり、エラーではありません- オーケストレーターは保留状態を通常のワークフローの一部として処理しなければなりません
- インラインクリエイティブ:
creatives配列は新規クリエイティブのみを作成します。既存クリエイティブを更新するにはsync_creativesを使用。既存のライブラリクリエイティブを割り当てるにはcreative_assignmentsを使用。
ポリシー準拠
ブランドとプロダクトは作成時に検証されます。ポリシー違反はエラーを返します:- ブランド/プロダクトが選択したパッケージと整合しています
- クリエイティブが宣言したブランド/プロダクトと一致しています
- キャンペーンがすべての広告ポリシーに準拠しています
次のステップ
メディアバイ作成後:- クリエイティブのアップロード: デッドライン前に
sync_creativesを使用 - ステータスの監視:
get_media_buy_deliveryを使用 - 最適化:
provide_performance_feedbackを使用 - 更新:
update_media_buyでキャンペーンを変更
関連ドキュメント
- Media Buy Lifecycle - キャンペーンの完全なワークフロー
- get_products - インベントリの発見
- Targeting - ターゲティング戦略
- Pricing Models - 通貨と価格設定