Deprecated

Field Naming Normalization

Address and identifier fields now follow one convention across the API: user_address for a user's EOA, wallet_address for a Smart Wallet, destination_address for the target of a transfer, recipient_address for a recipient's crypto address, and user_id for a user's UUID. The previous names are still populated on responses and still accepted on requests, so existing integrations continue to work unchanged.

What's changed

Endpoint or payloadWasNow
POST /api/v2/user, POST /api/v1/user requestwallet_addressuser_address
GET /api/v2/user, POST {your_webhook_base_url}/v2/webhooks/userid, owneruser_id, user_address
GET /api/v1/userid, wallet_addressuser_id, user_address
POST /api/v1/user/retail/validateid, wallet_addressuser_id, user_address
GET /api/v1/cards/3ds/requests, POST {your_webhook_base_url}/v2/webhooks/3dsowneruser_address
GET /api/v1/withdrawal/requests, POST {your_webhook_base_url}/v2/webhooks/erc-withdrawalsaccount_address, to_addresswallet_address, destination_address
POST /api/v1/fx/estimatedeposit_addressdestination_address
POST /api/v1/activity/statement/fullowner, account_addressuser_address, wallet_address
Recipient crypto payment details, on create, update, read, and POST {your_webhook_base_url}/v2/webhooks/recipientsaddressrecipient_address

Compatibility

  • Responses carry both the old and the new field. Both hold the same value.
  • Requests accept either field. Supplying both is allowed only when they match; mismatched values fail validation.
  • Nothing has been removed. Read the new names in new code and migrate existing readers when convenient.

Requirements

wallet_address now means two different things depending on where it appears, so a blanket find-and-replace will break an integration:

  • On user registration and user profile payloads it was the user's EOA, and is replaced by user_address.
  • On withdrawal payloads and statement operations it is the Smart Wallet address, and is the new preferred name there, replacing account_address.

The wallets webhook, the balances webhook, GET /api/v1/wallets, and the XRPL POST /api/v1/accounts response are unaffected — wallet_address was already correct in all of them.

The TypeScript SDK has not been updated. It still sends wallet_address on user creation and still exposes account_address and to_address on withdrawal records. Both continue to work.

Also in this release

  • Three webhooks are now documented/v2/webhooks/user, /v2/webhooks/debt-cases, and /v2/webhooks/corporations are delivered to configured webhook endpoints and now have published payloads and field tables. The user webhook is the v2 replacement for the legacy /webhook/users.
  • 3DS error handling corrected — the approve and decline endpoints never return 401. A transaction that is unknown, already decided, expired, or owned by another user returns the same 400 with ErrorNotFound, because ownership is enforced by scoping the lookup to the caller. The documented 5-minute expiry window and the guarantee that a decision cannot be replayed are now described in 3DS Authentication.
  • Card limit webhook — the field table listed an owner field that is not sent. It has been removed.
  • KYC Sharing via APIthe integration guide is now published.

Documentation