Skip to main content
The biggest change: in v2, a wallet wasn’t really an addressable resource — there was no single-wallet GET endpoint, no wallet ID. Wallets were just addresses attached to a user, read back as a {chain: [addresses]} map embedded on the user object or through balance/deposit endpoints keyed by userId + chain. v3 makes Wallet a first-class resource with its own ID, its own GET, and a flat top-level path. See the platform-wide changes for ID format, pagination, error shape, and idempotency.

Endpoints

Request changes: create a wallet

v2 — provisioning more wallets for an existing user, response returns the whole user object:
POST /v2/users/:userId/wallets/add v3userId moves into the body, response returns the created wallets directly:
POST /v3/wallets

Response changes

v2 — no standalone wallet object. What you get back is either the user object’s embedded map, or a raw balance/deposit response:
v3 — each wallet is its own resource:
If you’re used to reading wallet addresses off the v2 user object’s wallets field, switch to calling GET /v3/wallets?userId=... instead — see Users.

Deposits

v2 deposit list response: {count, wallets: [...], nextCursor}-style envelope keyed by raw timestamp cursor. v3 returns the standard {data, pagination} envelope (see platform-wide changes) and adds structured filters not available in v2: minAmount, status, currency as a required filter rather than optional.

ID format

Wallets had no ID at all in v2 (only chain + address). v3 wallets are wlt_... prefixed public IDs; wallet deposits are dep_....