Skip to main content
Custodial wallets support transferring assets using the /transfer endpoint — the same interface used by non-custodial wallets. This provides a simple, chain-agnostic way to move funds without needing to encode raw transaction data.
All transactions from custodial wallets are executed server-side.

Initiate a transfer

For custodial wallets, only assets that are supported by the custodian can be transferred. Supported assets: USDC, USDB, EURC Supported chains: Base, Solana
Like non-custodial wallets, custodial wallets with an owner or additional_signers require an authorization signature for transaction requests.

Usage

Make a POST request to /v1/wallets/{wallet_id}/transfer with the source asset, amount, chain, and destination address:

Parameters

string
required
The ID of the custodial wallet to send the transfer from.
object
required
The source asset, amount, and chain for the transfer.
object
required
The destination for the transfer.

Returns

The response is a wallet action object with type: "transfer":
string
The wallet action ID. Use this to poll for status updates via GET /v1/wallets/{wallet_id} /actions/{action_id}.
string
The action status: pending, succeeded, rejected, or failed.
'transfer'
The action type.
string
The asset being transferred.
string
The amount being transferred in standard units.
string
The source chain.
string
The recipient address.

Next steps

Transfer lifecycle

Learn about the transfer lifecycle for custodial wallets

Sending USDC recipe

Learn how to format and encode ERC-20 token transfers

Authorization controls

Configure policies and multi-party approvals for custodial wallets

Transfer webhooks

Monitor transfer status and lifecycle events