Skip to main content
A shopper who holds USDC on Base, USDT on Tron or USDC on Solana can pay without holding ETH, TRX or SOL. The pay page asks the shopper’s wallet to sign one or two messages. Tendr’s relayer submits the transaction and pays the gas. The money goes from the shopper’s wallet to the deposit address in that one transaction. Tendr never holds it. Submitting the transaction never marks a payment paid. A payment is paid when the deposit is detected, exactly as for any other payment.

Who pays the network fee

You choose, per store, with the default gas payer setting (default_gas_payer: merchant or shopper). A session can override it with gas_payer.
  • You sponsor. You pay the fee. It is taken from your side of that payment, so the shopper sends the same amount as without sponsorship. Sponsorship follows your gas policy: a cap per payment and a budget per month.
  • The shopper pays. The fee comes out of the token the shopper sends, on top of the payment. You receive the full payment amount.
The pay page shows the fee before the shopper signs: When the shopper pays, they choose the fee currency: the token they are paying with (gasless), or the chain’s coin (a normal wallet send, as before). The token option is the default.

Defaults

A new gas policy allows $1 per payment and $50 per month, on every supported chain except Ethereum mainnet (you add it yourself). Until you turn the policy on, nothing is sponsored and the shopper pays. Switching the store default to merchant creates a policy with these defaults, turned on, if the mode has none. The fee in a token is the live network fee in USD plus a safety margin (20% by default), divided by the token’s price from the 1Click token list, rounded up. Tendr collects the fee in whatever token the shopper pays with and swaps it to USDC later.

When the payment is not sponsored

If the payment fails any check, the shopper pays from the token and sees the fee first. The checks are your policy (enabled, chain, token, minimum order, first-time shopper, per-payment cap, monthly budget), the Tendr-wide daily loss limit, and a rule that the fee cannot exceed 1% of the order. The reason is on the payment as network_fee.reason. See why a payment was not sponsored. The 1% rule includes the integrator hook estimate. A hook session whose fee plus hook estimate is above 1% of the order falls back to shopper-paid gas. A hook estimate above 10% of the order on its own is refused: the quote fails with QUOTE_TOO_SMALL, because the hook is always called and its cost cannot move to anyone else.

How it works per chain

Every signed payload binds the deposit address, the amounts, the fee recipient and a deadline. There are no open-ended approvals. A stolen relayer, Pimlico or gas key can fail to submit, but it cannot send a shopper’s funds anywhere else. A signature made for one session is refused against another, before any gas is spent.

Limits

  • **Tron costs about $15** (the energy for the approve and the forwarder call) and needs two signatures. With the default $1 cap it is shopper-paid. You can raise the cap, but the 1% rule still applies.
  • **Solana sponsorship only applies to orders of roughly $34 or more.** The fee includes the rent for the deposit's new token account (about 0.002 SOL), which makes it about 34 cents, and the 1% rule then needs an order of about $34. Below that the shopper pays the fee in the token. The threshold moves with the SOL price.
  • NEAR gasless needs wallet support for signDelegateAction. Meteor and Intear do not support it yet, so NEAR shoppers pay normally until a wallet does. The shopper’s NEAR account also needs at least 1 yoctoNEAR; Tendr pays the token registrations.
  • Smart-wallet paymaster sponsorship supports Safe only. Other smart wallets pay normally.
  • Some tokens are not gasless. A token with neither EIP-3009 nor permit (for example USDT on Ethereum from a plain wallet) needs the shopper to hold ETH, and the pay page says so.
  • Copy-address payments are not gasless. If the shopper copies the deposit address and sends from another app, they pay their own gas. Sponsorship does not apply, even if you sponsor. The pay page says so next to the copy option.

Where the fee shows up

  • Sessions and payments carry network_fee: { paid_by, fee_mode, amount, asset, usd, method, reason }. paid_by is merchant or shopper. fee_mode is token when the shopper paid in the payment token, native when their wallet paid gas, and null when you sponsor. amount is in the token’s base units. The whole object is null for payments quoted before gasless payments existed.
  • The payment.succeeded webhook includes network_fee, and the “You got paid” email shows the fee and who paid it.
  • Every relayed or sponsored transaction is a record in GET /v1/gas-sponsorships.
  • Test mode simulates the relayer. Nothing real is spent, and fee lines, budget and records behave as in live mode.