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.

1

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.

2

Submit KYB

Send your business + owner details. Your org moves to kybStatus: pending and the submission enters the staff review queue.

3

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.

4

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.

5

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:

FieldValues
statuspendingactive → (suspended)
kybStatusunsubmittedpendingapproved | 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), optional tradingName
  • businessType, industry, optional tin, website
  • businessAddressLine1, businessCity, businessState (+ optional line 2, postal code)

Owner

  • ownerFirstName, ownerLastName (+ optional middle name)
  • ownerBvn (encrypted), ownerDateOfBirth, ownerGender, ownerPhone, ownerEmail
  • ownerIdType (one of drivers_license, voters_card, passport, national_id, nin_slip), plus ownerIdNumber (encrypted) and optional ownerIdExpiry
  • ownerAddressLine1, 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 POST sends an Idempotency-Key.
  • KYB submitted with accurate, real business + owner details.
  • kybStatus is approved.
  • live keys minted, stored separately from test keys, scoped tightly.