Create a withdrawal
Send money from a wallet out to an external bank account. Asynchronous, resolved by webhook.
/v1/wallets/:id/withdrawWithdraws from this wallet to an external bank account. Asynchronous: it
returns 201 with status: "processing", then a withdrawal.completed or
withdrawal.failed webhook resolves it. Requires the wallet scope and an
Idempotency-Key.
POST /wallets/:id/withdrawscope: walletTest 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/wallets/acuinf483920175566wlt/withdraw \
-H "Authorization: Bearer acuinf_test_…" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: …" \
-d '{"amount":1000000,"accountNumber":"0123456789","bankCode":"044","accountName":"ADA LOVELACE"}'const res = await fetch("https://sandbox.api.acute.network/v1/wallets/acuinf483920175566wlt/withdraw", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.ACUTE_TEST_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID(),
},
body: JSON.stringify({"amount":1000000,"accountNumber":"0123456789","bankCode":"044","accountName":"ADA LOVELACE"}),
});
const { data, meta } = await res.json();# withdraw ₦10,000 to a bank account
curl -X POST https://sandbox.api.acute.network/v1/wallets/acuinf483920175566wlt/withdraw \
-H "Authorization: Bearer acuinf_test_…" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 9f2c8a1e-7b34-4d5a-9e1f-22c0d8b6a4e5" \
-d '{
"amount": 1000000,
"accountNumber": "0123456789",
"bankCode": "044",
"accountName": "ADA LOVELACE"
}'{
"success": true,
"statusCode": 201,
"data": {
"id": "acuinf615098372240wth",
"sourceWalletId": "acuinf483920175566wlt",
"amount": 1000000,
"fee": 12000,
"totalAmount": 1012000,
"status": "processing",
"counterparty": {
"accountNumber": "0123456789",
"accountName": "ADA LOVELACE",
"bankCode": "044",
"bankName": "Access Bank"
},
"failureReason": null,
"currency": "NGN",
"createdAt": "2026-06-24T09:25:40.500Z",
"completedAt": null
},
"meta": { "requestId": "req_4f9c2a7e1b0d8c3a5e6f10a2" }
}Withdrawals resolve out of band
The 201 only means accepted. Treat the money as final when the withdrawal.completed webhook
lands, and handle withdrawal.failed / returned, which credit the wallet back. The withdrawals
guide covers the non-lossy resolver.
idstringpathrequiredThe source wallet reference.
amountinteger (kobo)bodyrequiredAmount to withdraw, in kobo. Positive integer. Fees are added on top.
accountNumberstringbodyrequiredDestination NUBAN, exactly 10 digits.
bankCodestringbodyrequiredDestination bank code. See the banks reference.
accountNamestringbodyoptionalAccount holder name. If omitted, the name is resolved for you; a mismatch fails name verification
(WITHDRAWAL_NAME_VERIFICATION_FAILED).
narrationstringbodyoptionalOptional transfer narration.
WithdrawalResponseData.
idstringrequiredThe withdrawal reference (acuinf…wth).
sourceWalletIdstringrequiredThe source wallet reference.
amountnumber (kobo)requiredThe withdrawal amount.
feenumber (kobo)requiredThe total fee charged for the withdrawal, in kobo. See fees.
totalAmountnumber (kobo)requiredamount + fee debited from the wallet.
status'processing' | 'completed' | 'failed' | 'returned'requiredStarts processing; resolves via webhook. returned means the bank rail bounced the funds back.
counterpartyWithdrawalCounterpartyrequired{ accountNumber, accountName, bankCode, bankName }, the destination.
failureReasonstring | nullrequiredPopulated when status is failed or returned.
currencystringrequiredThe currency (NGN).
createdAtstringrequiredISO-8601 timestamp.
completedAtstring | nullrequiredSet when the withdrawal resolves; null while processing.