Gasless Swap (Permit) logo

Catalog action EVM Onchain wallet swap

Swap tokens without paying gas. Sign off-chain and a relayer submits the transaction for you. Great for fresh wallets or moving funds without needing ETH upfront.

This action can require a wallet connector, gas, token movement, or an external side effect. Test with simulation or a controlled amount before using it in a live workflow.

At a Glance

FieldValue
Action IDpermit-relayer-swap
CategoryEVM Onchain
Connectorwallet
Requires gasNo
Funds movementswap
Tagsblockchain, evm, dex, swap, gasless, uniswap, token, trading

Payload Schema

FieldTypeRequiredDescription
sellTokenstringYesAddress of ERC-2612 permit-compatible token to sell (e.g., USDC)
buyTokenstringYesAddress of token to buy. Use 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE for native ETH
sellAmountstringYesAmount of sell token in smallest unit (e.g., USDC has 6 decimals: 1000000 = 1 USDC)
chainIdnumberYesChain ID (1=Ethereum, 42161=Arbitrum, 137=Polygon)
receiverstringNoOptional recipient address for the output tokens. Defaults to the user's wallet.
uniswapFeeTiernumberNoUniswap V3 pool fee tier in hundredths of a bip (default: 500 = 0.05%)

Result Schema

FieldTypeRequiredDescription
statusstringYesStatus of the swap
sellTokenstringNoSell token address
buyTokenstringNoBuy token address
sellAmountstringNoSell amount in smallest unit
permitTxHashstringNoTransaction hash of the permit submission
swapTxHashstringNoTransaction hash of the Uniswap swap
buyAmountstringNoAmount of buy token received in smallest unit (wei)
totalGasUsedstringNoTotal gas used across all relayer transactions
errorCodestringNoError code if status is error
errorMessagestringNoError message if status is error

Examples

json
{ "type": "permit-relayer-swap", "payload": { "sellToken": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", "buyToken": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", "sellAmount": "1000000", "chainId": 1 }, "children": [], "connector": { "type": "wallet", "id": "conn_wallet" }}

Payload fields can use workflow expressions such as {{$trigger.body.amount}}, {{$nodes.fetch.result.price}}, and {{$props.asset}} when the value should come from a trigger, prior node, or reusable workflow prop.

Ask a question... ⌘I