Connect a wallet before loading Pods widgets.
}
return (
persistSession(kycUserId, iframeUrl)}
onStatusChange={(status) => syncKycStore(status)}
onComplete={({ approved, redirectIntent }) => {
if (approved) router.push(redirectIntent === 'withdraw' ? '/withdraw' : '/deposit')
}}
/>
)
}
```
## Host Identity and Resume
The SDK has no user store, so identity comes from the host:
* `currentUserEmail` / `currentUserWalletAddress` — bind the KYC profile to your user.
* `initialKycUserId` — resume an existing session (e.g. after a page refresh) instead of
bootstrapping fresh.
* `onSessionCreated({ kycUserId, iframeUrl })` — fires right after a session is created; persist
both so you can resume and reopen the capture iframe.
* `redirectIntent` (`'withdraw'` | `'deposit'`) — where "continue" after approval should take the
user; the widget never navigates itself, it reports the intent via `onComplete` / `onRouteChange`.
## Status and Completion
* `onStatusChange(status: KycStatusResponse)` — mirrors every status fetch into your own store.
* `onComplete({ approved, redirectIntent? })` — fires when the wizard reaches a decision.
* `errorMessageResolver(rawReason?) => string | undefined` — host-owned copy for provider error
reasons (defaults to pass-through).
* `onRequestSandboxReset` — dev-only reset; wire it behind your own sandbox env check so the reset
action never renders in production.
* `onTrack(event, props?)` — analytics.
Status values progress: `created → provider_pending → approved | rejected | rejected_retryable |
blocked`. `brlaEnabled` on the status response is the flag that unlocks Ramp.
## `KycWidget` Props
```ts theme={null}
type KycWidgetProps = {
initialKycUserId?: string
currentUserEmail?: string
currentUserWalletAddress?: string
redirectIntent?: 'withdraw' | 'deposit' | null
onSessionCreated?: (session: { kycUserId: string; iframeUrl: string }) => void
onStatusChange?: (status: KycStatusResponse) => void
onComplete?: (outcome: { approved: boolean; redirectIntent?: 'withdraw' | 'deposit' | null }) => void
onRequestSandboxReset?: () => Promise