Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.privy.io/llms.txt

Use this file to discover all available pages before exploring further.

The transfer wallet action API sends tokens from a Privy wallet to a destination address. Instead of constructing blockchain transactions from scratch, the transfer action accepts a human-readable asset, amount, chain, and destination address — Privy handles the onchain complexity.
If your app has gas sponsorship configured, usage of the /transfer endpoint will be gas-sponsored by default. There is no need to specify additional parameters for sponsorship.
The /transfer API supports the following assets:
AssetAPI value
USDCusdc
USDC.eusdc_e
USDTusdt
USDT0usdt0
USDBusdb
EURCeurc
ETHeth
SOLsol
POLpol
The /transfer API supports the following chains:
ChainCAIP-2API value
Ethereumeip155:1ethereum
Baseeip155:8453base
Arbitrumeip155:42161arbitrum
Polygoneip155:137polygon
Tempoeip155:4217tempo
Solanasolana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpsolana
Ethereum Sepoliaeip155:11155111ethereum_sepolia
Base Sepoliaeip155:84532base_sepolia
Arbitrum Sepoliaeip155:421614arbitrum_sepolia
Polygon Amoyeip155:80002polygon_amoy
Tempo Moderatoeip155:42431tempo_moderato
Solana Devnetsolana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1solana_devnet
To transfer assets or chains not listed above, use the low-level RPC API to construct and send transactions directly.

Usage

To execute a transfer, make a POST request to /v1/wallets/{wallet_id}/transfer.

Body

source
object
required
The source asset, amount, and chain for the transfer.
destination
object
required
The destination for the transfer.

Response

The endpoint returns a 200 response with a pending wallet action resource.
The transfer action is processed asynchronously. The response contains a pending wallet action resource with status: "pending" that Privy processes in the background.
id
string
The unique identifier for the wallet action.
status
'pending' | 'completed' | 'failed'
The current status of the action.
wallet_id
string
The ID of the wallet initiating the transfer.
created_at
string
The ISO 8601 timestamp for when the action was created.
type
'transfer'
The type of action. For transfers, this is always transfer.
source_asset
string
The asset being transferred.
source_amount
string
The amount of the asset being transferred, as a decimal string.
source_chain
string
The chain the transfer is sent from.
destination_address
string
The recipient wallet address.
To track the status of a transfer, see wallet action lifecycle.

Example

Use the transfer convenience method on the wallets service to transfer tokens from a wallet.
const response = await privy.wallets().transfer('insert-wallet-id', {
  source: {
    asset: 'usdc',
    amount: '10.0',
    chain: 'base',
  },
  destination: {
    address: '0xRecipientAddress',
  },
  authorization_context: {
    authorization_private_keys: ['<authorization-private-key>'],
  },
});
The method returns a TransferActionResponse with the pending wallet action. See wallet action lifecycle to track the status.

API reference

See the API reference for more details.