x402-payments

x402 embeds stablecoin payments into HTTP by using the 402 "Payment Required" status code. A server responds with payment requirements; the client signs a payment authorization, resubmits the request, and gets the resource after verification and settlement.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "x402-payments" with this command: npx skills add aznatkoiny/zai-skills/aznatkoiny-zai-skills-x402-payments

x402 Protocol Skill

Protocol Overview

x402 embeds stablecoin payments into HTTP by using the 402 "Payment Required" status code. A server responds with payment requirements; the client signs a payment authorization, resubmits the request, and gets the resource after verification and settlement.

Payment flow:

  • Client sends HTTP request → Server returns 402
  • PAYMENT-REQUIRED header (base64 JSON)
  • Client reads requirements, creates signed payment payload

  • Client resubmits request with PAYMENT-SIGNATURE header (base64 JSON)

  • Server verifies payment via facilitator POST /verify

  • Server performs work, settles via facilitator POST /settle

  • Server returns 200

  • resource + PAYMENT-RESPONSE header (contains txHash)

Key concepts:

  • Facilitators verify and settle payments without holding funds. Use https://x402.org/facilitator for testnet, CDP facilitator for mainnet.

  • Schemes: exact (fixed price per request) is the production scheme. upto and deferred are proposed.

  • Networks: Identified by CAIP-2 format — eip155:84532 (Base Sepolia), eip155:8453 (Base Mainnet), solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1 (Solana Devnet).

  • EVM uses EIP-3009 gasless TransferWithAuthorization . Solana uses SPL token transfers.

Quick-Start: Protect an API Endpoint (Seller)

npm install @x402/express @x402/core @x402/evm

import express from "express"; import { paymentMiddleware } from "@x402/express"; import { x402ResourceServer, HTTPFacilitatorClient } from "@x402/core/server"; import { registerExactEvmScheme } from "@x402/evm/exact/server";

const app = express(); const payTo = process.env.PAY_TO!;

const facilitatorClient = new HTTPFacilitatorClient({ url: "https://x402.org/facilitator", }); const server = new x402ResourceServer(facilitatorClient); registerExactEvmScheme(server);

app.use( paymentMiddleware( { "GET /weather": { accepts: [ { scheme: "exact", price: "$0.001", network: "eip155:84532", payTo }, ], description: "Get current weather data", mimeType: "application/json", }, }, server, ), );

app.get("/weather", (req, res) => { res.json({ weather: "sunny", temperature: 70 }); });

app.listen(4021, () => console.log("Server on :4021"));

Quick-Start: Pay for x402 Resources (Buyer/Agent)

npm install @x402/fetch @x402/core @x402/evm viem

import { wrapFetchWithPayment } from "@x402/fetch"; import { x402Client, x402HTTPClient } from "@x402/core/client"; import { registerExactEvmScheme } from "@x402/evm/exact/client"; import { privateKeyToAccount } from "viem/accounts";

const signer = privateKeyToAccount(process.env.EVM_PRIVATE_KEY as 0x${string}); const client = new x402Client(); registerExactEvmScheme(client, { signer });

const fetchWithPayment = wrapFetchWithPayment(fetch, client);

const response = await fetchWithPayment("http://localhost:4021/weather"); const data = await response.json(); console.log(data);

// Read payment receipt const httpClient = new x402HTTPClient(client); const receipt = httpClient.getPaymentSettleResponse( (name) => response.headers.get(name), ); console.log("Tx:", receipt?.txHash);

Decision Tree

Decision Choice Packages

Server: Express paymentMiddleware from @x402/express

@x402/express @x402/core @x402/evm

Server: Next.js paymentProxy from @x402/next

@x402/next @x402/core @x402/evm

Server: Hono paymentMiddleware from @x402/hono

@x402/hono @x402/core @x402/evm

Client: fetch wrapFetchWithPayment

@x402/fetch @x402/core @x402/evm viem

Client: axios wrapAxiosWithPayment

@x402/axios @x402/core @x402/evm viem axios

Client: manual x402Client

  • x402HTTPClient from @x402/core

@x402/core @x402/evm viem

Chain: EVM registerExactEvmScheme

@x402/evm

  • viem

Chain: Solana registerExactSvmScheme

@x402/svm

  • @solana/kit @scure/base

Chain: both Register both schemes on same client/server All chain deps

Env: testing Facilitator https://x402.org/facilitator

Base Sepolia / Solana Devnet

Env: production CDP facilitator + API keys Base Mainnet / Solana Mainnet

Agent: MCP MCP server with @x402/axios

See references/agentic-patterns.md

Agent: Anthropic Tool-use with @x402/fetch

See references/agentic-patterns.md

Reference File Navigation

Task Read this file

Headers, payloads, CAIP-2 IDs, facilitator API, V1→V2 changes references/protocol-spec.md

Express / Hono / Next.js middleware, multi-route, dynamic pricing references/server-patterns.md

Fetch / axios client, wallet setup, lifecycle hooks, error handling references/client-patterns.md

AI agent payments, MCP server, tool discovery, budget controls references/agentic-patterns.md

Testnet→mainnet migration, CDP keys, faucets, security, sessions references/deployment.md

Critical Implementation Notes

  • Register schemes before wrapping fetch/axios — order matters.

  • Two equivalent registration APIs:

  • Function: registerExactEvmScheme(server) / registerExactEvmScheme(client, { signer })

  • Method: server.register("eip155:84532", new ExactEvmScheme())

  • V2 headers (current): PAYMENT-REQUIRED , PAYMENT-SIGNATURE , PAYMENT-RESPONSE . V1 headers (legacy): X-PAYMENT , X-PAYMENT-RESPONSE . SDK is backward-compatible.

  • Price format: "$0.001" (dollar string) — SDK converts to atomic units (6 decimals for USDC).

  • Python SDK uses V1 patterns only. Use TypeScript or Go for V2.

  • Node.js v24+ required for the TypeScript SDK.

  • Repo: https://github.com/coinbase/x402 — canonical examples in examples/typescript/ .

  • Docs: https://docs.cdp.coinbase.com/x402/welcome and https://x402.gitbook.io/x402 .

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

consulting-frameworks

No summary provided by upstream source.

Repository SourceNeeds Review
General

cpp-reinforcement-learning

No summary provided by upstream source.

Repository SourceNeeds Review
General

deep-learning

No summary provided by upstream source.

Repository SourceNeeds Review
General

reinforcement-learning

No summary provided by upstream source.

Repository SourceNeeds Review