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:
const transfer = await privy.wallets().transfer('insert-wallet-id', {
  source: {
    asset: 'usdc',
    amount: '10.0',
    chain: 'base',
  },
  destination: {
    address: '0xRecipientAddress...',
  },
});

console.log(transfer.id);     // wallet action ID
console.log(transfer.status); // 'pending'

Parameters

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

Returns

The response is a wallet action object with type: "transfer":
id
string
The wallet action ID. Use this to poll for status updates via GET /v1/wallets/{wallet_id} /actions/{action_id}.
status
string
The action status: pending, succeeded, rejected, or failed.
type
'transfer'
The action type.
source_asset
string
The asset being transferred.
source_amount
string
The amount being transferred in standard units.
source_chain
string
The source chain.
destination_address
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