/ 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.
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.
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.
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.
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).
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 :
| Chain | Chain ID | USDC address |
|---|---|---|
| Ethereum | 1 | 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 |
| Polygon | 137 | 0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359 |
| Base | 8453 | 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 |
| Arbitrum | 42161 | 0xaf88d065e77c8cC2239327C5EDb3A432268e5831 |
| Optimism | 10 | 0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85 |
| BSC | 56 | 0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d |
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: