Added

July 21st 2026

Added

[Wallet transfers]
You can now move funds directly between wallets with a single call.

  • Added POST /wallet/transfer
    Transfer from any wallet you own (client wallet or one of your users' wallets) to any user wallet or linked client wallet (e.g. a subaccount). The response includes the resulting amounts on both sides, exchange rate, fee, and status, and supports your own client_transfer_id, notes, and metadata.

Added

[Wallet ledger]
You can now retrieve a full, reconcilable history of balance movements for any wallet.

Added

[Pay-in tracking and reversal]
You can now follow a pay-in through its full lifecycle after initiating it.

Added

[Value-added verification services]
You can now request verification checks per transaction.

  • Pay-ins accept a value_added_services object supporting cvv, avs, ani, account_updater, and three_ds (pass cavv, eci, and ds_transaction_id for 3-D Secure liability shift)
  • Payouts accept a value_added_services object supporting account_validation
    Each check runs in one of three modes: SKIP, RUN (run and report, never decline), or RUN_AND_VALIDATE (decline the transaction if the check fails). Omitted checks default to SKIP for pay-ins and to your account's configuration for payouts. Check results are returned in network_response.

Added

[Didit KYC]
Added support for the Didit identity verification provider.

Improved

[Initiate pay-in response]
The POST /payin/{'{user_token}'} response now gives you more to work with for asynchronous and multi-deposit flows.

  • Your client_transfer_id is now echoed back in the response
  • New deposits array — a pay-in can be funded by multiple deposits, each with its own status (PENDING, PROCESSING, COMPLETED, FAILED, EXPIRED), amounts, and transaction_reference
  • network_response now also returns bank-transfer details when applicable (account_number, routing_number, swift_bic, bank_name, bank_address, name_on_account) and verification results (cavv_result_code, ani_result, exemption_reason_code)
  • Pay-ins can now report a CANCELLED status
  • Breaking: the required_action value CRYPTO_TRANSFER is renamed to TRANSFER, since it now covers bank transfers as well — update any matching on this value
    Added a response example for pending bank-transfer (ACH/Wire) pay-ins, where the user must send funds to a generated bank account.

Improved

[Transaction history]
Transaction history now covers pay-ins and cancellations.

Improved

[Top-up returns]
GET /payout/account/topup/{'{topup_token}'} now returns a status_reason when a top-up is returned, containing the return reason code (e.g. R07 for ACH).

Improved

[Veriff media retrieval]
GET /payout/user/{'{user_token}'}/kyc/veriff/{'{session_id}'}/{'{media_id}'} now handles large media files.

  • The response always includes a url — a short-lived (2 minute) presigned link to download the file directly
  • Base64 content is now only inlined for files small enough to fit within the API response size limit; use url for larger files
    Note the response is now a single object rather than an array.

Improved

[Documentation cleanup]

Deprecated

[Legacy wallet routes]
The /payout/wallet balance and notification routes are deprecated in favor of new /wallet routes. The behavior is unchanged — only the path moves.

  • Use GET /wallet/{'{user_token}'} instead of GET /payout/wallet/{'USER_TOKEN'} to retrieve a user's wallets
  • Use PUT /wallet/{'{user_token}'} instead of PUT /payout/wallet/{'USER_TOKEN'} to resend a balance notification
    The deprecated routes continue to work for now, but new integrations should use the /wallet paths.