Create a payout
Fund and queue a batch disbursement to many external bank accounts.
/v1/payoutsCreates a batch and accepts it for disbursement. The funds (items + fees) are
debited from the source wallet up front; the batch returns 202 Accepted with
status: "processing" and every item pending. Items then resolve one by one -
the batch settles to completed, partially_completed, or failed depending on
how many items land. Requires an Idempotency-Key.
POST /payoutsscope: payoutTest keys only. Never paste a live key. Your key is stored only in this browser (localStorage) and sent only to the same-origin playground proxy.
›Equivalent request (curl / TypeScript)
curl -X POST https://sandbox.api.acute.network/v1/payouts \
-H "Authorization: Bearer acuinf_test_…" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: …" \
-d '{"sourceWalletId":"acuinf483920175566wlt","items":[{"amount":500000,"accountNumber":"0123456789","bankCode":"044","accountName":"ADA LOVELACE"},{"amount":250000,"accountNumber":"1098765432","bankCode":"058"}]}'const res = await fetch("https://sandbox.api.acute.network/v1/payouts", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.ACUTE_TEST_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID(),
},
body: JSON.stringify({"sourceWalletId":"acuinf483920175566wlt","items":[{"amount":500000,"accountNumber":"0123456789","bankCode":"044","accountName":"ADA LOVELACE"},{"amount":250000,"accountNumber":"1098765432","bankCode":"058"}]}),
});
const { data, meta } = await res.json();# disburse to three accounts
curl -X POST https://sandbox.api.acute.network/v1/payouts \
-H "Authorization: Bearer acuinf_test_…" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 7e1a9c40-3b2d-4f5e-8a6b-1c2d3e4f5a6b" \
-d '{
"sourceWalletId": "acuinf483920175566wlt",
"items": [
{ "amount": 500000, "accountNumber": "0123456789", "bankCode": "044", "accountName": "ADA LOVELACE" },
{ "amount": 250000, "accountNumber": "1098765432", "bankCode": "058" },
{ "amount": 750000, "accountNumber": "2233445566", "bankCode": "033" }
]
}'{
"success": true,
"statusCode": 202,
"data": {
"id": "acuinf771045620398pyo",
"sourceWalletId": "acuinf483920175566wlt",
"totalAmount": 1500000,
"totalFee": 36000,
"itemCount": 3,
"status": "processing",
"items": [
{
"id": "acuinf610248379915poi",
"amount": 500000,
"fee": 12000,
"status": "pending",
"counterparty": { "accountNumber": "0123456789", "accountName": "ADA LOVELACE", "bankCode": "044" },
"failureReason": null
},
{
"id": "acuinf338817240056poi",
"amount": 250000,
"fee": 12000,
"status": "pending",
"counterparty": { "accountNumber": "1098765432", "accountName": null, "bankCode": "058" },
"failureReason": null
},
{
"id": "acuinf905513620847poi",
"amount": 750000,
"fee": 12000,
"status": "pending",
"counterparty": { "accountNumber": "2233445566", "accountName": null, "bankCode": "033" },
"failureReason": null
}
],
"currency": "NGN",
"createdAt": "2026-06-24T10:40:09.224Z"
},
"meta": { "requestId": "req_4f9c2a7e1b0d8c3a5e6f10a2" }
}202 means accepted, not paid
The 202 only confirms the batch was funded and queued - no item has paid yet. Items resolve out
of band: poll get a payout or react to the payout.completed /
payout.partially_completed webhooks. A batch where some items bounce settles
partially_completed, and each failed item carries its own failureReason. The payouts
guide walks partial completion.
sourceWalletIdstringbodyrequiredThe wallet to fund the batch from (acuinf…wlt). Must hold enough for every item plus the
per-item fees - otherwise 422 (WALLET_INSUFFICIENT_FUNDS).
itemsPayoutItem[]bodyrequiredThe disbursements, between 1 and 500 per batch. Each item is
{ amount, accountNumber, bankCode, accountName? }.
items[].amountinteger (kobo)bodyrequiredAmount to send to this account, in kobo. Positive integer. Fees are added on top and debited from the source.
items[].accountNumberstringbodyrequiredDestination NUBAN - exactly 10 digits.
items[].bankCodestringbodyrequiredDestination bank code. See the banks reference.
items[].accountNamestringbodyoptionalAccount holder name. Optional - Acute resolves it when omitted.
idstringrequiredThe payout reference (acuinf…pyo). Store this - it's how you address the batch.
sourceWalletIdstringrequiredThe funding wallet reference.
totalAmountnumber (kobo)requiredThe sum of every item's amount (fees excluded).
totalFeenumber (kobo)requiredThe sum of every item's fee. totalAmount + totalFee is what's debited from the source wallet.
itemCountintegerrequiredHow many items are in the batch.
status'processing' | 'completed' | 'partially_completed' | 'failed'requiredStarts processing. Resolves to completed (all items paid), partially_completed (some paid,
some failed), or failed (none paid).
itemsPayoutItemData[]requiredThe per-item breakdown. Each item is { id, amount, fee, status, counterparty, failureReason }, where status is pending | processing | completed | failed
and counterparty is { accountNumber, accountName, bankCode }. failureReason
is populated when that item's status is failed.
currencystringrequiredThe currency (NGN).
createdAtstringrequiredISO-8601 creation timestamp.