Environments

Test (sandbox) vs live (production): what's the same, what differs, and why the environment lives inside the key.

Acute has two environments: test (the sandbox) and live (production). They run the same code, expose the same endpoints, and return the same shapes. The only real difference is whether the money is real.

TestLive
Key prefixacuinf_test_acuinf_live_
Moneysimulatedreal naira
Settlementsimulated, instant-ishreal bank rails
Identity (BVN/KYC)auto-faked by the sandboxreal, merchant-supplied
Available whenthe moment your org existsafter KYB approval
Base URLhttps://sandbox.api.acute.network/v1https://api.acute.network/v1

Two hosts, one key type each

Each environment has its own host, and each host accepts only its own key type. The sandbox host (https://sandbox.api.acute.network/v1) takes test keys; the live host (https://api.acute.network/v1) takes live keys. Sending a key to the wrong host fails with 401 (API_KEY_ENVIRONMENT_MISMATCH): a live key can never act on the sandbox host, and a test key can never act on the live host. The environment is immutable and baked into the key, so you can't accidentally fire a sandbox request at production.

The sandbox mirrors production behaviour with fake money:

  • Settlement is simulated. A payment's virtual account accepts a simulated NIP transfer and settles, so you can drive the full pending → settled lifecycle without a real bank. Withdrawals and payouts "complete" on the sandbox rail.
  • Identity is auto-faked. Real BVNs can't be used against the sandbox. When the underlying provider is in sandbox mode it auto-supplies fake identity inputs for KYC/KYB, so your test data flows without a real person's details.
  • Everything else is real. The ledger postings, the fee math, the references, the webhooks, the error envelope, idempotency, rate limits, all identical to production. If it works in test, the shape works in live.

Build the whole thing in test

Because test keys exist before KYB, you can build and ship your entire integration against the sandbox while approval is in flight, then swap a key, not a codebase, to go live. Same endpoints, same shapes, same webhooks.

When you go live, three things become real:

  1. Money. Balances are actual naira held with our banking partner.
  2. Settlement. Payments settle on real NIP rails; withdrawals and payouts hit real bank accounts; the async resolver tracks real outcomes.
  3. Identity. KYC and KYB data must be real: it is what stands behind the money, and the merchant is liable for its accuracy.

Your code does not change. You point it at a live key, and the same calls move real money.

Test and live data never mix. A wallet created with a test key is invisible to a live key and vice versa. They are different worlds on different hosts that happen to share a schema. References minted in one environment are meaningless in the other.