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:
IdentifierTypeDescription
user_idstringYour internal user or customer ID
emailstringThe user’s email address
phone_numberstringPhone number in E.164 format (e.g., +5511999887766)
anon_idstringAn anonymous identifier for users who haven’t signed up yet
If none of these four identifiers are provided, the user will be rejected with a validation error.

Additional identifiers

You can also include device and advertising identifiers:
IdentifierTypeDescription
idfastringApple Identifier for Advertisers
adidstringGoogle Advertising ID

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):
IdentifierMerge keyBehavior
emailYesTwo events with the same email = same person
phone_numberYesTwo events with the same phone = same person
user_idYesTwo events with the same user_id = same person
anon_idNoIdentifies a device/session, but won’t merge two people
idfa / adidNoIdentifies a device, but won’t merge two people
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.

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
{
  "identifiers": { "anon_id": "device_abc123" },
  "events": [{ "event_name": "page_view", "page": "/summer-sale" }]
}
Event 2: User logs in — links anonymous activity to known identity
{
  "identifiers": {
    "anon_id": "device_abc123",
    "email": "jane@example.com",
    "user_id": "usr_001"
  },
  "events": [{ "event_name": "login" }]
}
Event 3: Purchase via SMS link — adds phone to same profile
{
  "identifiers": {
    "phone_number": "+5511999887766",
    "email": "jane@example.com"
  },
  "events": [{ "event_name": "purchase", "revenue": 129.90 }]
}
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:
CSV import: phone: +5511999887766               → Profile created
API event:  email: jane@example.com, phone: +5511999887766  → Same profile, email added
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.
email: maria@gmail.com, phone: +5511982299869 → Profile created
email: joao@gmail.com,  phone: +5511982299869 → Merged into same profile
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

FieldTypeDescription
first_namestringFirst name
last_namestringLast name
genderstringGender
birthdaystringDate of birth (e.g., 1990-05-20)
agenumberAge (must be a numeric value)
languagestringPreferred language (e.g., pt-BR, en-US)
timezonestringIANA timezone (e.g., America/Sao_Paulo)

Location

FieldTypeDescription
citystringCity name
countrystringISO 3166-1 country code (e.g., BR, US)

Technical context

FieldTypeDescription
platformstringPlatform (e.g., web, ios, android)
ip_addressstringUser’s IP address
user_agentstringBrowser or app user agent string
carrierstringMobile carrier
device_modelstringDevice model (e.g., iPhone 15 Pro)
os_versionstringOperating system version
app_versionstringYour application version
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.
ValueMeaningCampaign behavior
true or 1Opt-in — user has given consentEligible for campaigns on this channel
false or 0Opt-out — user has explicitly revoked consentExcluded from campaigns on this channel
Not sent / nullNot informed — no consent data yetExcluded from campaigns (conservative default)
FieldTypeDescription
email_opt_inbooleanUser has opted in to receive emails
sms_opt_inbooleanUser has opted in to receive SMS
whatsapp_opt_inbooleanUser has opted in to receive WhatsApp messages
rcs_opt_inbooleanUser has opted in to receive RCS messages
web_push_opt_inbooleanUser has opted in to web push notifications
mobile_push_opt_inbooleanUser has opted in to mobile push notifications
gdpr_consentbooleanUser has given GDPR consent
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.
{
  "identifiers": {
    "email": "jane@example.com",
    "user_id": "usr_001",
    "first_name": "Jane",
    "loyalty_tier": "gold",
    "company": "Acme Inc",
    "signup_source": "google_ads"
  },
  "events": [
    { "event_name": "purchase", "revenue": 59.90 }
  ]
}

Complete example

A request with full profile data, consent flags, and custom attributes:
{
  "users": [
    {
      "identifiers": {
        "user_id": "usr_001",
        "email": "jane@example.com",
        "phone_number": "+5511999887766",
        "first_name": "Jane",
        "last_name": "Smith",
        "gender": "female",
        "birthday": "1992-03-15",
        "age": 33,
        "language": "pt-BR",
        "timezone": "America/Sao_Paulo",
        "city": "São Paulo",
        "country": "BR",
        "platform": "web",
        "email_opt_in": true,
        "sms_opt_in": true,
        "whatsapp_opt_in": false,
        "loyalty_tier": "gold"
      },
      "events": [
        {
          "event_name": "purchase",
          "timestamp": "2026-01-15T14:30:00Z",
          "revenue": 259.90,
          "currency": "BRL",
          "order_id": "ORD-12345"
        }
      ]
    }
  ]
}