/ Spécification x402 v2

Référence du protocole.

Le protocole x402 v2 complet : headers requête/réponse, schémas JSON, structures EIP-712, réseaux supportés, adresses de contrats.

/ 01

1. Le client envoie la requête initiale

Une requête HTTP standard vers une ressource protégée. Aucun header spécial au premier essai.

/ 02

2. Le serveur répond 402 + payment-required

La réponse contient un header payment-required : objet JSON en Base64 qui spécifie la version x402, les méthodes de paiement acceptées, les montants, l'adresse du destinataire, l'identifiant de ressource.

/ 03

3. Le client signe le paiement

Le wallet parse les exigences, choisit EIP-3009 ou Permit2, construit les données typées EIP-712, signe avec la clé privée de l'utilisateur.

/ 04

4. Le client renvoie avec payment-signature

La requête originale est renvoyée avec un header payment-signature contenant le payload d'autorisation signé (JSON en Base64).

/ 05

5. Le serveur vérifie et délivre

Le serveur décode la signature, soumet la meta-transaction (EIP-3009) ou la tx de règlement (Permit2) on-chain, confirme la réception, renvoie la ressource avec un header payment-response.

Schéma du header payment-required

{
  "x402Version": 2,
  "accepts": [
    {
      "scheme": "eip3009",
      "network": "base",
      "token": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "maxAmountRequired": "100000",
      "resource": "/api/inference",
      "description": "GPU inference — 1 request",
      "mimeType": "application/json",
      "payTo": "0x...facilitator",
      "extra": {}
    }
  ]
}

Réseaux supportés

x402 v2 règle en USDC sur ces réseaux EVM :

ChainChain IDUSDC address
Ethereum10xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
Polygon1370x3c499c542cEF5E3811e1192ce70d8cC03d5c3359
Base84530x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
Arbitrum421610xaf88d065e77c8cC2239327C5EDb3A432268e5831
Optimism100x0b2C639c533813f4Aa9D7837CAf62653d097Ff85
BSC560x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d

Données typées EIP-712

Les deux méthodes de signature utilisent des données structurées EIP-712 pour la sécurité et la lisibilité. Le wallet affiche des champs lisibles avant que l'utilisateur signe.

EIP-3009 types

TransferWithAuthorization(
  address from,
  address to,
  uint256 value,
  uint256 validAfter,
  uint256 validBefore,
  bytes32 nonce
)

Permit2 types

PermitWitnessTransferFrom(
  TokenPermissions permitted,
  address spender,
  uint256 nonce,
  uint256 deadline,
  X402Witness witness
)
TokenPermissions(
  address token,
  uint256 amount
)

Dernière mise à jour: