Skip to main content
POST
https://api.bipa.tech
/
v1
/
onchain
/
transfers
curl -X POST https://api.bipa.tech/v1/onchain/transfers \
  -H "Authorization: Bearer bipa_live_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
    "customer_id": "cus_a1b2c3d4e5f6",
    "asset": "USDT",
    "network": "polygon",
    "amount": "100000000",
    "destination_address": "0xabcdef1234567890abcdef1234567890abcdef12",
    "idempotency_key": "txn_unique_456"
  }'
{
  "id": "txn_xyz789",
  "customer_id": "cus_a1b2c3d4e5f6",
  "direction": "outbound",
  "asset": "USDT",
  "network": "polygon",
  "amount_gross": "101000000",
  "amount_net": "100000000",
  "fee": "1000000",
  "decimals": 6,
  "status": "pending",
  "destination_address": "0xabcdef1234567890abcdef1234567890abcdef12",
  "tx_hash": null,
  "idempotency_key": "txn_unique_456",
  "created_at": "2024-01-15T10:30:00Z"
}

Request

Create an outbound transfer to send cryptocurrency from a customer’s balance to an external address.

Transfer fees

NetworkFee
Polygon1 USDT
Arbitrum1 USDT
Optimism1 USDT
Tron1 USDT
Ethereum3-25 USDT (dynamic based on gas prices)
The fee is deducted from the customer’s balance in addition to the transfer amount. The response includes amount_gross (total deducted), amount_net (amount received by destination), and fee.

Body parameters

customer_id
string
required
Customer initiating the transfer
asset
string
required
Asset to transfer: USDT or BTC
network
string
required
Blockchain network:
  • For USDT: polygon, arbitrum, optimism, tron, ethereum
  • For BTC: bitcoin
amount
string
required
Amount to send in the asset’s smallest unit (as string). This is the net amount the recipient will receive.
  • USDT: 6 decimals (e.g., "100000000" = 100 USDT)
  • BTC: 8 decimals (e.g., "1000000" = 0.01 BTC)
destination_address
string
required
External address to send funds to
idempotency_key
string
required
Unique key to prevent duplicate transfers
The customer must have sufficient balance. The amount_gross (amount + fee) will be deducted from their balance.

Response

id
string
Unique transfer identifier
customer_id
string
Customer who initiated the transfer
direction
string
Transfer direction: outbound
asset
string
Asset being transferred
network
string
Blockchain network
amount_gross
string
Total amount deducted from customer balance in smallest unit (amount_net + fee)
amount_net
string
Amount the recipient will receive in smallest unit
fee
string
Network fee charged in smallest unit
decimals
integer
Decimal places for the asset (6 for USDT, 8 for BTC)
status
string
Transfer status: pending, processing, confirmed, failed
destination_address
string
Recipient address
tx_hash
string
Transaction hash (available after broadcast)
idempotency_key
string
Your idempotency key
created_at
string
ISO 8601 timestamp
curl -X POST https://api.bipa.tech/v1/onchain/transfers \
  -H "Authorization: Bearer bipa_live_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
    "customer_id": "cus_a1b2c3d4e5f6",
    "asset": "USDT",
    "network": "polygon",
    "amount": "100000000",
    "destination_address": "0xabcdef1234567890abcdef1234567890abcdef12",
    "idempotency_key": "txn_unique_456"
  }'
{
  "id": "txn_xyz789",
  "customer_id": "cus_a1b2c3d4e5f6",
  "direction": "outbound",
  "asset": "USDT",
  "network": "polygon",
  "amount_gross": "101000000",
  "amount_net": "100000000",
  "fee": "1000000",
  "decimals": 6,
  "status": "pending",
  "destination_address": "0xabcdef1234567890abcdef1234567890abcdef12",
  "tx_hash": null,
  "idempotency_key": "txn_unique_456",
  "created_at": "2024-01-15T10:30:00Z"
}

Address validation

Bipa validates destination addresses before processing:
  • Ethereum-compatible: Checksum validation
  • Bitcoin: Bech32 (bc1…) and legacy (1…, 3…) formats
  • Tron: Base58 format starting with T
Always confirm the network and address with your user before submitting. Transactions to incorrect addresses cannot be reversed.