Wallet Actions

Transfer tokens from a wallet to a destination address.

post/v1/wallets/{wallet_id}/transfer

Request

  • Base URL
    https://api.privy.io
  • URL
    https://api.privy.io/v1/wallets/{wallet_id}/transfer
  • Auth
    HTTP basic

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.

noncestring

Unique caller-generated nonce used to prevent replaying a signed wallet action request. Must be at least 24 characters (e.g. a cuid2 or UUID).

reference_idstring

Developer-provided identifier for this request. Must be unique per app.

Example request

{
  "amount": "10.5",
  "source": {
    "asset": "ousd",
    "amount": "10.5",
    "chain": "tempo"
  },
  "destination": {
    "address": "0xB00F0759DbeeF5E543Cc3E3B07A6442F5f3928a2"
  }
}

Response

Transfer initiated successfully.

idstring required

The ID of the wallet action.

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

The current status of the wallet action.

wallet_idstring required

The ID of the wallet involved in the action.

created_atstring date-time required

ISO 8601 timestamp of when the wallet action was created.

reference_idstring nullable

Developer-provided reference ID, if one was included in the request.

type'transfer' required
amount_type'exact_input' | 'exact_output'

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

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_amountstring

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

source_chainstring required

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

destination_addressstring required

Recipient address.

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.

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.

Example response

{
  "steps": [
    {
      "gas_credits_charged": {
        "value": "100.00",
        "currency": "usd"
      }
    }
  ],
  "estimated_fees": [
    {
      "type": "relayer",
      "recipient": "0x1234567890abcdef1234567890abcdef12345678",
      "amount": "0.20"
    }
  ],
  "estimated_gas": {
    "base_amount": "100000000000000",
    "amount": "0.0001",
    "gas_asset": "ETH"
  },
  "fees": [
    {
      "type": "relayer",
      "recipient": "0x1234567890abcdef1234567890abcdef12345678",
      "amount": "0.20"
    }
  ],
  "gas": {
    "base_amount": "100000000000000",
    "amount": "0.0001",
    "gas_asset": "ETH"
  }
}

Changes

    • breaking

      the response property /// became nullable for the status

    • breaking

      the response property /// became nullable for the status

    • breaking

      the response property /// became nullable for the status

    • breaking

      the response property /// became nullable for the status

    • info

      added the optional property /// to the response with the status

    • info

      added the optional property /// to the response with the status

    • info

      added the optional property /// to the response with the status

    • info

      added the optional property /// to the response with the status

    • info

      response property steps/items/oneOf[subschema #1: EVMTransactionWalletActionStep]/gas_credits_charged_usd deprecated

    • info

      response property steps/items/oneOf[subschema #2: EVMUserOperationWalletActionStep]/gas_credits_charged_usd deprecated

    • info

      response property steps/items/oneOf[subschema #3: SVMTransactionWalletActionStep]/gas_credits_charged_usd deprecated

    • info

      response property steps/items/oneOf[subschema #4: TVMTransactionWalletActionStep]/gas_credits_charged_usd deprecated

    • info

      added the optional property /// to the response with the status