Transfers
Transfers enable the movement of funds between fiat and stablecoins, stablecoin-to-stablecoin conversions, and stablecoin-to-fiat transactions.
Each transfer requires both a source and a destination, which can be:
- Fiat sources (e.g., a bank account for ACH or wire)
- On-chain wallet addresses
Each source and destination includes:
value_type
- The currency being transferred (USD, USDC, USDT, MXN, etc.)transfer_type
- The payment rail used (Wire, ACH, Polygon, Solana, SPEI, etc.)
Required Fields
Field | Where | Type | Description |
---|---|---|---|
account_id | Path | string | Account whose funds are being moved |
amount | Body | object | { "value": "10", "currency": "USD" } |
source | Body | object | Origin of funds (fiat rail or on‑chain address) |
value_type | In source / destination | string | Currency/token (e.g., USD, USDC, SBC) |
transfer_type | In source / destination | string | Payment rail or chain (e.g., wire, ach, polygon, solana) |
address_id | In source / destination | string | Wallet that is sending and/or receiving stablecoins |
financial_institution_id | In source / destination | string | Bank account that sends/receives fiat |
Idempotency-Key | Header | string | UUID that guarantees exactly‑once execution |
Transfer Scenarios: understanding value_type and transfer_type
Flow | Source | Destination | Description |
---|---|---|---|
Onramp (Fiat -> Stablecoin) | USD / wire | SBC / base | Mint SBC on base funded by wire deposit. |
Offramp (Stablecoin -> Fiat) | SBC / solana | usd / ach | Redeem SBC on Solana to USD via ACH. |
Swap (Stablecoin <-> Stablecoin) | USDC / solana | SBC / solana | 1:1 swap from USDC to SBC with no slippage. |
On-chain Payout | USDC / polygon | USDC / polygon (external address) | Pay a recipient wallet. |
Every request is scoped to an account, so the path always starts with:
POST /accounts/{account_id}/transfers // The ID of your or your customer's account
USD to Stablecoin (Wire Transfer)
Accept a USD deposit to mint stablecoins.
POST https://api.brale.xyz/accounts/account_id/transfers
curl --request POST \
--url "https://api.brale.xyz/accounts/${ACCOUNT_ID}/transfers" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer ${AUTH_TOKEN}" \
--header "Idempotency-Key: $(uuidgen)" \ # generate a fresh key for each transfer
--data '{
"amount": { "value": "10", "currency": "USD" },
"source": { "value_type": "usd", "transfer_type": "wire" },
"destination": {
"address_id": "'"${ADDRESS_ID}"'",
"value_type": "sbc",
"transfer_type": "base"
}
}'
The transfer will be opened in a pending state until funds are received. When initiating a fiat to stablecoin transfer via wire, we will return a set of wire_instructions
so you can provide them to your customer.
Response
{
"id": "2xNL6PAF0cbcQHyjMQJ2RKRfbD9",
"status": "pending",
"source": {
"value_type": "USD",
"transfer_type": "wire"
},
"destination": {
"address_id": "2VcUIonJeVQzFoBuC7LdFT0dRe4",
"value_type": "SBC",
"transfer_type": "base"
},
"updated_at": "2025-05-20T20:36:48.147281Z",
"created_at": "2025-05-20T20:36:48.147281Z",
"amount": {
"value": "10",
"currency": "USD"
},
"note": null,
"wire_instructions": {
// Brale Bank instructions
}
}
Stablecoin to USD (Wire Offramp or Payout)
Offramp your stablecoin to USD via wire transfer.
POST https://api.brale.xyz/accounts/account_id/transfers
{
"amount": {
"value": "1",
"currency": "USD"
},
"source": {
"address_id": "2VcUIonJeVQzFoBuC7LdFT0dRe4",
"value_type": "SBC",
"transfer_type": "Polygon"
},
"destination": {
"financial_institution_id": "bank_12345",
"value_type": "USD",
"transfer_type": "wire",
"memo": "BRL*Transaction",
}
}
Stablecoin Swaps
Swap USDC to your own stablecoin (YSBC). All stablecoin swaps are 1:1 with no slippage.
POST https://api.brale.xyz/accounts/account_id/transfers
{
"amount": {
"value": "100",
"currency": "USD"
},
"source": {
"address_id": "2VcUIonJeVQzFoBuC7LdFT0dRe4",
"value_type": "USDC",
"transfer_type": "Solana"
},
"destination": {
"address_id": "2VcUIonJeVQzFoBuC7LdFT0dRe4",
"value_type": "YSBC",
"transfer_type": "Solana"
}
}
Stablecoin Payout
Process stablecoin payouts to one or many external addresses (EOAs).
POST https://api.brale.xyz/accounts/account_id/transfers
{
"amount": {
"value": "500",
"currency": "USD"
},
"source": {
"address_id": "2VcUIonJeVQzFoBuC7LdFT0dRe4",
"value_type": "SBC",
"transfer_type": "Solana"
},
"destination": {
"address_id": "2xNL6PAF0cbcQHyjMQJ2RKRfbD9",
"value_type": "SBC",
"transfer_type": "Solana"
}
}
Retrieving Transfers
GET https://api.brale.xyz/accounts/account_id/transfers/transfer_id
{
"id": "transfer_123",
"status": "pending",
"amount": {
"value": "1",
"currency": "USD"
},
"created_at": "2025-02-05T19:39:14.316Z",
"updated_at": "2025-02-05T19:39:14.316Z",
"source": {
"transfer_type": "wire",
"value_type": "usd"
},
"destination": {
"transfer_type": "polygon",
"value_type": "ysbc",
"address_id": "d7bd28e4-93e6-4313-880c-ab9178eacd3b"
},
"wire_instructions": {
// ...Brale bank details
}
Transfer Statuses
Transfers can progress through the following statuses:
- Pending - The transfer has been submitted but is not yet in progress. This may be due to Brale waiting for funds (e.g., fiat-to-stablecoin wire transfer) or an ongoing review.
- Processing - The transfer is in progress
- Complete - The transfer is finalized and funds have arrived at the destination.
- Canceled - The transfer has been canceled
- Failed - An issue prevented Brale from completing the transfer. Manual intervention may be required.
Transfer Flow - A transfer will progress from pending → processing → complete. Transfers include an updated_at
field denoting the last time the status updated.
Transfer Limits
- Inbound ACH transactions are limited to $50,000 per transaction
- There are no limits for wire or stablecoin transactions
Updated 11 days ago