Chapa

Deduct from Virtual Account

Withdraw funds from an existing virtual account

Withdraw funds from an existing virtual account. This operation requires the virtual account to have sufficient balance.

Endpoint: https://api.chapa.co/v1/virtual-account/deduct
Method: POST
Authorization: Pass your secret key as a bearer token in the request header
Content-Type: application/json

Request Parameters

ParameterRequiredTypeDescription
account_numberYesstringThe unique identifier of the virtual account from which funds will be deducted
amountYesnumberAmount to be deducted from the virtual account balance
tx_refNostringYour reference for this transaction
noteNostringReference or description for the deduction transaction

Example Request Body

{
  "account_number": "1234567890",
  "amount": 1000,
  "tx_ref": "REF_1234",
  "note": "Deduction for February 2025"
}
Example Request
cURL
PHP
Python

Successful Response

{
  "status": "success",
  "message": "Amount deducted Successfully",
  "data": {
    "account": {
      "account_name": "Abebe Bikila",
      "account_number": 100314252,
      "account_alias": "1234542",
      "balance": 20,
      "status": "active",
      "currency": "ETB",
      "created_at": "2025-02-21T08:06:54.000000Z",
      "updated_at": "2025-02-21T08:13:25.000000Z"
    },
    "withdrawal": {
      "tx_ref": "VWDYi1qyA6",
      "note": "Connecting Ethiopia to the Global Market",
      "amount": 20,
      "currency": "ETB",
      "created_at": "2025-02-21T08:13:25.000000Z"
    }
  }
}

Response Parameters

ParameterTypeDescription
statusstringStatus of the request (success/error)
messagestringDescription of the operation result
data.account.account_namestringName associated with the virtual account
data.account.account_numbernumberUnique identifier of the virtual account
data.account.account_aliasstringCustom reference name for the account
data.account.balancenumberCurrent balance after deduction
data.account.statusstringCurrent status of the account
data.account.currencystringCurrency of the account
data.account.created_atstringTimestamp of account creation
data.account.updated_atstringTimestamp of last account update
data.withdrawal.tx_refstringYour reference for this debit transaction
data.withdrawal.notestringDescription provided for the debit
data.withdrawal.amountnumberAmount deducted in this transaction
data.withdrawal.currencystringCurrency of the withdrawal
data.withdrawal.created_atstringTimestamp of the withdrawal transaction

Failed Response

{
  "status": "failed",
  "message": "Withdrawal Failed",
  "errors": {
    "insufficient_balance": "Virtual account doesn't have sufficient balance."
  }
}

The virtual account must have sufficient balance to process the deduction successfully.

Refer to our Error Codes page for all responses for this request.

Use Cases

  • Withdrawals: Process customer withdrawal requests
  • Refunds: Deduct funds for refund processing
  • Fees: Deduct service fees or charges
  • Balance Management: Transfer funds from virtual accounts to business account

Next Steps

On this page