Skip to main content
Know Your Customer (KYC) verification is a regulatory requirement that confirms the identity of your business and its principals. Completing merchant KYC raises your transaction limits beyond the default tier and is a prerequisite for issuing permanent virtual accounts to your customers. Dubu Pay uses a third-party identity verification provider, so the process is handled through a secure session rather than by uploading documents directly to the API.

Merchant KYC

Initiate KYC

Call POST /merchant/kyc/initiate to start the KYC process for your merchant account. This registers your intent to verify and prepares a session with the identity verification provider.

Get a KYC session

After initiating KYC, retrieve a session URL or token from GET /merchant/kyc/session. Redirect your authorized representative to this URL to complete identity verification through the provider’s interface.
The session URL is time-limited. If it expires before completion, call GET /merchant/kyc/session again to get a fresh session link.

Check KYC status

Poll GET /merchant/kyc/status to check the outcome of your verification. You can also listen for the kyc.approved or kyc.rejected webhook events to avoid polling.

Customer KYC

In addition to merchant-level verification, you can verify your individual customers. Customer KYC is structured in two tiers with increasing verification requirements.

Tier 1 — basic identity verification

Tier 1 verifies a customer’s basic identity. It is sufficient for standard payment activity but does not enable permanent virtual accounts.

Tier 2 — advanced verification (BVN / NIN)

Tier 2 collects a customer’s Bank Verification Number (BVN) or National Identity Number (NIN). This level of verification is required before you can issue a permanent virtual bank account to a customer.
You must complete Tier 2 KYC for a customer before issuing them a permanent virtual bank account. Attempts to create a permanent account for an unverified customer will fail.

KYC status reference

Use webhooks to receive real-time KYC status updates instead of polling the status endpoint. This keeps your integration responsive without unnecessary API calls.