Skip to content

Direct Disbursement

What is a Direct Disbursement

Direct Disbursement (XenDisburse) is used to send money to one account destination from your balance in cash account. We keep our time standard to 15 minutes for the disbursement to be completed as long as the bank server is not down, if this happens, we queue the transaction and carry out the process as soon as banks’ server is back up. Find out more about Direct Disbursement in Xendit Docs and the Xendit API Reference.

Using Direct Disbursement

Direct disbursement is done using our RESTful APIs, which enable simple integration and avoid connecting with multiple banks that have painful fees. You will be given a unique authorization key (secret encrypted API key) that allows us to detect who has requested the disbursement. It is important to keep this key a secret so that only the designated customer of Xendit can gain access to our system.

If disbursement request is triggered, Xendit will directly disburse from the your positive balance. Our system will notify via API Callback to you when the disbursement has been completed.

Furthermore, you can always get status of a disbursement anytime via API or monitor the status on the dashboard, where you can download the payment proof with bank reference number for the customer’s end users. Here is the payment proof for disbursement will look like on your dashboard:

alt text

Common Errors Encountered in Direct Disbursements

Generally, direct disbursements tend to fail because of these circumstances:

alt text

We return error codes where disbursements fail for any reason. It is important that you understand each error code in detail in order to decide on the appropriate action to take. For a comprehensive list of the possible error codes that you may receive, as well as short commentaries on what they mean and what our corresponding suggested action is, please refer to Common Errors in Disbursements.

I see that there is a recommended retry time frame for disbursements that have failed but can be retried - must I follow them exactly?

Yes, we strongly recommend that you follow each recommended retry time frame precisely. Apart from failures caused by insufficient balance, you should only retry each disbursement request at least one hour after receiving the callback for the disbursement. Premature retries are very likely to result in multiple repeated failures and further delays.

I’d previously disbursed to this account with success, but am now being told that my disbursement to the exact same account has failed. What can I do about this?

This depends on the error code received in your callback.

First, refer to our guide explaining the different error codes that you may receive in Common Errors in Disbursements.

If you have received an error code with a green tick ✅ beside “Should I retry?” in the Retry Recommendation column, you may retry the same disbursement request within the recommended retry time frame. The disbursement request is likely to succeed on a subsequent try.

If you have received “UNKNOWN_BANK_NETWORK_ERROR” or “REJECTED_BY_BANK”, we are unfortunately unable to predict whether the disbursement will succeed should you retry the same disbursement request. These are generic or undefined errors returned by either the sending bank or the receiving bank. You may however choose to retry the same disbursement request at least one hour after receiving our callback at your own discretion.

If you have received “INVALID_DESTINATION”, any one of these two events may have happened:

1) the destination account specified in your request may have been blocked by the receiving bank for any number of reasons, or

2) the bank has erroneously informed us that the destination account does not exist.

You may choose to retry the same disbursement request at least one hour after receiving our callback at your own discretion, or you may contact the receiving bank directly for more information.

If you have received “TRANSFER_ERROR”, this means that we have encountered a fatal error while processing your disbursement. Often, this is a result of invalid API fields in your request. Please contact our customer support team for assistance when you encounter this error. The same disbursement request is unlikely to succeed on a subsequent try.

Direct Disbursement Process

You need to have a positive balance on your Cash Account on Xendit dashboard in order to disburse funds, refer to our top up section for more information. You need to POST request via API to disburse funds. The funds will first go to your Escrow Account. If it is succeeded, funds will be directly disbursed, if it failed, funds will go back to your Cash Account.

alt text

alt text

How do I make a Direct Disbursement?

You can process a direct disbursement via APIs. Please follow our direct disbursement guide to implement our disbursements API.

If you are testing in Development mode, please note that only a Direct Disbursment amount of 90,000 will result in a "COMPLETED" transaction.


  1. Is Xendit directly connected to the banks?

    Yes. We have direct connections to multiple banks that enable us to send disbursements to 140+ banks in Indonesia.

  2. Will I receive notification after I request a disbursement?

    Yes. Once a disbursement is fulfilled, we initiate a callback to notify you of disbursement status. Please make sure that you’ve set your callback url in your Dashboard > Settings > Configuration > Disbursement > Callback URLs field.

  3. What is a callback in direct disbursement?

    A callback in direct disbursement is a notification that we send to your server to notify you whether the disbursement has been successful or failed.

  4. How do I know whether a transaction is successful or has failed?

    In the callback that we sent, it will notify on the disbursement status. You will also have the access to a dashboard user interface where you can monitor all the details and status of transactions that you’ve made. Alternatively, you can also check transaction status by creating a “GET” request. Find how to do it here.

  5. How does your disbursement system work?

    Our disbursement product relies on top up system. That means you need to maintain a balance of funds within our system. We hold these funds securely on your behalf until you give us instructions to send them elsewhere. Once you trigger a new disbursement, Xendit will directly disburse from the funds we hold (as long as your balance is sufficient).

  6. Can I cancel a disbursement after it has been sent?

    Once your disbursement request has been responded by Xendit, this means that the fund is being sent therefore it can not be cancelled.

  7. Can I make disbursement 24/7? Or does your server have a down time?

    Our system relies on connections to multiple banks. Our system is up 24/7, but do expect transfer delays during bank's downtime (e.g. on daily settlement time at night or connection issue within the bank).

  8. Can I use “ATM Bersama” bank code for my disbursement?

    Not for now. However, we have our own bank codes.

  9. Why is the status of my disbursement pending?

    The pending status means that the disbursement is being processed and you should expect a callback from us afterwards to notify on disbursement status.

  10. I have accidentally included a dash "-" in the bank account number, will this affect my disbursement?

    No, a dash in the bank account number would not prevent disbursements, as our system automatically removes that dash.

  11. What should I do if the Name Validator succeeds but the disbursement fails? Why does this occur?

    Please check with your customer or the bank account owner to ensure that there are no issues with their account. A common reason for this is that the recipient's bank account is frozen. So the account exists and is validated, but can't actually receive funds.

    Alternatively, if the receipients bank is BCA and you have encountered the error code below, please try again with the leading "0" in front of the bank account number. For BCA, the Name Validator returns a success because the account number is treated in the same way with or without the "0" in front. However, for our disbursement system, the full bank account number (with the "0") is required to disburse successfully.

    "message":"BCA account numbers must be 10 digits long"}
  12. Can you disburse into Virtual Accounts?

    Yes, we support disbursements to virtual accounts of major banks (BRI, BNI, Mandiri, CIMB Niaga, Permata, BTN, and NOBU Bank). We're always improving this list of bank's virtual accounts. Let us know if there's a bank virtual account that you want to request!

  13. Can you disburse into e-wallets?

    Yes, we support disbursements to major e-wallets (GoPay, OVO, and Mandiri e-cash). You can transfer funds directly to the e-wallets of your customers. Simply use the following input in a disbursement request:

    "Bank Code" = kode bank dari e-wallet tujuan (Contoh: GOPAY / OVO / MANDIRI_ECASH)

    "Account Holder Name" = nama dari pelanggan, sesuai simpanan database e-wallet

    "Account Number" = nomor handphone pelanggan yang terdaftar di e-wallet (contohnya: 0812XXXXXXXXX)

    As we will execute the transfer to the e-wallet account tied to the specified phone number, please ensure that you have entered the correct phone number in the request. The disbursement will appear as a top up on your customer’s e-wallet. We're always improving the number of channels we can disburse to. Let us know if there's a destination that you want to request!