Skip to main content

Identifiers

Every user in your request must include at least one primary identifier so RevBridge can link events to the correct customer profile.

Primary identifiers

At least one of these is required per user:
If none of these four identifiers are provided, the user will be rejected with a validation error.
user_id is optional. If your system has no stable internal ID for a user, send the identifiers you do have — an email-only or phone-only user is a first-class profile: fully identified, segmentable, and targetable by campaigns. The reverse also matters: a profile identified only by user_id or anon_id exists and accumulates history, but with no email or phone there is no channel to reach it — audiences count and target only reachable profiles (see Audiences).
Never invent a user_id. Sending a derived or synthetic value — a hash of the email, a random UUID minted at export time — pollutes the identity graph with an identifier no other data source will ever send again. Engagement tracked under a synthetic ID cannot be linked back to the person, so audiences built on campaign activity (opens, clicks) will silently miss them. If you don’t have a real internal ID, omit the field entirely.

Additional identifiers

You can also include device and advertising identifiers:

Identity resolution

RevBridge uses deterministic identity resolution to automatically unify customer profiles across all your data sources — API events, CSV imports, and integrations like Shopify. When you send an event with identifiers, RevBridge:
  1. Looks for an existing profile that matches any of the provided identifiers.
  2. If a match is found, the event is linked to that profile, and any new identifiers are added.
  3. If multiple profiles match (e.g., one matched by email, another by phone), they are automatically merged into a single unified profile.
  4. If no match exists, a new profile is created.

Merge keys

Not all identifiers trigger a merge. RevBridge distinguishes between merge keys (which can unify two separate profiles) and identification keys (which can only recognize an existing profile):
Providing multiple identifiers (e.g., both email and user_id) improves matching accuracy and enables cross-source merging. When a user logs in and you know both their anonymous ID and their real identity, send all identifiers together. The Web SDK handles this for browser traffic automatically — see below.

Normalization

Identifiers are normalized before matching: emails are lowercased and trimmed, so Jane@Example.com and jane@example.com resolve to the same person; other identifiers are trimmed of surrounding whitespace but otherwise matched as sent. Send phone numbers consistently in E.164 (+5511999887766) — formatting variants of the same number are treated as distinct values.

Merges are retroactive

When two profiles merge, the unification applies to the person’s entire history, not just future events. Every past event of both profiles re-resolves to the unified identity, so audiences, analytics, and campaign targeting immediately see one person with the combined timeline. For example, a “hasn’t purchased in 90 days” audience drops someone the moment a merge reveals a recent purchase made under their other identifier. Identity updates propagate to segmentation within minutes. Audience sizes shown in the app refresh continuously — recalculated hourly in the background and on demand in the builder.

Anonymous adoption on identify

When an event carries an anon_id whose device profile has no person identifiers yet, and that same request (or a later identify call) provides a person identifier such as email or user_id, RevBridge adopts the anonymous device profile: it re-points the anonymous history onto the person’s profile instead of creating a separate one. All prior anonymous activity then belongs to the known person, so you keep the full journey from first touch through login.
Adoption only claims an unclaimed device — one with no person identifiers yet. If the device profile already belongs to a known person (for example, a previous login on a shared computer), it is not re-pointed. This protects shared devices: two different people on the same browser never merge.
Adoption fires for browser traffic ingested through the Web SDK, which RevBridge tags as source: web. For server-side ingestion with a secret API key, keep sending the anon_id together with the person identifier in the same event (as in Example 1 below) to link anonymous history.

Example 1: Progressive profile enrichment

A user first browses anonymously, then logs in, then makes a purchase from a different channel. RevBridge automatically builds the complete profile:
Event 1: Anonymous browsing
Event 2: User logs in — links anonymous activity to known identity
Event 3: Purchase via SMS link — adds phone to same profile
After these three events, RevBridge has one unified profile with all identifiers linked: anon_id, email, user_id, and phone_number. All events appear in the same timeline.

Example 2: Cross-source merge

A customer is imported via CSV with only a phone number. Later, an API event arrives with the same phone and an email. RevBridge automatically merges them:
This works across all data sources — API, CSV imports, and integrations.

Example 3: Shared identifiers

When multiple people share a phone number (e.g., a family phone), events with that phone are merged into the same profile. This is the default behavior since phone is a merge key.
If shared phone numbers are common in your use case, contact support to configure phone as a non-merge key for your account.

Data isolation

Identity resolution is fully isolated per account. The same email address used by two different RevBridge customers will never be merged across accounts. Each account has its own independent identity resolution.

User profile fields

Beyond identifiers, you can send profile attributes in the identifiers object. These fields are attached to the customer profile and can be used for segmentation and personalization.

Personal information

Location

Technical context

RevBridge tracks channel-level consent using a 3-state model to ensure campaigns only reach users who have explicitly opted in. Send these as part of the identifiers object.
Send consent flags whenever they change — for example, when a user subscribes to your newsletter or updates their communication preferences. The distinction between “not informed” and “opt-out” matters: a user who has never been asked is different from one who explicitly declined.

Custom attributes

Any fields in the identifiers object that are not listed above are stored as custom attributes on the user profile. This lets you attach any business-specific data.

Complete example

A request with full profile data, consent flags, and custom attributes: