Skip to main content
A customer in Dubu Pay represents one of your end users — the individual who pays money into a virtual account, accumulates a balance, or receives funds. You create and manage customers through the API; Dubu Pay stores them on your behalf, scoped entirely to your merchant account. Every virtual bank account, deposit record, balance entry, and ledger line is tied to a customer, so creating customers before issuing accounts is the recommended starting point for any integration.

The customer object

When you create or retrieve a customer, the API returns an object with the following shape:

KYC tiers

Dubu Pay uses a two-tier KYC system. Each tier unlocks additional account features and higher transaction limits.
Tier 1 verifies a customer’s identity using their BVN (Bank Verification Number) and a selfie image. You submit both when calling POST /customers/:id/tier1-verification.What you need:
  • bvn — exactly 11 digits
  • image_url — a URL pointing to the customer’s selfie
What it unlocks:
  • Issuing NGN virtual bank accounts (onramps)
  • Standard deposit limits
You can also initiate KYC via POST /customers/:id/kyc/initiate if you want Dubu Pay to drive the verification flow on your behalf — just supply the customer’s BVN.

Customer lifecycle

1

Create the customer

Call POST /customers with the customer’s email, first_name, and last_name. You receive a customer id in the response.
2

Submit KYC verification

Submit Tier 1 verification to unlock virtual account issuance. Pass the customer’s BVN and a selfie URL.
3

Issue a virtual account

Once the customer is verified, create an NGN virtual bank account for them via POST /customers/{id}/ngn-virtual-account. For a permanent account, the customer must be Tier 2 verified.
4

Track balance and ledger

Poll GET /customers/{id}/balance to see the customer’s current USDT balance, or GET /customers/{id}/ledger to retrieve a full transaction history.

How customers relate to other resources

Each customer can have:
  • One permanent NGN virtual account — linked for receiving deposits long-term
  • Multiple temporary virtual accounts — short-lived accounts tied to a specific payment
  • Crypto wallets — destination addresses on supported chains (APTOS, BASE, CELO, ETHEREUM, POLYGON, SOLANA, TRON)
  • A balance — aggregated USDT value of settled deposits
  • A ledger — paginated chronological record of all credits and debits
Store the customer id in your own database alongside your internal user record. You will use it for every subsequent Dubu Pay operation — issuing accounts, checking balances, and retrieving ledger history.

Endpoint overview

The GET /customers endpoint uses cursor-based pagination. Pass cursor from the previous response to fetch the next page, and use limit (max 200) to control page size.
Pass email as a query parameter to look up a specific customer without knowing their ID.
When creating a crypto wallet or crypto funding request, chain must be one of:APTOS, BASE, CELO, ETHEREUM, POLYGON, SOLANA, TRONThe asset field accepts USDC or USDT.