| Auth Type | Description | Register Auth Required | Use Case |
|---|---|---|---|
| API_Key | API key-based authentication | Yes | Server-to-server, automated systems |
| OAuth | OAuth 2.0 / OIDC authentication | Yes | Third-party identity providers |
| Email_Auth | Email-based OTP authentication | Yes | User email verification |
| SMS_Auth | SMS-based OTP authentication | Yes | Phone number verification |
| Passkey | WebAuthn passkey authentication | After any auth type | Secure device-based authentication |
nonce claimPOST /api/v1/wallets/{entityId}/initiate-otpGenerate Ephemeral Key Pair
↓
Authenticate (OAuth/OTP)
↓
Create Session → Receive credentialBundle
↓
Decrypt with Ephemeral Private Key
↓
Extract Session Private Key
↓
Sign Transactions (valid for 15 minutes)
↓
Session Expires → Create New Session1. Register Primary Auth
↓
POST /api/v1/wallets/{entityId}/register-auth
↓
Entity created with API Key/OAuth/Email/SMS authentication
2. Create Session (OAuth/Email/SMS only)
↓
a) Generate ephemeral P-256 key pair
b) For OAuth: Get OIDC token with SHA256(publicKey) as nonce
For Email/SMS: Call initiate-otp, receive OTP
c) POST /api/v1/wallets/{entityId}/start-session
d) Decrypt credentialBundle with ephemeral private key
e) Extract session private key (valid 15 minutes)
Note: API Key auth skips this step (uses registered key directly)
3. (Optional) Register Passkey
↓
Signed with primary auth (session key or API key)
↓
Passkey added as secondary auth method
4. Perform Operations
↓
Sign with either:
- Primary auth:
* API Key: Use registered permanent key
* OAuth/Email/SMS: Use session private key from credential bundle
- Secondary auth: Use passkey (WebAuthn)
Exception: Passkey management operations
↓
Must sign with primary auth only
Session expired (after 15 minutes)
↓
Generate new ephemeral key pair
↓
Authenticate and create new session
↓
Decrypt new credential bundle
↓
Continue operations with new session key