> ## Documentation Index
> Fetch the complete documentation index at: https://rain-sandbox-trial.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Create the User & KYC

> Create a Rain user application with the wallet address and complete KYC — the onboarding step after you create the embedded wallet.

After you [create the wallet](/sdks/embedded-wallets-setup), onboard the user in Rain: create their **application** with the wallet address (backend), then complete KYC. This page covers the wallet-relevant parts — see [Signing up a customer](/docs/signing-up-a-customer) for the full KYC flow.

## Create the application

From your backend, create the user's application with the wallet address. There's no separate initiate step — create it directly.

```bash theme={null}
curl -X POST "https://api-dev.rain.xyz/v1/issuing/applications/user" \
     -H "Api-Key: <YOUR_API_KEY>" \
     -H "Content-Type: application/json" \
     -d '{
       "walletAddress": "0x1234...abcd",
       "firstName": "Ada",
       "lastName": "Lovelace",
       "birthDate": "1990-05-10",
       "email": "ada@example.com",
       "ipAddress": "203.0.113.10",
       "occupation": "<occupation>",
       "annualSalary": "<annual-salary>",
       "accountPurpose": "<account-purpose>",
       "expectedMonthlyVolume": "<expected-monthly-volume>"
     }'
```

The response is an `IssuingUser` — save its `id`; that's the `userId` you use everywhere else. Also include the user's `address` and `nationalId`, or pass a Sumsub/Persona share token instead of raw PII. See the [create application reference](/reference/applications/create-a-consumer-application-for-a-user) for every field and its allowed values.

<Info>
  Use `walletAddress` for EVM chains, or `solanaAddress` / `stellarAddress` for those chains. At least one address is required for a Rain-managed program — which is why you [create the wallet](/sdks/embedded-wallets-setup) first.
</Info>

## Complete KYC

Complete KYC from your **backend** with your API key — this is the standard flow. Read `applicationStatus` on the response; if it isn't `approved`:

* Redirect the user to the returned `applicationCompletionLink` to finish Rain's hosted verification, and/or upload documents with `PUT /v1/issuing/applications/user/:userId/document`.
* Track approval by polling `GET /v1/issuing/applications/user/:userId` or handling the `user.updated` webhook.

You *can* also complete KYC from the app with a [Client Session Token](/sdks/embedded-wallets-authentication), but there's no reason to today — keep it on the backend.

See [Application states](/docs/application-states) for every status, and [Signing up a customer](/docs/signing-up-a-customer) for the full flow.

<Check>
  On approval, Rain automatically creates the cardholder and assigns collateral contracts — you're ready to [mint a session](/sdks/embedded-wallets-authentication#mint-a-rain-session-token-backend), [fund the wallet](/sdks/embedded-wallets-funding), and [issue a card](/sdks/card-issuance).
</Check>

## What's next

<Columns cols={3}>
  <Card title="Authentication" icon="key" href="/sdks/embedded-wallets-authentication">
    Mint a session token for the new user.
  </Card>

  <Card title="Fund the Wallet" icon="coins" href="/sdks/embedded-wallets-funding">
    Put funds behind the user's card.
  </Card>

  <Card title="Card Issuance" icon="credit-card" href="/sdks/card-issuance">
    Issue a card once the user is approved.
  </Card>
</Columns>
