Skip to main content

Overview

The KYC module handles identity verification for your customers. Applications flow through statuses from submission to final approval, with BVN and NIN verification steps against national identity providers.

Common Workflows

New customer onboarding: Customer submits KYC application → System verifies BVN/NIN against provider APIs → Officer reviews and approves → Customer can transact without KYC-related risk flags. Re-verification: A customer’s KYC expires → They submit updated documents → Officer verifies and approves → KYC status updates to APPROVED. Business onboarding (KYB): Officer creates KYB application → CAC lookup fetches company details → Directors verified via NIN/BVN → Beneficial owners screened against sanctions → Officer approves → Business can transact without KYB risk flags.

Permissions

KYC Statuses

KYC Tiers (CBN-Compliant)

The platform supports CBN-mandated account tiers. Each tier requires a different level of identity verification: Key behaviors:
  • Applications default to TIER_1 if no tier is specified at creation
  • Tier 1 requires either BVN or NIN verification
  • Tier 2 requires a linked BVN plus a valid means of identification (Passport, Driver’s License, Voter’s Card, or National ID)
  • Tier 3 adds proof of address and a liveness/biometric check
  • Smart tier default: If both BVN and NIN are provided at creation, the application defaults to TIER_2
  • Auto-upgrade: As applicants upload documents or complete verifications, the system automatically upgrades their tier when requirements are met
    • TIER_1TIER_2: requires verified BVN + valid ID (NIN alone is insufficient for Tier 2)
    • TIER_2TIER_3: requires verified BVN/NIN + valid ID + proof of address + liveness
  • The admin reviews documents uploaded by the applicant — never uploads on their behalf
  • The tier field is stored on the KYCApplication and flows into transaction screening for rule-based limit enforcement

Applicant “Comes Back” — Adding BVN/NIN Later

Not all applicants provide both BVN and NIN at creation. The system supports a resume workflow where an applicant (or officer on their behalf) can add missing identity numbers to an existing PENDING application. Scenario:
  1. Applicant creates application with only name and phone → Status: PENDING, Tier: TIER_1
  2. Later, applicant provides their NIN via mobile app or branch visit
  3. Officer uses PATCH /api/v1/kyc/applications/:id to add the NIN
  4. Officer clicks “Verify NIN” → Status becomes NIN_VERIFIED
  5. Applicant is now Tier 1 approved (or can proceed to Tier 2/3)
Editable fields: nin, bvn, email, phone, dateOfBirth Allowed statuses: PENDING, DOCUMENT_UPLOADED, NIN_VERIFIED, BVN_VERIFIED Validation: NIN and BVN must be exactly 11 digits; empty strings clear the field; invalid dates are rejected Smart tier bump: If both BVN and NIN become present, tier auto-bumps to TIER_2. If documents/verifications already exist, auto-upgrade is also evaluated.

Status Preservation During Verification

The KYC status field tracks the highest verified milestone reached. Verifying an identity type never downgrades a higher status: This ensures a Tier 2 application at BVN_VERIFIED remains approvable even if NIN is later verified, and a Tier 3 application at LIVENESS_PASSED remains approvable if additional identity checks are run.

Tier Upgrade Flow

  1. Applicant is approved at Tier 1 (NIN verified only)
  2. Later, they provide BVN → Admin clicks “Upgrade to Tier 2”
  3. System resets status to NIN_VERIFIED (preserving the verified NIN)
  4. Admin verifies the BVN → Status becomes BVN_VERIFIED
  5. Admin approves → Application is now Tier 2 · Approved

BYOL Provider Tier Limits

If a tenant uses BYOL (Bring Your Own License), their provider may not support all verification types needed for higher tiers. Configure maxTier and supportedVerifications in the BYOL config:
If a tenant requests Tier 2/3 but their BYOL provider’s maxTier is lower:
  • With kycFallbackMode = WALLET_RESERVE: Platform automatically falls back to embedded providers for the missing verification types
  • With kycFallbackMode = NONE: The verification is blocked with a clear error message

KYC Endpoints

KYB Statuses

Note: KYB is a hard prerequisite for business transactions. Only APPROVED status allows transactions to proceed without risk flags. All intermediate statuses score 100 and result in BLOCK.

Per-Tenant KYC Provider Configuration

Each tenant can independently configure how identity verification is performed.

Provider Modes

Switching Provider Mode

BANK_ADMIN users can switch modes from Dashboard → Settings → KYC Provider:
  1. Select Embedded or BYOL from the dropdown.
  2. If BYOL, fill in the configuration form:
    • Provider Name
    • Base URL
    • API Key / App ID
    • Endpoint paths for NIN, BVN, and Liveness
    • Request/response field mappings
    • Match confidence threshold
  3. Save -the change takes effect immediately for all new verifications.

BYOL Configuration Format

The configuration is stored as JSON in Tenant.kycProviderConfig:

KYC Endpoints

KYB Endpoints

Tenant Configuration Endpoints


Submit KYC Application

Create a new KYC application for a customer. Request Body Example Request
Example Response -201 Created

Create KYB Application

Create a new KYB application for a corporate entity. Request Body Example Request

Verify CAC

Run a CAC lookup for a KYB application. Path Parameters Request Body Example Request
Example Response -200 OK

List KYC Applications

Query Parameters Example Request
Example Response -200 OK

Get KYC Application

Retrieve a KYC application with full verification results and uploaded documents. Example Request
Example Response -200 OK

Verify BVN

Trigger BVN verification against the identity provider. Path Parameters Request Body Example Request
Example Response -200 OK
Auto-upgrade behavior: If the applicant has already uploaded a valid ID document, successful BVN verification may auto-upgrade the application from Tier 1 to Tier 2.

Verify NIN

Trigger NIN verification. Path Parameters Request Body Example Request
  • Example Response — 200 OK

Liveness Check

Run a biometric liveness and face-match check. Path Parameters Request Body Example Request
Auto-upgrade behavior: If the applicant has already uploaded a valid ID and proof of address, successful liveness verification may auto-upgrade the application from Tier 2 to Tier 3.

Approve Application

Final approval of a KYC application. Path Parameters Example Request
Example Response — 200 OK
Approving a KYC application updates the customer’s risk profile. Future transactions from this customer will reflect the APPROVED status.

Reject Application

Reject a KYC application that fails verification. Path Parameters Request Body Example Request
Example Response — 200 OK

Verify Directors

Verify each director’s identity via BVN/NIN against identity providers. Path Parameters Request Body Example Request
Example Response — 200 OK

Screen Beneficial Owners

Screen beneficial owners against global sanctions and PEP watchlists. Path Parameters Request Body Example Request
Example Response — 200 OK

Approve KYB Application

Final approval of a KYB application. Requires BANK_ADMIN or COMPLIANCE_OFFICER role. Path Parameters Example Request
Example Response — 200 OK
Approving a KYB application updates the business entity’s risk profile. Future transactions from this entity will reflect the APPROVED status (score 0, no KYB-related risk).

Reject KYB Application

Reject a KYB application that fails verification. Requires BANK_ADMIN or COMPLIANCE_OFFICER role. Path Parameters Request Body Example Request
Example Response — 200 OK

KYC Document Upload

Upload, manage, and retrieve KYC application documents stored in MinIO (S3-compatible object storage).

Upload KYC Document

POST /api/v1/kyc/applications/:id/documents Upload a file to MinIO and attach it to a KYC application. Path Parameters Request Body (multipart/form-data) Example Request
Example Response — 200 OK
Auto-upgrade behavior: After a document is uploaded, the system automatically checks if the applicant now meets the requirements for a higher tier. For example, uploading a PASSPORT after BVN verification may auto-upgrade the application from Tier 1 to Tier 2.

List KYC Documents

GET /api/v1/kyc/applications/:id/documents List all documents for a KYC application with presigned URLs. Example Response — 200 OK

Get KYC Document Download URL

GET /api/v1/kyc/applications/:id/documents/:docId/download Get a time-limited presigned URL to download a document directly from MinIO. Path Parameters Example Response — 200 OK

Delete KYC Document

DELETE /api/v1/kyc/applications/:id/documents/:docId Delete a document from MinIO and the database. Requires BANK_ADMIN or COMPLIANCE_OFFICER role. Example Response — 200 OK

KYB Document Upload

Upload, manage, and retrieve KYB application documents stored in MinIO.

Upload KYB Document

POST /api/v1/kyc/kyb/applications/:id/documents Request Body (multipart/form-data) Example Request
Example Response — 200 OK

List KYB Documents

GET /api/v1/kyc/kyb/applications/:id/documents List all documents for a KYB application with presigned URLs. Example Response — 200 OK

Get KYB Document Download URL

GET /api/v1/kyc/kyb/applications/:id/documents/:docId/download Get a time-limited presigned URL to download a KYB document. Example Response — 200 OK

Delete KYB Document

DELETE /api/v1/kyc/kyb/applications/:id/documents/:docId Delete a KYB document from MinIO and the database. Requires BANK_ADMIN or COMPLIANCE_OFFICER role. Example Response — 200 OK