Pay gas with currencies. Your users never need to hold SUI. Drop-in SDK and API.
See the full example below.
Two calls. No SUI in the user wallet required.
The SDK fetches config, builds currency payment into your transaction, estimates gas, and returns bytes ready for signing.
The user's wallet signs the prepared bytes. Then execute() sends them to the API, which validates, co-signs, and submits on-chain.
You get back a digest and execution status. The user never needed SUI — payment happened in the selected currency.
1import { SuiGrpcClient } from "@mysten/sui/grpc";2import { Transaction } from "@mysten/sui/transactions";3import { stableStation } from "@stablestation/sponsor";45const client = new SuiGrpcClient({ network: "testnet" })6 .$extend(stableStation({7 apiUrl: "https://stablestation.mystenlabs.com/api/v1",8 headers: { Authorization: `Bearer ${process.env.STABLESTATION_API_TOKEN}` },9 }));1011// Build your transaction as usual12const tx = new Transaction();13tx.moveCall({ target: "0x...::module::function" });1415// 1) Prepare sponsored bytes16const prepared = await client.stableStation.prepare({17 transaction: tx,18 sender: myAddress,19 currency: "USDC",20});2122// 2) User signs prepared bytes23const { signature } = await wallet.signTransaction(prepared.txBytes);2425// 3) API co-signs + executes26const result = await client.stableStation.execute(prepared, signature);27console.log(result.digest, result.succeeded, result.error);