svmSponsor. LI.FI builds the transaction with that account as the fee payer. Your sponsor account and the user’s wallet both sign the same transaction, and the sponsor pays the network fees.
This is fee-payer substitution, not a relayer. LI.FI does not hold the sponsor key, does not fund the sponsor account, and does not submit the transaction for you. You fund the account, you sign with it, and you pay for what it covers.
Sponsorship applies to transactions that start on Solana. For the EVM equivalent, where LI.FI relays and recovers the cost from the input amount, see Gasless Transactions. For a comparison of every gas mechanism, see Gas Options.
How it works
Request with svmSponsor
Add the sponsor’s public key to the quote, or to both the routes request and the stepTransaction request. The response is an unsigned, base64-encoded Solana transaction in
transactionRequest.data, with the sponsor as the fee payer.Check the fee payer
Deserialize the transaction and confirm that the fee payer, the first account key, is your sponsor. If it is the user’s address, the request was built without the sponsor. See Pass it on every request.
Collect the signatures
The sponsor and the user sign the same message, in any order. Each signature fills its own slot. Do not rebuild or change the transaction between signatures.
Submit before the blockhash expires
Send the fully signed transaction to a Solana RPC, then track it with
GET /v1/status as for any other transfer.Pass it on every request
svmSponsor takes a base58 Solana public key. Any other format returns 400.
Quote with a sponsor
Routes, then stepTransaction
Sign without rebuilding
The transaction is a versioned (v0) Solana transaction. Its required signers are the first accounts in the message:- the sponsor, as the fee payer;
- the user, who owns the input tokens;
- on some routes, an extra one-time key whose signature is already in the transaction when you receive it. We observed this on
mayanFastMCTP.
Sponsor signing service (sketch)
Signing window
The transaction carries a recent blockhash from when LI.FI built it. Solana rejects a transaction whose blockhash is more than 150 blocks old, which the Solana documentation puts at about 60 to 90 seconds. Collect both signatures and submit inside that window. If it expires, request the quote or the stepTransaction again and sign the new transaction. Keep the sponsor signing step fast and automatic.What the sponsor pays
estimate.gasCosts gives the SOL cost of sending the transaction. Use it, together with estimate.feeCosts, to meter what each user costs you. Both are estimates from when the transaction was built.
Bridges from Solana
WhensvmSponsor is set and the input token is not native SOL, routing keeps only bridges from Solana that support a separate fee payer. At the time of writing these are relaydepository, across, gasZipBridge, unit, near, mayanFastMCTP, layerswap, lifiIntents and cctp. The list changes as bridges add support.
To see why a bridge was dropped for your request, inspect unavailableRoutes.filteredOut[].reason in the routes response. A dropped bridge has a reason like this:
Native SOL input
When the input token is native SOL, routing does not apply the bridge filter above. The user already holds SOL, and the route can use bridges that do not support a separate fee payer, such asmayan or chainflip.
For a flow where the user holds no SOL, use an SPL token such as USDC as the input. When native SOL is the output token, the sponsor is still the fee payer.
SDK
Set the sponsor once increateConfig:
routeOptions into getRoutes. getStepTransaction, which executeRoute uses, reads svmSponsor only from this config and adds it to the stepTransaction request for Solana steps. If you pass svmSponsor only in the options of one getRoutes call, routing filters for the sponsor, but the transaction you execute is built with the user as fee payer. For getQuote, pass svmSponsor as a request parameter.
When executeRoute runs a Solana step, it sends the transaction to the wallet from your SolanaProvider’s getWallet. It expects the transaction back with the fee payer’s signature in it. With a sponsor, the user’s wallet alone cannot provide that. Give the provider a wallet whose signTransaction also gets the sponsor’s signature, for example from your sponsor signing service, before it returns the transaction.
Limits to plan for
No sponsor balance check at quote time
No sponsor balance check at quote time
LI.FI does not check the sponsor’s balance when it builds the transaction. A sponsor with 0 SOL still gets a quote. The failure comes at submission. Monitor the sponsor account and top it up before it runs low.
The fee payer is decided per request
The fee payer is decided per request
Each transaction is built for the sponsor named in that request. A routes request with the sponsor and a stepTransaction request without it give a user-paid transaction. Check the fee payer of every transaction before you sign it.
Solana origin only
Solana origin only
svmSponsor affects only transactions that start on Solana. A transfer from another chain to Solana is sent on the source chain and is not affected.Exchange behavior can change
Exchange behavior can change
Sponsorship depends on how each exchange and bridge builds its instructions. If a sponsored transaction behaves unexpectedly, for example the user’s SOL balance changes, report it to LI.FI with the transaction signature.
Next steps
Gas Options
Every gas mechanism, and who pays for each.
Solana Ecosystem
Bridges, exchanges and features available on Solana.
Gas and fee costs
How to read
gasCosts and feeCosts in a quote.Status tracking
Following a transfer after you submit it.

