Before you start: you need a Brale account (sign up, KYB started/completed), an API client created in the Dashboard for the right environment (testnet or mainnet), andDocumentation Index
Fetch the complete documentation index at: https://docs.brale.xyz/llms.txt
Use this file to discover all available pages before exploring further.
curl or any HTTP client.
Authenticate
Create an API client in the Dashboard (keys shown once — store securely). Clients are environment-scoped; use testnet while integrating, mainnet when ready to move value.Tokens expire in ~60 minutes; refresh using Expected:
expires_in before expiry.access_token, token_type (Bearer), expires_in.Get your account_id
Use the bearer token from the previous step. The response contains your
account_id — a 27-character KSUID.Get your custodial address_id
Brale auto-creates internal wallets (EVM, Solana, Stellar) when your account is provisioned. List them:Pick the
address_id whose transfer_types array includes the chain you want to land on (e.g., base).Supported transfer_types (mainnet/testnet)
Supported transfer_types (mainnet/testnet)
Mainnet (onchain):
ethereum, base, solana, canton, stellar, polygon, avalanche, optimism, arbitrum, hedera, celo, kusama, spark, xrp_ledgerOffchain: wire, ach_debit, ach_credit, same_day_ach_credit, rtp_creditTestnet: base_sepolia, canton_testnet, amoy, sepolia, solana_devnet, xion_testnet, tempo_testnetCreate your first transfer
Example: offchain wire → onchain stablecoin on Base. Always send a unique
Idempotency-Key per logical transfer and reuse it on retries.Examples use SBC as the placeholder stablecoin. Replace it with your own stablecoin ticker (e.g., USDGLO, USDB). See Value Types for the full list.
Testnet? Use testnet transfer_types instead:base_sepolia,solana_devnet,sepolia, etc.
Track transfer status
Transfers may complete asynchronously. For real-time production updates, subscribe to
transfer.completed webhooks so Brale can send your application a signed event when the transfer reaches complete.You can also poll or retrieve transfers with the Transfers API for development, fallback handling, and reconciliation: poll GET /accounts/{account_id}/transfers with pagination. Store id, idempotency key, timestamps, status, and references for reconciliation. On 401, refresh the token and retry with the same Idempotency-Key.Common errors
403 network_not_supported: Using a testnet client/token on mainnet (or vice versa). Create a client for the target environment.404 compatible_address_not_found: Address doesn’t support thetransfer_type, typo inaddress_id, or wrongaccount_idin the path.400 missing Idempotency-Key: All POST creates must includeIdempotency-Key.
Next steps
- See Guides for on/off-ramps, swaps, payouts.
- For production hardening, review Troubleshooting and Coverage (transfer_types, value_types).