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

# KYC Flow

> Understanding the user verification process

## Overview

Users must complete KYC verification before they can transact. Only users with a `verified` status can perform on/offramp transactions.

## Requirements

* Phone number (required at user creation)
* One identity document (see below)
* Verified bank account (penny drop)
* PEP declaration

## Identity Verification

| Document               | Endpoint                      | How it works                             |
| ---------------------- | ----------------------------- | ---------------------------------------- |
| Aadhaar                | `/kyc/digilocker/init`        | Via DigiLocker integration               |
| PAN                    | `/kyc/pan/verify`             | Verified against government DB           |
| Indian Passport        | `/kyc/passport/verify`        | Upload PDF — auto-verified               |
| International Passport | `/kyc/passport/international` | Upload photo/PDF — auto-verified via OCR |

## Flow

1. **Create user** with phone number
2. **Verify identity** — submit any one document from the table above
3. **Verify bank account** — via penny drop
4. **Submit PEP declaration** — confirm whether the user is a politically exposed person
5. KYC status moves to `verified` — user can transact

<Warning>
  If the user declares `isPep: true`, KYC will be automatically rejected.
</Warning>

## KYC Status

| Status        | Meaning                                                |
| ------------- | ------------------------------------------------------ |
| `pending`     | No verification started                                |
| `in_progress` | At least one step completed, or awaiting manual review |
| `verified`    | All requirements met, user can transact                |
| `rejected`    | KYC rejected (PEP or compliance)                       |

Check status at any time:

```bash theme={null}
curl https://api.stablepay.global/v2/users/{userId}/kyc/status \
  -H "Authorization: Bearer YOUR_API_KEY"
```

## Webhooks

You'll receive a webhook when KYC status changes:

```json theme={null}
{
  "event": "user.kyc_updated",
  "data": {
    "userId": "usr_abc123",
    "kyc": {
      "level": "basic",
      "status": "verified"
    }
  }
}
```

## Need Help?

KYC requirements can vary based on your integration and user geography. Reach out to our team at [hello@stablepay.global](mailto:hello@stablepay.global) for guidance.
