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/express

Step 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 proof

What 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: data

Production 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()
  });
});
X (Twitter)