Identity Verification Providers
Embedded Providers (Default)
BVN, NIN, and vNIN verification calls are made through integrated providers. When you triggerverify-bvn or verify-nin, the platform calls the provider’s API with the ID number and cross-references the returned name against the applicant’s name (including swapped name order, which is common in Nigeria). Liveness checks use face-match and liveness detection APIs.
Bring Your Own License (BYOL)
Tenants can switch to BYOL mode and plug in their own KYC provider via a JSON configuration. This is useful when your institution already has a direct contract with an identity verification provider. How it works:
BYOL Configuration JSON (stored in
Tenant.kycProviderConfig):
Admins can switch modes and edit the BYOL config from Dashboard → Settings → KYC Provider.
KYC Tiers
The platform implements CBN-mandated KYC tiers. Each tier maps to different verification requirements and transaction limits:- Applications default to
TIER_1, orTIER_2if both BVN and NIN are provided at creation - Tier can be explicitly set at creation via the
tierfield - 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 does not qualify)TIER_2→TIER_3: requires verified BVN/NIN + valid ID + proof of address + liveness
- Approved applications can be manually upgraded to a higher tier via the dashboard
- Tier flows into transaction screening for rule-based limit enforcement
Adding Identity Information After Creation
Applicants often don’t have their BVN or NIN available when they first start the onboarding flow. The system supports updating these fields on an existingPENDING application via PATCH /api/v1/kyc/applications/:id:
- Updates only allowed while status is
PENDING,DOCUMENT_UPLOADED,NIN_VERIFIED, orBVN_VERIFIED - NIN and BVN are validated as exactly 11 digits; empty strings clear the field
- If both BVN and NIN become present, tier auto-bumps from
TIER_1toTIER_2 - After updating, the system re-evaluates
auto-upgradein case documents/verifications already qualify for a higher tier - The verification endpoints (
verify-nin,verify-bvn) accept the ID number in the request body, so the application record doesn’t need to be pre-populated - Status preservation: Verifying NIN when status is already
BVN_VERIFIEDorLIVENESS_PASSEDdoes not downgrade the status. The highest milestone is always preserved.
KYC Application Statuses
Applications progress through the following statuses during verification:Screening Impact
When a transaction is screened, the KYC Verification engine evaluates the sender’s status. If no KYC application exists, the engine flags it accordingly.KYC Trust Modes
Tenants can configure how KYC status is resolved during transaction screening:
Set the mode via
PATCH /api/v1/tenants/me with kycTrustMode.
Document Upload & Storage
KYC applications support document uploads via the API. Documents are stored in MinIO (an S3-compatible object storage server) and referenced in the database.Supported Document Types
Document Endpoints
How It Works
- Upload:
POSTwithmultipart/form-datacontainingfileanddocumentType - Storage: File is saved to MinIO under
kyc/{applicationId}/{timestamp}-{filename} - Database: A
KYCDocumentrecord is created with the MinIO object key - Retrieval: The API returns presigned URLs (5-minute expiry) for secure viewing
- Deletion: Admin users can delete documents — this removes from both MinIO and the database
Upload Example
Note: Documents are tenant-scoped. You can only access documents belonging to applications in your tenant.
BYOL Fallback Mode
When a BYOL provider is unavailable, tenants can configure the fallback behavior:
Set the mode via
PATCH /api/v1/tenants/me with byolFallbackMode.
Note: IfsenderBvnis not provided in the request and no KYC payload is supplied, KYC status defaults to “No KYC record” (score 100,BLOCK). Always include the sender’s BVN or KYC payload for accurate screening.