Skip to main content

External wallets API

To send to a destination repeatedly, register it as an external wallet and allowlist one or more assets/addresses on it. An external transfer to a wallet is only permitted for assets allowlisted on that wallet — the wallet is the authorization boundary.

MethodPathScope
POST/v1/external-walletsexternal-wallets:write
GET/v1/external-walletsexternal-wallets:read
GET/v1/external-wallets/{id}external-wallets:read
POST/v1/external-wallets/{id}/assetsexternal-wallets:write
DELETE/v1/external-wallets/{id}/assets/{assetCanonical}external-wallets:write

Create a wallet and allowlist an asset

POST /v1/external-wallets
{ "label": "treasury-cold" }
POST /v1/external-wallets/{id}/assets
{ "assetCanonical": "USDT_ETHEREUM", "address": "0xfeed...beef", "memo": null }

The asset entry has a status. On some chains it starts pending (while the allowlist entry is approved) and becomes active; a transfer can only target an active asset entry.

Using a wallet in a withdrawal

Reference it by id in an external transfer:

POST /v1/transfers/external
{ "srcAccountId": "...", "assetCanonical": "USDT_ETHEREUM", "amount": "250.00",
"destination": { "externalWalletId": "b2d4...uuid" } }

Sending an asset that isn't allowlisted on the wallet returns 400. For one-off destinations you can skip the allowlist and pass a destination.address directly — see Send a withdrawal.