> ## 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.

# get_adcp_capabilities

> get_adcp_capabilities は、バイヤーが AdCP セラーのサポートプロトコル、認証モデル、バージョン、機能ケイパビリティを発見するために行う最初の呼び出しです。リクエストとレスポンスのスキーマリファレンス。

すべての AdCP プロトコルにわたるセラーのプロトコルサポートとケイパビリティを発見します。これは、セラーが何をサポートするかを理解するためにバイヤーが最初に行うべき呼び出しです。

<Info>
  **なぜこの形状か。** ケイパビリティは約 14 のトップレベルドメインキー（プロトコルごとに 1 つ、加えてアイデンティティと署名インフラ）に整理され、機能フラグは各ドメインの `features`/`execution`/その他のサブ名前空間の下にネストされます。私たちはフラットなケイパビリティリストを拒否しました — それはすべての実装者に無制限のサーフェスをスキャンさせ、関連するフラグが隣り合うことから来る発見性を取り除きます。新しいケイパビリティフラグは、新しいトップレベルキーではなく既存のドメインの下に属します。宣言はアドバタイズメントではなくコミットメントです（コンプライアンスランナーがそれらをプローブします）。→ 提案する前に [ケイパビリティエクスプローラー](/docs/protocol/capabilities-explorer) がツリーをたどります。→ [設計原則: ケイパビリティはコミットメント](/docs/protocol/design-principles#4-capabilities-are-commitments-declared-under-existing-buckets)。
</Info>

**応答時間**: 約 2 秒（設定ルックアップ）

**目的**:

* **AdCP ディスカバリー** - このエージェントは AdCP をサポートするか？どのバージョン？
* **プロトコルサポート** - どのプロトコル（media\_buy、signals、governance、sponsored\_intelligence、creative、brand）？
* **認証モデル** - このセラーはエージェントを直接信頼するか、各オペレーターが独立して認証しなければならないか？
* **詳細なケイパビリティ** - 機能、実行統合、ジオターゲティング、ポートフォリオ

<Note>
  **呼び出し元ごとの認可はここでレポートされません。** `get_adcp_capabilities` はセラーのサーフェス — 任意の認可された呼び出し元に対してそれが*できること*すべて — を返します。特定のアカウントで*あなた*が何を許可されているか（あなたのアイデンティティに対してどのタスクが呼び出し可能か、どのリクエストフィールドが変更可能か、`attestation_verifier` のような名前付きスコープ）を発見するには、[`sync_accounts`](/docs/accounts/tasks/sync_accounts) と [`list_accounts`](/docs/accounts/tasks/list_accounts) レスポンスのアカウントごとのエントリの `authorization` オブジェクトを読みます。完全な形状とセマンティクスについては [Caller authorization](/docs/accounts/overview#caller-authorization) を参照。
</Note>

**リクエストスキーマ**: [`/schemas/v3/protocol/get-adcp-capabilities-request.json`](https://adcontextprotocol.org/schemas/v3/protocol/get-adcp-capabilities-request.json)
**レスポンススキーマ**: [`/schemas/v3/protocol/get-adcp-capabilities-response.json`](https://adcontextprotocol.org/schemas/v3/protocol/get-adcp-capabilities-response.json)

## Tool-Based Discovery

AdCP はネイティブの MCP/A2A ツールディスカバリーを使います。**エージェントのツールリストに `get_adcp_capabilities` が存在することが AdCP サポートを示します。**

```
Discovery Flow:
1. Browse agent's tool list (MCP) or skills (A2A)
2. See 'get_adcp_capabilities' tool → Agent supports AdCP
3. Call get_adcp_capabilities → Get version, protocols, features, capabilities
4. Proceed based on returned capabilities
```

このアプローチ:

* 標準の MCP/A2A メカニズムを使う（カスタム拡張なし）
* 常に現在のケイパビリティを返す（古いメタデータではない）
* すべてのケイパビリティ情報の単一の真実の源泉

:::note
エージェントカード拡張（`adcp-extension.json`）は v3 で削除されました。代わりにツールベースのディスカバリーを使ってください。
:::

## Version Negotiation

セラーはレスポンスの `adcp.major_versions` でサポートするメジャーバージョンを宣言します。バイヤーはリクエストの `adcp_major_version` で使用するバージョンを宣言します。

```
Version Negotiation Flow:
1. Buyer calls get_adcp_capabilities with adcp_major_version: 2
2. Seller checks 2 against its major_versions: [2, 3]
3. Version is supported → seller returns capabilities for v2
4. Buyer includes adcp_major_version: 2 on all subsequent requests
```

`adcp_major_version` はすべての AdCP リクエストスキーマの任意フィールドです。バイヤーは、マルチバージョンセラーと対話するときにすべてのリクエストに含めるべきです（SHOULD）。

**セラーの動作:**

* `adcp_major_version` が提供されサポートされている → そのバージョンのスキーマで応答
* `adcp_major_version` が提供されたがサポートされていない → `VERSION_UNSUPPORTED` を返す（バイヤーは `adcp_major_version` なしで呼び出してサポートバージョンを発見すべき）
* `adcp_major_version` が省略された → 最高のサポートバージョンを想定

**なぜマイナーではなくメジャーバージョンか？** セムバーポリシーはメジャーバージョン内での後方互換性を保証します。3.1 のセラーはネゴシエーションなしに 3.0 のバイヤーに提供できます。ケイパビリティモデルが機能レベルの差異を扱います — バイヤーは互換性を判断するために、バージョン番号ではなく特定のケイパビリティ（ターゲティングシステム、機能、拡張）を確認します。

## Request Parameters

| Field                | Type      | Description                                                                                                                                      |
| -------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| `adcp_major_version` | integer   | 任意。バイヤーのペイロードが準拠する AdCP メジャーバージョン。提供された場合、セラーは自身の `major_versions` に対して検証し、範囲外の場合 `VERSION_UNSUPPORTED` を返す。省略された場合、セラーはサポートする最高のメジャーバージョンを想定する。 |
| `protocols`          | string\[] | 任意。特定のプロトコル（`media_buy`、`signals`、`governance`、`sponsored_intelligence`、`creative`、`brand`）にフィルタリング。省略された場合、すべてのサポートプロトコルを返す。                    |

## Response Structure

### adcp

コア AdCP プロトコル情報:

| Field            | Type       | Description                                         |
| ---------------- | ---------- | --------------------------------------------------- |
| `major_versions` | integer\[] | **必須。** サポートする AdCP メジャーバージョン（例: `[3]`）             |
| `idempotency`    | object     | **必須。** 冪等性セマンティクス。[idempotency](#idempotency) を参照。 |

#### idempotency

このセラーが `idempotency_key` リプレイ保護を尊重するかを宣言します。3.1 以降、`idempotency_key` はすべての AdCP タスクリクエスト（読み取りも変更も同様）で必須です（読み取りの段階的強制: 3.1 では SHOULD-reject、3.2 では MUST-reject。[security.mdx § Idempotency](/docs/building/by-layer/L1/security#冪等性) を参照）。`request_signing.supported` パターンを反映 — ウィンドウの詳細から切り離された単一の肯定的宣言。クライアントはデフォルトを想定してはなりません（MUST NOT）。このブロックのないセラーは非準拠で、すべての呼び出しモードにわたってリトライに敏感な操作に対して安全でないものとして扱うべきです。

| Field                | Type    | Description                                                                                                                                                                                                                                                                                                  |
| -------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `supported`          | boolean | **必須。** セラーがリプレイを重複排除するか。`false` のとき、`idempotency_key` の送信は no-op です — セラーは `IDEMPOTENCY_CONFLICT` や `IDEMPOTENCY_EXPIRED` を返さず、素朴なリトライは二重処理します。バイヤーは支出コミット操作をリトライする前に自然キーチェック（例: `get_media_buys` に加え `context.internal_campaign_id` などのリクエストコンテキストや `context.buyer_ref` などのパッケージコンテキスト）を使わなければなりません（MUST）。 |
| `replay_ttl_seconds` | integer | `supported: true` のとき必須。セラーがキーの正準レスポンスを保持する期間。最小 `3600`（1h）、推奨 `86400`（24h）、最大 `604800`（7d）。                                                                                                                                                                                                                 |

```json theme={null}
{
  "adcp": {
    "major_versions": [3],
    "idempotency": { "supported": true, "replay_ttl_seconds": 86400 }
  }
}
```

リプレイ重複排除をサポートしないセラーは明示的に宣言します。

```json theme={null}
{
  "adcp": {
    "major_versions": [3],
    "idempotency": { "supported": false }
  }
}
```

**宣言の検証。** `idempotency.supported: true` は、バイヤーが支出コミット操作を安全にリトライできるようにする信頼を担うクレームです。侵害されたまたはバグのあるセラーは、キーを黙って無視しながら `true` をアドバタイズし、リトライでバイヤーの二重支出を引き起こす可能性があります。バイヤーと適合性ランナーは、意図的なペイロード変異リプレイで宣言をプローブすべきです（SHOULD）: 同じ `idempotency_key` だが異なる正準ペイロードで 2 つのリクエストを送信する — 準拠セラーは 2 番目で `IDEMPOTENCY_CONFLICT` を返さなければなりません（MUST）。`supported: true` を宣言するセラーは、宣言が検証済みと見なされる前にベースラインコンプライアンスストーリーボードの一部としてこのプローブに合格しなければなりません（MUST）。

### supported\_protocols

このエージェントがサポートする AdCP プロトコル。これは単一のケイパビリティ軸です — 各値は (a) エージェントが実装するツールを宣言し、*かつ* (b) エージェントを `/compliance/{version}/protocols/{protocol}/` のベースラインコンプライアンスストーリーボードの合格にコミットします。ランナーは JSON snake\_case → URL kebab-case をマッピングします（`media_buy` → `/compliance/.../protocols/media-buy/`）。

```json theme={null}
{
  "supported_protocols": ["media_buy", "creative"]
}
```

有効な値: `media_buy`、`creative`、`signals`、`governance`、`brand`、`sponsored_intelligence`。

各プロトコルのスコープについては [Compliance Catalog](/docs/building/compliance-catalog) を参照。[コンプライアンステストコントローラー](/docs/building/by-layer/L3/comply-test-controller)のサポートは、プロトコル値としてではなく、別個の `compliance_testing` ケイパビリティブロック（下記）で宣言されます。

### specialisms

任意の専門化クレーム。各エントリは `/compliance/{version}/specialisms/{id}/` の狭いストーリーボードに対応します。すべての専門分野は `supported_protocols` の 1 つのプロトコルにロールアップします — `sales-guaranteed` を主張するには `media_buy` が必要です。ランナーは親プロトコルが欠けている専門分野を拒否します。

```json theme={null}
{
  "specialisms": ["sales-guaranteed", "creative-template"]
}
```

すべての専門分野については完全な [Compliance Catalog](/docs/building/compliance-catalog) を、権威あるリストについては [enum スキーマ](https://adcontextprotocol.org/schemas/v3/enums/specialism.json) を参照。

### Capability slot gaps

`definePlatform` などの SDK ヘルパーは、プラットフォーム実装をより狭いケイパビリティスロットに投影できます。それらのスロットをコミットメントとして扱ってください: エージェントが対応するタスクパスをエンドツーエンドで実行できるときのみスロットを宣言します。

ストーリーボードやローカルテストベクターがエージェントが宣言しないスロットをターゲットにする場合、期待される適合性結果は失敗ではなく `not_applicable` です。ランナー側の強制が `adcp-client#2244` で到着するまで、カスタムまたはプレリリーススイートを実行する実装者は、宣言されたスロットスコープ外のベクターに明示的なスキップゲートを追加すべきです。欠けているスロットを、それを宣言してプレースホルダーレスポンスを返すことで回避しないでください。それは正直なカバレッジギャップを失敗したケイパビリティクレームに変えます。

### account

アカウントと認証のケイパビリティ。すべてのセラーはこのセクションを宣言すべきです — バイヤーは `sync_accounts`、`list_accounts`、または任意の認証済みタスクを呼び出す前にこれを読みます。シンプルなパブリッシャーでも、課金関係とサンドボックステストを扱うためにアカウント管理が必要です。

| Field                    | Type      | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| ------------------------ | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `supported_billing`      | string\[] | **必須。** このセラーがサポートする課金モデル: `operator`、`agent`。バイヤーはすべての `sync_accounts` エントリでこれらの値の 1 つを `billing` として渡さなければならない。                                                                                                                                                                                                                                                                                                                                                                                                                            |
| `require_operator_auth`  | boolean   | デフォルト: `false`。誰が認証しなければならないかを宣言する。OAuth が使われるか、`list_accounts` が公開されるか、どの `sync_accounts` モードがサポートされるかを、それ自体では宣言しない。`true` のとき、各オペレーターは独立して認証し、アカウントスコープの呼び出しはセラー割り当ての `account_id` 値を使う（セラーまたは上流プラットフォームが正準アカウント名前空間を所有するため）。認証情報が複数のアカウントにアクセスしうる場合、セラーは `list_accounts` を公開しなければならず（MUST）、バイヤーは最初のアカウントスコープリクエストの前に明示的な `account_id` を解決しなければならない（MUST）。認証情報が正確に 1 つのアカウントにバインドされている場合、セラーはそのシングルトンを返す `list_accounts` を公開すべきである（SHOULD）。`false` のとき、エージェントは信頼され、バイヤーは `sync_accounts` でアカウントを宣言し、後続の呼び出しは自然キー（`brand` + `operator`）を渡す。 |
| `authorization_endpoint` | string    | オペレーター認証用の OAuth URL。セラーがオペレーター認証に OAuth をサポートするときに存在。`require_operator_auth: true` のとき関連。存在しない場合、オペレーターは帯域外（セラーポータル、API キー）で認証情報を取得する。                                                                                                                                                                                                                                                                                                                                                                                                      |
| `required_for_products`  | boolean   | デフォルト: `false`。`true` のとき、バイヤーは `get_products` を呼び出す前にアカウントを確立しなければならない。`false` のとき、バイヤーはアカウントなしでプロダクトを参照できる。                                                                                                                                                                                                                                                                                                                                                                                                                                |
| `account_financials`     | boolean   | デフォルト: `false`。`true` のとき、セラーは支出、クレジット、請求ステータスをクエリする [`get_account_financials`](/docs/accounts/tasks/get_account_financials) をサポート。operator 課金のアカウントにのみ適用可能。                                                                                                                                                                                                                                                                                                                                                                                 |
| `sandbox`                | boolean   | デフォルト: `false`。本番セールスエージェントに強く推奨。`true` のとき、セラーはテスト用のサンドボックスアカウントをサポート。[サンドボックスモード](/docs/media-buy/advanced-topics/sandbox) を参照。                                                                                                                                                                                                                                                                                                                                                                                                            |

#### Auth models

**バイヤー宣言アカウント**（`require_operator_auth: false`）— セラーはエージェントのアイデンティティクレームを信頼します。エージェントは自身の bearer トークンで一度認証し、次に `sync_accounts` を呼び出して代表するブランドとオペレーターを宣言します。セラーはエージェントのクレームに基づいてアカウントをプロビジョニングし、任意で `brand.json` に対してオペレーターを検証します。後続のすべての呼び出しはエージェントの単一の認証情報を使い、自然キー（`brand` + `operator`）を渡します。

**アカウント ID 名前空間**（`require_operator_auth: true`）— 各オペレーターはセラーと直接認証しなければなりません。エージェントはオペレーターごとに認証情報を取得し（`authorization_endpoint` を使う OAuth 経由、または帯域外）、オペレーターごとのセッションを開き、後続のリクエストでセラー割り当ての `account_id` 値を渡します。OAuth は認証情報の取得であり、アカウントタクソノミー軸ではありません。2 つの名前空間パターンが同じワイヤー参照を使います: 上流管理のセラーは `list_accounts` を公開し、アカウントスコープ呼び出しの前に明示的なアカウント解決を必須にします。`list_accounts` のないセラー定義の名前空間は帯域外でアカウント ID を提供します。

サンドボックスについては、パスはアカウント名前空間に従います: アカウント ID 名前空間は `list_accounts` または帯域外セットアップで既存のテストアカウントを発見します。バイヤー宣言アカウントは `sandbox: true` の `sync_accounts` でサンドボックスを宣言します。

完全なワークフローについては [アカウントとエージェント](/docs/building/by-layer/L2/accounts-and-agents#what-sellers-declare) を、認証モデルと課金サポートの一般的な組み合わせについては [セラーパターン](/docs/building/by-layer/L2/accounts-and-agents#seller-patterns) を参照。

### media\_buy

メディアバイプロトコルのケイパビリティ。`media_buy` が `supported_protocols` にある場合にのみ存在。`media_buy` を宣言するセラーは `account`（`supported_billing` 付き）と `media_buy.portfolio` も含めるべきです — バイヤーは課金の確立とインベントリカバレッジの理解の両方に必要です。コンプライアンステストがそれらの存在を検証します。

:::note 3.0 の破壊的変更
次のフィールドはケイパビリティレスポンスから削除されました:

* `media_buy.reporting` — レポートは `media_buy` によって暗示されます。代わりにプロダクトレベルの `reporting_capabilities` を使ってください。
* `features.content_standards` — `media_buy.content_standards` オブジェクトに置き換え。オブジェクトの存在がサポートを示します。
* `features.audience_targeting` — `media_buy.audience_targeting` オブジェクトに置き換え。
* `features.conversion_tracking` — `media_buy.conversion_tracking` オブジェクトに置き換え。
* `execution.targeting.device_platform`、`device_type` — `media_buy` サポートによって暗示。
* `execution.targeting.audience_include`、`audience_exclude` — `audience_targeting` オブジェクトの存在によって暗示。
* `execution.trusted_match.supported` — オブジェクトの存在がサポートを示します。
* `brand.identity` — `supported_protocols` の `brand` によって暗示。`get_brand_identity` は常に利用可能。
  :::

#### reporting\_delivery\_methods

セラーのプロダクトポートフォリオ全体でどのプッシュベースの配信方法が利用可能かを宣言します。`get_media_buy_delivery` によるポーリングは、このフィールドに関係なくすべての `media_buy` セラーに必須のタスクです。

| Method    | Description                    | Configuration                             |
| --------- | ------------------------------ | ----------------------------------------- |
| `webhook` | セラーがバイヤー提供の URL にプッシュ          | バイヤーがメディアバイごとに `reporting_webhook` を設定    |
| `offline` | セラーがクラウドストレージバケットにバッチファイルをプッシュ | セラーがアカウントごとに `reporting_bucket` をプロビジョニング |

存在しない場合、ポーリングのみが利用可能です。ケイデンスとメトリクスはプロダクトごとに `reporting_capabilities` で宣言されます。

`offline` が宣言される場合、どのクラウドストレージプロトコルがサポートされるか（`s3`、`gcs`、`azure_blob`）を宣言する `offline_delivery_protocols` も含めます。詳細は [オフラインファイル配信](/docs/media-buy/media-buys/optimization-reporting#offline-file-delivery-based-reporting) を参照。

#### creative\_approval\_mode

クリエイティブが割り当てられ自動検証が通過した後の、セラーのテナント全体のクリエイティブ承認姿勢を宣言します。これは通知サーフェスや新しい承認ワークフローではありません。人間のレビューが配信適格性をまだブロックできるかをバイヤーとコンプライアンスランナーに伝えます。

| Value           | Description                                                                                         |
| --------------- | --------------------------------------------------------------------------------------------------- |
| `auto_approve`  | クリエイティブが割り当てられ自動検証が通過した後、人間のレビューは配信適格性をブロックしない。                                                     |
| `require_human` | 1 つ以上のプロダクト/アカウントが、クリエイティブが配信適格になる前に手動レビューを必要とする場合がある。プロダクトレベルのオーバーライドが存在するまで、テナント全体の最悪ケースの上限として扱う。 |

混合承認ポリシーを持つセラーは、アドバタイズされたエージェントで到達可能なすべてのプロダクト/アカウントが自動検証後の自動適格性をサポートしない限り、`require_human` を宣言すべきです（SHOULD）。フィールドが存在しない場合、承認動作はレガシー未指定です。ランナーは省略を肯定的な `auto_approve` クレームとして扱うべきではありません（SHOULD NOT）。

#### features

任意のメディアバイ機能。**true と宣言された場合、セラーはその機能を使うリクエストを尊重しなければなりません（MUST）。**

| Feature                      | Description                                                             |
| ---------------------------- | ----------------------------------------------------------------------- |
| `inline_creative_management` | `create_media_buy` と `update_media_buy` のパッケージペイロードでクリエイティブをインラインで受け入れる |
| `property_list_filtering`    | `get_products` の `property_list` パラメーターを尊重する                            |
| `catalog_management`         | カタログフィード管理のための `sync_catalogs` をサポート                                    |

#### content\_standards

コンテンツ標準の実装詳細。このオブジェクトの存在は、セラーがサンプリングレートとカテゴリフィルタリングを含むコンテンツ標準設定をサポートすることを示します。

| Field                       | Type      | Description                                                                                                                    |
| --------------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `supports_local_evaluation` | boolean   | セラーがローカル評価モデルを実行するか。`false` のとき、`local_verdict` は常に `unevaluated` になり、`get_media_buy_artifacts` の `failures_only` フィルターは有用でない。 |
| `supported_channels`        | string\[] | セラーがコンテンツアーティファクトを提供できるチャネル。                                                                                                   |
| `supports_webhook_delivery` | boolean   | セラーが購入作成時に設定された `artifact_webhook` によるプッシュベースのアーティファクト配信をサポートするか。                                                              |

**Example:**

```json theme={null}
{
  "content_standards": {
    "supports_local_evaluation": true,
    "supported_channels": ["display", "olv", "podcast"],
    "supports_webhook_delivery": true
  }
}
```

`supports_local_evaluation` が `false` の場合、`get_media_buy_artifacts` の `failures_only` フィルターは空の結果セットを返します — すべての判定が `unevaluated` になります。

#### execution

技術的な実行ケイパビリティ:

| Field              | Type      | Description                                                                          |
| ------------------ | --------- | ------------------------------------------------------------------------------------ |
| `trusted_match`    | object    | [TMP](/docs/trusted-match) サポート。存在する場合、このセラーはリアルタイムのコンテキストおよび/またはアイデンティティマッチングをサポート。 |
| `axe_integrations` | string\[] | 非推奨。このセラーが実行できるレガシー AXE URL。新しい統合には `trusted_match` を使う。                             |
| `creative_specs`   | object    | クリエイティブ仕様サポート（VAST バージョン、MRAID など）                                                   |
| `targeting`        | object    | ターゲティングケイパビリティ（ジオ粒度）                                                                 |

##### axe\_integrations

`axe_integrations` は、このセラーが実行できる Agentic Ad Exchange（AXE）エンドポイント URL の配列です。AXE は AdCP キャンペーンのリアルタイム実行層です — バイヤーエージェントを標準化されたエクスチェンジ経由でプログラマティックインベントリに接続します。

##### creative\_specs

| Field            | Type      | Description                                   |
| ---------------- | --------- | --------------------------------------------- |
| `vast_versions`  | string\[] | サポートする VAST バージョン（例: `["4.0", "4.1", "4.2"]`） |
| `mraid_versions` | string\[] | サポートする MRAID バージョン                            |
| `vpaid`          | boolean   | VPAID サポート                                    |
| `simid`          | boolean   | SIMID サポート                                    |

##### targeting

| Field               | Type    | Description                                                          |
| ------------------- | ------- | -------------------------------------------------------------------- |
| `geo_countries`     | boolean | ISO 3166-1 alpha-2 コードを使う国レベルのターゲティング                                |
| `geo_regions`       | boolean | ISO 3166-2 コードを使う地域/州レベルのターゲティング（例: `US-NY`、`GB-SCT`）                |
| `geo_metros`        | object  | システム固有のサポートを持つメトロエリアターゲティング                                          |
| `geo_postal_areas`  | object  | 国と精度のサポートを持つ郵便エリアターゲティング                                             |
| `age_restriction`   | object  | `supported` フラグと `verification_methods` を持つ年齢制限ケイパビリティ               |
| `language`          | boolean | 言語ターゲティング（ISO 639-1 コード）                                             |
| `keyword_targets`   | object  | `supported_match_types` 配列（`broad`、`phrase`、`exact`）を持つキーワードターゲティング。 |
| `negative_keywords` | object  | `supported_match_types` 配列を持つ除外キーワードターゲティング。                         |
| `geo_proximity`     | object  | 任意の座標からの近接ターゲティング（下記参照）                                              |

デバイスプラットフォームとデバイスタイプのターゲティングは `media_buy` サポートによって暗示されます。オーディエンスの include/exclude ターゲティングは `audience_targeting` ケイパビリティオブジェクトの存在によって暗示されます。

地理的ターゲティングレベルをサポートするセラーは、そのレベルで包含と除外の両方をサポートすべきです（SHOULD）。片方向のみをサポートする場合、黙って無視するのではなく、サポートされないフィールドに対して検証エラーを返さなければなりません（MUST）。

**geo\_proximity** はどの近接ターゲティング方法がサポートされるかを指定します:

| Field             | Type      | Description                                                           |
| ----------------- | --------- | --------------------------------------------------------------------- |
| `radius`          | boolean   | シンプルな半径ターゲティング                                                        |
| `travel_time`     | boolean   | 移動時間アイソクローンターゲティング                                                    |
| `geometry`        | boolean   | 事前計算された GeoJSON ジオメトリ                                                 |
| `transport_modes` | string\[] | アイソクローンでサポートされる交通手段: `driving`、`walking`、`cycling`、`public_transport` |

**geo\_metros** はどのメトロ分類システムがサポートされるかを指定します:

| System           | Description                          |
| ---------------- | ------------------------------------ |
| `nielsen_dma`    | Nielsen DMA コード（米国市場、例: NYC の `501`） |
| `uk_itl1`        | UK ITL レベル 1 地域                      |
| `uk_itl2`        | UK ITL レベル 2 地域                      |
| `eurostat_nuts2` | Eurostat NUTS レベル 2 地域（EU）           |

**geo\_postal\_areas** はどの国ローカルの郵便番号システムがサポートされるかを指定します。推奨される形状は ISO 3166-1 alpha-2 国でキー付けされ、各国がサポートするシステムをリストします:

```json theme={null}
{
  "us_zip": true,
  "us_zip_plus_four": true,
  "US": ["zip", "zip_plus_four"],
  "GB": ["outward", "full"],
  "CA": ["fsa", "full"],
  "ZA": ["postal_code"]
}
```

より具体的な登録済みローカルシステムのない国では通常の郵便番号文字列に `postal_code` を使います。3.x 移行中、セラーはエイリアスが存在する場合、ネイティブの国キーとともに `us_zip` などの同等の非推奨エイリアスを発するべきです（SHOULD）。

#### audience\_targeting

オーディエンスターゲティングのケイパビリティ。このオブジェクトの存在は、セラーが `sync_audiences` とターゲティングオーバーレイの `audience_include`/`audience_exclude` を含むオーディエンスターゲティングをサポートすることを示します。

| Field                           | Type      | Required | Description                                                           |
| ------------------------------- | --------- | -------- | --------------------------------------------------------------------- |
| `supported_identifier_types`    | string\[] | **必須**   | オーディエンスマッチングに受け入れられる PII 由来の識別子タイプ。値: `hashed_email`、`hashed_phone`。  |
| `minimum_audience_size`         | integer   | **必須**   | ターゲティングに必要な最小マッチオーディエンスサイズ。このしきい値未満のオーディエンスは `status: too_small` になる。 |
| `supports_platform_customer_id` | boolean   |          | `true` のとき、セラーはバイヤーの CRM/ロイヤルティ ID をマッチ可能な識別子として受け入れる。                |
| `supported_uid_types`           | string\[] |          | オーディエンスマッチングに受け入れられるユニバーサル ID タイプ（MAID、RampID、UID2 など）。               |
| `matching_latency_hours`        | object    |          | アップロード後の期待マッチングレイテンシー範囲（時間）。形状: `{ min: integer, max: integer }`。     |

#### conversion\_tracking

セラーレベルのコンバージョントラッキングケイパビリティ。`kind: "event"` 最適化目標についてセラーがサポートするものを宣言します。

| Field                          | Type      | Description                                          |
| ------------------------------ | --------- | ---------------------------------------------------- |
| `multi_source_event_dedup`     | boolean   | セラーが単一目標内の複数イベントソースにわたってイベントを重複排除できるか。               |
| `supported_event_types`        | string\[] | このセラーが追跡できるイベントタイプ。省略された場合、すべての標準イベントタイプがサポート。       |
| `supported_uid_types`          | string\[] | ユーザーマッチングに受け入れられるユニバーサル ID タイプ。                      |
| `supported_hashed_identifiers` | string\[] | 受け入れられるハッシュ化 PII タイプ（`hashed_email`、`hashed_phone`）。 |
| `supported_action_sources`     | string\[] | このセラーがイベントを受け入れるアクションソース。                            |
| `attribution_windows`          | object\[] | 利用可能なアトリビューションウィンドウ。                                 |

#### portfolio

インベントリポートフォリオ情報:

| Field                  | Type      | Description                   |
| ---------------------- | --------- | ----------------------------- |
| `publisher_domains`    | string\[] | **必須。** このセラーが代表するパブリッシャードメイン |
| `primary_channels`     | string\[] | 主要な広告チャネル                     |
| `primary_countries`    | string\[] | 主要な国（ISO コード）                 |
| `description`          | string    | Markdown ポートフォリオ説明            |
| `advertising_policies` | string    | コンテンツポリシーと制限                  |

### signals

シグナルプロトコルのケイパビリティ。`signals` が `supported_protocols` にある場合にのみ存在。

| Field                      | Type      | Description                                                                                                                                                                                                                                               |
| -------------------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `data_provider_domains`    | string\[] | このシグナルエージェントが再販を認可されているデータプロバイダードメイン。                                                                                                                                                                                                                     |
| `discovery_modes`          | string\[] | エージェントが `get_signals` でサポートするディスカバリーモード。`"brief"`（`signal_spec` / `signal_refs` によるセマンティックディスカバリー）は暗黙的で常にサポート。呼び出し元が `signal_spec` / `signal_refs` / `signal_ids` を省略して完全な価格付きシグナルフィードを列挙できることをアドバタイズするには `"wholesale"` を宣言する。宣言がない場合は `["brief"]` として扱う。 |
| `features.catalog_signals` | boolean   | **非推奨。** adagents.json `signals[]` のプロバイダー公開シグナル定義への構造化 `signal_ref` 参照のレガシーワイヤーフラグ。                                                                                                                                                                      |

<Note>
  `catalog_signals` は非推奨です。既存の 3.x エージェントは互換性のためこれを発し続けてもかまいませんが、新しいエージェントはこれを省略すべきで（SHOULD）、呼び出し元は `signal_ref` を使う前にこれを必須としてはなりません（MUST NOT）。
</Note>

### creative

クリエイティブプロトコルのケイパビリティ。`creative` が `supported_protocols` にある場合にのみ存在。

| Field                         | Type    | Description                                                                                                                                                                                                                              |
| ----------------------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `supports_compliance`         | boolean | `true` のとき、このクリエイティブエージェントはコンプライアンス要件（`required_disclosures`、`prohibited_claims`）を持つブリーフを処理でき、開示がターゲットフォーマットで満たせることを検証する。                                                                                                                |
| `supports_transformers`       | boolean | `true` のとき、このクリエイティブエージェントはアカウントスコープのトランスフォーマー（ボイス、モデル、スタイル）を提供する。[`list_transformers`](/docs/creative/task-reference/list_transformers) で発見し、[`build_creative`](/docs/creative/task-reference/build_creative) で `transformer_id` により選択。 |
| `supports_refinement`         | boolean | `true` のとき、このクリエイティブエージェントは生成した `build_variant` リーフを保持し、[`build_creative`](/docs/creative/task-reference/build_creative) の `refine_from_build_variant_id` から再ビルドできる。                                                                     |
| `refinable_retention_seconds` | integer | `supports_refinement` が `true` のとき、生成された `build_variant_id` が `refine_from_build_variant_id` 経由で絞り込み可能なままの**保証最小**ウィンドウ（下限であり上限ではない）。                                                                                                    |
| `multiplicity`                | object  | バイヤーが `max_creatives`/`max_variants` を送る前のファンアウト判別子。`supports_catalog_fanout` + `max_creatives_limit`、`supports_variants` + `max_variants_limit`、`variant_dimensions[]`。                                                                 |
| `supports_spend_controls`     | boolean | `true` のとき、`build_creative` は呼び出しごとの `max_spend` 上限を尊重し、`mode: "estimate"` ドライランをサポート。`bills_through_adcp: true` の場合にのみ意味を持つ。                                                                                                            |
| `bills_through_adcp`          | boolean | `true` のとき、このクリエイティブエージェントは AdCP レートカードサーフェスを通じて課金する。`false` または存在しない場合、エージェントは帯域外で課金する。                                                                                                                                                 |

### governance

ガバナンスプロトコルのケイパビリティ。`governance` が `supported_protocols` にある場合にのみ存在。ガバナンスエージェントは 4 つのドメインにわたってケイパビリティを宣言します: プロパティ評価、クリエイティブ評価、コンテンツ標準検証、ポリシーレジストリ統合。

#### property\_features

このガバナンスエージェントが評価できるプロパティ機能の配列。[プロパティガバナンス](/docs/governance/property/index) を参照。

| Field             | Type      | Description                                                                                                                                            |
| ----------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `feature_id`      | string    | **必須。** 一意識別子（例: `mfa_score`、`coppa_certified`）。[Policy Registry](/docs/governance/policy-registry) エントリにマップされる機能には `registry:{policy_id}` プレフィックスを使う。 |
| `type`            | string    | **必須。** データタイプ: `binary`、`quantitative`、`categorical`。                                                                                                 |
| `range`           | object    | quantitative 用: `{ min, max }`                                                                                                                         |
| `categories`      | string\[] | categorical 用: 有効な値                                                                                                                                    |
| `description`     | string    | 人間可読な説明                                                                                                                                                |
| `methodology_url` | string    | 方法論ドキュメントへの URL                                                                                                                                        |

#### creative\_features

このガバナンスエージェントが評価できるクリエイティブ機能の配列。`property_features` と同じフィールドスキーマ。[クリエイティブガバナンス](/docs/governance/creative/index) を参照。

#### content\_standards

コンテンツ標準検証のケイパビリティ。[コンテンツ標準](/docs/governance/content-standards/index) を参照。

| Field                 | Type      | Description                                                      |
| --------------------- | --------- | ---------------------------------------------------------------- |
| `supported`           | boolean   | このエージェントがコンテンツ標準検証エージェントとして機能できるか                                |
| `calibration_formats` | string\[] | このエージェントが評価できるアーティファクトアセットタイプ（例: `text`、`image`、`video`、`audio`） |

#### policy\_registry

ポリシーレジストリ統合のケイパビリティ。[Policy Registry](/docs/governance/policy-registry) を参照。

| Field       | Type      | Description                                                                      |
| ----------- | --------- | -------------------------------------------------------------------------------- |
| `supported` | boolean   | このエージェントが AdCP ポリシーレジストリからポリシーを消費するか                                             |
| `domains`   | string\[] | このエージェントがカバーするガバナンスドメイン（例: `campaign`、`property`、`creative`、`content_standards`） |

**ガバナンスエージェントレスポンスの例:**

```json theme={null}
{
  "$schema": "/schemas/protocol/get-adcp-capabilities-response.json",
  "status": "completed",
  "adcp": {
    "major_versions": [3],
    "idempotency": { "supported": true, "replay_ttl_seconds": 86400 }
  },
  "supported_protocols": ["governance"],
  "governance": {
    "property_features": [
      { "feature_id": "mfa_score", "type": "quantitative", "range": { "min": 0, "max": 100 }, "description": "Made For Advertising detection (0=quality content, 100=likely MFA)", "methodology_url": "https://vendor.example.com/methodology/mfa" },
      { "feature_id": "coppa_certified", "type": "binary", "description": "COPPA compliance certification" },
      { "feature_id": "registry:uk_hfss", "type": "binary", "description": "UK HFSS advertising restrictions compliance" },
      { "feature_id": "carbon_score", "type": "quantitative", "range": { "min": 0, "max": 100 }, "description": "Carbon footprint sustainability score", "methodology_url": "https://vendor.example.com/methodology/carbon-score" }
    ],
    "creative_features": [
      { "feature_id": "registry:eu_ai_act_article_50", "type": "binary", "description": "EU AI Act Article 50 — AI-generated content disclosure" },
      { "feature_id": "registry:ca_sb_942", "type": "binary", "description": "California SB 942 — AI transparency compliance" },
      { "feature_id": "auto_redirect", "type": "binary", "description": "Detects auto-redirect behavior in creative code" },
      { "feature_id": "credential_harvest", "type": "binary", "description": "Detects credential harvesting patterns" }
    ],
    "content_standards": {
      "supported": true,
      "calibration_formats": ["text", "image", "video"]
    },
    "policy_registry": {
      "supported": true,
      "domains": ["campaign", "property", "creative", "content_standards"]
    }
  }
}
```

### measurement

実験的な測定プロトコルのケイパビリティ。`measurement` が `supported_protocols` にある場合にのみ存在。それを実装するエージェントは `experimental_features` に `measurement.core` もリストしなければなりません。`measurement` プロトコルは現在、カタログ探索のための `get_adcp_capabilities`（このブロック）にスコープされています。

**スコープ。** `measurement` を主張するエージェントは、広告配信、エクスポージャー、または効果についての 1 つ以上の定量的メトリクスを計算します（インプレッション検証、ビューアビリティ、IVT、アテンション、ブランドリフト、インクリメンタリティ、成果、排出 — ベンダーが `metrics[]` でサーフェスを定義）。メトリクス定義（このブロック）を返し、価格やカバレッジ（`measurement_terms` で購入ごとに交渉）やライブ値（`vendor_metric_values` で購入ごとに返す）は返しません。

#### metrics

この測定エージェントが計算するメトリクスの配列。

| Field                 | Type         | Description                                                                                                                      |
| --------------------- | ------------ | -------------------------------------------------------------------------------------------------------------------------------- |
| `metric_id`           | string       | **必須。** ベンダースコープの識別子（`attention_units`、`gco2e_per_impression` など）。完全なアイデンティティはタプル `(vendor.domain, vendor.brand_id, metric_id)`。 |
| `standard_reference`  | string (URI) | このメトリクスが**実装**する公開標準を指す任意の URI。                                                                                                  |
| `accreditations`      | object\[]    | このメトリクスが持つサードパーティ認定の任意のリスト（MRC、ARF、JIC 機関など）。各エントリ: `accrediting_body`（必須）、任意の `certification_id`、`valid_until`、`evidence_url`。  |
| `unit`                | string       | `vendor_metric_values.value` でレポートされる値の単位（`score`、`seconds`、`persons`、`gCO2e`、`lift_percent`、`USD` など）。                          |
| `description`         | string       | メトリクスが測定するものと方法論ノートの人間可読な説明。                                                                                                     |
| `methodology_url`     | string (URI) | ベンダーの完全な方法論ドキュメントへの URL。                                                                                                         |
| `methodology_version` | string       | 方法論の任意のバージョン識別子。                                                                                                                 |
| `ext`                 | object       | AdCP `ext` 慣例に従うベンダー拡張。                                                                                                          |

```json Response example theme={null}
{
  "measurement": {
    "metrics": [
      {
        "metric_id": "attention_units",
        "standard_reference": "https://iabtechlab.com/standards/attention-measurement",
        "accreditations": [
          { "accrediting_body": "MRC", "certification_id": "MRC-ATT-2026-001", "valid_until": "2027-12-31", "evidence_url": "https://mediaratingcouncil.org/accreditations/attentionvendor" }
        ],
        "unit": "score",
        "description": "Eye-tracking-based attention score (0-100). Computed from a panel of 25K opted-in households.",
        "methodology_url": "https://attentionvendor.example/docs/attention-units",
        "methodology_version": "v2.1"
      },
      {
        "metric_id": "engagement_seconds",
        "unit": "seconds",
        "description": "Active dwell time in seconds, measured via in-content telemetry."
      }
    ]
  }
}
```

**これはディスカバリーサーフェスであり、レートカードではありません。** カタログはバイヤーにベンダーが*何を*測定し、*どの標準/認定*が裏付けるかを伝えます。インプレッションごとの価格、最小測定可能インベントリ、アトリビューションウィンドウ、地理的カバレッジ、データ鮮度 SLA は、このカタログではなく、`create_media_buy` のセラーの `measurement_terms` を通じて購入ごとに交渉されます。

### compliance\_testing

コンプライアンステストのケイパビリティ。このブロックの存在は、エージェントが [`comply_test_controller`](/docs/building/by-layer/L3/comply-test-controller) による決定的テストをサポートすることを宣言します。エージェントがコンプライアンステストをサポートしない場合はブロックを省略します。

**本番デプロイはこのブロックを含めてはなりません（MUST NOT）。** `comply_test_controller` はデプロイレベルでサンドボックス専用です。ディスパッチがゲートされていても、本番エンドポイントでケイパビリティをアドバタイズすることは非準拠です。

| Field       | Type      | Description                                                                                                                                                                                                                                                                |
| ----------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `scenarios` | string\[] | このエージェントがサポートするコンプライアンステストシナリオ。値は `list_scenarios` を除き、エージェントが実装するすべての正準コントローラーシナリオを含むべき（SHOULD）。現在の正準値には `force_creative_status`、`force_account_status`、`force_media_buy_status`、`seed_product`、`seed_measurement_catalog` などが含まれる。ランナーはシナリオ名をオープン文字列として扱わなければならない（MUST）。 |

:::note
コンプライアンステストはデプロイレベルでサンドボックス専用です — 本番デプロイはこのブロックをアドバタイズしたり、任意のサーフェスで `comply_test_controller` を公開したりしてはなりません（MUST NOT）。
:::

### webhook\_signing

セラーの webhook 署名姿勢を宣言します。変更 webhook の発出をアドバタイズする任意のセラー — `media_buy.reporting_delivery_methods` に `webhook` を含む、`media_buy.content_standards.supports_webhook_delivery: true`、または `wholesale_feed_webhooks.supported: true` を含むがこれらに限らない — は、このブロックを `supported: true` で含めなければなりません（MUST）。webhook をまったく発出しないセラーはブロックを完全に省略してもかまいません（MAY）。

| Field                  | Type      | Description                                                                                                                                                             |
| ---------------------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `supported`            | boolean   | **セラーがケイパビリティサーフェスの他の場所で変更 webhook の発出をアドバタイズする場合に必須。** セラーがアウトバウンド webhook に署名する場合にのみ `true`。`false` はセラーが webhook を発出するが署名しないことを意味する。バイヤーはオンボーディングに失敗しなければならない（MUST）。 |
| `profile`              | string    | **`supported: true` のとき必須。** プロファイルバージョン文字列。現在は `"adcp/webhook-signing/v1"`。                                                                                            |
| `algorithms`           | string\[] | **`supported: true` のとき必須。** `["ed25519", "ecdsa-p256-sha256"]` のサブセット。                                                                                                 |
| `legacy_hmac_fallback` | boolean   | **`supported: true` のとき必須。** セラーがレガシー HMAC-SHA256 スキームをサポートする場合にのみ `true`。`false` が 3.x で推奨される姿勢 — HMAC スキームは AdCP 4.0 で削除される。                                          |

**Example:**

```json theme={null}
{
  "webhook_signing": {
    "supported": true,
    "profile": "adcp/webhook-signing/v1",
    "algorithms": ["ed25519", "ecdsa-p256-sha256"],
    "legacy_hmac_fallback": false
  }
}
```

webhook 署名ブロックは `request_signing`（インバウンド）と並行し、2 つのブロックがバイヤーとセラー間の 2 つの署名方向をカバーします。

### extensions\_supported

このエージェントがサポートする拡張名前空間の配列。バイヤーはこのエージェントからのレスポンスの `ext.{namespace}` フィールドに意味のあるデータを期待できます。

| Field                  | Type      | Description                         |
| ---------------------- | --------- | ----------------------------------- |
| `extensions_supported` | string\[] | 拡張名前空間（例: `["iab_tcf", "iab_gpp"]`） |

拡張スキーマは [AdCP 拡張レジストリ](/docs/building/by-layer/L2/context-sessions#extensions) に公開されています。

**Example:**

```json theme={null}
{
  "extensions_supported": ["iab_tcf", "iab_gpp", "acmecorp"]
}
```

### experimental\_features

このエージェントが実装する実験的 AdCP サーフェスの配列。サーフェスは、そのスキーマが `x-status: experimental` を運ぶとき実験的です — コアプロトコルの一部だがまだ凍結されておらず、6 週間の予告をもって 3.x リリース間で破壊される可能性があります。任意の実験的サーフェスを実装するセラーは、ここにその機能 id をリストしなければなりません（MUST）。

| Field                   | Type      | Description                                                                                                                               |
| ----------------------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| `experimental_features` | string\[] | 実験的機能 id（例: `["brand.rights_lifecycle", "governance.campaign", "measurement.core", "trusted_match.core", "sponsored_intelligence.core"]`） |

**Example:**

```json theme={null}
{
  "experimental_features": ["brand.rights_lifecycle", "measurement.core", "trusted_match.core"]
}
```

完全な安定性コントラクト、卒業基準、クライアントガイダンスについては [実験的ステータス](/docs/reference/experimental-status) を参照。

### wholesale\_feed\_versioning

[`get_products`](/docs/media-buy/task-reference/get_products#ホールセールフィードバージョニング) と [`get_signals`](/docs/signals/tasks/get_signals#ホールセールフィードバージョニング) の条件付きフェッチトークンケイパビリティ。ホールセールフィード webhook から独立: エージェントは変更ペイロードをプッシュせずに安価なバージョンプローブをサポートしてもよく（MAY）、修復のための再照合読み取りを依然として要求しながら変更ペイロードをプッシュしてもよい（MAY）。

| Field                      | Type    | Description                                                                                   |
| -------------------------- | ------- | --------------------------------------------------------------------------------------------- |
| `supported`                | boolean | **必須。** エージェントがレスポンスで `wholesale_feed_version` を返し、リクエストで `if_wholesale_feed_version` を尊重するか。 |
| `pricing_version_separate` | boolean | エージェントが `pricing_version` を `wholesale_feed_version` から独立して追跡するか。                             |
| `cache_scope_account`      | boolean | エージェントが `cache_scope: "account"` を返すことがあるか（すなわち、パブリックレートカードとは別のアカウント別オーバーレイを公開するか）。           |

**Example:**

```json theme={null}
{
  "wholesale_feed_versioning": {
    "supported": true,
    "pricing_version_separate": true,
    "cache_scope_account": true
  }
}
```

### wholesale\_feed\_webhooks

エージェントごとのホールセールプロダクトフィードとホールセールシグナルフィードの webhook ケイパビリティ。セールスエージェント（プロダクト）とシグナルエージェント（シグナル）が宣言します。`supported` が `true` のとき、コンシューマーは `product.*`、`signal.*`、`wholesale_feed.bulk_change` イベントの `sync_accounts.accounts[].notification_configs[]` エントリを登録し、各 webhook で実際の変更ペイロードを受け取れます。

**用語。** ここで「ホールセールフィード」は、`get_products` と `get_signals` が公開するエージェントの購入可能なホールセールプロダクトフィードとホールセールシグナルフィードを意味します。これは、キャンペーン実行のためにバイヤー提供のキャンペーン入力フィードをセラーアカウントにプッシュする `sync_catalogs` とは異なります。

| Field         | Type      | Description                                                                                                  |
| ------------- | --------- | ------------------------------------------------------------------------------------------------------------ |
| `supported`   | boolean   | **必須。** このエージェントがアカウントレベルの `sync_accounts.accounts[].notification_configs[]` を通じてホールセールフィード変更ペイロードをプッシュできるか。 |
| `event_types` | string\[] | このエージェントが発出できるイベントタイプ。セールスエージェントは `product.*` イベントを発出。シグナルエージェントは `signal.*` イベントを発出。                        |

**Example（セールス + シグナルエージェント）:**

```json theme={null}
{
  "wholesale_feed_webhooks": {
    "supported": true,
    "event_types": [
      "product.created", "product.updated", "product.priced", "product.removed",
      "signal.created", "signal.updated", "signal.priced", "signal.removed",
      "wholesale_feed.bulk_change"
    ]
  }
}
```

## The Capability Contract

**ケイパビリティが宣言された場合、セラーはそれを尊重しなければなりません（MUST）。**

* `media_buy.execution.targeting.geo_postal_areas.US` が `zip` を含む → バイヤーは `{ country: "US", system: "zip", values: [...] }` を送信でき、セラーはそれを尊重しなければならない
* `media_buy.execution.targeting.geo_metros.nielsen_dma: true` → バイヤーは DMA コードを送信でき、セラーはそれを尊重しなければならない
* `media_buy.content_standards` オブジェクトが存在 → セラーは提供時にコンテンツ標準を適用しなければならない
* `media_buy.audience_targeting` オブジェクトが存在 → セラーは `sync_audiences` とオーディエンスターゲティングオーバーレイをサポートしなければならない
* `media_buy.conversion_tracking` オブジェクトが存在 → セラーは `sync_event_sources` と `log_event` をサポートしなければならない

黙って無視しない。セラーがケイパビリティをサポートできない場合、`false` を宣言するか省略すべきです。

## Common Scenarios

### Basic Capability Discovery

```javascript theme={null}
import { AdcpClient } from '@adcp/sdk';

const client = new AdcpClient({ baseUrl: 'https://seller.example.com/mcp' });

// Get seller capabilities
const result = await client.getAdcpCapabilities({});

if (result.errors) {
  throw new Error(`Request failed: ${result.errors[0].message}`);
}

// Check protocol support
console.log(`AdCP versions: ${result.adcp.major_versions.join(', ')}`);
console.log(`Supported protocols: ${result.supported_protocols.join(', ')}`);

// Check media-buy capabilities
if (result.supported_protocols.includes('media_buy')) {
  const mediaBuy = result.media_buy;

  // Check content standards support (object presence = signal)
  if (mediaBuy.content_standards) {
    console.log('Content standards supported');
  }

  // Check geo targeting (normalize native country keys and deprecated aliases)
  const postalSupport = mediaBuy.execution?.targeting?.geo_postal_areas;
  if (postalSupport?.US?.includes('zip') || postalSupport?.us_zip === true) {
    console.log('US ZIP code targeting supported');
  }

  // Portfolio overview
  console.log(`Publishers: ${mediaBuy.portfolio.publisher_domains.length}`);
}
```

### Check multi-protocol support

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

const sellsMedia = caps.supported_protocols.includes('media_buy');
const managesCreatives = caps.supported_protocols.includes('creative');

if (sellsMedia && managesCreatives) {
  // Single agent handles both protocols — no need to discover a separate service
  const formats = await client.listCreativeFormats({});
  const delivery = await client.getCreativeDelivery({
    media_buy_ids: ['mb_12345']
  });
}
```

### Filter sellers by capability

```javascript theme={null}
// Find sellers that support specific requirements
async function findCompatibleSellers(sellers, requirements) {
  const compatible = [];

  for (const sellerUrl of sellers) {
    const client = new AdcpClient({ baseUrl: sellerUrl });
    const caps = await client.getAdcpCapabilities({});

    if (caps.errors) continue;

    // Must support media_buy protocol
    if (!caps.supported_protocols.includes('media_buy')) continue;

    const mediaBuy = caps.media_buy;

    // Check geo targeting requirement
    if (requirements.postalCodeTargeting) {
      const postalSupport = mediaBuy.execution?.targeting?.geo_postal_areas;
      if (!(postalSupport?.US?.includes('zip') || postalSupport?.us_zip === true)) {
        continue;
      }
    }

    // Check content standards requirement (object presence = signal)
    if (requirements.contentStandards) {
      if (!mediaBuy.content_standards) {
        continue;
      }
    }

    compatible.push({ url: sellerUrl, capabilities: caps });
  }

  return compatible;
}
```

### Use Capabilities to Build Targeting

ケイパビリティは create\_media\_buy ターゲティングで何を指定できるかを教えます。`required_geo_targeting` を使って、特定のジオターゲティングレベルとシステムをサポートするセラーにプロダクトをフィルタリングします:

```javascript theme={null}
// First, check capabilities
const caps = await client.getAdcpCapabilities({});

if (!caps.supported_protocols.includes('media_buy')) {
  throw new Error('Seller does not support media_buy protocol');
}

const mediaBuy = caps.media_buy;
const postalSupport = mediaBuy.execution?.targeting?.geo_postal_areas;

// Filter products to sellers with specific geo targeting capabilities
const products = await client.getProducts({
  brief: "Premium video inventory in US for ZIP-targeted campaign",
  filters: {
    channels: ['olv', 'ctv'],
    countries: ['US'],
    required_geo_targeting: [
      { level: 'postal_area', country: 'US', system: 'zip' }
    ]
  }
});
```

**プロダクトの地理の 2 つのモデル:**

| Inventory Type           | Filter By                         | Example                     |
| ------------------------ | --------------------------------- | --------------------------- |
| デジタル（display、OLV、CTV）    | ケイパビリティ: `required_geo_targeting` | プロダクトは広範なカバレッジを持ち、購入時にターゲット |
| ローカル（radio、DOOH、ローカル TV） | カバレッジ: `metros`、`regions`         | プロダクトが地理的にバインド              |

### Local Inventory Example (Radio, DOOH)

ローカルにバインドされたインベントリでは、プロダクトが地理的に固有です。NYC DMA のラジオ局は NYC のみをカバーします。

```javascript theme={null}
// Find radio products in specific DMAs
const radioProducts = await client.getProducts({
  brief: "Radio inventory in NYC and LA markets",
  filters: {
    channels: ['radio'],
    metros: [
      { system: 'nielsen_dma', code: '501' },  // NYC
      { system: 'nielsen_dma', code: '803' }   // LA
    ]
  }
});
```

## Response Example

```json theme={null}
{
  "$schema": "/schemas/protocol/get-adcp-capabilities-response.json",
  "status": "completed",
  "adcp": {
    "major_versions": [3],
    "idempotency": { "supported": true, "replay_ttl_seconds": 86400 }
  },
  "supported_protocols": ["media_buy"],
  "account": {
    "require_operator_auth": false,
    "supported_billing": ["operator", "agent"]
  },
  "media_buy": {
    "creative_approval_mode": "auto_approve",
    "features": {
      "inline_creative_management": true,
      "property_list_filtering": true
    },
    "execution": {
      "creative_specs": {
        "vast_versions": ["4.0", "4.1", "4.2"],
        "mraid_versions": ["3.0"],
        "vpaid": false,
        "simid": true
      },
      "targeting": {
        "geo_countries": true,
        "geo_regions": true,
        "geo_metros": { "nielsen_dma": true },
        "geo_postal_areas": {
          "US": ["zip", "zip_plus_four"],
          "GB": ["outward", "full"],
          "CA": ["fsa", "full"]
        },
        "language": true
      }
    },
    "content_standards": {
      "supports_local_evaluation": true,
      "supported_channels": ["display", "olv"],
      "supports_webhook_delivery": false
    },
    "audience_targeting": {
      "supported_identifier_types": ["hashed_email", "hashed_phone"],
      "supported_uid_types": ["uid2", "rampid"],
      "minimum_audience_size": 500,
      "matching_latency_hours": { "min": 1, "max": 24 }
    },
    "portfolio": {
      "publisher_domains": ["example.com", "news.example.com"],
      "primary_channels": ["display", "olv"],
      "primary_countries": ["US", "CA"]
    }
  },
  "extensions_supported": ["acmecorp"],
  "last_updated": "2025-01-23T10:00:00Z"
}
```

### Multi-protocol agent

エージェントは単一のエンドポイントから複数のプロトコルを実装できます。これは、メディア購入とクリエイティブ生成の両方を管理するセラーで一般的です — バイヤーは同じ URL ですべてのタスクを呼び出します。

```json theme={null}
{
  "$schema": "/schemas/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": {
    "require_operator_auth": false,
    "supported_billing": ["operator"]
  },
  "media_buy": {
    "creative_approval_mode": "require_human",
    "features": { "inline_creative_management": true },
    "portfolio": {
      "publisher_domains": ["news.example.com"],
      "primary_channels": ["display", "olv"]
    }
  },
  "creative": {
    "has_creative_library": true,
    "supports_generation": true,
    "supports_transformation": false,
    "supports_compliance": false,
    "bills_through_adcp": true
  }
}
```

`supported_protocols` に `"creative"` が含まれる場合、バイヤーはこのエージェントでクリエイティブプロトコルタスク（`list_creative_formats`、`sync_creatives`、`get_creative_delivery` など）を呼び出せます。[セールスエージェントのクリエイティブケイパビリティ](/docs/creative/sales-agent-creative-capabilities) を参照。

### Geo Standards Reference

| Level       | System                 | Examples                             |
| ----------- | ---------------------- | ------------------------------------ |
| Country     | ISO 3166-1 alpha-2     | `US`、`GB`、`DE`、`CA`                  |
| Region      | ISO 3166-2             | `US-NY`、`GB-SCT`、`DE-BY`、`CA-ON`     |
| Metro (US)  | `nielsen_dma`          | `501`（NYC）、`803`（LA）、`602`（Chicago）  |
| Metro (UK)  | `uk_itl2`              | `UKI`（London）、`UKD`（North West）      |
| Metro (EU)  | `eurostat_nuts2`       | `DE30`（Berlin）、`FR10`（Île-de-France） |
| Postal (US) | `US` / `zip`           | `10001`、`90210`                      |
| Postal (US) | `US` / `zip_plus_four` | `10001-1234`                         |
| Postal (UK) | `GB` / `outward`       | `SW1`、`EC1`、`M1`                     |
| Postal (UK) | `GB` / `full`          | `SW1A 1AA`                           |
| Postal (CA) | `CA` / `fsa`           | `K1A`、`M5V`                          |

## Migration from list\_authorized\_properties (v2)

`list_authorized_properties` タスクは v3 で削除されました。v2 から移行する場合:

| Old Field               | New Location                               |
| ----------------------- | ------------------------------------------ |
| `publisher_domains`     | `media_buy.portfolio.publisher_domains`    |
| `primary_channels`      | `media_buy.portfolio.primary_channels`     |
| `primary_countries`     | `media_buy.portfolio.primary_countries`    |
| `portfolio_description` | `media_buy.portfolio.description`          |
| `advertising_policies`  | `media_buy.portfolio.advertising_policies` |
| `last_updated`          | `last_updated`（トップレベル）                     |

新しいフィールド:

* `adcp.major_versions` - バージョン互換性
* `supported_protocols` - どのドメインプロトコルがサポートされるか
* `media_buy.features` - 任意の機能サポート
* `media_buy.execution.targeting` - ジオターゲティング粒度

## Error Handling

| Error Code            | Description                                           | Resolution                                      |
| --------------------- | ----------------------------------------------------- | ----------------------------------------------- |
| `AUTH_MISSING`        | 認証情報が提示されていない                                         | auth ヘッダーで認証情報を提供                               |
| `AUTH_INVALID`        | 認証情報が拒否された（期限切れ / 失効）                                 | 人間による認証情報のローテーションが必要                            |
| `VERSION_UNSUPPORTED` | 宣言された `adcp_major_version` がセラーの `major_versions` にない | `adcp_major_version` なしで呼び出してサポートバージョンを発見し、リトライ |
| `INTERNAL_ERROR`      | サーバーエラー                                               | バックオフを伴ってリトライ                                   |

## Best Practices

**1. ケイパビリティをキャッシュする**
ケイパビリティはめったに変わりません。結果をキャッシュし、古さの検出に `last_updated` を使います。

**2. まずプロトコルサポートを確認する**
プロトコル固有のフィールドにアクセスする前に、プロトコルが `supported_protocols` にあることを検証します。

**3. リクエスト前に確認する**
セラーがサポートしないシステムの郵便エリアを送らないでください。セラーがサポートしない機能をリクエストしないでください。

**4. 非互換で早期に失敗する**
セラーが必要なケイパビリティをサポートしない場合、後で失敗を発見するのではなく早期にスキップします。

**5. 続行前に認証モデルを読む**
ディスカバリー直後に `account.require_operator_auth` を確認します。エージェント信頼とオペレータースコープのフローは大きく異なります。

**6. ルーティングにプロトコルバージョンを使う**
`adcp.major_versions` に基づいて適切な API バージョンにリクエストをルーティングします。

## Next Steps

ケイパビリティを発見した後:

1. **アカウントをセットアップ**: `account.require_operator_auth` の認証モデルに従う — [アカウントとエージェント](/docs/building/by-layer/L2/accounts-and-agents#what-sellers-declare) を参照
2. **プロダクトをフィルタリング**: ケイパビリティ認識フィルターで [`get_products`](/docs/media-buy/task-reference/get_products) を使う
3. **プロパティを検証**: プロパティ定義のためにパブリッシャーの `adagents.json` ファイルを取得
4. **バイを作成**: サポートされる機能で [`create_media_buy`](/docs/media-buy/task-reference/create_media_buy) を使う

## Learn More

* [アカウントとエージェント](/docs/building/by-layer/L2/accounts-and-agents) - 認証モデル、アカウントセットアップ、課金
* [adagents.json 仕様](/docs/governance/property/adagents) - パブリッシャー認可ファイル
* [プロダクトフィルター](/docs/media-buy/task-reference/get_products#filters) - ケイパビリティ認識フィルタリング
* [コンテンツ標準](/docs/governance/content-standards) - ブランドセーフティ設定
