# How identity works

> Source: https://cross-deck.com/docs/how-identity-works/ · Crossdeck developer docs (generated from the published page).

Concepts
3 min read
·
The model, before you wire anything

This is the map, not the manual. By the end you should be able to answer three questions: which tier you are, whether cross-platform stitching applies to you, and which doc to read next. Crossdeck binds a person to the most durable anchor your setup provides — so where you sit depends on what your app already has.

The anchor rule
The more durable the anchor, the more Crossdeck can do.

Anonymous visitor
no durable identity

Tier 1 — no backend, no payment
Anchor: none. Journey analytics only — no money, no entitlements, nothing to stitch.

Stripe customer
the rail is the anchor

Tier 2 — no backend, Stripe present
Anchor: the Stripe customer. Revenue tracked against them. A single surface — no stitch, by design.

App UID
the passport

Tier 3 — backend present
Anchor: your authenticated app UID. Spans web and iOS; the Stripe sub attaches to the UID. The only tier where entitlements follow the human across platforms.

Crossdeck anchors a person to the most durable thing available — climbing from anonymous analytics, to a Stripe-anchored surface, to a UID that spans platforms. Select a tier to jump to it.

## The anchor rule

Crossdeck binds identity to the most durable anchor your setup provides. The more durable the anchor — anonymous handle, Stripe customer, your own app UID — the more Crossdeck can do with it.

## The three tiers

### Tier 1 — no backend, no payment

Anonymous visitors, journey analytics only. There's no money and no entitlements, so there is no durable identity to anchor to and nothing to stitch. You read what people did; you don't carry who they are.

### Tier 2 — no backend, Stripe present

The Stripe customer is the anchor. Revenue is tracked and reported against that customer. It's a single surface — there's no cross-platform stitch, because there's no app identity to bridge to. This is a complete, valid mode, not a degraded one.

### Tier 3 — backend present

Your authenticated app UID is the anchor — the passport. Identity persists across web and iOS, the Stripe subscription attaches to the UID, and entitlements follow the human across platforms. This is the only tier where stitching applies.

Which way do you go from here?

**Tier 1 or 2?** You're done — cross-platform identity doesn't apply to you. **Tier 3** (web and mobile, real accounts)? You must call `identify()` with the same UID on both platforms. Read on.

## The cross-platform stitch

Web
Web visitor subscribes via Stripe
identify(uid)
Identity = app UID the Stripe sub attaches here

Pro on web

Mobile
App install the SDK mints an anonymous handle
identify(uid), after login
Same identity the handle aliases into your UID

Pro on phone

The one rule that makes it work
The UID is what stitches — the same UID on web and mobile is the same human. Never the email (Apple Private
Relay alone guarantees the iOS one won't match the web). Skip identify() in the mobile app and your
paying web customer sees free.

On Tier 3, you hand Crossdeck the same UID on web and mobile. The web subscription attaches to that UID; the
mobile install's anonymous handle aliases into it — so Pro resolves on the phone. Select a box to jump to the tier.

You hand Crossdeck the same UID on web and on mobile. That's the entire mechanism — you assert it; Crossdeck does not guess, fingerprint, or match on email.

- **Email is never the key.** Apple Private Relay alone guarantees the iOS email won't match the web one.

- **The device handle is throwaway.** The SDK-minted handle is anonymous — it gets attached to the UID; it is not the identity.

## What to read next

Next

You're Tier 3. The identity stitch lives in your login flow.

Wire it up — Identify users
