Prerequisites
Before you begin, ensure you have:- A Busha Business Account and Secret API Key (from the Quick Start Tutorial).
- An understanding of API Environments (Sandbox vs. Production) and their base URLs (from the Making Your First Request Guide).
- A conceptual understanding of Quotes (from the Understanding Quotes Explainer)
- Familiarity with creating basic quotes (from the Creating A Quote Guide).
For deposit requests involving a customer, the
X-BU-PROFILE-ID field should
be included in the request header, and its value should be set to the customer
ID for whom the request is performed on their behalf.Process Crypto Deposit
Get a Quote for the Crypto Deposit
Crypto deposits are initiated by creating a Quote where both the Expected Quoted Response:A successful response will return a standard Quote object. Note the
source_currency and target_currency are the same cryptocurrency (e.g., BTC to BTC, USDT to USDT).The critical distinction from fiat deposits is. the pay_in object, which specifies type: "address" and the corresponding network for the cryptocurrency (e.g., “BTC” for Bitcoin, “ERC20” for Ethereum-based tokens like USDT). This informs Busha to prepare for generating a unique wallet address in that specific network upon transfer finalization.To get a crypto deposit quote:- Open your terminal or command prompt.
- Construct a POST request to the /v1/quotes endpoint.
-
Specify the
source_currencyandtarget_currency(both being the crypto you expect to receive), the source_amount the user intends to deposit, and apay_inobject withtype: "address"andnetwork. -
Replace
{address}with the recipient address. -
Replace
YOUR_BASE_URLwith your chosen environment’s URL andYOUR_SECRET_KEYwith your actual key.
Create Quote
id of the returned Quote (QUO_nEnsWPZ8KErY598DCj9Pk in the example data provided) , as you will need this ID for the next step. The pay_in object in the quote response will mirror what you sent in the request.Finalize the Deposit Transfer (Generate Crypto Wallet Address)
After obtaining a valid Quote for a crypto deposit, you finalize the transfer. This crucial step is where Busha actually generates the unique crypto wallet address that your user will send funds to. The transfer object is initiated by using the Sample Response with Generated Crypto Wallet AddressA successful response will return a Transfer object. This unique crypto wallet address will be located within the
POST /v1/transfers endpoint.To finalize the deposit transfer:-
Use the
POSTrequest below to the/v1/transfersendpoint. -
Include the
quote_idobtained from Step 1. -
Replace
YOUR_BASE_URLandYOUR_SECRET_KEYwith your actual details.
data.pay_in.address object of this response.Instruct Your User and Monitor Deposit Status
Once you have the crypto wallet address and network details, your application should display these to the end-user, along with clear instructions to make the crypto transfer.After the user initiates the transfer, you’ll need to monitor its status to confirm when the funds have been successfully deposited into your Busha balance.To monitor deposit status:
It is critical to instruct users to send the exact amount to the correct
address on the specified network.
-
Webhooks (Recommended): Set up a webhook endpoint to receive real-time notifications from Busha when the transfer status changes (e.g., from
pendingtocompletedorfailed). This is the most efficient method for real-time updates. -
Polling (Less Recommended): Periodically GET the transfer status using the transfer id
TRF_ZALYpZBvgHLLImcWY9CxIin the example). While it is possible, this is less efficient and can lead to rate limiting if done too frequently.
Troubleshooting Common Fiat Deposit Issues
- Deposit received after quote expiry: Quotes are valid for 3 minutes from creation. After that, they expire and transfers can no longer be created from them. Create the transfer before the quote expires. The quoted rate is honoured for the remainder of the same 3-minute quote validity window; creating a transfer does not restart it. For transfers involving deposits, ensure the deposit is received within the same quote validity window. Deposits received outside that window are settled at the market rate.
-
User sends wrong amount: If the user sends an amount different from the
source_amountspecified in the quote, the deposit may fail or be delayed. Advise users to send the exact amount. - User sends to wrong address/network: Funds sent to an incorrect address or on the wrong network may be unrecoverable. Emphasize the importance of accuracy.
-
Deposit not reflecting: Check the transfer status via API/webhooks. If still pending after an extended period, contact Busha support with the
TRF_ID. -
Payment instruction validity: Follow any separate validity limits returned for the deposit address or temporary bank account in
pay_in. These limits do not define the lifetime of the quote or transfer, or extend the 3-minute quote validity window.
What’s Next?
Now that you know how to process fiat deposits, consider:- Processing Fiat Deposits.
- Processing Payouts
- Exploring all relevant API endpoints: Quotes API Reference, Transfers API Reference.