> ## 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.

# Onboarding overview

> Pick the right onboarding flow for each product and country, and create customers.

Every order belongs to a **customer**: the end user who receives the fiat or the crypto. Before you can create an order, the customer must be `VERIFIED` and, for payouts, have a bank account.

## Pick an onboarding flow

| You want to | Customer's country | Flow |
| - | - | - |
| Run payins or payouts for your own users | India | [Standard KYC](#standard-kyc), with KYC sharing or the KYC SDK |
| Run payins for US users | United States | Standard KYC with the [KYC SDK](/guides/customers/kyc-sdk) |
| Pay out to beneficiaries in other markets | UAE, UK, SEPA, Brazil, Mexico, US and others | [Payout-only onboarding](/guides/customers/payout-only-onboarding) |
| Pay a beneficiary in India for a remitter abroad | India | [Remittance](/guides/payments/remittance) (RDA): beneficiary KYC plus a remitter |
| Send money home to another country | Any other payout market | [Payout-only onboarding](/guides/customers/payout-only-onboarding), then a standard payout. See [Remittance](/guides/payments/remittance#remittance-to-other-countries) |

## The customer object

Create a customer with [`POST /customer/create`](/api-reference-exchange/endpoint/customer/create).

```json theme={null}
{
  "client_reference_id": "user-001",
  "full_name": "Priya Sharma",
  "email": "priya@example.com",
  "phone": "9911002211",
  "alpha_3_country_code": "IND"
}
```

* `client_reference_id` and `alpha_3_country_code` are required. `client_reference_id` is your ID for the user. If you send one that already exists, Zapyd returns the existing customer, so you can retry this call safely.
* Send `full_name`, or `first_name` with `last_name`.
* `alpha_3_country_code` must be enabled for your organization, otherwise the call fails with `REQ_INVALID_COUNTRY`. US customers also need `dob` (`YYYY-MM-DD`).
* `email` and `phone` are required only when your organization has email or phone verification turned on. Send `phone` without the country code. The response returns it with the dial code, for example `+919911002211`.
* Store the returned `id`. Every other call uses it as `customer_id`.

## Standard KYC

Choose one method per customer.

<CardGroup cols={2}>
  <Card title="KYC sharing" icon="share-nodes" href="/guides/customers/kyc-sharing">
    You already verify users. Submit the verified data by API, and Zapyd runs its own checks. India.
  </Card>

  <Card title="KYC SDK" icon="id-card" href="/guides/customers/kyc-sdk">
    Redirect the user to a hosted link. Zapyd collects documents, runs liveness and verifies them. Required for the USA.
  </Card>
</CardGroup>

| | KYC sharing | KYC SDK |
| - | - | - |
| Who collects documents | You | Zapyd |
| Main call | [`POST /kyc/add-kyc-data`](/api-reference-exchange/endpoint/kyc/add-kyc-data) | [`POST /kyc/generate-link`](/api-reference-exchange/endpoint/kyc/generate-link) |
| Your UI | Your own KYC screens | A redirect to the returned `url` |
| Fixing a failure | Resubmit only the failed part | Generate a new link |
| Best for | Exchanges and apps with existing KYC | Teams that want the least work |

## KYC statuses

```mermaid theme={null}
flowchart LR
    U[UNVERIFIED] -->|submit| P[PROCESSING]
    P --> V[VERIFIED]
    P --> F[FAILED]
    F -->|fix and resubmit| P
```

| Status | Meaning | What to do |
| - | - | - |
| `UNVERIFIED` | Customer created, no KYC yet | Start KYC |
| `PROCESSING` | Checks are running. Most finish within 60 seconds, and manual review can take up to 24 hours | Wait for the `CUSTOMER` webhook |
| `VERIFIED` | KYC passed | Add a bank account and create orders |
| `FAILED` | A check failed | Read `failure_reason` and resubmit the failed part |

Each customer gets **three attempts**. After three failures the customer is blocked, and Zapyd support resolves it manually. To redo KYC from scratch, for example with a different document, call [Reset KYC](/api-reference-exchange/endpoint/kyc/reset-kyc). This sets the customer back to `UNVERIFIED`, and they can't transact until KYC passes again.

<Tip>
  In sandbox, skip real KYC. [Mock KYC Status](/api-reference-exchange/endpoint/kyc/mock-kyc-status) sets any customer to `VERIFIED`, or to a failure such as `DOCUMENT_VERIFICATION_FAILED`.
</Tip>

## Next: bank accounts

Payouts need a bank account in the customer's name, and some payins use one too. See [Bank accounts and wallets](/guides/customers/bank-accounts-and-wallets).
