Quickstart
Zero to your first payment: grab a test key, create a bank-transfer collection, and watch the money settle into your wallet. Copy-paste runnable.
Five minutes, two calls. A test key to authenticate, and a payment to collect by bank transfer. Everything below runs against the sandbox: fake money, real shapes. No bank meeting, no production access required.
What you need
An acuinf_test_… key from the Console. That is it.
Test keys work the moment your organization exists, before KYB, so you can build the
whole integration while approval is in flight. Your test settlement wallet is
provisioned for you on signup, so collections have somewhere to land from the start.
GET /health is the one endpoint that needs no auth. Use it to confirm you can
reach the API and that the rails are up.
curl https://sandbox.api.acute.network/v1/healthEvery other call carries your key as a Bearer token:
-H "Authorization: Bearer acuinf_test_..."Collecting money is the whole point, so we go straight there. A bank_transfer
payment opens a virtual account (a NUBAN) the payer transfers into by bank.
When their NIP transfer lands, the payment settles and the base amount credits
your settlement wallet.
You don't pass a wallet here: omit targetWalletId and the collection settles
into your organization's settlement wallet, the one provisioned for you on signup.
Idempotency-Key, from here on
POST /payments moves money, so it requires an Idempotency-Key header: any
unique string (a UUID is ideal). Send the same key twice and you get the same
payment back, never two. We mean it: idempotency is the one
habit that saves you at 2 a.m.
curl -X POST https://sandbox.api.acute.network/v1/payments \
-H "Authorization: Bearer acuinf_test_..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"method": "bank_transfer",
"baseAmount": 250000,
"description": "Order #8842",
"customer": { "name": "Ada Lovelace", "email": "ada@example.com" }
}'{
"success": true,
"statusCode": 201,
"data": {
"id": "acuinf208844190037pay",
"method": "bank_transfer",
"status": "pending",
"baseAmount": 250000,
"fee": 3750,
"payableAmount": 253750,
"amountReceived": 0,
"currency": "NGN",
"targetWalletId": "acuinf771204938810wlt",
"description": "Order #8842",
"expiresAt": "2026-06-26T09:59:50.110Z",
"settledAt": null,
"createdAt": "2026-06-26T09:29:50.110Z",
"virtualAccount": {
"accountNumber": "7712049388",
"bankName": "Providus Bank",
"accountName": "ACUTE / ADA LOVELACE",
"expiresAt": "2026-06-26T09:59:50.110Z"
}
},
"meta": { "requestId": "req_4f9c2a7e1b0d8c3a5e6f10a2" }
}The payer sends payableAmount (253750 kobo = ₦2,537.50) to the virtual account.
The fee comes from the fee schedule: for ₦2,500 that is the 1%
Acute clamp (2500) plus the 0.5% provider clamp (1250), 3750 in total. On
settlement your settlement wallet is credited the base 250000, and a
payment.settled webhook fires. The targetWalletId
in the response is your settlement wallet, filled in for you because you omitted it.
Authenticated
A test key proved who you are, against the sandbox.
Collected a payment
A virtual account that settles into your settlement wallet, fees broken out, idempotent.