Identity
A user starts anonymous — tracked by a device/session ID the SDK generates locally.
Calling identify(userId, attributes) associates a stable, integrator-supplied user ID with
that activity going forward; the user is now identified.
oneSygnal.identify('user_123', { plan: 'pro' });User attributes
The second argument to identify() accepts a map of attributes associated with the user.
Supported value types: string, number, boolean, and ISO 8601 date strings.
oneSygnal.identify('user_123', {
plan: 'pro',
seats: 5,
is_admin: true,
signed_up: '2026-01-15T00:00:00Z',
});These attributes are available in trigger rules (Stage 2 — see How Triggering Works) and are included in webhook payloads.
Call identify() on every session, not just once
Make the identify() call as soon as you know who the user is, on every new session —
not only the first time you see them. Trigger rules and API targeting
both key off the identified user’s current traits; a session that skips identify() because
“we already identified this user last time” leaves those traits stale for this session’s
trigger evaluations.
logout() vs reset()
These are two different operations, and web only has one of them:
logout()— clears the identified user, reverting to anonymous tracking. Available on every platform.reset()— mints a new anonymous ID and re-fetches surveys. Available on Android and iOS (and bridged on Flutter); absent on web, deferred rather than guessed — web has never distinguished “clear the identified user” from “mint a new anonymous ID,” and addingreset()there is a product decision, not an implementation gap.
If you’re porting logic from a native integration to web, don’t assume logout() does what
reset() does elsewhere — it doesn’t generate a new anonymous ID.
See Platform Parity for the full per-platform breakdown.