create_media_buy のターゲティングオーバーレイで結果のオーディエンスを参照して、明示的なリターゲティングやサプレッションに利用できます。
オーディエンスはシグナルとは異なります。シグナルはサードパーティデータプロダクトであり、ディスカバーして有効化するもの。オーディエンスは自社が所有してアップロードするデータです。audience_include を使うとアップロードしたリストのメンバーだけをターゲットにできます。audience_include はハード制約であり、リスト上のユーザーのみが対象となります。オーディエンスに類似した新規ユーザーを探す場合(類似オーディエンス拡張)は、キャンペーンブリーフにそのインテントを記述する — 拡張戦略はセラーが担当します。なお、ブリーフで表明された類似インテントはプロトコルを通じて検証できないため、セラー側のレポートで確認すること。
レスポンス時間: アップロードは約 1〜2 秒で受け付けられます。マッチングが完了するまでタスクはアクティブな状態が続く(セラーによって 1〜48 時間)。オーディエンスの準備ができたときに Webhook を受け取るには push_notification_config を設定すること。
リクエストスキーマ: /schemas/latest/media-buy/sync-audiences-request.json
レスポンススキーマ: /schemas/latest/media-buy/sync-audiences-response.json
クイックスタート
顧客リストをアップロードしてステータスを確認します:リクエストパラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
account | account-ref | はい | アカウント参照。{ "account_id": "..." } を渡すか、セラーが暗黙的な解決をサポートしている場合は { "brand": {...}, "operator": "..." } を渡します。 |
audiences | Audience[] | いいえ | 同期するオーディエンス。省略した場合、呼び出しはディスカバリー専用となり、変更なしで既存のすべてのオーディエンスを返します。 |
delete_missing | boolean | いいえ | true の場合、このリクエストに含まれていないアカウント上のバイヤー管理オーディエンスを削除する(デフォルト: false)。セラー管理のオーディエンスには影響しません。audiences 配列を省略した状態と組み合わせると、すべてのバイヤー管理オーディエンスが削除されるため注意すること。 |
Audience オブジェクト
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
audience_id | string | はい | このオーディエンスのバイヤー識別子。ターゲティングオーバーレイでオーディエンスを参照するために使用します。 |
name | string | いいえ | 人間が読みやすい名前 |
delete | boolean | いいえ | true の場合、このオーディエンスをアカウントから完全に削除します。その他のフィールドはすべて無視されます。 |
add | AudienceMember[] | いいえ | このオーディエンスに追加するメンバー |
remove | AudienceMember[] | いいえ | このオーディエンスから削除するメンバー。同じ識別子が add と remove の両方に現れた場合、remove が優先されます。 |
consent_basis | string | いいえ | GDPR の適法根拠: consent、legitimate_interest、contract、または legal_obligation。規制対象市場の一部セラーで必須。 |
Audience メンバー
すべてのメンバーにはexternal_id(バイヤーが割り当てた安定した識別子)と、少なくとも 1 つのマッチング可能な識別子が必要です。送信前にすべての値を SHA-256 でハッシュ化すること — メールアドレスは小文字化+トリム、電話番号は E.164 形式(例: +12065551234)に正規化します。
| フィールド | 型 | 説明 |
|---|---|---|
external_id | string | 必須。 このメンバーのバイヤーが割り当てた安定した識別子(例: CRM レコード ID、ロイヤルティ ID)。重複排除、削除、バイヤーシステムとのクロスリファレンスに使用します。 |
hashed_email | string | 小文字化・トリムされたメールアドレスの SHA-256 ハッシュ(64 文字の16進数) |
hashed_phone | string | E.164 形式の電話番号の SHA-256 ハッシュ(64 文字の16進数) |
uids | UID[] | ユニバーサル ID: type(rampid、uid2、maid など)+ value |
ext を使用すること。
識別子のサポートはセラーによって異なる: 送信前に get_adcp_capabilities → media_buy.audience_targeting.supported_identifier_types および media_buy.audience_targeting.supported_uid_types を確認すること。MAID のサポートは全セラーに共通ではない(LinkedIn は MAID を受け付けない。iOS の IDFA には App Tracking Transparency の同意が必要)。ケイパビリティの media_buy.audience_targeting.matching_latency_hours の範囲と media_buy.audience_targeting.minimum_audience_size もセラー固有の値です。
サイズ制限: ペイロードはすべてのオーディエンスを合わせて 1 回の呼び出しにつき最大 100,000 メンバーに制限されます。より大きなリストの場合は、add のデルタを使って順次呼び出しに分割すること。
同時実行: sync_audience への呼び出しは互いに独立していることを確認すること。処理は順不同になる場合があります。順次実行が必要な場合は、設定した Webhook へのコールバックを受け取ってから次の呼び出しを行うこと。
レスポンス
成功レスポンス:audiences— このリクエストに含まれていないオーディエンスも含む、アカウント上のすべてのオーディエンスの結果
errors— 操作レベルのエラーの配列(認証失敗、アカウントが見つからない場合など)
| フィールド | 説明 |
|---|---|
audience_id | リクエストから返されるバイヤーの識別子 |
seller_id | セラーの広告プラットフォームで割り当てられた ID |
action | created、updated、unchanged、deleted、または failed |
status | processing、ready、または too_small。action が created、updated、または unchanged の場合に存在します。action が deleted または failed の場合は存在しません。 |
uploaded_count | この同期操作で送信されたメンバー数(差分、累積ではない)。ディスカバリー専用呼び出しでは 0。 |
total_uploaded_count | すべての同期にわたってアップロードされたメンバーの累積数。matched_count と比較してマッチ率を計算します。 |
matched_count | すべての同期にわたってプラットフォームユーザーにマッチしたメンバーの合計数(累積)。status: "ready" の時に設定されます。 |
effective_match_rate | すべての識別子タイプにわたる重複排除済みのマッチ率(0〜1)。リーチ推定のための単一の数値。status: "ready" の時に設定されます。 |
match_breakdown | 識別子タイプ別のマッチ結果。どの ID タイプがどのマッチ率で解決されるかを示します。マッチ内訳を参照。 |
last_synced_at | 最新の同期の ISO 8601 タイムスタンプ。セラーがこれをトラッキングしていない場合は省略されます。 |
minimum_size | このプラットフォームでターゲティングするための最小マッチオーディエンスサイズ。status: "too_small" の時に設定されます。 |
errors | オーディエンスごとのエラー(action: "failed" の場合のみ) |
マッチ内訳
セラーが識別子タイプ別のレポートをサポートしている場合、レスポンスにはmatch_breakdown が含まれる — これはどの ID タイプが解決されているか、どのマッチ率かを示す配列です。バイヤーは将来のアップロードでどの識別子を優先すべきかを判断するために活用できます。
submittedとmatchedは累積値であり、すべての同期にわたる値で、total_uploaded_countのセマンティクス(uploaded_countではない)に対応します。effective_match_rateは重複排除済み — メールと電話の両方でマッチしたメンバーは 1 回としてカウントされます。タイプ別マッチ率の合計以下になります。match_rateはサーバーが権威のある値 — コンシューマーは submitted/matched から自分で計算するよりもこの値を優先すべきです。id_typeの値は、ハッシュ化された PII タイプ(hashed_email、hashed_phone)とユニバーサル ID タイプ(rampid、uid2、id5、euid、pairid、maid)を組み合わせたものです。
match_breakdown を完全に省略します。
よくあるシナリオ
ディスカバリー専用
変更なしで既存のすべてのオーディエンスのステータスを確認します。レスポンスにはアカウント上のすべてのオーディエンスが含まれる —audience_id でフィルタリングして目的のオーディエンスを見つけること:
サプレッションリスト
新規獲得キャンペーンから除外するために、既存顧客のリストをアップロードする:メンバーの削除
オーディエンスを差分で更新する — 新しいメンバーを追加し、対象外になったメンバーを削除します:オーディエンスの削除
他のオーディエンスに影響を与えずに特定のオーディエンスをアカウントから削除します。オーディエンスオブジェクトにdelete: true を設定します:
delete: true を指定します。すべてのバイヤー管理オーディエンスを一度に削除するには、空の audiences 配列と delete_missing: true を使用する — ただし、すべてが削除されるため注意すること。
メディアバイでのオーディエンスの使用
オーディエンスがready になったら、create_media_buy のターゲティングオーバーレイで audience_id を参照します。オーディエンス ID はセラーアカウントにスコープされるため、セラーをまたいで使用することはできません。
test=false
オーディエンスステータス
プラットフォームのマッチングは非同期です。status フィールドは現在の状態を反映する:
| ステータス | 意味 |
|---|---|
processing | プラットフォームがアップロードされたメンバーをユーザーベースと照合中。後でもう一度確認すること — まだキャンペーンを作成してはいけない。 |
ready | オーディエンスはターゲティングに使用可能。matched_count が設定されています。 |
too_small | マッチしたオーディエンスがプラットフォームの最小サイズを下回っています。レスポンスの minimum_size でしきい値を確認できます。メンバーを追加して再同期すること。 |
status は action が created、updated、または unchanged の場合に存在します。action が deleted または failed の場合は存在しません。
Webhook(推奨): アップロード前にプロトコルレベルで push_notification_config を設定すること。タスクはセラーのプラットフォームがメンバーをマッチングしている間アクティブな状態が続く。マッチングが完了すると、タスクが完了し、最終結果(status: "ready" または status: "too_small")とともに Webhook が発火します。現実的な期待値を設定するには get_adcp_capabilities → audience_targeting.matching_latency_hours を確認すること(通常 1〜48 時間)。
ポーリングフォールバック: Webhook を使用しない場合は、audiences を省略したディスカバリー専用呼び出しで 15 分以上の間隔でポーリングすること。タスクのステータスを確認するには tasks/get と task_id を使用する — マッチング処理中はタスクが submitted 状態になり、オーディエンスの準備が完了するか小さすぎる場合に completed になります。
エージェントワークフロー: push_notification_config を設定してアップロードします。セッション終了前に audience_id と account_id を外部化します。status: "ready" の Webhook が発火したら再開して create_media_buy に進む。
ハッシュ化の要件
送信前にすべての識別子を SHA-256 でハッシュ化すること。まず正規化を行う:| 識別子 | 正規化 | 例 |
|---|---|---|
| メールアドレス | 小文字化、前後の空白を除去 | alice@example.com → ハッシュ |
| 電話番号 | E.164 形式 | +12065551234 → ハッシュ |
| MAID | 正規化不要 | そのまま使用 |
test=false
プライバシーに関する考慮事項
すべての PII はバイヤーが送信前にハッシュ化する — プロトコルは平文の個人データを一切扱わない。SHA-256 ハッシュは一方向であり、元のメールアドレスや電話番号に逆変換することはできません。セラーは同じアルゴリズムで自社のユーザーデータを独立してハッシュ化することでマッチングを行います。 バイヤーの義務: バイヤーは管轄区域に関わらず、オーディエンスデータを処理・共有するための適法根拠を持つ責任があります。規制対象市場で活動するセラーに GDPR の適法根拠を伝えるために、各オーディエンスにconsent_basis を含めること — 一部のセラーは EU オーディエンスに対してこのフィールドを必須としています。
データ取り扱い: アップロード後のデータ処理と保持は、セラーとの契約に基づいて管理されます。オーディエンスデータをアップロードする前に、セラーのデータ処理条件を確認すること。
エラー処理
| エラーコード | 説明 | 対処方法 |
|---|---|---|
ACCOUNT_NOT_FOUND | アカウントが存在しない | account_id を確認する |
AUDIENCE_NOT_FOUND | 削除対象のオーディエンスが存在しない | audience_id を確認するか remove を省略する |
INVALID_HASH_FORMAT | 識別子が期待されるハッシュ形式と一致しない | SHA-256 の16進数エンコードを確認する(64 文字、小文字) |
RATE_LIMITED | 同期リクエストが多すぎる | 指数バックオフで再試行します。ポーリングは 15 分以上の間隔で行うこと |
CALL_TOO_LARGE | ペイロードのメンバー数が多すぎる | ペイロードはすべてのオーディエンスを合わせて最大 100,000 メンバーに制限される |
次のステップ
- ターゲティング —
targeting_overlay.audience_includeとaudience_excludeでオーディエンスを参照します - create_media_buy — パッケージにオーディエンスターゲティングを適用します
- コンバージョントラッキング — オーディエンスターゲティングキャンペーンの成果をトラッキングします