> ## Documentation Index
> Fetch the complete documentation index at: https://adcp-docs-ja.pier1.co.jp/llms.txt
> Use this file to discover all available pages before exploring further.

# セールスエージェントのクリエイティブ機能

> AdCP のセールスエージェントはメディアバイとともにクリエイティブプロトコルを実装し、インラインクリエイティブ管理と生成広告フォーマットを提供します。

セールスエージェントはメディアバイプロトコルとともにクリエイティブプロトコルを実装できます。その場合、1つのエージェントエンドポイントがメディアバイとクリエイティブ管理の両方を処理する — バイヤーは別のサービスを発見して接続する必要がない。

これは、配信時にクリエイティブを生成したり、内部でクリエイティブライブラリを管理したり、広告プロダクトの一部としてフォーマット固有のクリエイティブサービスを提供したりするセラーにとって一般的なケースです。

## 仕組み

セールスエージェントは `get_adcp_capabilities` でクリエイティブプロトコルのサポートを宣言する:

```json theme={null}
{
  "$schema": "https://adcontextprotocol.org/schemas/v3/protocol/get-adcp-capabilities-response.json",
  "status": "completed",
  "adcp": {
    "major_versions": [3],
    "idempotency": { "supported": true, "replay_ttl_seconds": 86400 }
  },
  "supported_protocols": ["media_buy", "creative"],
  "account": {
    "supported_billing": ["operator", "agent"]
  },
  "media_buy": {
    "features": {
      "inline_creative_management": true
    }
  },
  "creative": {
    "has_creative_library": true,
    "supports_generation": true,
    "supports_transformation": false,
    "supports_compliance": false
  }
}
```

`inline_creative_management`（購入時にパッケージにクリエイティブを付与するメディアバイ機能）、クリエイティブプロトコルサポート、`creative.has_creative_library` は別個の宣言であることに注意。セールスエージェントは、クリエイティブライブラリなしでインラインのパッケージクリエイティブを受け入れる、インラインのパッケージアップロードなしでライブラリをホストする、または両方のパスをサポートする、のいずれもできます。

`inline_creative_management` は `create_media_buy` と `update_media_buy` でクリエイティブをパッケージに直接付与することを許可する — クリエイティブは購入またはパッケージ更新とともに移動します。クリエイティブプロトコルサポート（`supported_protocols` の `"creative"`）は、エージェントがそのクリエイティブケイパビリティフラグに応じて `build_creative`、`list_creative_formats`、[`sync_creatives`](/docs/creative/task-reference/sync_creatives) などのクリエイティブタスクを実装することを意味します。再利用可能なクリエイティブライブラリは、`creative.has_creative_library: true` によって明確に表明されます。セールスエージェントは、ライブラリを実装せずにインラインクリエイティブ管理をサポートする（バイヤーがメディアバイのリクエストとともにパッケージスコープのクリエイティブ本体を供給する）、またはインライン管理なしでライブラリをホストする（クリエイティブはパッケージに割り当てる前に `sync_creatives` で別途同期される）、のいずれもできます。

バイヤーはすべてのタスク — メディアバイとクリエイティブ — を同じエージェント URL で呼び出す。タスクが属するプロトコルがスキーマを決定し、エージェントのタイプは関係ありません。

## バイヤーのクリエイティブパスの選択

バイヤーは、メディアバイのインラインフラグとクリエイティブプロトコルのライブラリケイパビリティから、クリエイティブ配信のパスを選びます:

| `creative.has_creative_library` | `media_buy.features.inline_creative_management` | バイヤーの動作                                                                                                                                                                |
| ------------------------------- | ----------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `true`                          | 不在または `false`                                   | `sync_creatives` などのクリエイティブプロトコルタスクを使い、保存したクリエイティブを `packages[].creative_assignments` で割り当てる。                                                                          |
| 不在または `false`                   | `true`                                          | `create_media_buy` と `update_media_buy` でインラインの `packages[].creatives` を使う。`sync_creatives` を呼ばない。セラーはクリエイティブライブラリを表明していない。                                            |
| `true`                          | `true`                                          | 両方のパスが利用可能。単一使用のパッケージアセットや即時の置換にはインラインクリエイティブを、再利用可能なライブラリアセットには `sync_creatives` と `creative_assignments` を使う。セラーがクリエイティブライブラリを表明しているため、インラインクリエイティブはライブラリクリエイティブになる。 |
| 不在または `false`                   | 不在または `false`                                   | セラーは AdCP 上でクリエイティブ配信を表明していない。別のセラー固有の拡張がその動作を明示的に定義しない限り、バイヤーは `packages[].creatives` または `packages[].creative_assignments` を送るべきではない（SHOULD NOT）。                    |

`inline_creative_management` が true で `creative.has_creative_library` が不在または false の場合、`packages[].creatives` が表明されたクリエイティブサーフェスです。セラーはそれらのアセットをメディアバイまたはパッケージの一部としてのみ保存するかもしれません。バイヤーは `list_creatives`、`sync_creatives`、後の `creative_assignments` の再利用が機能することを期待すべきではありません。

インライン専用の承認状態の読み戻しはパッケージスコープです。`get_media_buys` は、パッケージに現在割り当てられているインラインクリエイティブの承認を `packages[].creative_approvals[]`（`creative_id`、`approval_status`、任意の `rejection_reason`）を通じて表面化しますが、完全なクリエイティブ本体、プレースメントのルーティング、ウェイト、過去のリビジョンは返しません。インライン専用のセラーを使うバイヤーは、後で検査または再提出する必要がある場合、送信したクリエイティブマニフェストまたはアセットペイロードを自分の側で保持すべきです。

## 利用可能なクリエイティブタスク

セールスエージェントが `supported_protocols` に `"creative"` を宣言すると、任意のクリエイティブプロトコルタスクを実装できる:

| タスク                     | 実装するタイミング                                                                                       |
| ----------------------- | ----------------------------------------------------------------------------------------------- |
| `list_creative_formats` | 常に — バイヤーがサポートされているフォーマットを発見する必要がある                                                             |
| `sync_creatives`        | エージェントがクリエイティブライブラリをホストする場合。セールスエージェントはクリエイティブとパッケージの一括マッピングのために `assignments` フィールドをサポートすべきです。 |
| `list_creatives`        | バイヤーがライブラリを参照する必要がある場合                                                                          |
| `build_creative`        | エージェントがクリエイティブを生成または変換する場合                                                                      |
| `preview_creative`      | エージェントがプレビューをレンダリングできる場合                                                                        |
| `get_creative_delivery` | エージェントがバリアントレベルの配信データを報告できる場合                                                                   |

これらはスタンドアロンのクリエイティブエージェントが実装するのと同じタスクです。違いは運用上のものであり、プロトコルレベルではない: バイヤーは別のサービスを発見して接続する必要がない。

メディアバイの [accounts プロトコル](/docs/accounts/overview)をすでに実装しているセールスエージェントは、クリエイティブタスクのために追加のアカウント設定は必要ない — 同じアカウントが両方のプロトコルをカバーします。

## 保存クリエイティブのアダプター引き渡し

バイヤーが `sync_creatives` を通じてクリエイティブをアップロードし、その後 `create_media_buy` または `update_media_buy` の `creative_assignments` を使ってそれをパッケージに付与するとき、AdCP のプロトコルサーフェスが運ぶ識別子は一つだけです: `creative_id`。バイヤーはクリエイティブの作成または同期時にそれを選び、後でアセットのバイトを再送せずに、その同じ値を再利用して保存したクリエイティブを割り当てます。

下記の例の `id` フィールドは、二つ目のバイヤー提供の AdCP 識別子ではありません。それは、すでに汎用のアセット `id` を使う実装層のために、`creative_id` からコピーされたセラー側のアダプターエイリアスです。AdCP は、上流のアドサーバー、リテールメディアプラットフォーム、セラーの記録システムがこのオブジェクトを使うことを要求しません。この形状は、AdCP の保存クリエイティブを内部のアセットペイロードに変換することを選ぶセラーの SDK、フィクスチャ、アダプター向けの実装ガイダンスです。

実装が URL 裏付けの保存クリエイティブをアダプター層に公開するとき、アダプター向けのオブジェクトは、両方の識別子の綴りに加えて、アセットをトラフィックするのに必要なポータブルなメタデータを保持すべきです（SHOULD）。

アダプター向けの内部オブジェクト（AdCP のリクエストまたはレスポンスの形状ではない）:

```json test=false theme={null}
{
  "id": "cr_acme_spring_mrec",
  "creative_id": "cr_acme_spring_mrec",
  "name": "Acme Corp spring MREC",
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "display_300x250"
  },
  "format_kind": "image",
  "asset_type": "image",
  "url": "https://cdn.acme.example/creative/spring-mrec.png",
  "width": 300,
  "height": 250
}
```

`creative_id` は正準的な AdCP 保存クリエイティブ識別子です。`id` は、`id` フィールドを期待する汎用のアセット契約のためのアダプター互換性エイリアスです。実装は、保存クリエイティブをアダプターアセットに変換するとき、両方を同じ値で埋めるべきです（SHOULD）。アダプターは、両方が存在する場合は `creative_id` を優先すべきです。AdCP のワイヤー上では、バイヤーは `creative_assignments[]` に `creative_id` のみを送ります。アダプター専用の `id` エイリアスは内部の互換性データであって、二つ目のバイヤー提供の識別子ではありません。セラーは、入力に存在する場合はそれを無視しなければなりません（MUST）。

上記の URL 裏付けのパスがポータブルなアダプターの引き渡しです。スニペット裏付けまたはインラインコンテンツ裏付けの保存クリエイティブ（HTML スニペット、サードパーティタグ、セラーがレンダリングするブリーフコンテンツなど）は、変換がそのアダプターのトラフィッキングモデルに依存するため、明示的なアダプターサポートを必要とします。ドキュメントと SDK のスキャフォールドは、そのアダプターの契約が実際に `snippet`、`content`、`media_url` などのフィールドを宣言し扱わない限り、すべてのアダプターがそれらを受け取ると示唆すべきではありません（SHOULD NOT）。

<h2 id="creative-review">
  クリエイティブレビュー
</h2>

クリエイティブを受け取るセールスエージェント — `create_media_buy` のインライン付与または `sync_creatives` 経由 — は、配信前にクリエイティブレビューを実施する場合があります。これは、クリエイティブがポリシーコンプライアンス、マルウェア、またはブランドセーフティ違反のためにスキャンされる実際のパブリッシャーおよび SSP ワークフローを反映しています。

クリエイティブレビューの状態は2つのレベルでサーフェスされます:

* **クリエイティブライブラリ**: `creative.has_creative_library: true` を表明するセラーでは、[`list_creatives`](/docs/creative/task-reference/list_creatives) の各クリエイティブの `status` フィールドはクリエイティブステータス列挙型を使用します: `processing`、`pending_review`、`approved`、`rejected`、`archived`。
* **パッケージレベル**: [`get_media_buys`](/docs/media-buy/task-reference/get_media_buys) レスポンスの各クリエイティブの `approval_status` フィールドはクリエイティブ承認ステータス列挙型を使用します: `pending_review`、`approved`、または人間が読める説明付きの `rejected`。却下されたクリエイティブには `rejection_reason` が含まれます。

クリエイティブはライブラリでは `approved` でも、プレースメント固有のポリシーに違反する場合はパッケージレベルで `rejected` になる可能性がある（例: オーディオのみのプレースメントでのビデオクリエイティブ）。

バイヤーは、特に厳格なクリエイティブポリシーを持つパブリッシャーの場合、新しいクリエイティブを含むメディアバイを同期または提出した後、`list_creatives` または `get_media_buys` をポーリングすべきです。インライン専用のセラーでは、`get_media_buys` が承認状態の読み戻しサーフェスです。

配信時にセラーが生成する生成フォーマットの場合、クリエイティブレビューは個々のクリエイティブではなくブリーフとブランドアイデンティティに適用されます。セラーはブリーフの制約とブランドアセットが生成が始まる前にポリシーを満たしているかを検証します。

**プラットフォームとコミュニティガイドライン**: ソーシャルプラットフォーム、UGC サイト、コミュニティ主導のパブリッシャーは、標準的な広告ポリシーを超えたコンテンツポリシー（例: コミュニティスタンダード、プロモートコンテンツガイドライン、カテゴリ固有の制限）を執行することが多い。これらのプラットフォーム固有のポリシーは同じ `rejection_reason` フィールドを通じてサーフェスされる — バイヤーはそれらを処理するために別のメカニズムを必要としません。コミュニティガイドライン違反でクリエイティブが却下された場合、`rejection_reason` はどのポリシーが違反されたかを説明し、バイヤーが修正して再提出できるようにします。

### 生成クリエイティブの実装チェックリスト

生成クリエイティブを提供するセールスエージェントは以下を行うべきだ:

1. **ケイパビリティを宣言する** `get_adcp_capabilities` で:
   * クリエイティブケイパビリティの `supports_generation: true`
   * `supported_protocols` の `"creative"`
   * クリエイティブがメディアバイとともに移動する場合は `inline_creative_management: true`

2. `list_creative_formats` を通じて**生成フォーマットを定義する** — `format_id.agent_url` が自分のエージェントを指します。記述的なフォーマット名とアセット要件（最低限 `brief` アセット）を含めます。

3. **`preview_creative` を実装する** — フライト前レビューのための代表的なプレビューを返します。バイヤーが異なる配信時の条件をシミュレートできるよう `context_description` インプットをサポートします。会話型フォーマットの場合、サンドボックステスト用の `interactive_url` を含めます。

4. **`get_creative_delivery` を実装する** — 何が生成され配信されたかを示すバリアントマニフェストを返します。バリアントごとの `generation_context`（context\_type、topic、device\_class）と配信メトリクスを含めます。バリアント保持を計画する: フライト後の監査のために少なくとも 90 日間のバリアントデータを保持します。

5. **購入時にブリーフを検証する** — バイヤーが `create_media_buy` でブリーフを提出する際、ブリーフの制約（ブランドアイデンティティ、ガードレール、必須開示）が生成ケイパビリティと互換性があることを検証します。そうでない場合は明確なエラーで拒否します。

6. **ブリーフのクリエイティブレビューを処理する** — 生成フォーマットでは、レビューは個々のクリエイティブではなくブリーフとブランドアイデンティティに適用されます。`get_media_buys` のパッケージの `approval_status` を通じてレビュー状態を伝える。

## セールスエージェントの生成フォーマット

配信時にクリエイティブを生成するセラー — コンテキスト広告、ページマッチドディスプレイ、AI 生成ネイティブ — は独自の生成フォーマットをホストします。`format_id.agent_url` はセールスエージェント自体を指す:

```json theme={null}
{
  "format_id": {
    "agent_url": "https://ads.seller-example.com",
    "id": "contextual_display_generative"
  },
  "name": "Contextual display (AI-generated)",
  "type": "display",
  "description": "Display ads generated at serve time based on page context and brand brief"
}
```

バイヤーはセールスエージェントの `list_creative_formats` を通じてこのフォーマットを発見し、メディアバイ作成時にブリーフを提供します:

```json theme={null}
{
  "packages": [{
    "product_id": "premium_display",
    "pricing_option_id": "cpm_standard",
    "budget": 50000,
    "creatives": [{
      "creative_id": "brand_contextual_brief",
      "name": "Q2 contextual campaign brief",
      "format_id": {
        "agent_url": "https://ads.seller-example.com",
        "id": "contextual_display_generative"
      },
      "assets": {
        "brief": {
          "content": "Highlight our sustainability story. Match tone to editorial context."
        }
      }
    }]
  }]
}
```

セラーはこのブリーフとバイヤーのブランドアイデンティティを使用して配信時にクリエイティブを生成します。別の `build_creative` 呼び出しは不要 — ブリーフはメディアバイとともに移動します。

規制対象カテゴリ（金融サービス、製薬）の場合、エージェントのクリエイティブケイパビリティで `supports_compliance: true` を確認します。コンプライアンス対応エージェントは生成中に必須開示と規制要素を検証する — エージェントが執行できるよう、ブリーフにコンプライアンス要件を含めます。

## 生成出力のプレビュー

生成フォーマットでは、`preview_creative` は2つの目的を果たす:

**キャンペーン前** — ブリーフマニフェストと `context_description` インプットを渡して、エージェントが生成できるものの代表的なサンプルを確認します:

```json theme={null}
{
  "request_type": "single",
  "quality": "draft",
  "creative_manifest": {
    "format_id": {
      "agent_url": "https://ads.seller-example.com",
      "id": "contextual_display_generative"
    },
    "assets": {
      "brief": {
        "content": "Highlight our sustainability story. Match tone to editorial context."
      }
    }
  },
  "inputs": [
    { "name": "Tech article", "context_description": "Article about semiconductor manufacturing" },
    { "name": "Lifestyle blog", "context_description": "Blog post about sustainable living" }
  ]
}
```

クリエイティブの方向性の高速な反復には `quality: "draft"` を使用し、ステークホルダーレビューには `quality: "production"` を使用します。これらのプレビューは例示的なもの — 実際の出力は配信時のライブシグナルに依存します。プレビューはアクティブなメディアバイを必要としない — `create_media_buy` を呼び出す前にプレビューできます。

**キャンペーン後** — `get_creative_delivery` の `variant_id` を渡して、実際に配信されたものを再生する:

```json theme={null}
{
  "request_type": "variant",
  "variant_id": "gen_tech_mobile_001"
}
```

レスポンスにはバリアントの実際のマニフェストとレンダリングされたプレビューが含まれます。これは忠実な再生であり、再生成ではありません。

完全なメンタルモデルと期待テーブルについては[生成クリエイティブのプレビュー](/docs/creative/task-reference/preview_creative#previewing-generative-creative)を参照。

## 配信レポート

両プロトコルを実装するセールスエージェントは、配信データの2つの補完的なビューを提供します:

| タスク                      | プロトコル   | 提供する内容                                                        |
| ------------------------ | ------- | ------------------------------------------------------------- |
| `get_media_buy_delivery` | メディアバイ  | どこで、どれだけ: インプレッション、支出、プレースメントデータ、オプションの `by_creative` ブレークダウン |
| `get_creative_delivery`  | クリエイティブ | 何が実行されたか、どのように: バリアントマニフェスト、生成コンテキスト、バリアントレベルのメトリクス           |

両タスクは同じエージェント URL で呼び出されます。`media_buy_id` と `creative_id` を結合キーとして使用して、両レスポンスのデータを関連付ける。

生成フォーマットでは、`get_creative_delivery` がバイヤーが実際に生成されたものを見る場所です。各バリアントにはマニフェスト（実際のレンダリングされたクリエイティブ — ヘッドラインテキスト、画像 URL、フォーマット）と生成コンテキスト（ページトピックやデバイスクラスなど、生成をトリガーしたシグナル）が含まれます。`get_media_buy_delivery` は支出、ペーシング、次元ブレークダウンを含む集計ビューを提供します。

### 例: セールスエージェントのバリアントレベルレポート

```json theme={null}
{
  "media_buy_id": "mb_12345",
  "currency": "USD",
  "reporting_period": {
    "start": "2026-03-01T00:00:00-05:00",
    "end": "2026-03-08T23:59:59-05:00",
    "timezone": "America/New_York"
  },
  "creatives": [
    {
      "creative_id": "brand_contextual_brief",
      "format_id": {
        "agent_url": "https://ads.seller-example.com",
        "id": "contextual_display_generative"
      },
      "totals": {
        "impressions": 300000,
        "spend": 15000,
        "clicks": 12000,
        "ctr": 0.04
      },
      "variant_count": 47,
      "variants": [
        {
          "variant_id": "gen_tech_mobile_001",
          "generation_context": {
            "context_type": "web_page",
            "topic": "technology, semiconductors",
            "device_class": "mobile"
          },
          "manifest": {
            "format_id": {
              "agent_url": "https://ads.seller-example.com",
              "id": "contextual_display_generative"
            },
            "assets": {
              "headline": {
                "asset_type": "text",
                "content": "Sustainable tech for a better tomorrow"
              },
              "hero_image": {
                "asset_type": "image",
                "url": "https://cdn.seller-example.com/generated/tech_mobile_001.jpg",
                "width": 300,
                "height": 250
              }
            }
          },
          "impressions": 45000,
          "spend": 2250,
          "clicks": 2700,
          "ctr": 0.06
        }
      ]
    }
  ]
}
```

## 別のクリエイティブエージェントを使う場合

以下の場合、別のクリエイティブエージェントが適している:

* クリエイティブサービスが**セラーから独立している** — クリエイティブ管理プラットフォーム、広告サーバー、フォーマット変換サービス
* 複数のセラーが**同じクリエイティブを配信する必要がある** — バイヤーが1か所でクリエイティブを管理して配布します
* バイヤーがセラー間で**集中型クリエイティブアナリティクス**を望む

セラーの広告プロダクトが統合されたケイパビリティとしてクリエイティブ生成や管理を含む場合、両プロトコルをセールスエージェントに実装することがすべての人にとってよりシンプルです。

## ケイパビリティの発見

バイヤーは `get_adcp_capabilities` を確認して、セールスエージェントがサポートしているものを理解する:

```javascript theme={null}
const caps = await agent.getAdcpCapabilities({});

if (caps.errors) {
  throw new Error(`Capabilities check failed: ${caps.errors[0].message}`);
}

const sellsMedia = caps.supported_protocols.includes('media_buy');
const managesCreatives = caps.supported_protocols.includes('creative');
const acceptsInlineCreatives =
  caps.media_buy?.features?.inline_creative_management === true;

if (managesCreatives) {
  const { has_creative_library, supports_generation } = caps.creative;

  if (supports_generation) {
    // Agent generates creatives — look for generative formats
    const formats = await agent.listCreativeFormats({});
    if (formats.errors) {
      console.error('Format discovery failed:', formats.errors);
    }
  }

  if (has_creative_library) {
    // Agent hosts a library — can sync and browse creatives
    const creatives = await agent.listCreatives({
      account: { account_id: 'acc_123' }
    });
    if (creatives.errors) {
      console.error('Library browse failed:', creatives.errors);
    }
  }
}

if (sellsMedia && acceptsInlineCreatives && !managesCreatives) {
  // Inline-only seller: send package creatives on create_media_buy or update_media_buy.
}
```

## 関連ドキュメント

* [クリエイティブ仕様](/docs/creative/specification) — クリエイティブエージェントのプロトコル要件
* [クリエイティブエージェントの実装](/docs/creative/implementing-creative-agents) — スタンドアロンクリエイティブエージェントの実装ガイド
* [生成クリエイティブ](/docs/creative/generative-creative) — AI 駆動生成のための `build_creative` の使用
* [get\_creative\_delivery](/docs/creative/task-reference/get_creative_delivery) — バリアントレベルの配信レポート
* [get\_media\_buy\_delivery](/docs/media-buy/task-reference/get_media_buy_delivery) — メディアバイ配信レポート
* [メディアバイライフサイクル](/docs/media-buy/media-buys/lifecycle) — 状態機械、順序立てられたフロー、保証付きディールの IO パス、クリエイティブ同期のタイミング
