Build an API Provider
Complete guide to monetizing your API with Corex402
Step 1: Setup
npm install x402pp-server express @solana/web3.js
npm install -D typescript @types/node @types/expressStep 2: Add Middleware
server.ts
1import express from 'express';
2import { Connection, Keypair } from '@solana/web3.js';
3import { x402Middleware } from 'x402pp-server';
4
5const app = express();
6app.use(express.json());
7
8// Solana setup
9const connection = new Connection('https://api.devnet.solana.com');
10const wallet = Keypair.generate(); // In production: load securely
11
12console.log('Provider wallet:', wallet.publicKey.toBase58());
13
14// Add x402++ middleware (ONE LINE!)
15app.use('/api/*', x402Middleware({
16 connection,
17 wallet,
18 endpoint: 'https://your-api.com', // Your domain
19 pricing: {
20 basePrice: 0.01, // $0.01 per request
21 token: 'USDC'
22 },
23 sla: {
24 maxLatencyMs: 2000, // Guarantee <2s
25 minUptimePercent: 99.5 // Guarantee 99.5% uptime
26 }
27}));
28
29app.listen(3000);Step 3: Add Your Endpoints
// Your endpoints are now automatically monetized!
app.post('/api/weather', async (req, res) => {
const { city } = req.body;
// req.x402Session contains session info
console.log('Session:', req.x402Session.sessionId);
console.log('Balance:', req.x402Session.remainingBalance);
// Your API logic
const data = await getWeatherData(city);
// Automatic receipt generation
return res.x402Receipt?.(data);
});
app.post('/api/ai', async (req, res) => {
const { prompt } = req.body;
const response = await runAI(prompt);
return res.x402Receipt?.(response);
});
// That's it! Every request:
// ✓ Checks for valid session
// ✓ Deducts payment from balance
// ✓ Generates signed receipt
// ✓ Verifies SLA compliance
// ✓ Returns cryptographic proofWhat Happens Automatically
Request Without Session:
────────────────────────
Agent → POST /api/weather
No X-402-Session-Id header
Middleware:
├─ Checks for Intent header
├─ Generates signed Offer
└─ Returns: 402 Payment Required
X-402-Offer: {...}
Request With Session:
─────────────────────
Agent → POST /api/weather
X-402-Session-Id: session_abc123
Middleware:
├─ Validates session exists
├─ Checks balance >= pricePerRequest
├─ Attaches session to req.x402Session
├─ Calls your handler
│
Your Handler:
├─ Process request
├─ Return data via res.x402Receipt?(data)
│
Middleware:
├─ Generates Receipt {
│ inputHash: sha256(req.body)
│ outputHash: sha256(data)
│ latency: endTime - startTime
│ slaVerification: { met: true/false }
│ signature: ed25519(receipt)
│ }
├─ Deducts from session balance
├─ Updates request count
└─ Returns: 200 OK
X-402-Receipt: {...}
Content: dataProduction Tips
Use Premium RPC
// ❌ DON'T use public RPC in production
const connection = new Connection('https://api.mainnet-beta.solana.com');
// ✅ DO use premium RPC
const connection = new Connection(
process.env.SOLANA_RPC || 'https://rpc.helius.xyz/?api-key=YOUR_KEY'
);Secure Your Keys
// Load from environment
const privateKey = process.env.WALLET_PRIVATE_KEY;
const secretKey = Buffer.from(privateKey, 'base64');
const wallet = Keypair.fromSecretKey(secretKey);
// NEVER hardcode private keys!Monitor Sessions
// Health check endpoint
app.get('/health', async (req, res) => {
res.json({
status: 'healthy',
activeSessions: sessionStore.getActiveSessions().length,
uptime: process.uptime()
});
});