Identify users
Attach your own user ids and profile fields to events
Identify adds what you know about a person (name, e-mail, traits) to their profile. It is optional and idempotent: the profile already exists from the first event sent with that id in X-User-Id, and calling identify again with the same custom_id updates it instead of creating a second user.
Request
POST /v1/events/identify with the project key:
curl -X POST https://api.iforevents.com/v1/events/identify \
-H "X-Project-Key: <project key>" \
-H "Content-Type: application/json" \
-d '{"custom_id":"user-123","name":"Ada Lovelace","email":"[email protected]","properties":{"plan":"pro"}}'| Field | Required | Notes |
|---|---|---|
custom_id | yes | Your identifier for the person (database id, username, e-mail), the same value your events carry in X-User-Id |
name, email, phone_number | no | Shown on the user profile in the dashboard |
properties | no | Any other traits; stored as strings |
Response
201 Created with the user record. Events keep using custom_id in X-User-Id; the uuid is IForevents' own key for the profile, which you need only for the privacy routes.
{"user":{"uuid":"0c9e6c1a-2b3d-4e5f-8a90-1b2c3d4e5f60","custom_id":"user-123"}}In the Flutter SDK
await iforevents.identify(
event: IdentifyEvent(
customID: 'user-123',
properties: {'email': '[email protected]', 'plan': 'pro'},
),
);The SDK switches its X-User-Id from the anonymous id it generated to customID, keeps it across restarts and adds the header to every later event by itself. Device brand, model, OS and app version are collected automatically.
Privacy
Emails and names are personal data: only send what you need, and use /v1/privacy/subjects/{uuid} to export or erase a person on request.