Skip to main content
This example shows you how to process payouts from crypto to fiat bank accounts or mobile money.

Use Cases

  • Vendor payments from marketplace
  • Salary disbursements in local currency
  • Cash out crypto to bank account
  • Mobile money withdrawals

Crypto to Fiat Payout

1

Create a Recipient

First, create a recipient for the bank account or mobile money wallet:
    curl -X POST https://api.sandbox.busha.so/v1/recipients \
      -H "Authorization: Bearer YOUR_SECRET_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{
        "type": "bank_transfer",
        "currency": "NGN",
        "details": {
          "account_number": "2109328188",
          "bank_code": "033",
          "account_name": "John Doe"
        }
      }'
Save the recipient_id from the response for the next step.
2

Create a Payout Quote

Create a quote specifying how much crypto to convert and send:
    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": "NGN",
        "source_amount": "100",
        "pay_out": {
          "type": "bank_transfer",
          "recipient_id": "677bbf9c7cf061f23784555a"
        }
      }'
Response:
{
  "status": "success",
  "message": "Created quote successfully",
  "data": {
    "id": "QUO_mprvCPMCfm3K2qSnzbWj7",
    "profile_id": "BUS_tg6yujbZ1nMu5BLQkPGGO",
    "source_currency": "USDT",
    "target_currency": "NGN",
    "source_amount": "100",
    "target_amount": "168876",
    "rate": {
      "product": "USDTNGN",
      "rate": "1690.76",
      "side": "sell",
      "type": "FIXED",
      "source_currency": "USDT",
      "target_currency": "NGN"
    },
    "fees": [
      {
        "amount": {
          "amount": "200",
          "currency": "NGN"
        },
        "name": "Fees",
        "type": "FIXED"
      }
    ],
    "pay_out": {
      "recipient_details": {
        "account_name": "SOSANYA DICKSON OLUMIDE",
        "account_number": "2109328188",
        "bank_name": "UNITED BANK FOR AFRICA",
        "country": "NG"
      },
      "recipient_id": "677bbf9c7cf061f2b784555a",
      "type": "bank_transfer"
    },
    "reference": "QUO_mprvCPMCfm3K2qSnzbWj7",
    "status": "pending",
    "expires_at": "2025-02-20T10:58:19.540052923Z",
    "created_at": "2025-02-20T10:28:19.540025003Z",
    "updated_at": "2025-02-20T10:28:19.540025003Z"
  }
}
3

Create the Payout Transfer

Finalize the payout using the quote ID:
    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_mprvCPMCfm3K2qSnzbWj7"
      }'
Response:
{
  "status": "success",
  "message": "Created transfer successfully",
  "data": {
    "id": "TRF_tYZ1y5bmXv4N5IhXSMbWJ",
    "profile_id": "BUS_tg6yujbZ1nMu5BLQkPGGO",
    "quote_id": "QUO_mprvCPMCfm3K2qSnzbWj7",
    "source_currency": "USDT",
    "target_currency": "NGN",
    "source_amount": "100",
    "target_amount": "168876",
    "rate": {
      "product": "USDTNGN",
      "rate": "1690.76",
      "side": "sell",
      "type": "FIXED",
      "source_currency": "USDT",
      "target_currency": "NGN"
    },
    "fees": [
      {
        "amount": {
          "amount": "200",
          "currency": "NGN"
        },
        "name": "Fees",
        "type": "FIXED"
      }
    ],
    "pay_out": {
      "recipient_details": {
        "account_name": "SOSANYA DICKSON OLUMIDE",
        "account_number": "2109328188",
        "bank_name": "UNITED BANK FOR AFRICA",
        "country": "NG"
      },
      "recipient_id": "677bbf9c7cf061f2b784555a",
      "type": "bank_transfer"
    },
    "status": "pending",
    "created_at": "2025-02-20T10:28:42.376910852Z",
    "updated_at": "2025-02-20T10:28:42.376910905Z"
  }
}
4

Monitor Payout Status

Check the transfer status to confirm delivery:
    curl -X GET https://api.sandbox.busha.so/v1/transfers/TRF_tYZ1y5bmXv4N5IhXSMbWJ \
      -H "Authorization: Bearer YOUR_SECRET_TOKEN"
Possible Statuses:
  • pending - Payout initiated
  • processing - Funds being processed
  • funds_delivered - Successfully delivered to recipient
  • cancelled - Payout cancelled

Payout for a Customer

To process payouts on behalf of a customer, include the customer’s profile ID:
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": "USDT",
    "target_currency": "NGN",
    "source_amount": "100",
    "pay_out": {
      "type": "bank_transfer",
      "recipient_id": "677bbf9c7cf061f23784555a"
    }
  }'
The payout will be processed from the customer’s balance.

Mobile Money Payout

For mobile money payouts (M-Pesa, MTN Mobile Money):
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": "KES",
    "source_amount": "50",
    "pay_out": {
      "type": "mobile_money",
      "recipient_id": "MOBILE_MONEY_RECIPIENT_ID"
    }
  }'

Important Notes

  • Recipients must be created before payouts
  • Quotes expire after 30 minutes
  • Fees are deducted from the payout amount
  • Use webhooks for real-time status updates
  • Bank transfers typically complete within minutes
  • Mobile money transfers are usually instant

Learn More