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.
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).