# Customer identity verification

> Mandatory for high-risk merchants: pass a SA verified ID or foreign passport number with each payment so Ozow only shows payment methods linked to that customer.

Source: https://hub.ozow.com/integration-methods/apis/money-in/customer-identity-verification/

> ℹ️ **Only mandatory for high-risk merchants.** Ozow tells you during onboarding if your business
> is classified as high-risk. If it isn't, you don't need to implement this. For who must comply and
> when, see [Customer identity verification requirements](https://hub.ozow.com/integration-methods/apis/money-in/identity-verification.md).

**Customer identity verification** confirms that the payment instrument belongs to the person making
the payment. You verify your customer when they sign up on your platform, then pass their verified
South African ID number or foreign passport number to Ozow with every payment request. Ozow uses it
to decide which payment methods and banks to show that customer.

## How it works

- **Verify the customer at signup**: verify your customer's identity when they create an account on
  your platform, using any trusted third-party KYC provider.
- **Store the verified number**: save the verified SA ID or foreign passport number against the
  customer's account. Customers must not be able to edit it without prompting re-KYC.
- **Pass it with every payment**: send the number in the `payer.identity` object on every payment
  request.
- **Ozow filters the payment methods**: Ozow shows only the payment methods and banks linked to that
  identity number.

## What the customer sees

These payment methods use the identity number: Pay by Bank (all banks), Absa Pay, Capitec Pay,
Nedbank Direct EFT, FNB Payment Requests and PayShap Request.

| What you send | What the customer sees |
| --- | --- |
| A verified ID linked to an account at the bank | The bank or method is shown |
| A verified ID with no linked account at the bank | That bank or method isn't shown |
| No ID | Every payment method that needs an ID is hidden |

For example, a customer with accounts at FNB and Standard Bank sees Pay by Bank for those two banks.
Capitec Pay and Absa Pay aren't shown.

> ⚠️ **Important**: If you leave out `payer.identity`, the customer can't select any of the methods
> above. Send it on every payment request, not only the first one.

## Integration guide

Add a `payer` object to your [Hosted Checkout](https://hub.ozow.com/integration-methods/apis/money-in/hosted-checkout.md) payment request.

Create the payment with `POST https://one.ozow.com/v1/payments` (staging:
`https://stagingone.ozow.com/v1/payments`).

```json
{
  "siteCode": "YOUR_SITE_CODE",
  "amount": { "currency": "ZAR", "value": 100.00 },
  "merchantReference": "ORDER-001",
  "expireAt": "2026-12-31T23:59:59Z",
  "returnUrl": "https://yourstore.com/order-complete",
  "payer": {
    "id": "CUSTOMER-123",
    "name": "PAYER_NAME",
    "identity": {
      "type": "said",
      "country": "ZA",
      "identifier": "0000000000000"
    }
  }
}
```

| Field | Type | Description |
| --- | --- | --- |
| `payer.identity.type` | string | `said` for a South African ID number, or `passport` for a foreign passport |
| `payer.identity.country` | string | Issuing country as an ISO 3166-1 alpha-2 code in uppercase, for example `ZA` |
| `payer.identity.identifier` | string | The verified ID or passport number. A South African ID number has 13 digits. |

## Next steps

- [ ] Every payment request includes `payer.identity` with the correct `type`, `country` and
  `identifier`.
- [ ] The identity number comes from your stored, verified record, not from a field the customer
  fills in at checkout.
- [ ] A customer with a linked account sees the matching banks, and a payment without an ID hides
  the methods that need one.