Skip to main content

Overview

The /identify endpoint is one of the methods for adding identities to your Identity Graph. It accepts a Permutive user ID (or generates a new one) and a prioritized list of identities, then links all provided identities to the resolved Permutive ID through identity resolution.
Prerequisites:
  • Permutive SDK installed and configured for your platform
  • Identifiers configured in Identity > Identifiers dashboard
  • User has authenticated or identifier is available

Steps

1

Configure identifiers in dashboard

Before sending identities, ensure the identifier types are configured in Identity > Identifiers. Identities with unconfigured identity types will not be added to the graph.
2

Prepare identity data

Collect the identity values you want to send. Each identity consists of:
  • Type: The identifier type (e.g., email_sha256, appnexus, user_id)
  • Value: The actual identifier string
  • Priority: Integer where 0 = highest priority (optional, defaults to order in array)
3

Call identify endpoint

Implement the identify call with your platform’s SDK or API. The system checks identities in priority order until it finds a match, then links all provided identities to that Permutive ID.
4

Set identity priority

Order identities by priority, placing the most stable and persistent identifiers first (priority 0). This improves identity resolution rates by checking the most reliable identifiers first.
5

Handle response

The identify endpoint returns the resolved Permutive ID. Store this ID for future identify calls to maintain consistency across sessions.

Platform-Specific Implementation

Web SDK

permutive.identify([
  {
    id: "2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae", // SHA-256 hash of email
    tag: "email_sha256",
    priority: 0
  },
  {
    id: "abc123",
    tag: "appnexus",
    priority: 1
  }
]);

iOS SDK

let identities = [
    // Use the SHA-256 hash of the email, not the plaintext email
    Identity(id: "2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae", tag: "email_sha256", priority: 0),
    Identity(id: "abc123", tag: "appnexus", priority: 1)
]
Permutive.shared.identify(identities: identities)

Android SDK

val identities = listOf(
    // Use the SHA-256 hash of the email, not the plaintext email
    Identity(id = "2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae", tag = "email_sha256", priority = 0),
    Identity(id = "abc123", tag = "appnexus", priority = 1)
)
Permutive.identify(identities)

API Direct

curl -X POST https://api.permutive.com/v2.0/identify \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  -d '{
    "user_id": "permutive-user-id-or-new",
    "identities": [
      {"id": "2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae", "tag": "email_sha256", "priority": 0},
      {"id": "abc123", "tag": "appnexus", "priority": 1}
    ]
  }'
Tips for identity resolution:
  • Place the most stable, persistent identifiers first (priority 0) - typically hashed emails or authenticated user IDs
  • Call identify whenever a user authenticates or a new identifier becomes available
  • Ensure consistent identifier formats (e.g., always hash emails the same way)
  • Use the same Permutive ID across sessions when available to maintain user continuity
  • Call identify on every page load or app launch to maintain identity resolution
Important:
  • Identities with identifier types not configured in the dashboard will be ignored
  • A user cannot have multiple identities of the same identifier type
  • Identity resolution happens in real-time; allow time for propagation across systems
  • Priority order matters - identities are checked sequentially until a match is found

Next Steps