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 / chain (wire, ach_credit, polygon, solana)
address_idIn source / destinationstringWallet or fiat account sending or receiving value
Idempotency-KeyHeaderstringUUID that guarantees exactly-once execution

Optional Fields

FieldWhereTypeDescription
brandBodyobjectACH only. { "account_id": "<ACCOUNT_ID>" } to control which Account name appears on ACH bank statement line items (ACH debit + ACH credit). Not supported for wire or rtp.

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
}
}

USD to Stablecoin (ACH Debit)

Onramp to your stablecoin by debiting a Plaid connected address.

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": {
"address_id": "34yGFQf7tP1HJCPAWNGaN4rh4nX",
"value_type": "USD",
"transfer_type": "wire"
},
"brand": { "account_id": "34lCJZ2bxbPAzB3ou67Md01veUo" }
}

Optional branding object You can specify which Account’s name appears on the receiver’s bank statement line items for ACH only. It is not supported for wire or RTP.

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": {
"address_id": "34yGFQf7tP1HJCPAWNGaN4rh4nX",
"value_type": "USD",
"transfer_type": "wire"
}
}

Stablecoin to USD (ACH)

Offramp your stablecoin to USD via ACH Credit.

POST
https://api.brale.xyz/accounts/account_id/transfers
Request
{
"amount": {
"value": "1",
"currency": "USD"
},
"source": {
"address_id": "2VcUIonJeVQzFoBuC7LdFT0dRe4",
"value_type": "SBC",
"transfer_type": "canton"
},
"destination": {
"address_id": "34yGFQf7tP1HJCPAWNGaN4rh4nX",
"value_type": "USD",
"transfer_type": "same_day_ach_credit"
}
}

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.