What solution is right for me?
There are many different solutions when it comes to implementing a gasless swap experience. We’ve put together a decision tree below to help you arrive at the solution that best fits your application.Permit-based Gasless
Use this approach when your app does not control the user’s wallet (e.g. MetaMask, Rainbow, or any external EOA). The user signs an off-chain EIP-3009 or EIP-2612 permit message, and Relay’s solver handles everything else — no approval transaction, no gas.How it works
Fees
You can choose to subsidize all destination fees by passingsubsidizeFees: true to the quote api (this effectively subsidizes the first time approval). The user still needs to pay for the origin gas fee.
See the full working example: byo-eoa-permit
ERC-4337 Gasless
Use this approach if your app already uses ERC-4337 smart accounts. ERC-4337 UserOperations normally require gas fees, either paid by the sender or a paymaster. With Relay, you set all gas fee fields to 0 and submit thehandleOps call via Relay’s /execute endpoint instead of directly to the EntryPoint. Relay’s relayer submits the transaction and covers the gas.
originGasOverhead
Pass originGasOverhead: 300000 in the /quote/v2 request. This tells Relay how much additional gas the UserOperation adds over a normal EOA transaction, used during simulation to accurately price the fee.
How it works
Submit via Relay
Encode an
EntryPoint.handleOps() call and submit it via POST /execute with subsidizeFees: trueFees
You can choose to subsidize origin fees: passsubsidizeFees: true to the execute api executionOptions.
You can choose to subsidize destination fees: pass subsidizeFees: true to the quote api.
You can choose to subsidize both or none of these. If not subsidized the user pays from the output token.
See the full working example: 4337-gasless
7702 BatchExecutor
Use this approach when your app controls an embedded or custodial wallet and you want gasless execution with any ERC-20 token — not just permit-compatible ones. This leverages EIP-7702 to delegate the user’s EOA to a BatchExecutor contract (Calibur or similar), enabling atomic approve + deposit in a single call.originGasOverhead
Pass originGasOverhead: 80000 in the /quote/v2 request. This tells Relay how much additional gas the Calibur execute() wrapper adds over the raw inner calls (EIP-712 signature verification, batch dispatch, nonce check). This is lower than ERC-4337’s 300000 because there’s no EntryPoint or UserOp validation overhead.
The
80000 value is specific to Calibur. Different BatchExecutor contracts may have different gas overheads — adjust this value based on the implementation you use.How it works
Sign the authorization
Sign an EIP-7702 authorization (off-chain, no gas) delegating the EOA to the BatchExecutor
Submit via Relay
Submit via POST /execute targeting the user’s EOA
Fees
You can choose to subsidize origin fees: passsubsidizeFees: true to the execute api executionOptions.
You can choose to subsidize destination fees: pass subsidizeFees: true to the quote api.
You can choose to subsidize both or none of these. If not subsidized the user pays from the output token.
See the full working example: 7702-batch-executor