ChapaChapa Docs

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"
}
cURL
PHP
Python

Successful Response

{
  "status": "success",
  "message": "Amount deducted Successfully",
  "data": {
    "account": {
      "account_name": "SEMER NUR",
      "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