Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.busha.io/llms.txt

Use this file to discover all available pages before exploring further.

This example shows you how to accept deposits into your Busha account via fiat (temporary bank accounts) or crypto (deposit addresses).

Use Cases

  • Customer funding their wallet
  • Accepting payments from users
  • Processing incoming transfers
  • Topping up account balances

Fiat Deposit via Temporary Bank Account

1

Get a Quote for the Deposit

Create a quote to generate a temporary bank account:
    curl -X POST https://api.sandbox.busha.so/v1/quotes \
      -H "Authorization: Bearer YOUR_SECRET_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{
        "source_currency": "NGN",
        "target_currency": "NGN",
        "source_amount": "50000",
        "pay_in": {
          "type": "temporary_bank_account"
        }
      }'
Response:
{
  "status": "success",
  "message": "Created quote successfully",
  "data": {
    "id": "QUO_vxcF2svmjMbxDp4T5dcD8",
    "profile_id": "BUS_tg6yujbZ1nMu5BLQkPGGO",
    "source_currency": "NGN",
    "target_currency": "NGN",
    "source_amount": "50000",
    "target_amount": "49500",
    "rate": {
      "rate": "1",
      "side": "sell",
      "type": "FIXED",
      "source_currency": "NGN",
      "target_currency": "NGN"
    },
    "fees": [
      {
        "amount": {
          "amount": "500",
          "currency": "NGN"
        },
        "name": "payment gateway fee",
        "type": "FIXED"
      }
    ],
    "pay_in": {
      "type": "temporary_bank_account"
    },
    "status": "pending",
    "expires_at": "2025-02-21T10:46:56.232278869Z",
    "created_at": "2025-02-21T10:16:54.40130914Z",
    "updated_at": "2025-02-21T10:16:54.401309215Z"
  }
}
2

Finalize the Transfer to Get Bank Account Details

Use the quote ID to generate the temporary bank account:
    curl -X POST https://api.sandbox.busha.so/v1/transfers \
      -H "Authorization: Bearer YOUR_SECRET_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{
        "quote_id": "QUO_vxcF2svmjMbxDp4T5dcD8"
      }'
Response:
{
  "status": "success",
  "message": "Created transfer successfully",
  "data": {
    "id": "TRF_LJB2GQb55Cs98LbpqgRMx",
    "profile_id": "BUS_tg6yujbZ1nMu5BLQkPGGO",
    "quote_id": "QUO_vxcF2svmjMbxDp4T5dcD8",
    "source_currency": "NGN",
    "target_currency": "NGN",
    "source_amount": "50000",
    "target_amount": "49500",
    "rate": {
      "rate": "1",
      "side": "sell",
      "type": "FIXED",
      "source_currency": "NGN",
      "target_currency": "NGN"
    },
    "fees": [
      {
        "amount": {
          "amount": "500",
          "currency": "NGN"
        },
        "name": "payment gateway fee",
        "type": "FIXED"
      }
    ],
    "pay_in": {
      "expires_at": "2025-02-21T10:46:56.232278869Z",
      "recipient_details": {
        "account_name": "Payaza(Business 1 Business)",
        "account_number": "7000384620",
        "bank_name": "78 FINANCE COMPANY LIMITED",
        "email": "support@busha.co"
      },
      "type": "temporary_bank_account"
    },
    "status": "pending",
    "created_at": "2025-02-21T10:16:54.40130914Z",
    "updated_at": "2025-02-21T10:16:54.401309215Z"
  }
}
3

Display Bank Details to Customer

Show the temporary bank account details to your customer:Account Details:
  • Bank Name: 78 FINANCE COMPANY LIMITED
  • Account Number: 7000384620
  • Account Name: Payaza(Business 1 Business)
  • Amount to Send: 50,000 NGN
  • Expires: 2025-02-21 at 10:46 AM
Customer transfers money to this account from their bank app.
4

Monitor Deposit Status

Check the transfer status to confirm when funds are received:
    curl -X GET https://api.sandbox.busha.so/v1/transfers/TRF_LJB2GQb55Cs98LbpqgRMx \
      -H "Authorization: Bearer YOUR_SECRET_TOKEN"
Possible Statuses:
  • pending - Awaiting customer’s bank transfer
  • processing - Funds received, being processed
  • funds_received - Successfully credited to your balance
  • cancelled - Transfer cancelled

Crypto Deposit via Address

1

Get a Quote for Crypto Deposit

Create a quote to generate a crypto deposit address:
    curl -X POST https://api.sandbox.busha.so/v1/quotes \
      -H "Authorization: Bearer YOUR_SECRET_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{
        "source_currency": "USDT",
        "target_currency": "USDT",
        "source_amount": "100",
        "pay_in": {
          "type": "address",
          "network": "TRX"
        }
      }'
Response:
{
  "status": "success",
  "message": "Created quote successfully",
  "data": {
    "id": "QUO_GxYibGxTIN5c",
    "profile_id": "BUS_9rDAqqREdmMQcQj3zsRlL",
    "source_currency": "USDT",
    "target_currency": "USDT",
    "source_amount": "100",
    "target_amount": "100",
    "rate": {
      "product": "",
      "rate": "1",
      "side": "sell",
      "type": "FIXED",
      "source_currency": "USDT",
      "target_currency": "USDT"
    },
    "fees": [],
    "pay_in": {
      "network": "TRX",
      "type": "address"
    },
    "pay_out": {
      "type": "balance"
    },
    "reference": "QUO_GxYibGxTIN5c",
    "status": "pending",
    "created_at": "2025-10-30T14:35:16.487382045Z",
    "updated_at": "2025-10-30T14:35:16.487382045Z"
  }
}
2

Create Transfer to Get Deposit Address

Use the quote ID to generate the crypto deposit address:
    curl -X POST https://api.sandbox.busha.so/v1/transfers \
      -H "Authorization: Bearer YOUR_SECRET_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{
        "quote_id": "QUO_GxYibGxTIN5c"
      }'
Response:
{
  "status": "success",
  "message": "Created transfer successfully",
  "data": {
    "id": "TRF_abc123xyz",
    "profile_id": "BUS_9rDAqqREdmMQcQj3zsRlL",
    "quote_id": "QUO_GxYibGxTIN5c",
    "source_currency": "USDT",
    "target_currency": "USDT",
    "source_amount": "100",
    "target_amount": "100",
    "rate": {
      "product": "",
      "rate": "1",
      "side": "sell",
      "type": "FIXED",
      "source_currency": "USDT",
      "target_currency": "USDT"
    },
    "fees": [],
    "pay_in": {
      "type": "address",
      "address": "TXYZabc123def456ghi789jkl",
      "network": "TRX",
      "memo": null
    },
    "status": "pending",
    "created_at": "2025-10-30T14:35:20.123456Z",
    "updated_at": "2025-10-30T14:35:20.123456Z"
  }
}
3

Display Deposit Address to Customer

Show the crypto deposit details to your customer:Deposit Instructions:
  • Network: TRX (Tron)
  • Address: TXYZabc123def456ghi789jkl
  • Asset: USDT
  • Amount: 100 USDT (minimum)
Customer sends USDT to this address from their wallet.
4

Monitor Deposit Status

Check the transfer status to confirm when crypto is received:
    curl -X GET https://api.sandbox.busha.so/v1/transfers/TRF_abc123xyz \
      -H "Authorization: Bearer YOUR_SECRET_TOKEN"
Possible Statuses:
  • pending - Awaiting blockchain confirmation
  • processing - Transaction confirmed, processing deposit
  • funds_received - Crypto credited to balance
  • cancelled - Deposit cancelled

Deposit for a Customer

To process deposits on behalf of a customer, include the customer’s profile ID in the header:
curl -X POST https://api.sandbox.busha.so/v1/quotes \
  -H "X-BU-PROFILE-ID: CUSTOMER_PROFILE_ID" \
  -H "Authorization: Bearer YOUR_SECRET_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "source_currency": "NGN",
    "target_currency": "NGN",
    "source_amount": "50000",
    "pay_in": {
      "type": "temporary_bank_account"
    }
  }'
The deposit will be credited to the customer’s account instead of your business account.

Supported Networks for Crypto Deposits

  • USDT: TRX (Tron), ERC20 (Ethereum), BEP20 (BSC), POLYGON
  • BTC: BTC (Bitcoin)
  • ETH: ETH (Ethereum)
  • Other cryptos: Check supported networks via the Pairs API

Important Notes

Fiat Deposits

  • Temporary bank accounts expire after 30 minutes
  • Always check the expires_at field
  • If expired, create a new quote and transfer
  • Fees are deducted from the deposited amount

Crypto Deposits

  • Always specify the correct network
  • Deposits require blockchain confirmations
  • Minimum deposit amounts apply per asset
  • Wrong network = lost funds (unrecoverable)

Learn More