Going live
The path from a test key to real money: KYB submission, staff review, live provisioning, and your live keys.
Going live is one gate: KYB. Submit your business and owner details, a human at
Acute reviews them, and on approval your organization is provisioned for real money
and can mint live keys. Until then, you build freely against the sandbox.
Build in test
Your org starts in pending with kybStatus: unsubmitted. You already have test
keys, so integrate the whole flow against the sandbox. Nothing here blocks you.
Submit KYB
Send your business + owner details. Your org moves to kybStatus: pending and the
submission enters the staff review queue.
Staff review
A human at Acute reviews the submission and either approves or rejects it. There is
no webhook for this: poll your org's kybStatus, or watch the Console.
Live provisioning (on approval)
Approval triggers live provisioning: your owner identity is verified with our
banking partner, a live deposit account is created, and your org's live settlement
wallet is opened. Your org flips to status: active, kybStatus: approved.
Mint live keys
With KYB approved you can create acuinf_live_ keys. Swap a key (not a codebase)
and the same calls move real money.
Two independent state fields track where you are:
| Field | Values |
|---|---|
status | pending → active → (suspended) |
kybStatus | unsubmitted → pending → approved | rejected |
An org becomes active when its first live settlement wallet is created (on KYB
approval). suspended is an administrative state: money movement is halted while
suspended.
Live keys are gated on approval
You cannot mint a live key until kybStatus is approved. This is the hard gate:
no approval, no real money. A rejected submission can be corrected and resubmitted.
KYB collects your business and the owner's identity. Sensitive fields (BVN, ID number) are encrypted at rest; staff see them masked to the last four digits by default, with any full reveal audited.
Business
legalName,rcNumber(required), optionaltradingNamebusinessType,industry, optionaltin,websitebusinessAddressLine1,businessCity,businessState(+ optional line 2, postal code)
Owner
ownerFirstName,ownerLastName(+ optional middle name)ownerBvn(encrypted),ownerDateOfBirth,ownerGender,ownerPhone,ownerEmailownerIdType(one ofdrivers_license,voters_card,passport,national_id,nin_slip), plusownerIdNumber(encrypted) and optionalownerIdExpiryownerAddressLine1,ownerCity,ownerState(+ optional line 2, postal code)
Documents
cacDocumentUrl,ownerIdDocumentUrl(optional uploads)
No KYB webhooks, by design
KYB transitions are a staff workflow, not a money event, so they do not fire
webhooks. Don't wait on a kyb.approved event; there isn't one. Check kybStatus
on your org or watch the Console. The only webhooks Acute sends are for money
movement (payments, transfers, withdrawals, payouts, refunds).
Before you flip the switch:
- Your integration runs green end-to-end against the sandbox.
- You handle and verify webhooks (signature + dedup by
event.id). - Every money
POSTsends anIdempotency-Key. - KYB submitted with accurate, real business + owner details.
-
kybStatusisapproved. -
livekeys minted, stored separately from test keys, scoped tightly.