Skip to main content
Every transaction checks the sender’s KYC verification status using their BVN. The result feeds directly into the screening pipeline’s KYC Verification engine.

Identity Verification Providers

Embedded Providers (Default)

BVN, NIN, and vNIN verification calls are made through integrated providers. When you trigger verify-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):
Key mapping fields: 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, or TIER_2 if both BVN and NIN are provided at creation
  • Tier can be explicitly set at creation via the tier field
  • 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 does not qualify)
    • TIER_2TIER_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 existing PENDING application via PATCH /api/v1/kyc/applications/:id:
Key rules:
  • Updates only allowed while status is PENDING, DOCUMENT_UPLOADED, NIN_VERIFIED, or BVN_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_1 to TIER_2
  • After updating, the system re-evaluates auto-upgrade in 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_VERIFIED or LIVENESS_PASSED does 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

  1. Upload: POST with multipart/form-data containing file and documentType
  2. Storage: File is saved to MinIO under kyc/{applicationId}/{timestamp}-{filename}
  3. Database: A KYCDocument record is created with the MinIO object key
  4. Retrieval: The API returns presigned URLs (5-minute expiry) for secure viewing
  5. 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: If senderBvn is 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.