Compose Finance

Changelog

Track API and documentation updates, including new features, behavior changes, and fixes.

2026-03-17

  • Added GET /api/v2/rates endpoint for indicative exchange rate quotes. Returns a stateless quote for fiat↔crypto currency pairs (EUR ↔ USDC, EURC) including fees.
  • source_currency and target_currency query parameters on GET /api/v2/rates are case-insensitive
  • exchangeRate description on deposit, withdrawal, and rate quote responses now clarifies the formula: targetAmount = sourceAmount × exchangeRate (before fees)

2026-03-12

  • POST /customers/{customerId}/documents and POST /customers/{customerId}/kyc/submit now return 403 when manual KYC upload is unavailable for your organization.

2026-03-09

  • Added reference field 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 /balances endpoint to retrieve custodial and non-custodial (Safe wallet) balances for your organization, including availableBalance and lockedBalance
  • Added nullable address object (addressLine1, city, country) to GET /customers/{customerId} response. Returns verified address from KYC or stored metadata when available, null otherwise.
  • Added optional country field to POST /customers/{customerId}/withdrawal/banks request 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 currencyTicker to currency (lowercased) in GET /developer-fees response
  • sourceCurrency in POST /customers/{customerId}/withdrawal is now case-insensitive
  • accountType in POST /customers is now case-insensitive
  • recipientType in POST /customers/{customerId}/withdrawal/banks is now case-insensitive

2026-02-25

  • Added addressLine1, city, and country to GET /customers/{customerId}/withdrawal/banks responses

2026-02-24

  • Renamed ticker to currency across deposit wallet request/response payloads (/customers/{customerId}/deposit/wallets and /customers/{customerId}/deposit/wallets/{walletId})
  • Renamed deposit wallet filter query parameter ticker to currency on GET /customers/{customerId}/deposit/wallets
  • Renamed withdrawal bank wallet field ticker to currency in GET /customers/{customerId}/withdrawal/banks and POST /customers/{customerId}/withdrawal/banks responses

2026-02-23

  • Added wallets to GET /customers/{customerId}/withdrawal/banks and POST /customers/{customerId}/withdrawal/banks responses
  • POST /customers/{customerId}/withdrawal/banks now auto-creates a linked withdrawal wallet and returns it when successful

2026-02-20

  • Added GET /customers/{customerId}/kyc/address endpoint to retrieve a customer's verified address
  • Made addressLine1 and city optional for CUSTOMER recipient type — address is auto-resolved from KYC data when not provided
  • Changed recipientType enum values from MYSELF/INDIVIDUAL/BUSINESS to CUSTOMER/OTHER_INDIVIDUAL/OTHER_BUSINESS

2026-02-19

  • Added isThirdParty field to withdrawal bank responses
  • Third-party withdrawal banks now require approval (PENDING_APPROVAL status)

On this page