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

# acquire_rights

> acquire_rights は拘束力のある権利取得のための AdCP タスク。価格オプションとキャンペーン詳細を送信し、ブランドエージェントから生成資格情報、権利制約、開示要件を受け取ります。

ブランドエージェントから権利を取得するための拘束力のある契約上のリクエスト。`create_media_buy` と並行する — `get_rights` から `pricing_option_id` を選択してキャンペーン詳細を提供します。エージェントは既存の契約に照らしてクリアし、条件、生成資格情報、開示要件を返します。

## スキーマ

* **リクエスト**: [`acquire-rights-request.json`](https://adcontextprotocol.org/schemas/latest/brand/acquire-rights-request.json)
* **レスポンス**: [`acquire-rights-response.json`](https://adcontextprotocol.org/schemas/latest/brand/acquire-rights-response.json)

## 応答時間

`acquired` または `rejected` まで数秒から数分。`pending_approval` ステータスは権利保有者がレビューする必要があることを意味する — 解決には数時間から数日かかる場合があります。

## クイックスタート

<CodeGroup>
  ```json リクエスト theme={null}
  {
    "rights_id": "janssen_likeness_voice",
    "pricing_option_id": "monthly_exclusive",
    "buyer": {
      "domain": "bistro-oranje.nl",
      "brand_id": "bistro_oranje"
    },
    "campaign": {
      "description": "AI-generated video ads for Bistro Oranje steakhouse featuring Daan Janssen",
      "uses": ["likeness", "voice"],
      "countries": ["NL"],
      "format_ids": [
        { "agent_url": "https://creative.adcontextprotocol.org", "id": "video_social_1080x1920" }
      ],
      "estimated_impressions": 50000,
      "start_date": "2026-04-01",
      "end_date": "2026-06-30"
    },
    "revocation_webhook": {
      "url": "https://buyer.bistro-oranje.nl/webhooks/revocation",
      "authentication": {
        "schemes": ["HMAC-SHA256"],
        "credentials": "whsk_bo_abc123...shared_secret_min_32_chars"
      }
    },
    "idempotency_key": "acq_bo_janssen_2026q2_001",
    "push_notification_config": {
      "url": "https://buyer.bistro-oranje.nl/webhooks/adcp/acquire_rights/op_abc123",
      "authentication": {
        "schemes": ["HMAC-SHA256"],
        "credentials": "whsk_bo_xyz789...shared_secret_min_32_chars"
      }
    }
  }
  ```

  ```json レスポンス（acquired） theme={null}
  {
    "rights_id": "janssen_likeness_voice",
    "status": "acquired",
    "brand_id": "daan_janssen",
    "terms": {
      "pricing_option_id": "monthly_exclusive",
      "amount": 350,
      "currency": "EUR",
      "period": "monthly",
      "uses": ["likeness", "voice"],
      "impression_cap": 100000,
      "overage_cpm": 4.00,
      "start_date": "2026-04-01",
      "end_date": "2026-06-30",
      "exclusivity": {
        "scope": "Exclusive licensee for Daan Janssen in NL for food/restaurant brands",
        "countries": ["NL"]
      }
    },
    "generation_credentials": [
      {
        "provider": "midjourney",
        "rights_key": "rk_mj_abc123...",
        "uses": ["likeness"],
        "expires_at": "2026-06-30T23:59:59Z"
      },
      {
        "provider": "elevenlabs",
        "rights_key": "rk_el_def456...",
        "uses": ["voice"],
        "expires_at": "2026-06-30T23:59:59Z"
      }
    ],
    "rights_constraint": {
      "rights_id": "janssen_likeness_voice",
      "rights_agent": { "url": "https://agent.lotientertainment.com/mcp", "id": "loti_entertainment" },
      "valid_from": "2026-04-01T00:00:00Z",
      "valid_until": "2026-06-30T23:59:59Z",
      "uses": ["likeness", "voice"],
      "countries": ["NL"],
      "impression_cap": 100000,
      "approval_status": "approved",
      "verification_url": "https://agent.lotientertainment.com/rights/rts_abc123/verify"
    },
    "restrictions": [
      "All generated creatives must be submitted for approval before distribution",
      "No modification of talent likeness beyond approved AI generation parameters"
    ],
    "disclosure": {
      "required": true,
      "text": "Features AI-generated likeness of Daan Janssen, used under license from Loti Entertainment"
    },
    "approval_webhook": {
      "url": "https://agent.lotientertainment.com/rights/rts_abc123/approve",
      "authentication": {
        "schemes": ["Bearer"],
        "credentials": "rk_approve_abc123...token_min_32_chars"
      }
    },
    "usage_reporting_url": "https://agent.lotientertainment.com/rights/rts_abc123/usage"
  }
  ```

  ```json レスポンス（pending approval） theme={null}
  {
    "rights_id": "janssen_likeness_voice",
    "status": "pending_approval",
    "brand_id": "daan_janssen",
    "detail": "Creative concept requires talent approval per contract terms",
    "estimated_response_time": "48h"
  }
  ```

  ```json レスポンス（rejected — 実行可能） theme={null}
  {
    "rights_id": "janssen_likeness_voice",
    "status": "rejected",
    "brand_id": "daan_janssen",
    "reason": "Active exclusivity with another brand for food/restaurant in NL through 2026-09-30",
    "suggestions": [
      "Available in BE and DE markets",
      "Available in NL after 2026-10-01"
    ]
  }
  ```

  ```json レスポンス（rejected — 最終） theme={null}
  {
    "rights_id": "janssen_likeness_voice",
    "status": "rejected",
    "brand_id": "daan_janssen",
    "reason": "This violates our public figures brand guidelines"
  }
  ```

  ```json レスポンス（エラー） theme={null}
  {
    "errors": [
      {
        "code": "pricing_option_unavailable",
        "message": "Pricing option 'monthly_exclusive' is no longer available for this rights offering"
      }
    ]
  }
  ```
</CodeGroup>

## パラメーター

### リクエスト

| フィールド                            | 型                        | 必須  | 説明                                                                                                                                                                 |
| -------------------------------- | ------------------------ | --- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `rights_id`                      | string                   | Yes | `get_rights` からの権利オファリング識別子                                                                                                                                        |
| `pricing_option_id`              | string                   | Yes | 選択した価格オプション                                                                                                                                                        |
| `buyer`                          | brand-ref                | Yes | バイヤーのブランドアイデンティティ                                                                                                                                                  |
| `campaign.description`           | string                   | Yes | 権利の使用方法                                                                                                                                                            |
| `campaign.uses`                  | string\[]                | Yes | このキャンペーン向けの特定の権利使用                                                                                                                                                 |
| `campaign.countries`             | string\[]                | No  | キャンペーンを実施する国                                                                                                                                                       |
| `campaign.format_ids`            | format-id\[]             | No  | 制作するクリエイティブフォーマット                                                                                                                                                  |
| `campaign.estimated_impressions` | integer                  | No  | 推定総インプレッション数                                                                                                                                                       |
| `campaign.start_date`            | date                     | No  | キャンペーン開始日                                                                                                                                                          |
| `campaign.end_date`              | date                     | No  | キャンペーン終了日                                                                                                                                                          |
| `revocation_webhook`             | push-notification-config | Yes | 取り消し通知用ウェブフック。権利保有者が権利を取り消す必要がある場合、この URL に [revocation-notification](https://adcontextprotocol.org/schemas/latest/brand/revocation-notification.json) を POST します。 |
| `idempotency_key`                | string                   | No  | 安全な再試行のためのクライアント生成キー。同じキーで再送信すると元のレスポンスが返されます。                                                                                                                     |
| `push_notification_config`       | push-notification-config | No  | 取得に承認が必要な場合の非同期ステータス更新用ウェブフック。[プッシュ通知](/docs/building/by-layer/L3/webhooks) を参照。                                                                                   |

### レスポンスステータス

レスポンスは `status` の判別共用体を使用します:

| ステータス              | 説明                  | 主要フィールド                                                           |
| ------------------ | ------------------- | ----------------------------------------------------------------- |
| `acquired`         | 権利がクリアされ、資格情報が発行された | `terms`、`generation_credentials`、`rights_constraint`、`disclosure` |
| `pending_approval` | 権利保有者のレビューが必要       | `detail`、`estimated_response_time`                                |
| `rejected`         | リクエストが拒否された         | `reason`、`suggestions`（オプション）                                     |

拒否されたレスポンスに `suggestions` が存在する場合、拒否は実行可能 — バイヤーはリクエストを調整して再試行できます。`suggestions` がない場合、拒否は最終的でバイヤーはこの権利/タレントの組み合わせで再試行すべきではありません。この慣例は `acquire_rights` の拒否、`get_rights` の除外結果、クリエイティブ承認の拒否全体で一貫して適用されます。

## Request validation

`acquire_rights` について 2 つのキャンペーンフィールド検証が規範的です。どちらも、問題の `field` を投入した `INVALID_REQUEST` と `recovery: "correctable"`（バイヤーはリクエストを修正して再試行できる）を生成します。

### Expired campaign window

ブランドエージェントは、リクエスト時点で `campaign.end_date` が過去にある場合、`INVALID_REQUEST` と `field: "campaign.end_date"` で拒否しなければなりません（MUST）。すでに経過したウィンドウの権利を取得すると、期間ゼロの付与が生成され、これはほぼ常にバイヤー側のバグです — それを決定的に表面化させることは、直ちに期限切れになる資格情報を黙って発行するよりも有用です。

[`create_media_buy`](/docs/media-buy/task-reference/create_media_buy) と同様に、権利の付与は経過したウィンドウについて時間シフト可能ではありません: コントラクトは要求された期間に付随するため、拒否のみが `acquire_rights` の正しいコントラクトです。

ブランドエージェントは、`campaign.start_date` が権利エージェントの設定された猶予ウィンドウより過去にある場合にも拒否してもかまいません（MAY。権利は遡及的に付与できないため、通常、権利エージェントは `now - 24h` より前の開始日を拒否します）。その決定はコントラクト固有で、`field: "campaign.start_date"` を使うべきです（SHOULD）。`end_date < now` チェックが規範的な下限です。

### CPM-priced rights under a governance plan

リクエストは、ブランドエージェントが資格情報を発行する前にガバナンスプランに対してコミットメントを投影する場合に**ガバナンス対応**です。それは 2 つのパスのいずれかで発生します。

1. **インラインパス** — リクエストが [プロトコルエンベロープ](/docs/building/by-layer/L1/security)に意図フェーズの `governance_context` トークンを運ぶ。バイヤーはリクエストごとに明示的にトークンをスレッドする。
2. **バインドパス** — リクエストが `account`（セラーが割り当てた `account_id`、またはバインドされたアカウントに解決する `account.brand` + `account.operator`）を運び、ブランドエージェントが [`sync_governance`](/docs/accounts/tasks/sync_governance) を通じてそのアカウントに以前バインドされたガバナンスエージェントを持つ。ブランドエージェントは、バイヤーがリクエストごとに何もスレッドせずに、バインドされたエージェントをルックアップする。

同じリクエストに**両方**のパスが存在する場合 — インライン `governance_context` トークンとバインドされたガバナンスエージェントを持つ `account` — インライントークンが勝ちます。トークンはリクエストごとで、特定のプランに対して JWS 署名され、監査とレポートの[主要な相関キー](/docs/building/by-layer/L1/security)です。バインドされたエージェントは、トークンがスレッドされていない場合のリゾルバーフォールバックとして機能します。ブランドエージェントは、両方が存在する場合、バインドされたエージェントと異なっていても、インライントークンで識別されるエージェントを参照しなければなりません（MUST）— バイヤーのリクエストごとの決定が永続化されたバインディングをオーバーライドします。

両方のパスは同じ投影ルールをトリガーします。リクエストがガバナンス対応で選択された料金オプションが `model: "cpm"` を持つ場合、`campaign.estimated_impressions` がブランドエージェントが残りのプラン予算に対してコミットメントを投影するために使う入力です。その投影を実装間で決定的にするには:

* ブランドエージェントは、リクエストがガバナンス対応（いずれかのパス）で、選択された `pricing_option.model` が `"cpm"` で、`campaign.estimated_impressions` が省略または `0` の場合、`INVALID_REQUEST` と `field: "campaign.estimated_impressions"` で拒否しなければなりません（MUST）。実装者が選んだデフォルト（例: 100 万インプレッションを想定）は非準拠です — それらは各実装の内部にポリシー決定を隠し、同一のリクエストに対して異なるガバナンス結果を生成します。
* `estimated_impressions` が提供され非ゼロの場合、投影されたコミットメントは `(pricing_option.price / 1000) × campaign.estimated_impressions` で、`pricing_option.currency` で評価されます。`pricing_option.currency` がガバナンスプランの予算通貨（プランで運ばれる）と異なる場合、ブランドエージェントは `INVALID_REQUEST` と `field: "pricing_option_id"` で拒否しなければなりません（MUST）— ガバナンス投影に通貨変換は指定されていないため、通貨不一致のオファーは被管理プランに対してクリアできません。
* 投影されたコミットメントがバイヤーの残りのプラン予算を超える場合、エージェントは `INVALID_REQUEST` と `field: "campaign.estimated_impressions"` で拒否しなければならず（MUST）、バイヤーが調整できるよう `reason` に投影されたコミットメントと残り予算を投入します。
* 非 CPM の料金オプション（`model: "flat_rate"` など）は、インプレッションボリュームに関係なくフラット額をコミットします。ブランドエージェントは、それらのオプションについてガバナンス投影のために `estimated_impressions` を要求してはなりません（MUST NOT）。バイヤーは、上限追跡の目的で依然として `estimated_impressions` を提供してもかまいません（MAY）。

ガバナンスされていないリクエスト — `governance_context` トークンもバインドされたガバナンスエージェントを持つアカウントもない — はこの検証の影響を受けません。その場合、`estimated_impressions` は任意のままです（セラーは、[支出コミットの呼び出し](/docs/governance/campaign/specification#spend-commit-invocation)に従い、商業ポリシーの問題としてガバナンスされていないプランでの取引を拒否してもかまいませんが（MAY）、その拒否はこの投影ルールとは独立です）。

## 生成資格情報

権利が取得されると、エージェントは LLM プロバイダーと連携してスコープ付き資格情報を発行する:

1. エージェントが既存の契約に照らして権利をクリアします
2. エージェントがプロバイダー（例: Midjourney）に伝える: 「このタレントの権利キーを発行し、このバイヤーにライセンスする」
3. エージェントがバイヤーに資格情報を返す

**任意のクリエイティブエージェント**がこれらの資格情報を使用できます。LLM プロバイダーは生成時に使用制約を適用する — 権利エージェントがパーミッションを設定し、プロバイダーがゲートキーパーとなります。

| フィールド        | 型         | 説明                                            |
| ------------ | --------- | --------------------------------------------- |
| `provider`   | string    | LLM/生成サービス（例: "midjourney"、"elevenlabs"）      |
| `rights_key` | string    | 権利がクリアされたコンテンツを生成するためのスコープ付き API キー           |
| `uses`       | string\[] | この資格情報がカバーする権利の使用                             |
| `expires_at` | datetime  | 資格情報の有効期限（プロバイダーが決定）                          |
| `endpoint`   | uri       | 権利スコープ付き生成のプロバイダーエンドポイント（省略時はプロバイダーのデフォルトを使用） |

## 権利制約

`status` が `acquired` の場合、レスポンスには `rights_constraint` オブジェクトが含まれます:

| フィールド               | 型      | 説明                                                                                     |
| ------------------- | ------ | -------------------------------------------------------------------------------------- |
| `rights_constraint` | object | クリエイティブマニフェスト用の事前構築された制約。合意された条件の有効期間、国の制限、インプレッション上限を含みます。マニフェストの `rights` 配列に直接埋め込む。 |

## クリエイティブのライフサイクル

権利取得後:

1. **生成**: クリエイティブエージェントが `generation_credentials` を使ってコンテンツを制作
2. **マニフェスト**: `acquire_rights` レスポンスの `rights_constraint` をクリエイティブマニフェストの `rights` 配列に直接埋め込む。権利エージェントは合意された条件の正しい有効期間、国の制限、インプレッション上限を含むこの制約を事前に構築します。
3. **承認**: 提供された資格情報で認証しながら、`approval_webhook` URL に [`creative-approval-request`](https://adcontextprotocol.org/schemas/latest/brand/creative-approval-request.json) を POST します。レスポンスはステータス `approved`、`rejected`、または `pending_review` を持つ [`creative-approval-response`](https://adcontextprotocol.org/schemas/latest/brand/creative-approval-response.json) だ。`pending_review` の場合は、返された `status_url` を定期的にポーリングする（推奨: 5分ごと、1時間後は30分ごとにバックオフ）。
4. **配信**: 国と日程の制限を守りながら `create_media_buy` で承認されたクリエイティブを配信
5. **報告**: 上限追跡と請求のために `rights_id` を含む [`report_usage`](/docs/accounts/tasks/report_usage) を使用

`acquire_rights` が `pending_approval` を返し、`push_notification_config` を提供した場合、ステータスが `acquired` または `rejected` に変わるとウェブフック通知を受け取ります。それ以外の場合は、`estimated_response_time` の間隔後に同じ `rights_id` と `idempotency_key` で `acquire_rights` を再度呼び出す。この期間中に構築したクリエイティブマニフェストには `approval_status: 'pending'` を設定します。

## 取り消し

権利保有者が権利を取り消す必要がある場合（タレントの論争、契約違反など）、取得時に提供された資格情報で認証しながら、バイヤーの `revocation_webhook` に [`revocation-notification`](https://adcontextprotocol.org/schemas/latest/brand/revocation-notification.json) を POST します。通知には `notification_id`（重複排除用）、`rights_id`、`brand_id`、`reason`、`effective_at` タイムスタンプが含まれます。

バイヤーの責任:

* `notification_id` による重複排除 — 同じ取り消しが複数回届く場合があります
* `effective_at` までにクリエイティブの配信を停止します
* アクティブなキャンペーンから影響を受けたクリエイティブを削除または置き換える
* 生成資格情報の使用を停止する（プロバイダーも独立して資格情報を無効化する場合があります）

部分的な取り消しをサポート — `revoked_uses` が存在する場合、それらの使用のみ取り消されます（例: 音声は取り消されるが肖像は残る）。

### 取り消しの確認

取り消し通知を受け取って検証したらすぐに HTTP `200` を返します。権利保有者は非 `2xx` レスポンスに対して指数バックオフ（1秒、5秒、30秒、5分、30分）で再試行します。6回の失敗後、権利保有者は他のチャンネルでエスカレーションする場合があります。

すべてのウェブフック認証は AdCP の [プッシュ通知署名慣例](/docs/building/by-layer/L3/webhooks#hmac-sha256-recommended-for-production) を使用する — HMAC-SHA256 による `X-ADCP-Signature` と `X-ADCP-Timestamp` ヘッダー。

## インプレッション上限と超過

`terms.impression_cap` が設定されている場合、それは**ソフト上限**だ。上限で配信が自動的に停止されることはない — バイヤーは `report_usage` を通じて使用状況を監視し、それに応じて配信を管理する責任があります。上限を超えたインプレッションは `terms.overage_cpm` で請求されます。権利保有者がハード上限（制限を超えた配信なし）を望む場合、`restrictions` でそれを指定します。

## 使用状況報告

取得されたレスポンスの `usage_reporting_url` は、権利エージェントが HTTP ベースのインプレッション報告のために提供する便利なエンドポイントです。[`report_usage`](/docs/accounts/tasks/report_usage) MCP タスクと同じペイロードを受け付けます。パイプラインにとってシンプルな方を使用する — エージェント間ワークフロー用の MCP ツール、または広告サーバーからの直接 HTTP 呼び出し用の URL。

## 更新と更新

権利付与を延長、インプレッション上限の調整、価格の変更、一時停止/再開には [`update_rights`](/docs/brand-protocol/tasks/update_rights) を使用します。延長された付与には再発行された生成資格情報と、マニフェストに再埋め込みするための更新された `rights_constraint` が含まれます。

## 次のステップ

<CardGroup cols={2}>
  <Card title="update_rights" icon="rotate" href="/docs/brand-protocol/tasks/update_rights">
    既存の権利付与を延長、調整、または一時停止します。
  </Card>

  <Card title="report_usage" icon="chart-line" href="/docs/accounts/tasks/report_usage">
    請求と上限追跡のために権利付与に対するインプレッションを報告します。
  </Card>

  <Card title="brand.json 仕様" icon="code" href="/docs/brand-protocol/brand-json">
    クリエイティブマニフェストの権利制約。
  </Card>
</CardGroup>
