Users
A user in Dynamic is created when someone successfully authenticates — proving ownership of a credential (wallet signature, email OTP, social login, etc.). Once authenticated a user can be issued access tokens. Each user has:- A unique user ID (
subclaim in the JWT) - One or more verified credentials (wallets, email addresses, social accounts, passkeys, or external auth identifiers)
- Optional profile information collected during onboarding (email, alias, name, etc.)
The user object
See the user object reference hereSessions
A session represents an active authenticated period for a user. When a user authenticates, Dynamic creates a session and issues a JWT (JSON Web Token) that serves as the session credential. Key aspects of sessions:- Creation: A session begins when Dynamic issues a JWT after successful authentication.
- Duration: Sessions last until the JWT expires. The maximum JWT lifetime is 30 days, configurable in your dashboard security settings.
- Storage: The JWT is stored either in a cookie (browser sends it automatically on same-origin requests) or in in-app storage (your app reads it and sends it explicitly), depending on your project configuration.
- Expiry: When the JWT expires, the SDK ends the session automatically — the user object and token are cleared, and the user must re-authenticate.
- Updates: When a user links a new credential (e.g. connects another wallet), Dynamic refreshes the JWT with updated claims without ending the session.
- Concurrent: Users can have multiple sessions active at the same time.
Wallets
In the context of authentication, Dynamic interacts with wallets in several ways:- External wallets (MetaMask, Phantom, Coinbase Wallet, etc.) can be used as an authentication method — the user connects the wallet and signs a message to prove ownership.
- Embedded wallets are created by Dynamic after authentication. They are not part of the authentication step itself — the JWT is issued first, and wallet creation happens afterward (either automatically on signup or on-demand).
- Wallet credentials appear in the JWT’s
verified_credentialsclaim after authentication, allowing your backend to know which wallets belong to the user.
Visitors
A visitor is someone who connects an external wallet but does not sign a message to prove ownership. Visitors exist only in the context of external wallets configured in connect-only mode. Key differences from authenticated users:| Visitor | Authenticated user | |
|---|---|---|
| Wallet connected | Yes | Yes |
| Message signed | No | Yes |
| JWT issued | No | Yes |
| User record created | No | Yes |
| Access control applies | No | Yes |
| Information capture applies | No | Yes |
| Can use backend verification | No | Yes |