+
+## Fee sponsorship
+
+Solana supports server-sponsored transaction fees for charge payments. When enabled, the client signs only the payment authorization—the server pays the Solana network fee in SOL and the client reimburses the server in the payment token (for example, USDC).
+
+This means clients don't need to hold SOL at all. They pay the API cost plus a small fee surcharge in the same token they are already using.
+
+### How it works
+
+```
+Client Server
+ │ │
+ │ GET /api/resource │
+ │ ─────────────────────────────►│
+ │ │
+ │ 402 + Challenge │
+ │ (sponsored=true, sponsorPath)│
+ │ ◄─────────────────────────────│
+ │ │
+ │ POST /sponsor │
+ │ { publicKey, request } │
+ │ ─────────────────────────────►│
+ │ │
+ │ Partially signed tx │
+ │ (feePayer=server) │
+ │ ◄─────────────────────────────│
+ │ │
+ │ Co-signs & sends tx │
+ │ Retries with tx signature │
+ │ ─────────────────────────────►│
+ │ │
+ │ Verifies tx on-chain │
+ │ 200 + Resource + Receipt │
+ │ ◄─────────────────────────────│
+```
+
+1. Server returns a `402` Challenge with `sponsored: true` and a `sponsorPath`
+2. Client POSTs its public key to the sponsor endpoint
+3. Server builds the transaction with itself as `feePayer`, includes the payment transfer and a small fee reimbursement transfer from user to server
+4. Server partially signs as fee payer and returns the serialized transaction
+5. Client co-signs as the payment authority and submits
+6. Server verifies the payment on-chain as usual
+
+### Server setup
+
+Pass a `sponsor` config to the Solana server method and expose a sponsor endpoint using `createSponsorHandler`:
+
+```ts [server.ts]
+import { Connection, Keypair } from "@solana/web3.js";
+import { Mppx } from "mppx/server";
+import {
+ createSponsorHandler,
+ server as solanaServer,
+} from "mppx-solana";
+
+const sponsorKeypair = Keypair.fromSecretKey(/* server fee payer key */);
+const connection = new Connection("https://api.mainnet-beta.solana.com");
+
+const mppx = Mppx.create({
+ methods: [
+ solanaServer({
+ cluster: "mainnet-beta",
+ connection,
+ currency: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
+ decimals: 6,
+ recipient: "MerchantWalletPublicKeyBase58",
+ sponsor: {
+ feePayer: sponsorKeypair,
+ feeTokenAmount: "10000",
+ sponsorPath: "/sponsor",
+ },
+ }),
+ ],
+ realm: "api.example.com",
+ secretKey: process.env.MPP_SECRET_KEY!,
+});
+
+const handleSponsor = createSponsorHandler({
+ connection,
+ feePayer: sponsorKeypair,
+ feeTokenAmount: "10000",
+});
+
+Bun.serve({
+ routes: {
+ "/api/resource": {
+ GET: async (request) => {
+ const result = await mppx.charge({
+ amount: "100000",
+ })(request);
+
+ if (result.status === 402) return result.challenge;
+ return result.withReceipt(Response.json({ data: "paid content" }));
+ },
+ },
+ "/sponsor": {
+ POST: handleSponsor,
+ },
+ },
+});
+```
+
+### Client
+
+No changes needed on the client side. The client automatically detects `sponsored: true` in the Challenge and uses the sponsor endpoint:
+
+```ts [client.ts]
+import { Connection, Keypair } from "@solana/web3.js";
+import { Mppx } from "mppx/client";
+import { client as solanaClient } from "mppx-solana";
+
+const mppx = Mppx.create({
+ methods: [
+ solanaClient({
+ connection: new Connection("https://api.mainnet-beta.solana.com"),
+ signer: Keypair.fromSecretKey(/* user key */),
+ }),
+ ],
+ polyfill: false,
+});
+
+const response = await mppx.fetch("https://api.example.com/api/resource");
+```
+
+### Cost breakdown
+
+For a 0.10 USDC API call with sponsored fees:
+
+| | **Without sponsorship** | **With sponsorship** |
+|---|---|---|
+| **User pays (USDC)** | 0.10 | 0.11 (0.10 + 0.01 fee) |
+| **User pays (SOL)** | ~0.002 SOL (tx fee + ATA rent) | 0 |
+| **Server pays (SOL)** | 0 | ~0.004 SOL (tx fee + ATA rent) |
+| **Server receives (USDC)** | 0 | 0.01 (fee reimbursement) |
+
+The server accumulates token reimbursements and needs to periodically swap them for SOL to stay funded. An initial SOL seed of ~0.1 SOL supports approximately 20,000+ transactions.
+
+### Sponsor configuration
+
+| Parameter | Type | Required | Description |
+|-----------|------|----------|-------------|
+| `sponsor.feePayer` | `Keypair` | Yes | Server keypair that pays Solana transaction fees |
+| `sponsor.feeTokenAmount` | `string` | Yes | Amount in token smallest unit to reimburse (for example, `"10000"` = 0.01 USDC) |
+| `sponsor.sponsorPath` | `string` | Yes | HTTP path for the sponsor endpoint (for example, `"/sponsor"`) |
+
+See [Solana charge](/payment-methods/solana/charge#with-fee-sponsorship) for the full charge integration with sponsorship.
+
+## Package
+
+The Solana payment method is provided by the [`mppx-solana`](https://github.com/nitishxyz/mppx-solana) package, a community extension for `mppx`.
+
+
+
+
+
+
+### Install
+
+```bash [install.sh]
+$ pnpm add mppx-solana mppx @solana/web3.js @solana/spl-token viem
+```
+
+## Server configuration
+
+| Parameter | Type | Required | Description |
+|-----------|------|----------|-------------|
+| `cluster` | `string` | No | `"mainnet-beta"`, `"devnet"`, `"testnet"`, `"localnet"` |
+| `commitment` | `string` | No | `"confirmed"` (default) or `"finalized"` |
+| `connection` | `Connection` | No | Custom RPC connection |
+| `currency` | `string` | Yes | `"solana:native"` for SOL, or SPL mint address |
+| `decimals` | `number` | Yes | Token decimals (9 for SOL, 6 for USDC) |
+| `getConnection` | `function` | No | Dynamic connection factory |
+| `recipient` | `string` | Yes | Wallet address receiving payments |
+| `sponsor` | `SolanaSponsorConfig` | No | Enable sponsored/gasless transactions |
+
+## Client configuration
+
+| Parameter | Type | Required | Description |
+|-----------|------|----------|-------------|
+| `connection` | `Connection` | No | RPC connection |
+| `getConnection` | `function` | No | Dynamic connection factory |
+| `signer` | `Keypair \| SolanaSigner` | Yes | Signs transactions |
diff --git a/src/pages/sdk/index.mdx b/src/pages/sdk/index.mdx
index 8603d0fc..1c25d0f9 100644
--- a/src/pages/sdk/index.mdx
+++ b/src/pages/sdk/index.mdx
@@ -1,10 +1,18 @@
import { Cards } from 'vocs'
-import { TypeScriptSdkCard, PythonSdkCard, RustSdkCard, WalletCliCard } from '../../components/cards'
+import { PythonSdkCard, RustSdkCard, SolanaSdkCard, TypeScriptSdkCard } from '../../components/cards'
# SDKs [Official implementations in multiple languages]
+## Official SDKs
+
-
+
+
+
+## Ecosystem packages
+
+
+
diff --git a/src/pages/sdk/solana/index.mdx b/src/pages/sdk/solana/index.mdx
new file mode 100644
index 00000000..03b8c67a
--- /dev/null
+++ b/src/pages/sdk/solana/index.mdx
@@ -0,0 +1,38 @@
+import * as SdkBadge from '../../../components/SdkBadge'
+
+# Solana SDK [Solana payments for MPP]
+
+## Overview
+
+The `mppx-solana` package adds Solana payment methods to `mppx` so you can accept SOL and SPL token payments in the standard MPP Challenge, Credential, and Receipt flow.
+
+