> ## 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 オーディエンスを beta.3 から rc.1 に移行します。external_id を uid-type 列挙の値から AudienceMember の必須トップレベルフィールドに昇格させる。

# オーディエンスの移行

AdCP 3.0 rc.1 は `external_id` を `uid-type` 列挙の値から `AudienceMember` の必須トップレベルフィールドに昇格させる。すべてのオーディエンスメンバーは、バイヤーが割り当てた安定した識別子と、少なくとも1つのマッチング可能な識別子を持つ必要があります。

## 変更内容

| beta.3                           | rc.1                               | 注記                                            |
| -------------------------------- | ---------------------------------- | --------------------------------------------- |
| `external_id` が uid-type 列挙に含まれる | `external_id` が必須トップレベルフィールド       | すべてのメンバーに常に存在する                               |
| オプションのバイヤー識別子                    | 必須のバイヤー識別子                         | 重複排除と削除に使用                                    |
| 単一の識別子モデル                        | 2つの要件: `external_id` + マッチング可能な ID | `hashed_email`、`hashed_phone`、`uids` の少なくとも1つ |

## AudienceMember スキーマ

```json theme={null}
{
  "$schema": "https://adcontextprotocol.org/schemas/latest/core/audience-member.json",
  "external_id": "crm_user_12345",
  "hashed_email": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2",
  "uids": [
    { "type": "uid2", "value": "uid2_token_abc123" }
  ]
}
```

スキーマで適用される2つの要件:

1. `external_id` は**必須** — バイヤーが割り当てた安定した識別子（CRM レコード ID、ロイヤルティ ID）
2. 少なくとも1つのマッチング可能な識別子 — `hashed_email`、`hashed_phone`、または `uids` 配列

## 変更前後

**beta.3 — uid-type エントリとしての external\_id:**

```json test=false theme={null}
{
  "uids": [
    { "type": "external_id", "value": "crm_user_12345" },
    { "type": "uid2", "value": "uid2_token_abc123" }
  ]
}
```

**rc.1 — 必須トップレベルフィールドとしての external\_id:**

```json test=false theme={null}
{
  "external_id": "crm_user_12345",
  "uids": [
    { "type": "uid2", "value": "uid2_token_abc123" }
  ]
}
```

## uid-type 列挙

`uid-type` 列挙には `external_id` が含まれなくなりました。現在の値:

| 値        | 説明                                       |
| -------- | ---------------------------------------- |
| `rampid` | LiveRamp RampID                          |
| `id5`    | ID5 ユニバーサル ID                            |
| `uid2`   | Unified ID 2.0                           |
| `euid`   | European Unified ID                      |
| `pairid` | Publisher Addressable Identity（IAB PAIR） |
| `maid`   | Mobile Advertising ID（IDFA/GAID）         |
| `other`  | その他のユニバーサル ID タイプ（`ext` で指定）             |

## 変更の理由

`external_id` を uid-type 列挙から分離することで、バイヤーの安定した識別子が明示的になります。これにより以下が可能になる:

* **重複排除** — `external_id` でシンク間の重複メンバーを削除します
* **ターゲット削除** — 全リストを再アップロードせずに特定のメンバーを削除します
* **クロスリファレンス** — オーディエンスメンバーシップをバイヤーの CRM システムと相関させる

ネイティブに ID を割り当てない CDP は1つを導出できる（例: メンバーの識別子のハッシュ）。

## オーディエンスの同期

`sync_audiences` はオーディエンスごとにデルタオペレーション（`add`/`remove`）を使用します。メンバーは削除時に `external_id` で識別されます:

```json test=false theme={null}
{
  "account": { "account_id": "acct_pinnacle" },
  "audiences": [
    {
      "audience_id": "high_value_customers",
      "name": "High-Value Customers",
      "add": [
        {
          "external_id": "crm_user_12345",
          "hashed_email": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2"
        }
      ],
      "remove": [
        {
          "external_id": "crm_user_99999",
          "hashed_email": "f6e5d4c3b2a1f6e5d4c3b2a1f6e5d4c3b2a1f6e5d4c3b2a1f6e5d4c3b2a1f6e5"
        }
      ]
    }
  ]
}
```

## 移行ステップ

<Steps>
  <Step title="uids から external_id を抽出する">
    `uids` 配列の `{ "type": "external_id", "value": "..." }` エントリをトップレベルの `external_id` フィールドに移動します。
  </Step>

  <Step title="すべてのメンバーに external_id を確保する">
    メンバーにバイヤーが割り当てた ID がない場合、1つを導出する（例: 識別子のハッシュ）。スキーマはすべてのメンバーに `external_id` を要求します。
  </Step>

  <Step title="少なくとも1つのマッチング可能な識別子を保持する">
    すべてのメンバーには `hashed_email`、`hashed_phone`、または `uids` の少なくとも1つが必要です。これはスキーマの `anyOf` 制約で適用されます。
  </Step>

  <Step title="削除ロジックを更新する">
    `sync_audiences` でメンバーを削除するとき、安定したキーとして `external_id` を使用します。メンバーは `remove` 配列にもマッチング可能な識別子が必要です。
  </Step>

  <Step title="スキーマに対して検証する">
    メンバーオブジェクトを `audience-member.json` スキーマに対して実行します。`external_id`（必須）とマッチング可能な識別子制約の両方が適用されます。
  </Step>
</Steps>

<Card title="シグナルプロトコル" icon="arrow-right" href="/docs/signals/overview">
  シグナル探索、アクティベーション、価格モデルの完全リファレンス。
</Card>

***

**関連:** [ブランドアイデンティティ](/docs/reference/migration/brand-identity) | [最適化目標](/docs/reference/migration/optimization-goals) | [AdCP 3.0 概要](/docs/reference/whats-new-in-v3)
