Gas sponsorship
Pay your users' network fees on the networks you choose, with per-user and per-day caps.
Preview: Swivy is not generally available
Swivy runs in staging only. Field names come from the executionPolicy.sponsorship section of Swivy's OpenAPI schema and can change. Request early access.
In plain words: every blockchain transaction costs a small network fee ("gas"). New users usually have no ETH or SOL to pay it. With sponsorship, a sponsor wallet you fund pays that fee for them, so their first transaction just works.
Turn it on
Sponsorship lives in your environment policy, under executionPolicy.sponsorship:
| Field | What it does |
|---|---|
enabled | Master switch. |
autoSponsorTransactions | Sponsor eligible transactions automatically. |
sponsoredNetworks | The networks you pay gas on, for example ["base-mainnet"]. |
maxSpendPerUserUsd | The largest transaction value (in USD, from the intent's requestedValueUsd) that can be sponsored. Despite the name, it applies per transaction. |
maxSpendPerDayUsd | The most you'll spend across the environment per day. |
allowedContractAddresses | Only sponsor calls to these contracts (leave empty for any). |
allowClientTransactions | Whether transactions built client-side can be sponsored. |
requireAdminApproval | Hold sponsored transactions for an operator's approval. |
relayerMode | swivy_managed (Swivy runs the sponsor wallets) or organization_managed (you do). |
fundingSource | How sponsor wallets are topped up: rails (crypto, stripe), deposit addresses and a low-balance alert. |
{
"executionPolicy": {
"requireMfa": true,
"hostedExecution": true,
"maxTransactionValueUsd": 500,
"sponsorship": {
"enabled": true,
"autoSponsorTransactions": true,
"sponsoredNetworks": ["base-mainnet"],
"maxSpendPerUserUsd": 2,
"maxSpendPerDayUsd": 50,
"relayerMode": "swivy_managed"
}
}
}How a sponsored transaction runs
- Your app submits an
execute_transactionintent as usual. - Swivy checks the network, the contract and your caps.
- If it qualifies, sponsorship logic runs before signing, then Swivy broadcasts through your configured RPC.
- The environment dashboard shows sponsor wallet balances per network.
Things to know
- Sponsorship pays network fees only, not the value being sent.
- On Solana, opening a token account for a first-time recipient needs a small refundable rent deposit. That's a Solana rule, not a Swivy fee.
- Set caps before you enable it. An uncapped sponsor wallet is an open tab.
Sponsorship modes (in review)
BuildingBuilt and in review, not on staging yet. Today Swivy sponsors by sending native gas to the user's wallet before a send, and the user can withdraw it. The new modes leave nothing to withdraw:
| Field | Values | What it does |
|---|---|---|
solanaMode | fee_payer or prefund (default) | fee_payer makes the sponsor the fee payer of the user's transaction. Get the address from GET /v1/runtime/sponsorship/fee-payer and use it as the transaction's payer. Swivy checks the transaction and simulates it before the sponsor co-signs. |
evmMode | exact_gas or prefund (default) | exact_gas sends exactly that transaction's worst-case gas and no more. |
maxSponsoredTransactionsPerAccountPerDay | number or null | A per-wallet cap on sponsored sends per UTC day. |
solanaMaxPriorityFeeLamports | number, default 50,000 | The largest priority fee the sponsor will pay. |
solanaMaxTokenAccountCreations | number, default 1 | How many token accounts the sponsor may open per transaction. |
In fee-payer mode the sponsor only signs if:
- it is used as the fee payer and nowhere else, except to pay for opening a token account;
- the transaction uses no address lookup tables;
- the simulation shows it losing no more than the fees.