home / skills / tenequm / claude-plugins / x402
/x402
This skill helps you implement and manage x402 payments over HTTP 402 for paid APIs, paywalls, and AI workflows across multiple networks.
npx playbooks add skill tenequm/claude-plugins --skill x402Review the files below or copy the command above to add this skill to your agents.
---
name: x402
description: "Build internet-native payments with the x402 open protocol. Use when developing paid APIs, paywalled content, AI agent payment flows, or any service using HTTP 402 Payment Required for on-chain micropayments. Covers TypeScript, Python, and Go SDKs across EVM (Base) and Solana networks with HTTP, MCP, and A2A transports."
---
# x402 Protocol Development
x402 is an open standard (Apache-2.0, by Coinbase) that activates the HTTP `402 Payment Required` status code for programmatic, on-chain payments. No accounts, sessions, or API keys required - clients pay with signed crypto transactions directly over HTTP.
## When to Use
- Building a **paid API** that accepts crypto micropayments
- Adding **paywall** to web content or endpoints
- Enabling **AI agents** to autonomously pay for resources
- Integrating **MCP tools** that require payment
- Building **agent-to-agent** (A2A) payment flows
- Working with **EVM** (Base, Ethereum) or **Solana** payment settlement
## Core Architecture
Three roles in every x402 payment:
1. **Resource Server** - protects endpoints, returns 402 with payment requirements
2. **Client** - signs payment authorization, retries request with payment header
3. **Facilitator** - verifies signatures, settles transactions on-chain
Payment flow (HTTP transport):
```
Client -> GET /resource -> Server returns 402 + PAYMENT-REQUIRED header
Client -> signs payment -> retries with PAYMENT-SIGNATURE header
Server -> POST /verify to Facilitator -> POST /settle to Facilitator
Server -> returns 200 + PAYMENT-RESPONSE header + resource data
```
## Quick Start: Seller (TypeScript + Express)
```typescript
import express from "express";
import { paymentMiddleware, x402ResourceServer } from "@x402/express";
import { ExactEvmScheme } from "@x402/evm/exact/server";
import { HTTPFacilitatorClient } from "@x402/core/server";
const app = express();
const payTo = "0xYourWalletAddress";
const facilitator = new HTTPFacilitatorClient({ url: "https://x402.org/facilitator" });
const server = new x402ResourceServer(facilitator)
.register("eip155:84532", new ExactEvmScheme());
app.use(
paymentMiddleware(
{
"GET /weather": {
accepts: [
{ scheme: "exact", price: "$0.001", network: "eip155:84532", payTo },
],
description: "Weather data",
mimeType: "application/json",
},
},
server,
),
);
app.get("/weather", (req, res) => {
res.json({ weather: "sunny", temperature: 70 });
});
app.listen(4021);
```
Install: `npm install @x402/express @x402/core @x402/evm`
## Quick Start: Buyer (TypeScript + Axios)
```typescript
import { x402Client, wrapAxiosWithPayment } from "@x402/axios";
import { registerExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";
import axios from "axios";
const signer = privateKeyToAccount(process.env.EVM_PRIVATE_KEY as `0x${string}`);
const client = new x402Client();
registerExactEvmScheme(client, { signer });
const api = wrapAxiosWithPayment(axios.create(), client);
const response = await api.get("http://localhost:4021/weather");
// Payment handled automatically on 402 response
```
Install: `npm install @x402/axios @x402/evm viem`
## Quick Start: Seller (Python + FastAPI)
```python
from fastapi import FastAPI
from x402.http import FacilitatorConfig, HTTPFacilitatorClient, PaymentOption
from x402.http.middleware.fastapi import PaymentMiddlewareASGI
from x402.http.types import RouteConfig
from x402.mechanisms.evm.exact import ExactEvmServerScheme
from x402.server import x402ResourceServer
app = FastAPI()
facilitator = HTTPFacilitatorClient(FacilitatorConfig(url="https://x402.org/facilitator"))
server = x402ResourceServer(facilitator)
server.register("eip155:84532", ExactEvmServerScheme())
routes = {
"GET /weather": RouteConfig(
accepts=[PaymentOption(scheme="exact", pay_to="0xYourAddress", price="$0.001", network="eip155:84532")],
mime_type="application/json",
description="Weather data",
),
}
app.add_middleware(PaymentMiddlewareASGI, routes=routes, server=server)
@app.get("/weather")
async def get_weather():
return {"weather": "sunny", "temperature": 70}
```
Install: `pip install "x402[fastapi,evm]"`
## Quick Start: Seller (Go + Gin)
```go
import (
x402http "github.com/coinbase/x402/go/http"
ginmw "github.com/coinbase/x402/go/http/gin"
evm "github.com/coinbase/x402/go/mechanisms/evm/exact/server"
)
facilitator := x402http.NewHTTPFacilitatorClient(&x402http.FacilitatorConfig{URL: facilitatorURL})
routes := x402http.RoutesConfig{
"GET /weather": {
Accepts: x402http.PaymentOptions{
{Scheme: "exact", Price: "$0.001", Network: "eip155:84532", PayTo: evmAddress},
},
Description: "Weather data",
MimeType: "application/json",
},
}
r.Use(ginmw.X402Payment(ginmw.Config{
Routes: routes,
Facilitator: facilitator,
Schemes: []ginmw.SchemeConfig{{Network: "eip155:84532", Server: evm.NewExactEvmScheme()}},
}))
```
Install: `go get github.com/coinbase/x402/go`
## Multi-Network Support (EVM + Solana)
Servers can accept payment on multiple networks simultaneously:
```typescript
import { ExactEvmScheme } from "@x402/evm/exact/server";
import { ExactSvmScheme } from "@x402/svm/exact/server";
const server = new x402ResourceServer(facilitator)
.register("eip155:84532", new ExactEvmScheme())
.register("solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", new ExactSvmScheme());
// Route config with both networks
"GET /weather": {
accepts: [
{ scheme: "exact", price: "$0.001", network: "eip155:84532", payTo: evmAddress },
{ scheme: "exact", price: "$0.001", network: "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", payTo: svmAddress },
],
}
```
Clients register both schemes and auto-select based on server requirements:
```typescript
const client = new x402Client();
registerExactEvmScheme(client, { signer: evmSigner });
registerExactSvmScheme(client, { signer: svmSigner });
```
## Supported Networks
| Network | CAIP-2 ID | Status |
|---------|-----------|--------|
| Base Mainnet | `eip155:8453` | Mainnet |
| Base Sepolia | `eip155:84532` | Testnet |
| Solana Mainnet | `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp` | Mainnet |
| Solana Devnet | `solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1` | Testnet |
| Avalanche | `eip155:43114` | Via community facilitators |
Default facilitator (`https://x402.org/facilitator`) supports Base Sepolia and Solana Devnet.
## SDK Packages
### TypeScript (npm)
| Package | Purpose |
|---------|---------|
| `@x402/core` | Core types, client, server, facilitator |
| `@x402/evm` | EVM scheme (EIP-3009 + Permit2) |
| `@x402/svm` | Solana scheme (SPL TransferChecked) |
| `@x402/express` | Express middleware |
| `@x402/hono` | Hono edge middleware |
| `@x402/next` | Next.js middleware |
| `@x402/axios` | Axios interceptor |
| `@x402/fetch` | Fetch wrapper |
| `@x402/paywall` | Browser paywall UI |
| `@x402/mcp` | MCP client + server |
| `@x402/extensions` | Bazaar, payment-identifier, sign-in-with-x |
### Python (pip)
```bash
pip install "x402[httpx]" # Async HTTP client
pip install "x402[requests]" # Sync HTTP client
pip install "x402[fastapi]" # FastAPI server
pip install "x402[flask]" # Flask server
pip install "x402[svm]" # Solana support
```
### Go
```bash
go get github.com/coinbase/x402/go
```
## Key Concepts
- **Client/Server/Facilitator**: The three roles in every payment. Client signs, server enforces, facilitator settles on-chain. See `references/core-concepts.md`
- **Wallet**: Both payment mechanism and identity for buyers/sellers. See `references/core-concepts.md`
- **Networks & Tokens**: CAIP-2 identifiers, EIP-3009 tokens on EVM, SPL on Solana, custom token config. See `references/core-concepts.md`
- **Scheme**: Payment method (`exact` = transfer exact amount). See `references/evm-scheme.md`, `references/svm-scheme.md`
- **Transport**: How payment data is transmitted (HTTP headers, MCP `_meta`, A2A metadata). See `references/transports.md`
- **Extensions**: Optional features (bazaar discovery, payment-identifier idempotency, sign-in-with-x auth, gas sponsoring). See `references/extensions.md`
- **Hooks**: Lifecycle callbacks on client/server/facilitator (TS, Python, Go). See `references/lifecycle-hooks.md`
- **Protocol types**: `PaymentRequired`, `PaymentPayload`, `SettlementResponse`. See `references/protocol-spec.md`
- **Custom tokens**: Use `registerMoneyParser` for non-USDC tokens, Permit2 for non-EIP-3009 tokens. See `references/evm-scheme.md`
- **Mainnet deployment**: Switch facilitator URL, network IDs, and wallet addresses. See `references/core-concepts.md`
## References
| File | Content |
|------|---------|
| `references/core-concepts.md` | HTTP 402 foundation, client/server/facilitator roles, wallet identity, networks, tokens, custom token config, dynamic registration, self-hosted facilitator, mainnet deployment |
| `references/protocol-spec.md` | v2 protocol types, payment flow, facilitator API, error codes |
| `references/typescript-sdk.md` | TypeScript SDK patterns for server, client, MCP, paywall, facilitator |
| `references/python-sdk.md` | Python SDK patterns for server, client, MCP (server + client), facilitator |
| `references/go-sdk.md` | Go SDK patterns for server, client, MCP, facilitator, signers, custom money parser |
| `references/evm-scheme.md` | EVM exact scheme: EIP-3009, Permit2, default asset resolution, registerMoneyParser, custom tokens |
| `references/svm-scheme.md` | Solana exact scheme: SPL TransferChecked, verification rules |
| `references/transports.md` | HTTP, MCP, A2A transport implementations |
| `references/extensions.md` | Bazaar, payment-identifier, sign-in-with-x, gas sponsoring (eip2612 + erc20) extensions |
| `references/lifecycle-hooks.md` | Client/server/facilitator hooks (TypeScript, Python, Go), hook chaining, MCP hooks |
## Official Resources
- GitHub: https://github.com/coinbase/x402
- Spec: https://github.com/coinbase/x402/tree/main/specs
- Docs: https://docs.x402.org
- Website: https://x402.org
- Ecosystem: https://x402.org/ecosystem
This skill helps developers implement x402, an open protocol that uses HTTP 402 Payment Required for programmatic on-chain micropayments. It provides SDK examples and middleware for TypeScript, Python, and Go across EVM (Base) and Solana, plus HTTP, MCP, and agent-to-agent transports. Use it to build paid APIs, paywalls, and autonomous agent payment flows without accounts or API keys.
The skill inspects incoming requests and responds with a 402 plus payment requirements when an endpoint is paywalled. Clients sign a payment authorization and resend the request with a PAYMENT-SIGNATURE header. The server verifies the signature with a facilitator which settles the on-chain transfer, then returns the resource and a PAYMENT-RESPONSE header. SDKs include client, server, and facilitator components and support multiple network schemes and transports.
Do clients need accounts or API keys?
No. Clients sign on-chain payment authorizations and send them directly; no centralized API keys or sessions are required.
Which transports does x402 support?
x402 supports HTTP headers, MCP metadata, and agent-to-agent (A2A) metadata transports for passing payment data.