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 toAPPROVED.
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_1if 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_1→TIER_2: requires verified BVN + valid ID (NIN alone is insufficient for Tier 2)TIER_2→TIER_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
tierfield is stored on theKYCApplicationand 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 existingPENDING application.
Scenario:
- Applicant creates application with only name and phone → Status:
PENDING, Tier:TIER_1 - Later, applicant provides their NIN via mobile app or branch visit
- Officer uses
PATCH /api/v1/kyc/applications/:idto add the NIN - Officer clicks “Verify NIN” → Status becomes
NIN_VERIFIED - Applicant is now Tier 1 approved (or can proceed to Tier 2/3)
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 KYCstatus 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
- Applicant is approved at Tier 1 (NIN verified only)
- Later, they provide BVN → Admin clicks “Upgrade to Tier 2”
- System resets status to
NIN_VERIFIED(preserving the verified NIN) - Admin verifies the BVN → Status becomes
BVN_VERIFIED - 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. ConfiguremaxTier and supportedVerifications in the BYOL config:
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. OnlyAPPROVEDstatus allows transactions to proceed without risk flags. All intermediate statuses score 100 and result inBLOCK.
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:
- Select Embedded or BYOL from the dropdown.
- 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
- Save -the change takes effect immediately for all new verifications.
BYOL Configuration Format
The configuration is stored as JSON inTenant.kycProviderConfig:
KYC Endpoints
KYB Endpoints
Tenant Configuration Endpoints
Submit KYC Application
Create a new KYC application for a customer. Request Body
Example Request
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
List KYC Applications
Query Parameters
Example Request
Get KYC Application
Retrieve a KYC application with full verification results and uploaded documents. Example RequestVerify BVN
Trigger BVN verification against the identity provider. Path Parameters
Request Body
Example Request
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
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
Verify Directors
Verify each director’s identity via BVN/NIN against identity providers. Path Parameters
Request Body
Example Request
Screen Beneficial Owners
Screen beneficial owners against global sanctions and PEP watchlists. Path Parameters
Request Body
Example Request
Approve KYB Application
Final approval of a KYB application. RequiresBANK_ADMIN or COMPLIANCE_OFFICER role.
Path Parameters
Example Request
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. RequiresBANK_ADMIN or COMPLIANCE_OFFICER role.
Path Parameters
Request Body
Example Request
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
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
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