2026-11-09

Summary: Banking endpoints and events can be scoped to a cash account, and cash accounts expose an account number

Money + Positions

New Query Parameter: cash_account

A customer account can hold more than one cash account. The following endpoints accept an optional cash_account query parameter taking a cash account identifier:

  • GET /accounts/{account_id}/financials - Get financials. When supplied, the response contains the financials of that cash account only; when omitted, the financials are aggregated across all cash accounts of the customer account. Returns a 404 when the account does not exist, or when cash_account is supplied and the cash account does not exist or does not belong to the customer account.
  • GET /accounts/{account_id}/sweeps - List balance sweeps. When supplied, only balance sweeps of that cash account are returned. The pagination cursor retains the filter.
  • GET /accounts/{account_id}/withdrawals - List withdrawals. When supplied, only withdrawals of that cash account are returned. The pagination cursor retains the filter.

Omitting the parameter preserves the previous behaviour.

New Field: cash_account

SweepResponse and WithdrawalResponse now include cash_account, the identifier of the cash account associated with the sweep or withdrawal. The field is returned regardless of whether the request was filtered. This affects the following endpoints:

New Request Field: cash_account

POST /accounts/{account_id}/withdrawals accepts an optional cash_account identifying the cash account to withdraw from:

  • If the customer account has exactly one cash account, cash_account can be omitted and that cash account is used.
  • If the customer account has more than one cash account, cash_account is required; omitting it is rejected with a 422.
  • A cash_account that does not exist or does not belong to the customer account is rejected with a 404.

Confirming a withdrawal is unchanged; the withdrawal keeps the cash account it was created for.

Events

New Event Context Field: cash_account

The following event contexts now include a cash_account, the cash account associated with the event:

  • DepositEventContext and DepositTransactionEventContext - deposit.created, deposit.rejected, deposit.received
  • WithdrawalEventContext and WithdrawalTransactionEventContext - withdrawal.created, withdrawal.confirmed, withdrawal.accepted, withdrawal.rejected, withdrawal.processed, withdrawal.canceled
  • SweepEventContext and SweepTransactionEventContext - sweep.created, sweep.started, sweep.canceled, sweep.processed, sweep.rejected

GET /events accepts a new context.cash_account query parameter to restrict responses to events with a matching cash_account in their context.

New Event: cash_account.created

The cash_account.created event is now emitted whenever a new cash account is created. Its context is the CashAccountEventContext, containing the account and the cash_account the event relates to.

Cash Accounts

New Field: account_number

GET /accounts/{account_id}/cash_accounts/{cash_account_id} now returns the new CashAccountResponse schema. It contains the fields of BankAccountResponse plus account_number, a user-visible identifier for the cash account that equals the last 10 digits of its IBAN. Use the casha_… identifier, not account_number, for filtering and for referencing the cash account in the API.

Customer Accounts

Changed Field: cash_account

CustomerAccountResponse.cash_account now uses the new CashAccountResponse schema, which contains the fields of BankAccountResponse plus account_number. The field is no longer always present: like securities_account, it is only set when the customer account has exactly one cash account, and it is not set when the customer account has several cash accounts or none. This affects the following endpoints: