Changelog
Track API and documentation updates, including new features, behavior changes, and fixes.
2026-03-17
- Added
GET /api/v2/ratesendpoint for indicative exchange rate quotes. Returns a stateless quote for fiat↔crypto currency pairs (EUR ↔ USDC, EURC) including fees. source_currencyandtarget_currencyquery parameters onGET /api/v2/ratesare case-insensitiveexchangeRatedescription on deposit, withdrawal, and rate quote responses now clarifies the formula:targetAmount = sourceAmount × exchangeRate (before fees)
2026-03-12
POST /customers/{customerId}/documentsandPOST /customers/{customerId}/kyc/submitnow return403when manual KYC upload is unavailable for your organization.
2026-03-09
- Added
referencefield to deposit and withdrawal transaction responses. For deposits, this is the inbound bank reference included in the transfer. For withdrawals, this is the reference included in the outbound bank transfer (transaction id).
2026-03-04
- Added
GET /balancesendpoint to retrieve custodial and non-custodial (Safe wallet) balances for your organization, includingavailableBalanceandlockedBalance - Added nullable
addressobject (addressLine1,city,country) toGET /customers/{customerId}response. Returns verified address from KYC or stored metadata when available,nullotherwise. - Added optional
countryfield toPOST /customers/{customerId}/withdrawal/banksrequest body (ISO 3166-1 alpha-2 code). Auto-resolved from KYC/metadata for CUSTOMER recipients; required explicitly for OTHER_INDIVIDUAL and OTHER_BUSINESS. Returns 400 if address cannot be resolved. - Standardized error response descriptions and examples for 401, 403, and 500 across all endpoints
- Renamed
currencyTickertocurrency(lowercased) inGET /developer-feesresponse sourceCurrencyinPOST /customers/{customerId}/withdrawalis now case-insensitiveaccountTypeinPOST /customersis now case-insensitiverecipientTypeinPOST /customers/{customerId}/withdrawal/banksis now case-insensitive
2026-02-25
- Added
addressLine1,city, andcountrytoGET /customers/{customerId}/withdrawal/banksresponses
2026-02-24
- Renamed
tickertocurrencyacross deposit wallet request/response payloads (/customers/{customerId}/deposit/walletsand/customers/{customerId}/deposit/wallets/{walletId}) - Renamed deposit wallet filter query parameter
tickertocurrencyonGET /customers/{customerId}/deposit/wallets - Renamed withdrawal bank wallet field
tickertocurrencyinGET /customers/{customerId}/withdrawal/banksandPOST /customers/{customerId}/withdrawal/banksresponses
2026-02-23
- Added
walletstoGET /customers/{customerId}/withdrawal/banksandPOST /customers/{customerId}/withdrawal/banksresponses POST /customers/{customerId}/withdrawal/banksnow auto-creates a linked withdrawal wallet and returns it when successful
2026-02-20
- Added
GET /customers/{customerId}/kyc/addressendpoint to retrieve a customer's verified address - Made
addressLine1andcityoptional forCUSTOMERrecipient type — address is auto-resolved from KYC data when not provided - Changed
recipientTypeenum values fromMYSELF/INDIVIDUAL/BUSINESStoCUSTOMER/OTHER_INDIVIDUAL/OTHER_BUSINESS
2026-02-19
- Added
isThirdPartyfield to withdrawal bank responses - Third-party withdrawal banks now require approval (
PENDING_APPROVALstatus)
Webhooks
Previous Page
Get balances GET
Returns custodial (account) and non-custodial (Safe wallet) balances for your organization. **Custodial balances** are grouped by asset and summed across chains. These represent funds held on your behalf by Compose. **Non-custodial balances** are queried on-chain from your organization's Safe wallet. Each entry includes the chain and token contract address.