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

# KYC Onboarding

> Initiate Noah hosted onboarding and receive KYC lifecycle updates through Noah webhooks.

## Overview

Use Noah hosted onboarding through Portal Client API to verify your client before running payins or payout flows.

## 1. Initiate KYC

Call `POST /customers/kyc` to create (or return) a hosted onboarding session.

```bash theme={null}
curl --request POST \
  --url https://api.portalhq.io/api/v3/clients/me/integrations/noah/customers/kyc \
  --header 'Authorization: Bearer [token]' \
  --header 'Content-Type: application/json' \
  --data '{
    "returnUrl": "https://example.com/noah/return",
    "fiatOptions": [{ "fiatCurrencyCode": "USD" }]
  }'
```

Example response:

```json theme={null}
{
  "data": {
    "hostedUrl": "https://checkout.sandbox.noah.com/kyc?session=..."
  }
}
```

`POST /customers/kyc` returns the hosted URL only. KYC approval status is evaluated later via Noah webhooks and Noah customer verification checks during payin/payout flows.

<Note>
  `returnUrl` must be a valid HTTPS URL.
</Note>

## 2. Redirect the user to hosted onboarding

Send the user to `data.hostedUrl` so they can complete the Noah flow.

## 3. Configure Noah webhooks for KYC updates

Set up Noah webhooks in Noah Dashboard to receive KYC lifecycle events directly from Noah.

* Subscribe to `Customer` events for KYC status lifecycle updates.
* [Noah Webhooks](/integrations/On-Off-Ramp/noah-webhooks)

<Warning>
  Payins and payout flows require an approved Noah KYC status. Enforce this check using Noah webhooks and customer verification checks before calling payin/payout initiation endpoints.
</Warning>
