Skip to main content
A customer’s identity reaches Bitnob in one of two ways. Which one you use depends on the product, not on the customer.

Cards: POST /api/cards/kyc

  • Send the customer’s details and one identity document. You don’t create the customer first: a successful submission creates them and returns customer_id.
  • Accepted id_type values: bvn, nin, passport, drivers_license, national_id, vnin, voters_card, ghana_card.
  • Verification is instant for bvn and nin. Document types can sit at pending for up to 10 minutes. A card can only be created once the customer is approved.
  • If the id_number or phone number already belongs to one of your customers under a different email, the call returns 400 and names the existing customer_id. Resubmit with that customer_id.
  • Card KYC is enabled per account. If it isn’t on for you, the call returns 403 FEATURE_NOT_ENABLED.
Walkthrough: Issue your first card.

Virtual accounts: POST /api/customers

  • Create the customer with first_name, last_name, email, phone_number, date_of_birth, id_type: "bvn", and the BVN as id_number.
  • Then call Create virtual account with that customer_id. The BVN is checked against the national registry at this point, not when the customer is created.
  • The name and date of birth must match the BVN record exactly, or verification fails even when the BVN is valid.
  • For a company, set customer_type: "business". The personal fields are those of a director or authorized representative.
Customers are matched on email, phone_number and BVN (id_number). Creating a customer with an email, phone number or BVN you’ve already used returns 201 with the existing customer, and the other fields you sent are ignored.
Walkthrough: Set up virtual accounts.

Check status

Use Get card KYC status, or read the customer with Get customer:
card_program_kyc[].normalized_status is one of none, initiated, pending, approved, or rejected. Prefer the virtualcard.user.kyc.* webhooks over polling. Virtual accounts have no pending state. The create call either returns the account or an error naming what failed.

Existing customers

A customer you already created with POST /api/customers can be given a virtual account once the fields above are on the record. Add missing ones with Update customer.

Field formats