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

# KYC — Canada (CAD)

> KYC requirements for opening a CAD account for Canadian users. Identity verification is handled upstream — no document uploads required from our side.

<div className="bmoni-spine">
  <span>Lifecycle</span>
  <a data-stage="1" href="/lifecycle#1-create-the-user">User</a>
  <a data-stage="2" href="/lifecycle#2-provision-the-smart-wallet">Wallet</a>
  <a data-stage="3" href="/lifecycle#3-verify-identity-kyc">KYC</a>
  <a data-stage="4" href="/lifecycle#4-activate-the-rail">Rail</a>
  <a data-stage="5" href="/lifecycle#5-fund-the-wallet">Fund</a>
  <a data-stage="6" href="/lifecycle#6-move-money">Move money</a>
</div>

Identity verification is handled upstream. No document uploads are required from the API side.

***

## How it works (the flow)

1. **`POST /onboarding/start-canada`** — Registers the CAD wallet address and triggers the onboarding context.
2. **`PATCH /kyc`** — User submits KYC data progressively (partial updates allowed).
3. **`POST /kyc/activate`** — Detects the Canadian address and creates a Customer record. The response either carries a hosted verification URL or does not — branch on it.
4. **Branch on the activation response:**
   * **A verification URL is returned** — open it so the user can finish identity verification, then return them to your app.
   * **No URL is returned** — the user's identity was already satisfied by the Global KYC share, so there is nothing to open. Go straight to polling. Global KYC itself never runs in a WebView.
5. **`GET /onboarding/status`** — Poll to check KYC completion (the backend receives the provider's webhooks). Both branches above land here.

***

## Core requirements

**Personal Info**

| Field         |          |
| ------------- | -------- |
| `firstName`   | required |
| `lastName`    | required |
| `dateOfBirth` | required |

**Contact** (from user account)

| Field         |                                                  |
| ------------- | ------------------------------------------------ |
| `email`       | required                                         |
| `phoneNumber` | required — must be a valid Canadian phone number |

**Address** (must be a Canadian address)

| Field         |                                                            |
| ------------- | ---------------------------------------------------------- |
| `streetLine1` | required                                                   |
| `city`        | required                                                   |
| `state`       | required — province (stored upstream as `subdivisionName`) |
| `postalCode`  | required — format: `A1A 1A1` or `A1A1A1`                   |
| `countryCode` | required — `"CAN"`                                         |

**Valid province codes**

| Code | Province                |
| ---- | ----------------------- |
| `ab` | Alberta                 |
| `bc` | British Columbia        |
| `mb` | Manitoba                |
| `nb` | New Brunswick           |
| `nl` | Newfoundland & Labrador |
| `ns` | Nova Scotia             |
| `nt` | Northwest Territories   |
| `nu` | Nunavut                 |
| `on` | Ontario                 |
| `pe` | Prince Edward Island    |
| `qc` | Quebec                  |
| `sk` | Saskatchewan            |
| `yt` | Yukon                   |

***

## Not required (handled upstream)

* Document uploads — collected directly from the user during verification
* SIN (Social Insurance Number) — collected directly from the user

***
