Skip to main content
The Developer SDK prepares unsigned transactions and accepts application-signed transactions for submission. There are two submission models:
  • send directly through your own RPC path
  • sponsor submission through Swig’s paymaster
Signing happens in application-owned wallet or custody code first. Sponsoring does not replace it. If useful, the narrow signing helpers assemble an application-provided signature into the prepared transaction.
TypeScript
The SDK handles the base58 payload encoding the paymaster expects. The response carries the request id, the submitted signature, and what the paymaster spent. There is no status field. A returned signature means the Solana RPC accepted the transaction; it may still be pending and is not confirmation or finality. Track it through your RPC provider when your product needs either. For single-transaction sponsorship, network resolves from the call and then the client default. If neither is set, the paymaster defaults to mainnet.

Retry safely with an idempotency key

Sponsorship is the one POST the SDKs will retry, and only when you pass an idempotency key.
TypeScript
A matching retry returns the original paymaster response rather than spending again. Without a key, a failed sponsorship call is left to your app to decide about, because a blind replay could pay twice. Derive the key from something stable in your own domain — an order id, a payment id — not from a fresh random value per attempt. sponsorBundle / sponsor_bundle submits one to five signed transactions as a single bundle. Use it when several transactions must land together, such as the ordered plan returned by wallet.prepare(...).
TypeScript
Constraints the SDK enforces before sending: A returned bundleId means Jito accepted the bundle. The bundle may still be pending; acceptance is not confirmation or finality. Obtain each required application signature before sending the ordered bundle to the server.

When sponsor submission fits

  • your product wants gasless or paymaster-backed flows
  • your backend already owns the post-signing submission step
  • you want one server-owned path for ordered transaction submission

Check paymaster funding

TypeScript
getIdpBalance() / get_idp_balance() reads the IdP paymaster instead of the API paymaster.

Transaction categories still matter

  • clientAuthorityTransactions / client_authority_transactions contain explicit embedded secp256r1 or secp256k1 signature requests
  • feePayerOnlyTransactions / fee_payer_only_transactions have no explicit signature requests, but may still require an Ed25519 transaction signature
Use the serialized transaction’s required signer set as the final authority before sending either category to a fee payer or sponsor.

Portal admin vs runtime usage

This page is about runtime submission. To create or manage a paymaster in the dashboard, use the portal docs: