v46

latestOpenAPI 3.1.0raw.githubusercontent.com2026-07-211591,0051.4 MB
Wallet Actions

Transfer

Transfer tokens from a wallet to a destination address.

post/v1/wallets/{wallet_id}/transfer

Path parameters

wallet_idstring required

ID of the wallet.

Headers

privy-app-idstring required

ID of your Privy app.

privy-authorization-signaturestring

Request authorization signature. If multiple signatures are required, they should be comma separated.

privy-request-expirystring

Request expiry. Value is a Unix timestamp in milliseconds representing the deadline by which the request must be processed.

privy-idempotency-keystring

Idempotency keys ensure API requests are executed only once within a 24-hour window.

Request body

amountstring

Amount as a decimal string in the token's standard unit (e.g. "1.5" for 1.5 USDC). For exact_input, the amount to send. For exact_output, the exact amount to receive. Takes precedence over source.amount when both are provided.

amount_type'exact_input' | 'exact_output'

Whether the amount refers to the input token or output token.

slippage_bpsinteger

Maximum allowed slippage in basis points (1 bps = 0.01%). Only applicable for cross-chain or cross-asset transfers; omit to use the provider default.

Example request

{
  "amount": "10.5",
  "destination": {
    "address": "0xB00F0759DbeeF5E543Cc3E3B07A6442F5f3928a2"
  },
  "source": {
    "amount": "10.5",
    "asset": "usdc",
    "chain": "base"
  }
}

Response

Transfer initiated successfully.

amount_type'exact_input' | 'exact_output'

Whether the amount refers to the input token or output token.

created_atstring date-time required

ISO 8601 timestamp of when the wallet action was created.

destination_addressstring required

Recipient address.

destination_amountstring nullable required

Amount received on the destination chain. For exact_output cross-chain transfers, set at creation (the guaranteed exact amount). For exact_input cross-chain transfers, null until fill confirmation.

destination_assetstring

Destination asset for cross-asset transfers. Omitted for same-asset transfers.

destination_chainstring

Destination chain for cross-chain transfers. Omitted for same-chain transfers.

idstring required

The ID of the wallet action.

source_amountstring

Decimal amount sent on the source chain (e.g. "1.5"). For exact_output cross-chain transfers, null until fill confirmation.

source_assetstring

Asset identifier (e.g. "usdc", "eth"). Present when the transfer was initiated with a named asset; omitted for custom-token transfers.

source_asset_addressstring

Token contract address (EVM) or mint address (Solana). Present when the transfer was initiated with asset_address.

source_asset_decimalsinteger

Number of decimals for the transferred token. Present when the transfer was initiated with asset_address and the decimals were resolved on-chain.

source_chainstring required

Chain name (e.g. "base", "ethereum").

status'pending' | 'succeeded' | 'rejected' | 'failed' required

The current status of the wallet action.

type'transfer' required
wallet_idstring required

The ID of the wallet involved in the action.

Example response

{
  "estimated_fees": [
    {
      "amount": "0.20",
      "recipient": "0x1234567890abcdef1234567890abcdef12345678",
      "type": "relayer"
    }
  ],
  "estimated_gas": {
    "amount": "0.0001",
    "base_amount": "100000000000000",
    "gas_asset": "ETH"
  },
  "fees": [
    {
      "amount": "0.20",
      "recipient": "0x1234567890abcdef1234567890abcdef12345678",
      "type": "relayer"
    }
  ],
  "gas": {
    "amount": "0.0001",
    "base_amount": "100000000000000",
    "gas_asset": "ETH"
  }
}