Getting Started
Get up and running with Stellar x402 in minutes. Whether you're building a wallet, dApp, or monetizing an API, we have you covered.
For Wallet/dApp Developers (Pay for APIs)
Install the fetch wrapper to automatically handle payments:
npm install x402-stellar-fetch @stellar/stellar-sdkWith Keypair (Backend/Scripts)
import { wrapFetchWithPayment, createKeypairSigner } from "x402-stellar-fetch";
import { Keypair } from "@stellar/stellar-sdk";
const keypair = Keypair.fromSecret("SXXX...");
const signer = createKeypairSigner(keypair);
const fetchWithPay = wrapFetchWithPayment(fetch, signer);
// Automatically handles 402 Payment Required responses
const response = await fetchWithPay("https://api.example.com/premium");
const data = await response.json();With Freighter (Browser)
import { wrapFetchWithPayment, createFreighterSigner } from "x402-stellar-fetch";
const signer = createFreighterSigner();
const fetchWithPay = wrapFetchWithPayment(fetch, signer);
// Freighter will prompt user to approve payment
const response = await fetchWithPay("https://api.example.com/premium");For API Developers (Charge for APIs)
Install the Express middleware to monetize your routes:
npm install x402-stellar-express expressimport express from "express";
import { paymentMiddleware } from "x402-stellar-express";
const app = express();
// Protect routes with payments - that's it!
app.use(paymentMiddleware({
payTo: "GXXXX...", // Your Stellar address to receive payments
routes: {
"/api/premium/*": { price: "1.00" } // 1 XLM
},
facilitator: { url: "http://localhost:4022" },
// Optional: Enable browser-friendly paywall UI
paywall: { appName: "My API" },
}));
app.get("/api/premium/data", (req, res) => {
res.json({ premium: "content" });
});
app.listen(3000);Architecture
┌─────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ CLIENT │ │ RESOURCE SERVER │ │ FACILITATOR │
│ (Wallet) │ │ (API Owner) │ │ │
└──────┬──────┘ └────────┬────────┘ └────────┬────────┘
│ │ │
│ 1. Request │ │
├────────────────────────>│ │
│ │ │
│ 2. 402 Payment Required │ │
│<────────────────────────┤ │
│ │ │
│ 3. Sign payment (XDR) │ │
│ with Freighter/ │ │
│ Keypair │ │
│ │ │
│ 4. Request + X-PAYMENT │ │
├────────────────────────>│ │
│ │ │
│ │ 5. Verify payment │
│ ├──────────────────────────>│
│ │ │
│ │ 6. Verification result │
│ │<──────────────────────────┤
│ │ │
│ │ 7. Serve content │
│ │ │
│ │ 8. Settle payment │
│ ├──────────────────────────>│
│ │ │
│ │ 9. Submit to Stellar │
│ │ (with optional │
│ │ fee-bump) │
│ │ │
│ │ 10. Settlement result │
│ │<──────────────────────────┤
│ │ │
│ 11. 200 OK + Content │ │
│ + X-PAYMENT-RESPONSE│ │
│<────────────────────────┤ │
│ │ │Development
Prerequisites
- Node.js v18 or higher
- pnpm v8 or higher
- Stellar testnet account (fund via friendbot)
Setup
# Clone the repository
git clone https://github.com/your-org/stellar-x402.git
cd stellar-x402
# Install dependencies
pnpm install
# Build all packages
pnpm build
# Run tests
pnpm testTesting
See TESTING.md for comprehensive testing guide.
