Skip to main content
クリエイティブライブラリは、バイヤーが AdCP を通じてクリエイティブを管理できるようにする — 既存のアセットの参照、新しいもののアップロード、キャンペーンへの割り当て、承認状態の追跡。クリエイティブライブラリは、ケイパビリティで has_creative_library: true を宣言するエージェントがホストする: 広告サーバー(CM360、Flashtalking)、クリエイティブ管理プラットフォーム(Celtra)、またはインラインクリエイティブ管理を持つセールスエージェント。

モデル

クリエイティブライブラリは3つのレベルでアセットを整理する:
レベルAdCP 相当
アカウントアカウント(accounts プロトコル経由)CM360 の広告主、Celtra のブランドワークスペース
コンセプトconcept_id / concept_nameFlashtalking コンセプト、CM360 クリエイティブグループ、Celtra キャンペーンフォルダ
クリエイティブcreative_idformat_idassets を持つクリエイティブアイテム300x250 ディスプレイ広告、30 秒ビデオスポット
コンセプトはサイズとフォーマットをまたいで関連するクリエイティブをグループ化します。“Holiday 2026” コンセプトは 300x250 バナー、728x90 リーダーボード、30 秒ビデオを含む場合がある — すべて同じキャンペーンアイデアを表現しています。concept_id を使用してグループとしてフィルタリングと管理を行います。

ライブラリへの接続

クエリ前にアカウントアクセスを確立する:
{
  "accounts": [{
    "account_id": "acct_acme_2026",
    "account_name": "Acme Corp",
    "credentials": {
      "api_key": "..."
    }
  }]
}
アカウントのセットアップは、ライブラリがスタンドアロンのクリエイティブエージェントにあるかセールスエージェントにあるかに関わらず同じです。詳細は accounts プロトコルを参照。

クリエイティブの参照

list_creatives を使用してライブラリを参照します。コンセプト、フォーマット、ステータス、タグ、または日付範囲でフィルタリングする:
{
  "filters": {
    "concept_ids": ["concept_holiday_2026"],
    "statuses": ["approved"],
    "format_ids": [{
      "agent_url": "https://ads.flashtalking-example.com",
      "id": "display_300x250"
    }]
  },
  "include": {
    "variables": true,
    "assignments": true
  }
}
レスポンスの各クリエイティブには次の情報が含まれます:
{
  "creative_id": "ft_88201",
  "name": "Holiday 2026 - Medium Rectangle",
  "format_id": {
    "agent_url": "https://ads.flashtalking-example.com",
    "id": "display_300x250"
  },
  "status": "approved",
  "concept_id": "concept_holiday_2026",
  "concept_name": "Holiday 2026 Campaign",
  "created_date": "2026-10-15T14:00:00Z",
  "updated_date": "2026-11-20T09:30:00Z",
  "tags": ["holiday_2026", "display"],
  "variables": [
    {
      "variable_id": "headline",
      "name": "Headline text",
      "type": "text",
      "default_value": "Holiday Sale — Up to 40% Off"
    }
  ],
  "assignments": [
    { "package_id": "pkg_premium_display", "weight": 100 }
  ]
}
status フィールドはライブラリ内のクリエイティブの現在の状態を反映する: processingpending_reviewapprovedrejectedarchived。ステータス遷移の仕組みについてはクリエイティブレビューを参照。

クリエイティブのアップロード

sync_creatives を使用して新しいクリエイティブをアップロードするか既存のものを更新します。この操作は upsert セマンティクスを使用する — creative_id がすでに存在する場合は更新し、そうでなければ作成します。
{
  "creatives": [
    {
      "creative_id": "acme_video_001",
      "name": "Holiday Sale 30s",
      "format_id": {
        "agent_url": "https://creative.adcontextprotocol.org",
        "id": "video_standard_30s"
      },
      "assets": {
        "video": {
          "url": "https://cdn.acme-example.com/holiday-sale-30s.mp4",
          "width": 1920,
          "height": 1080,
          "duration_ms": 30000
        },
        "click_url": {
          "url": "https://acme-example.com/holiday-sale"
        }
      }
    }
  ]
}
レスポンスは各クリエイティブに何が起きたかを示します:
{
  "creatives": [
    {
      "creative_id": "acme_video_001",
      "action": "created"
    }
  ]
}
アップロード後、クリエイティブはライブラリのレビュープロセスに入る。list_creatives を確認して pending_review から approved への遷移を確認します。

アサインメント付きアップロード

同じ呼び出しでクリエイティブをパッケージに割り当てる:
{
  "creatives": [
    {
      "creative_id": "acme_video_001",
      "name": "Holiday Sale 30s",
      "format_id": { "agent_url": "...", "id": "video_standard_30s" },
      "assets": { "...": "..." }
    }
  ],
  "assignments": [
    {
      "creative_id": "acme_video_001",
      "package_id": "pkg_premium_video"
    }
  ]
}

ライブラリクリエイティブからのタグ生成

ライブラリのクリエイティブに配信タグが必要な場合は、マニフェストの代わりに creative_id を使って build_creative を使用します:
{
  "creative_id": "ft_88201",
  "concept_id": "concept_holiday_2026",
  "target_format_id": {
    "agent_url": "https://ads.flashtalking-example.com",
    "id": "display_300x250"
  }
}
クリエイティブエージェントはライブラリから creative_id を解決し、配信タグを含むマニフェストを返します。タグフォーマットはプラットフォームによって異なる:
  • Flashtalking、Celtra: どんな環境にも適応するユニバーサルタグ。プレースメントコンテキスト不要。
  • CM360: トラフィッキングコンテキストが必要なプレースメントレベルのタグ。media_buy_idpackage_id を渡す:
{
  "creative_id": "cm360_creative_12345",
  "target_format_id": {
    "agent_url": "https://ads.cm360-example.com",
    "id": "display_300x250"
  },
  "media_buy_id": "buy_holiday_q4",
  "package_id": "pkg_premium_display"
}
詳しくはタグ生成モデルを参照。

クリエイティブのキャンペーンへの割り当て

ライブラリクリエイティブをメディアバイに付与するには2つのパスがある:

パス 1: パッケージのクリエイティブアサインメント

メディアバイ作成時に ID でライブラリクリエイティブを参照する:
{
  "packages": [{
    "product_id": "premium_display",
    "creative_assignments": [
      { "creative_id": "ft_88201", "weight": 60 },
      { "creative_id": "ft_88202", "weight": 40 }
    ]
  }]
}
これは、クリエイティブがすでにエージェントのライブラリにある場合(sync_creatives またはプラットフォーム独自のアップロードフローを経由して)に機能します。

パス 2: パッケージのインラインクリエイティブ

メディアバイと一緒にクリエイティブを直接アップロードする — 別途同期ステップ不要:
{
  "packages": [{
    "product_id": "premium_display",
    "creatives": [{
      "creative_id": "acme_banner_001",
      "name": "Holiday banner",
      "format_id": { "agent_url": "...", "id": "display_300x250" },
      "assets": { "...": "..." }
    }]
  }]
}
エージェントはクリエイティブをライブラリに追加し、1つの操作でパッケージに割り当てる。詳細はインラインクリエイティブ管理を参照。

マルチセラー配布

複数のセラーと作業する場合、クリエイティブを一度ビルドして配布する:
  1. クリエイティブエージェントでビルドする:
{
  "message": "Create a holiday promotion banner",
  "target_format_ids": [
    { "agent_url": "https://creative.adcontextprotocol.org", "id": "display_300x250" },
    { "agent_url": "https://creative.adcontextprotocol.org", "id": "display_728x90" }
  ]
}
  1. 各セラーのライブラリに同期する:
{
  "creatives": [
    {
      "creative_id": "holiday_2026_300x250",
      "name": "Holiday 2026 - Medium Rectangle",
      "concept_id": "concept_holiday_2026",
      "format_id": { "agent_url": "https://creative.adcontextprotocol.org", "id": "display_300x250" },
      "assets": { }
    }
  ]
}
各セールスエージェントで sync_creatives を個別に呼び出す。セラー間で同じ creative_idconcept_id を使用して、メディアバイ全体で同じクリエイティブとキャンペーンコンセプトを関連付けられるようにします。完全なパターンはマルチエージェントクリエイティブオーケストレーションを参照。
  1. セラーごとに承認状態を追跡する — 各セラーは独立してレビューします。各エージェントで list_creatives をポーリングしてステータスを確認します。クリエイティブはポリシーに基づいて、あるセラーでは approved、別のセラーでは rejected になる場合があります。

承認状態の追跡

クリエイティブの承認は2つのレベルで動作する: ライブラリレベル: list_creatives の各クリエイティブの status フィールド — processingpending_reviewapprovedrejectedarchived パッケージレベル: get_media_buys の各クリエイティブの approval_statuspending_reviewapproved、または rejection_reason 付きの rejected クリエイティブはライブラリでは approved でも、プレースメント固有のポリシーに違反する場合はパッケージレベルで rejected になる可能性があります。新しいクリエイティブを同期またはメディアバイに提出した後は、両方をポーリングします。

ダイナミッククリエイティブ最適化(DCO)

動的コンテンツ変数を持つクリエイティブは、include: { variables: true } を要求するとライブラリに variables 配列付きで表示されます。各変数は広告サーバーが配信時に埋める槽を定義します:
{
  "variables": [
    {
      "variable_id": "headline",
      "name": "Headline text",
      "type": "text",
      "default_value": "Holiday Sale — Up to 40% Off"
    },
    {
      "variable_id": "product_image",
      "name": "Product image",
      "type": "image",
      "default_value": "https://cdn.acme-example.com/hero.jpg"
    },
    {
      "variable_id": "cta_color",
      "name": "CTA button color",
      "type": "color",
      "default_value": "#FF6600"
    }
  ]
}
list_creatives フィルターで has_variables: true を使用して DCO クリエイティブを見つける。変数タイプは一般的なプラットフォームパターンと一致する: textcolorimagevideonumberboolean 広告サーバーが配信時にこれらの変数をどのように使用するか(データフィード、ターゲティングルール、最適化アルゴリズム)は AdCP のスコープ外です。AdCP は変数のスロットをモデル化し、最適化ロジックはモデル化しません。

次のステップ