Webhook is the recommended way to listen for updates for a transfer request as
the polling alternative will not be reliable due to poor connection on the
client side, which you do not have control over.
Prerequisites
Before you start, make sure you have:- A Busha Business Account (from the Quick Start Guide).
Step 1: Create A Webhook URL
Before you can receive webhook events from Busha, you need a dedicated URL where these events will be sent. This URL acts as the listener for all notifications your application needs to process. You have two primary options for setting up this endpoint: For Production Environments (Your Application) For a live, robust integration, you will need to create a specific endpoint within your own application’s backend. This endpoint should be:-
Publicly Accessible: It must be a live URL that Busha’s servers can reach over the internet (e.g.,
https://your-domain.com/busha-webhook). Localhost URLs will not work. - Configured to Receive POST Requests: Your endpoint should be designed to listen for and process incoming HTTP POST requests, as this is how Busha will deliver webhook payloads.
- Designed for Processing: This endpoint should contain the logic to verify the webhook signature (for security) and then process the event data according to your application’s needs.
- Using Webhook.site: Navigate to webhook.site. The site will instantly provide you with a unique, temporary URL.
- Functionality: Any POST requests sent to this URL will be immediately displayed on the page, allowing you to inspect the payload, headers, and other details.
- Important Note: URLs generated by services like Webhook.site are for testing and development purposes only and should never be used in a production environment due to their temporary nature and lack of security controls.
Step 2: Create A New Webhook
After you have created your webhook URL, you need to visit the developer tools section on your dashboard to register the URL. Profile > Developer Tools > Webhooks


Ensure to copy your Webhook Secret Key and truly keep it secret. This secret
is important and will be used to validate that every request made to your
webhook URL is genuinely from Busha.
Step 3: Listen for Events
Verifying Webhook Signature To calculate and verify thex-bu-signature, perform a HMAC hash of the request body using the Webhook secret as the key.
For example:
| Event Types | Description |
|---|---|
transfer.pending | A new Transfer has been initiated and is pending |
transfer.processing | A transfer is processing. |
transfer.cancelled | A transfer has been cancelled by the user. |
transfer.funds_received | A deposit transfer has been received successfully. |
transfer.funds_converted | An internal conversion transfer has been completed |
transfer.outgoing_payment_sent | A payout transfer to a recipient or external wallet address has been sent to the beneficiary and awaiting confirmation of receipt. |
transfer.funds_delivered | A payout transfer has been confirmed as received by the beneficiary successfully. |
Transfer Status Development
The following section aims to show how a transfer can develop from one status to another. This will show you understand how to properly handle and anticipate webhook events. **Transfer.Pending: This is the initial status for all transfers. All transfers start as pending, and a pending transfer can morph into only two next statuses:- transfer.cancelled
- transfer.processing

- transfer.outgoing_payment_sent
- transfer.funds_received
- transfer.funds_converted

outgoing_payment_sent status represents any transfer that involves sending money out of the Busha platform to an external bank account or an external wallet address. It is not a final status; the outgoing_payment_sent status can morph into a final funds_delivered status

funds_received status communicates that a Deposit into a Busha Balance has been successful. This could be a final status for all deposit transfers; however, in a scenario where the source currency is not the same as the target currency, then this transfer will further change into a funds_converted status.
Funds.Converted:
The funds_converted status communicates that a conversion transfer has been done successfully. This is also the same status that communicated the successful Buy/Sell Trade.
Transfer Status Change Map
