Introduction
A paymaster pays a transaction’s Solana fee on behalf of your user. Use it when your application should cover fees so the user can transact without holding SOL for gas. Your user still authorizes the wallet operation.SDK examples
Use the clients from Client setup. Rust uses separateWalletClient and PaymasterClient instances on the same network.
Check paymaster funding
getIdpBalance() / get_idp_balance() for IdP funding. TypeScript/Python
resolve network from the call, then client, then mainnet for paymaster calls.
Rust always uses its configured network.
Sponsor one transaction
For TypeScript/Python,signedBase64Transaction / signed_base64_transaction
is your already-signed preparation. Rust’s sign_transaction is an
application-owned async helper following Signing.
Signature; spent_by_paymaster is an i64 and may be negative.
Sponsor a bundle
Use an ordered bundle for one to five signed transactions that must land together. Bundles are mainnet-only. Before collecting signatures:- Include transfers totaling at least 1,000 lamports from the API paymaster to backend-recognized Jito tip accounts.
- Keep tip destinations in static account keys, outside lookup tables.
- Keep the paymaster out of every other instruction’s account list, including read-only accounts. The SDK does not add the tip for you.
bundleId means acceptance by Jito,
not confirmation; estimatedSpentByPaymaster is an estimate, not a settled charge.
The same transaction-and-key retry rules apply.
Check IdP funding
Query the separate IdP paymaster when your integration sponsors IdP operations.Flow
Input
Use the API paymaster’s returned address as
feePayer / fee_payer during
preparation. Complete participant approval and embedded signatures, then every
required application-owned Solana signature. Sponsorship adds the paymaster’s
signature; it does not replace the other signers.
Keep the same signed transaction and key on retry. A matching retry returns the
original result without another spend. Resolve an uncertain attempt before
starting another. In Rust, Some(nonempty_key) enables eligible retries;
None or an empty key disables them.
Output
The balance read returns the following fields. Python uses snake_case attributes.
Rust returns
PaymasterBalance with a Pubkey address and u64 lamport balance.
It has no configured field.
Each admitted balance call consumes one API request, including retries and
admitted errors. Reading funding does not spend the sponsorship budget.

