Migrating audiences
AdCP 3.0 rc.1 promotesexternal_id from a value in the uid-type enum to a required top-level field on AudienceMember. Every audience member must now have a buyer-assigned stable identifier plus at least one matchable identifier.
What changed
AudienceMember schema
external_idis required — buyer-assigned stable identifier (CRM record ID, loyalty ID)- At least one matchable identifier —
hashed_email,hashed_phone, oruidsarray
Before and after
beta.3 — external_id as a uid-type entry:test=false
test=false
uid-type enum
Theuid-type enum no longer includes external_id. Current values:
Why the change
Separatingexternal_id from the uid-type enum makes the buyer’s stable identifier explicit. It enables:
- Deduplication — Remove duplicate members across syncs by
external_id - Targeted removal — Remove specific members without re-uploading the full list
- Cross-referencing — Correlate audience membership with buyer CRM systems
Sync audiences
sync_audiences uses delta operations (add/remove) per audience. Members are identified by external_id for removal:
test=false
Migration steps
1
Extract external_id from uids
Move any
{ "type": "external_id", "value": "..." } entry from the uids array to the top-level external_id field.2
Ensure every member has external_id
If members don’t have a buyer-assigned ID, derive one (e.g., hash of identifiers). The schema requires
external_id on every member.3
Keep at least one matchable identifier
Every member must also have at least one of
hashed_email, hashed_phone, or uids. This is enforced by the schema’s anyOf constraint.4
Update removal logic
When removing members via
sync_audiences, use external_id as the stable key. The member still needs a matchable identifier in the remove array.5
Validate against schema
Run member objects against
audience-member.json schema. It enforces both external_id (required) and the matchable identifier constraint.Signals Protocol
Full reference for signal discovery, activation, and pricing models.
Related: Brand identity | Optimization goals | AdCP 3.0 overview