SDK
@relai-fi/x402
Turn any API into a paid API — with one fetch call.
The SDK automatically handles:
402 responses
payment signing
request retry
settlement via facilitator
No API keys. No billing. No backend changes.
Install
terminal
$ npm install @relai-fi/x40210-second example
client.ts
import { createX402Client } from "@relai-fi/x402/client"
const client = createX402Client({
wallets: {
solana: solanaWallet,
evm: evmWallet,
},
})
// this endpoint requires payment
const res = await client.fetch("https://api.example.com/protected")
const data = await res.json()That's it.
x402 — live demo
Click "Try request" to see the x402 flow →
What just happened?
If the API returns 402 Payment Required, the SDK automatically:
signs the payment
retries the request
returns the response
ClientAPI402sign paymentretry200 OK
All handled automatically.
React example
PayButton.tsx
import { useRelaiPayment } from "@relai-fi/x402/react"
const { fetch, isLoading } = useRelaiPayment({ wallets })
<button onClick={()=> fetch("/api/protected")}>
{isLoading ? "Paying..." : "Access API"}
</button>Supported Networks
The SDK works across:
SolanaSPL
Base · Ethereum · Polygon · AvalancheEVM
SKALEGasless
All payments use USDC. Gas is sponsored via facilitator — users don't need native tokens.
Why this SDK exists
Without x402
✗ API keys
✗ subscriptions
✗ billing systems
With x402
pay per request
no accounts
no API keys
native agent payments
Configuration
client.ts
createX402Client({
wallets: {
solana: solanaWallet,
evm: evmWallet,
},
facilitatorUrl: "https://facilitator.x402.fi", // optional
preferredNetwork: "base", // optional
maxAmountAtomic: "5000000", // $5 USDC cap
verbose: true, // log payment flow
})Wallet adapters supported:
Solana Wallet Adapterwagmi / viem
Server — Express
Add payment requirements to any Express endpoint.
server.ts
import express from "express"
import { relai } from "@relai-fi/x402"
const app = express()
app.use(relai({
price: "0.01",
network: "base",
}))
app.get("/protected", (req, res) => {
res.json({ data: "paid content" })
})Per-endpoint pricing
api.ts
app.get("/premium", relai({ price: "0.05" }), handler)How it works (under the hood)
01API returns 402 Payment Required
02SDK reads payment requirements from headers
03Wallet signs payment (EIP-3009 or SPL)
04Facilitator verifies and settles on-chain
05Request succeeds with 200 OK
Advanced
Smart wallets
supported out of the box
no private keys in your code
Gasless mode
automatic via facilitator
no native tokens required
Multi-chain
same SDK works across all networks