Skip to main content

Addresses

Addresses are represented by an address_id, which uniquely identifies a wallet or account for a specific transfer_type.

An address_id can represent either an onchain or offchain destination (e.g. blockchain wallet, bank account, RTP endpoint), depending on the transfer_type.

The address_id is commonly used in the Brale API as the source or destination of a transfer.

Brale distinguishes between internal and external addresses using the type field:

  • type: internal - An address_id associated with wallets managed by Brale on behalf of you or your customers.
  • type: external - An address_id managed outside of Brale's infrastructure (e.g., user-owned wallet or external account).

Whether internal or external, all addresses possess:

  • name: A user-friendly label to identify the address.
  • transfer_types: The supported transfer_types of the address.

Custodial (Internal) Addresses

Brale provides custodial wallets that allow businesses to securely hold and transfer stablecoins on behalf of themselves or their customers. Custodial addresses support all supported blockchains.

When your customer's Account is onboarded, Brale automatically generates internal custodial addresses on all supported blockchains. You do not need to create them manually.

Non-Custodial (External) Addresses

Linking external addresses enable users to deposit stablecoins into or withdraw stablecoins from their custodial addresses as well as mint stablecoins into or redeem stablecoins from their custodial addresses.

POST
/accounts/{account_id}/addresses/external

Non-Custodial (External) Address for Blockchain Supported Chains

The blockchains the address supports. See Supported Chains for the full list. Each address is associated with only one blockchain environment (e.g., Solana, EVM).

Request
{
"name": "Non-Custodial (External) Wallet",
"transfer_types": ["Ethereum"],
"wallet_address": "0x123456789"
}
Response
{
"id": "2VcUIIsgARwVbEGlIYbhg6fGG57"
}

Non-Custodial (External) Address for ACH Credits

These support the following transfer_types and enable USD to be sent to a destination in a transfer.

  • ach-credit
  • ach-credit-same-day
Request
{
"name": "2nd/3rd Party Bank",
"transfer_types": ["ach-credit"],
"account_number": "123456789",
"routing_number": "987654321",
"account_type": "checking, savings",
"first_name": "Steve",
"last_name": "Brown",
"business_name": "Name of Business", // Optional
"email": "b@brale.xyz"
}
Response
{
"id": "2VcUIIsgARwVbEGlIYbhg6fGG57"
}

Non-Custodial (External) Address for ACH Debits

These support the following transfer_types and enable USD to be pulled from a source in a transfer.

  • ach-debit
  • ach-debit-same-day
Request
{
"name": "2nd/3rd Party Bank",
"transfer_types": ["ach-debit"],
"plaid_token": "98s83sjsd39sds"
}
Response
{
"id": "2VcUIIsgARwVbEGlIYbhg6fGG57"
}
note

These addresses require a Plaid token to verify ownership.

Fetching Addresses

Retrieve all addresses associated with the authenticated Account.

This endpoint returns all addresses (whether internal or external) linked to the Account.

GET
/accounts/{account_id}/addresses
Response
{
"addresses": [
{
"id": "a1b2c3d4-5678-90ab-cdef-1234567890ab",
"status": "active",
"name": "Internal Custodial Wallet",
"type": "Internal",
"address": "73uyt9HkEqx9bThYXWaUBP67sWsiJEsyJ5rSCieDx5me",
"created": "2023-03-07T17:31:37.997502Z",
"transfer_types": ["solana", "solana_devnet"]
},
{
"id": "a1b2c3d4-5678-90ab-cdef-1234567890bc",
"status": "active",
"name": "External Non-Custodial Wallet",
"type": "External",
"address": "73uyt9HkEqx9bThYXWaUBP67sWsiJEsyJ5rSCieDx5me",
"created": "2023-03-07T17:31:37.997502Z",
"transfer_types": ["solana", "solana_devnet"]
},
{
"id": "b2c3d4e5-6789-01ab-cdef-2345678901ab",
"status": "active",
"name": "2nd/3rd Party ACH Credit",
"type": "External",
"routing_number": "987654321",
"created": "2023-03-07T17:31:37.997502Z",
"transfer_types": ["ach-credit", "ach-credit-same-day"]
},
{
"id": "b2c3d4e5-6789-01ab-cdef-2345678901bc",
"status": "active",
"name": "2nd/3rd Party ACH Debit",
"type": "External",
"routing_number": "987654321",
"created": "2023-03-07T17:31:37.997502Z",
"transfer_types": ["ach-debit", "ach-debit-same-day"]
}
]
}

Fetching an Internal Balance

You can query the stablecoin balance of an internal address.

GET
/accounts/{account_id}/addresses/address_id/balance?transfer_type=chain&value_type=token
Response
{
"address": {
"id": "2VcUIonJeVQzFoBuC7LdFT0dRe4",
"address": "0xcdEA458750b9A8D6C4Ba8B3D68CE98Ba2330352A"
},
"balance": {
"value": "45314.07",
"currency": "USD"
},
"value_type": "SBC",
"transfer_type": "base"
}

Filtering Addresses

You can narrow results on GET /accounts/{account_id}/addresses with optional query parameters.

Query Parameters

ParamTypeDescription
addressstringExact on-chain address (e.g., EVM, Solana).
typeenumFilter by address type: internal | external.
transfer_typeenum (repeatable)Filter by one or more transfer types (e.g., ethereum, base, solana, stellar).

Examples

External addresses usable on Solana OR Base

GET
/accounts/{account_id}/addresses?type=external&transfer_type=solana&transfer_type=base

Exact EVM address (case-insensitive)

GET
/accounts/{account_id}/addresses?address=0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE

Internal EVM addresses that support Ethereum

GET
/accounts/{account_id}/addresses?type=internal&transfer_type=ethereum