> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dollarpe.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# User journey

> What users see in the widget, and the webhook each stage sends.

This page shows what a user sees in the widget and which webhook each stage sends to your backend. API integrations go through the same stages, but on your own screens.

## Stages

<Steps>
  <Step title="Sign up">
    The user enters an email and phone number, and verifies them with a one-time code. The customer is created as `UNVERIFIED`.
  </Step>

  <Step title="KYC">
    The user enters personal details, uploads an identity document and takes a selfie. The customer moves to `PROCESSING`, then `VERIFIED` or `FAILED`. Your backend gets a `CUSTOMER` webhook. Try the [India KYC demo](/guides/customers/kyc-demo-india).
  </Step>

  <Step title="Link a bank account (payouts)">
    The user adds a bank account or a UPI ID. Zapyd verifies it, and your backend gets a `BANK` webhook with `VERIFIED` or `FAILED`.
  </Step>

  <Step title="Transact">
    The user picks buy or sell, sees a live rate, confirms a quote, and pays. Your backend gets `PAYIN` or `PAYOUT` webhooks until the order is final.
  </Step>
</Steps>

## What your backend sees

| Stage | Webhook `type` | Statuses |
| - | - | - |
| KYC | `CUSTOMER` | `VERIFIED`, `FAILED` |
| Bank | `BANK` | `VERIFIED`, `FAILED` |
| Payin | `PAYIN` | `SUCCESS`, `FAILED`, `REFUND_INITIATED`, `REFUNDED`, `ON_HOLD` |
| Payout | `PAYOUT` | `SUCCESS`, `FAILED`, `REFUNDED`, `IN_REVIEW` |
| EDD | `EDD` | `VERIFIED`, `FAILED` |

Widget payouts can also show `PENDING` while the widget waits for the user's crypto transfer. See [Status reference](/guides/development-and-testing/status-reference) for every status and the action to take.

## Returning users

A `VERIFIED` user skips sign-up and KYC. For payouts they also need a `VERIFIED` bank account. Otherwise they go straight to the transaction screen.
