Skip to main content
Applications that use @startale/app-sdk from their own origin are not sponsored by Startale. This page covers the two supported outcomes at the call site: your paymaster pays, or the user pays.
Building a Mini App instead? Gas is sponsored by the Startale App and there is nothing to configure. See Gas in a Mini App.

Configure a paymaster

Pass paymasterOptions to either createStartaleAccountSDK or startaleConnector. The map is keyed by chain id.
id does not reach your paymaster. Only url is forwarded. The Startale App does send an ERC-7677 context object, but it carries the App’s own gas-estimation flag rather than anything you configured. If your service needs to distinguish policies, tenants, or environments, encode that in the URL itself, for example as a distinct path or as a query parameter. See the context object.

Only batched calls carry your paymaster

paymasterOptions is attached as an EIP-5792 paymasterService capability, and that capability exists only on wallet_sendCalls. A plain eth_sendTransaction carries no capabilities, so it cannot carry your paymaster either. This is the single most common integration mistake. A viem walletClient.sendTransaction call, or wagmi’s useSendTransaction and useWriteContract, all issue eth_sendTransaction. Configuring paymasterOptions and then sending through those paths produces a working transaction that the user pays for, with no error to tell you the paymaster was skipped. To route through your paymaster, send the transaction as a batch of one:
The SDK injects the paymasterService capability for you, so there is no capability to write by hand. On wagmi, use the EIP-5792 useSendCalls hook rather than the single-transaction hooks. See Batched calls.

Or let the user pay

With no paymasterOptions, UserOperations are still built and submitted and gas is debited from the user’s smart account. The user needs:
  • ETH at their smart account address, not at the EOA that signs for it.
  • A route to put ETH there, such as a bridge or a deposit flow inside your product.
Make the funding requirement explicit in your interface before the first transaction. Without it, a new user reaches a failed transaction with no way to interpret or resolve it, which is a worse experience than not offering the flow at all.

Configure per chain

paymasterOptions is a map, so sponsorship is a per-chain decision. A chain with no entry falls back to the user paying.

Constraints applied by the Startale App

Paymaster requests are forwarded server-side by the Startale App rather than called from the browser, and that forwarding applies fixed limits. Check these first when a sponsorship fails for no obvious reason. Because no Authorization header is forwarded, any credential your paymaster requires must be carried in the URL or terminated by a gateway you control. See Secure your paymaster.

Failure modes

Your application does not see your paymaster’s error text or the forwarding layer’s. The Startale App reports a failed send to your wallet_sendCalls request as a JSON-RPC error with a short reason category.

Paymaster wire format

The two ERC-7677 methods your service must implement, with request and response shapes.

Secure your paymaster

Your URL is public. Proxy your credentials and scope what you sponsor.

Who pays for gas

The model across both contexts, and where Startale’s responsibility ends.

Batched calls

The wallet_sendCalls path that carries your paymaster.