POST request to /v1/wallets/{wallet_id}/transfer.
Body
In the body of the request, pass the following parameters.The source asset, amount, and chain for the transfer. Specify either
asset (for named assets) or
asset_address (for custom tokens), not both.The destination for the transfer.
Amount as a decimal string in standard units (e.g.
"10.0" for 10 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.Whether the amount refers to the input token (
exact_input) or the output token
(exact_output). Defaults to exact_input.exact_input— the specified amount is deducted from the source wallet; the destination amount varies based on fees and bridge pricing.exact_output— the recipient receives exactly the specified amount; the source amount is determined by the bridge provider and may be higher due to fees.
The maximum allowed slippage in basis points (1 bps = 0.01%). Must be between
0 and 10000.
Only applies to cross-chain and cross-asset transfers. If omitted, an appropriate slippage
tolerance is automatically determined based on current market conditions. See
slippage for details.Optional fee configuration for cross-chain transfers.
Response
The endpoint returns a200 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.The unique identifier for the wallet action.
The current status of the action.
The ID of the wallet initiating the transfer.
The ISO 8601 timestamp for when the action was created.
The type of action. For transfers, this is always
transfer.The amount type used for this transfer. Omitted when the default
exact_input was used.The named asset being transferred (e.g.
"usdc", "eth"). Present when the transfer was
initiated with a named asset; omitted for custom-token transfers.The token contract address (EVM) or mint address (Solana) of the transferred asset. Present when
the transfer was initiated with
asset_address.The number of decimals for the transferred token. Present when the transfer was initiated with
asset_address and the decimals were resolved on-chain.The amount sent on the source chain as a decimal string (e.g.
"1.5"). Omitted for exact_output
cross-chain transfers until the source amount is determined.The chain the transfer is sent from (e.g.
"tempo", "ethereum").The recipient wallet address.
The destination asset for cross-asset transfers. Omitted for same-asset transfers.
The destination chain for cross-chain transfers. Omitted for same-chain transfers.
The amount received on the destination chain. Populated immediately for
exact_output transfers,
or after fill confirmation for exact_input cross-chain transfers.Fees paid for the transfer. Each item has a
type (relayer or developer) and an amount in
USD. Items of type developer include a recipient address.Present on
rejected or failed actions when available. Contains a message string with a
human-readable description of the failure, and an optional details field with additional
context.Examples
Exact input example
Exact input example
Exact output example
Exact output example
To send exactly 100 USDC to a recipient on Arbitrum from a Tempo wallet:
For
exact_output cross-chain transfers, source_amount is null at creation because the exact
source amount is determined by the bridge provider at execution time. It is populated once the
transfer is confirmed on-chain.
