API reference

KYC

Three-tier identity verification.

Overview

Century runs a strictly sequential ladder: Tier 1 face liveness, Tier 2 NIN, Tier 3 bank account + ID document. A tier cannot be submitted until the previous tier is approved. Uploads are stored privately and only ever returned as short-lived signed URLs.

  • Tier 1 unlocks transactions; Tier 2 unlocks wallet transfers and dedicated virtual accounts.
  • Submission responses never include provider payloads, BVNs or raw document data.
  • Approval states: pending, approved, rejected. Rejections carry a human-readable reason only.

Not implemented

Do not build against these
  • Third-party KYC provider passthrough
  • Bulk verification

Endpoints

5 operations available to your account.

submitNinKyc

Bearer token required

Submit Tier 2 (NIN).

Endpoint
POST/_serverFn/submitNinKyc
Request body
FieldTypeRequired
ninstringYes
slipPathstringYes
fullNamestringNo
Response codes
401Unauthorized – missing or invalid bearer token.
400Validation failed – input did not match the schema.
429Rate limited – slow down and retry.
500Server error – reported and logged with an error ID.
curl -X POST https://centuryvtu.com/_serverFn/submitNinKyc \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"data":{"nin":"string","slipPath":"string","fullName":"string"}}'
Example response
{ ok: true }

submitBankKyc

Bearer token required

Submit Tier 1 (address, photo, utility bill, bank).

Endpoint
POST/_serverFn/submitBankKyc
Response codes
401Unauthorized – missing or invalid bearer token.
400Validation failed – input did not match the schema.
429Rate limited – slow down and retry.
500Server error – reported and logged with an error ID.
curl -X POST https://centuryvtu.com/_serverFn/submitBankKyc \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{}'

submitTier3Kyc

Bearer token required

Submit Tier 3 (liveness frames, admin-reviewed).

Endpoint
POST/_serverFn/submitTier3Kyc
Response codes
401Unauthorized – missing or invalid bearer token.
400Validation failed – input did not match the schema.
429Rate limited – slow down and retry.
500Server error – reported and logged with an error ID.
curl -X POST https://centuryvtu.com/_serverFn/submitTier3Kyc \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{}'

getKycFileUrl

Bearer token required

Signed URL for a KYC upload.

Endpoint
POST/_serverFn/getKycFileUrl
Request body
FieldTypeRequired
pathstringYes
Response codes
401Unauthorized – missing or invalid bearer token.
400Validation failed – input did not match the schema.
429Rate limited – slow down and retry.
500Server error – reported and logged with an error ID.
curl -X POST https://centuryvtu.com/_serverFn/getKycFileUrl \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"data":{"path":"string"}}'
Example response
{ ok: true }

listBanks

Bearer token required

List Nigerian banks.

Endpoint
GET/_serverFn/listBanks
Response codes
401Unauthorized – missing or invalid bearer token.
400Validation failed – input did not match the schema.
429Rate limited – slow down and retry.
500Server error – reported and logged with an error ID.
curl -X GET https://centuryvtu.com/_serverFn/listBanks \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -G

Runs against Production using your own signed-in session. No shared or secret credential is used.