Kora

Pay Solana network fees with any SPL token. Users never need SOL in the wallet.

RPC
https://kora.sol.new
Fee payer
KoraDtdfUHJLWGqwBARLsfgXB1j44bpxv3zQWQwFmhz
Sponsored-
Signed-
Failed-
Last 24h-
RPC calls-
Fee payer SOL-
Blocked-

The problem

Every Solana transaction needs a fee payer with SOL. That kills onboarding for a USDC wallet, a game that only holds BONK, or anyone who has not bought SOL yet.

What this node does

Kora is a paymaster. Your app still builds the user intent. Kora adds a token payment to us, co-signs as fee payer, and pays the real network fee in SOL. The user pays that cost in whatever token they already hold. Jupiter prices the token. We take a 10% margin.

  1. App builds the transaction (transfer, swap, close account, …).
  2. Client asks Kora for the fee in the chosen mint (estimateTransactionFee).
  3. Kora injects an SPL transfer: user token → this fee payer.
  4. User signs (token authority). They do not pay SOL.
  5. App POSTs the tx to this RPC.
  6. Kora checks programs, accounts, and that the token payment covers SOL cost + margin.
  7. Kora co-signs as KoraDtdf…mhz and can send (signAndSendTransaction).
  8. On-chain: user intent runs, we receive the token, SOL fees come from the fee payer.

Pay with anything

Fee payment accepts any SPL / Token-2022 mint Jupiter can price (allowed_spl_paid_tokens = All).

The rest of the transaction is still gated. Tokens that may appear in the user intent today: USDC, USDT, wSOL, BONK, JUP, and 8neDcPFw…pump. Programs: System, Token, Token-2022, ATA, ALT, Compute Budget, Memo, Jupiter v6. Ask if an app needs another program (Meteora, LaunchLab, Lighthouse, …).

Pricing

Not free. Jupiter oracle + 10% margin. Cap per tx: 0.001 SOL of network fees. Max 10 signatures. Durable nonces off.

Call it

curl -sS https://kora.sol.new/health

curl -sS -X POST https://kora.sol.new \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"getConfig","params":[]}'
import { KoraClient } from '@solana/kora';

const kora = new KoraClient({ rpcUrl: 'https://kora.sol.new' });
const signed = await kora.signTransaction({ transaction });
// or signAndSendTransaction - Kora broadcasts

On Solana Kit use createKitKoraClient(). It estimates, injects the payment ix, and submits.

JSON-RPC

getConfig · getSupportedTokens · estimateTransactionFee · getPayerSigner · getBlockhash · signTransaction · signAndSendTransaction · transferTransaction · getVersion

POST JSON-RPC to the origin. GET / is this page. GET /health is JSON.

Restrict bad actors

This node will not sign whatever you send. Live controls:

Do not enable gas_swap. Do not widen programs without a reason. Low SOL on the fee payer stops sponsorship until it is topped up.

What it is not

This is not a swap API. The user still does their own instruction. Kora only sponsors gas and collects the fee in tokens. It is not the gas_swap plugin (that shape is token-in + SOL-out only).