Skip to main content

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

FieldWhereTypeDescription
account_idPathstringAccount whose funds are being moved
amountBodyobject{ "value": "10", "currency": "USD" }
sourceBodyobjectOrigin of funds (fiat rail or on-chain address)
value_typeIn source / destinationstringCurrency/token (e.g., USD, USDC, SBC)
transfer_typeIn source / destinationstringPayment rail or chain (e.g., wire, ach, polygon, solana)
address_idIn source / destinationstringWallet that is sending and/or receiving stablecoins
financial_institution_idIn source / destinationstringBank account that sends/receives fiat
Idempotency-KeyHeaderstringUUID that guarantees exactly-once execution

Transfer Scenarios: understanding value_type and transfer_type

FlowSourceDestinationDescription
Onramp
(Fiat → Stablecoin)
USD / wireSBC / baseMint SBC on base funded by wire deposit
Offramp
(Stablecoin → Fiat)
SBC / solanaUSD / ACHRedeem SBC on Solana to USD via ACH
Swap
(Stablecoin ↔ Stablecoin)
USDC / solanaSBC / solana1:1 swap from USDC to SBC with no slippage
On-chain PayoutUSDC / polygonUSDC / polygon (external address)Pay a recipient wallet

Every request is scoped to an account, so the path always starts with:

POST
https://api.brale.xyz/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"
}
}'

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
Request
{
"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"
}
}

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
Request
{
"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
Request
{
"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
Response
{
"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
}
}

Retrieving Transfers & Pagination

List Call

GET
https://api.brale.xyz/accounts/account_id/transfers/transfer_id?page[size]=50

Returns the 50 most recent transfers.

Paging Forward

GET
https://api.brale.xyz/accounts/account_id/transfers/transfer_id?page[next]=g3QAAAABdw...

Use the pagination.next token from the previous response.

Paging Backward

GET
https://api.brale.xyz/accounts/account_id/transfers/transfer_id?page[prev]=g3QAAAABdw...

Only one of page[next] or page[prev] may be present.

Transfer Statuses

ValueDescription
pendingThe 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.
processingThe transfer is in progress.
completeThe transfer is finalized and funds have arrived at the destination.
canceledThe transfer has been canceled.
failedAn issue prevented Brale from completing the transfer. Manual intervention may be required.

Transfer Flow

A transfer will progress from pendingprocessingcomplete. 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.