SegOps AIDocs

Identity Resolution

SegOps reconciles a visitor's **anonymous** activity with their **identified** profile automatically, on the server. You never have to stitch sessions together yourself — track events with whatever id you have, and SegOps collapses them onto a single canonical user.

The model#

Every event carries a user_id and, when available, an anonymous_id (the SDK mints and persists one for you). When SegOps sees both ids together — on a track call, an identify, or a session mint after login — it records a deterministic alias edge: anon_<anonymous_id> → user_id.

Resolution is read-time. Events are never rewritten; instead, segment computation, the User Explorer, and MTU counting resolve each id through the alias map at query time. So a visitor who browsed anonymously and then logged in is one profile, and segments include their pre-login activity.

Rules that keep identities clean#

  • First-identify-wins. Once anon_X maps to user A, a later claim that anon_X is user B is logged and ignored. This prevents the identity "explosions" that opaque last-write-wins stitching causes.
  • Never auto-merge two known users. Implicit reconciliation only ever maps an anonymous id onto a user. Merging two real user_ids is a deliberate, destructive operation available only through the Admin API.
  • Logout rotates the anonymous id. useUser().reset() (or the mobile equivalent) issues a fresh anonymous id so the next person on a shared device never inherits the previous user's trail.

Explicit control (Admin SDK)#

For server-side cases the event stream can't see — CRM backfills, deliberate account merges — use the Admin SDK:

ts
await segops.identity.alias('anon_abc', 'user_42');   // anon → user
await segops.identity.merge('user_dupe', 'user_42');  // deliberate user merge

alias() is first-identify-wins like the implicit path; merge() is authoritative and is the only sanctioned way to fold one user into another.

Bot & agent classification#

Each event is also stamped with a bot_class: human, known_bot, ai_agent, or suspicious. Known crawlers (Googlebot, Bingbot, GPTBot, ClaudeBot, PerplexityBot, …) are classified — never dropped — so AI crawler traffic stays visible in Discovery Intelligence while being excluded from billing. See How we count MTU.

See also#