---
type: Connaissance
title: "x402 : une couche de paiement native sur Internet"
description: "x402 est un protocole ouvert qui permet de payer et d'être payé nativement sur Internet, sans intermédiaire, grâce aux stablecoins."
tags: [ x402, stablecoins, paiement, blockchain ]
---

## Le problème : un Internet sans paiement natif

Les systèmes de paiement actuels sont globalement peu pratiques, peu efficaces et peu sécurisés. Alors qu'Internet a impacté beaucoup de domaines, les outils que nous utilisons au quotidien (cartes bancaires, virements, abonnements, identifiants, clés...) n'ont quasiment pas évolué.

Et si ces systèmes de paiement ne sont déjà pas très pratiques pour les humains, ils le sont encore moins pour les IA qui doivent désormais pouvoir acheter, par exemple, des documents (ex. : études scientifiques payantes), des ressources (ex. : serveurs), des données (ex. : prévision météo) ou des services numériques (ex. : outil d'extraction d'information depuis une image).

Du côté de ceux qui fournissent ces services en ligne, ce n'est pas mieux. Que ces services soient fournis par des humains, des entreprises ou des agents IA, il n'est pas facile de les monétiser. Vous devez ouvrir un compte, remplir des formulaires, utiliser des solutions complexes ou des plateformes avec des coûts non négligeables.

Bref, **payer ou se faire payer sur Internet reste inutilement complexe et coûteux**.

## La solution : x402

[x402](https://www.x402.org/) est un protocole ouvert proposé par [Coinbase](https://www.coinbase.com/) qui vise à standardiser les paiements natifs sur Internet en reprenant le code d'état [HTTP 402 "Paiement requis"](https://developer.mozilla.org/fr/docs/Web/HTTP/Reference/Status/402), qui existe depuis longtemps mais n'a jamais vraiment servi.

Concrètement, aujourd'hui, quand vous tapez une adresse sur Internet et que la page demandée n'existe pas, par exemple https://www.angara.finance/nexistepas, vous recevez un code d'état [HTTP 404 "Not found"](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/404), qui indique que la ressource demandée n'existe pas.

Si vous voulez connaître le prix du Bitcoin et que vous tapez cette adresse https://www.google.com/search?q=bitcoin+price, le serveur google vous répond avec un [code HTTP 200 "Ok"](https://developer.mozilla.org/fr/docs/Web/HTTP/Reference/Status/200) (que vous ne voyez pas) et une page s'affiche avec le résultat attendu.

Ce que propose x402 :
- Quand vous essayez d'accéder à une ressource payante en utilisant son adresse (ex: https://www.x402.org/protected), le serveur va répondre avec le code d'état [HTTP 402 "Paiement requis"](https://developer.mozilla.org/fr/docs/Web/HTTP/Reference/Status/402). Il va aussi fournir une description du prix de cette ressource d'une façon qu'une machine puisse le comprendre (format JSON).
- Vous pouvez alors refaire votre requête à la même adresse en ajoutant un payload qui contient votre paiement en cryptomonnaie et qui correspond à ce que le serveur vous a indiqué. Ce payload ressemble beaucoup à un chèque signé.
- Le serveur reçoit votre requête avec votre paiement. Il récupère ce paiement, le fait valider, l'envoie sur la blockchain et vous laisse ensuite accéder à la ressource.

En résumé :
1. Le client accède à une ressource, le serveur annonce le prix.
2. Le client accède de nouveau à la ressource en joignant le paiement correspondant au prix.
3. Le serveur reçoit, vérifie et valide le paiement.
4. Le serveur donne accès à la ressource au client.

En utilisant le protocole x402 et les paiements via blockchain, on peut réaliser très simplement un paiement direct, sans abonnement, sans carte bancaire, sans compte, sans clé d'API. Bref, **nous pouvons payer sans intermédiaire**.

## Les stablecoins : la révolution derrière x402

Si vous ne connaissez pas les stablecoins, il faut que l'on prenne un moment pour comprendre ce qu'ils sont et pourquoi ils peuvent faire réussir x402.

Concrètement, les stablecoins sont des crypto-monnaies indexées sur une devise réelle, le plus souvent le dollar américain (ex [USDC](https://www.circle.com/fr/usdc) par [Circle](https://www.circle.com)). Contrairement au Bitcoin ou à l’Ether, dont la valeur fluctue en permanence, un stablecoin USDC vaut toujours 1 $.

Grâce à eux, on peut combiner la stabilité d’une monnaie traditionnelle et la programmabilité d’un actif numérique sur la blockchain. Imaginez posséder une sorte de compte en dollar offshore, sans contrainte.

Concrètement, comment cela se passe :
- Circle a déployé un contrat [ERC-20](https://www.coinbase.com/fr-fr/learn/crypto-glossary/what-is-erc-20) sur différentes blockchains (Ethereum, Base, Solana...). Avec ce contrat, ils peuvent émettre/détruire des USDC.
- Pour le commun des mortels, avec des USD (des dollars classiques), vous pouvez acheter des USDC auprès de Circle. Quand vous leur donnez un vrai dollar, ils vont créer un USDC sur la blockchain et vont vous l'envoyer sur votre wallet de crypto-monnaies.
- Le dollar que vous avez donné, ils vont le garder en réserve, sur des comptes bancaires ou dans des bons du Trésor américain à court terme.
- Vous allez désormais pouvoir, sur la blockchain, faire plein de choses avec votre USDC (paiements, placements, prêts avec transactions quasi instantanées & coûts minimes...).
- Et vous pourrez, quand vous le souhaitez, retourner voir Circle pour échanger les USDC que vous possédez contre des vrais dollars ! C'est ce qui fait la beauté de la chose.

Un transfert d'USDC coûte quelques centimes, se règle en quelques secondes et ne peut pas être annulé : ce sont des propriétés parfaites pour les micropaiements automatisés entre services, API ou agents IA. **Les stablecoins comme l'USDC sont le carburant idéal pour x402 : une monnaie numérique stable, vérifiable et utilisable directement dans le protocole HTTP**.

## Comment cela fonctionne techniquement ?

x402 repose sur trois acteurs :
- **Le client** : un humain, un programme ou un agent IA, qui initie la requête.
- **Le serveur** : qui fournit un service "protégé" par x402.
- **Le facilitator** : un serveur chargé de vérifier et exécuter le paiement sur la blockchain.

Examinons un exemple concret :
- Un client va vouloir appeler un serveur pour accéder à un service. Par exemple, un agent IA va appeler un service financier pour connaître le prix de l'action SpaceX.

- Le serveur du service financier va retourner une erreur 402 avec le contenu JSON suivant:
```json
  {
  "x402Version": 1,
  "error": "X-PAYMENT header is required",
  "accepts": [
    {
      "scheme": "exact",
      "network": "base",
      "maxAmountRequired": "1000",
      "resource": "http://localhost:4021/quote?spaceX",
      "payTo": "0x2980bc24bBFB34DE1BBC91479Cb712ffbCE02F73",
      "maxTimeoutSeconds": 60,
      "asset": "0x036CbD53842c5426634e7929541eC2318f3dCF7e"
    }
  ]
}
```

- En lisant le [^1]JSON ci-dessus, le client sait qu'il doit payer 0,1 USDC à l'adresse `0x2980bc24bBFB34DE1BBC91479Cb712ffbCE02F73`. Il va donc générer un paiement qui va ressembler au JSON ci-dessous. *note : le paiement repose sur l'[EIP-3009](https://eips.ethereum.org/EIPS/eip-3009), une sorte d’ordre de paiement signé qui autorise un transfert de stablecoins sans que l’expéditeur n’ait à envoyer lui-même la transaction.*
```json
  {
  "x402Version": 1,
  "scheme": "exact",
  "network": "base",
  "payload": {
    "signature": "0x2d6a7588d6acca505cbf0d9a4a227e0c52c6c34008c8e8986a1283259764173608a2ce6496642e377d6da8dbbf5836e9bd15092f9ecab05ded3d6293af148b571c",
    "authorization": {
      "from": "0x857b06519E91e3A54538791bDbb0E22373e36b66",
      "to": "0x209693Bc6afc0C5328bA36FaF03C514EF312287C",
      "value": "10000",
      "validAfter": "1740672089",
      "validBefore": "1740672154",
      "nonce": "0xf3746613c2d920b5fdabc0856f2aeb2d4f88ee6037b8cc5d04a71a4462f13480"
    }
  }
}
```

- Le serveur est donc à nouveau sollicité par le client, mais cette fois avec un ordre de paiement signé. Afin de vérifier ce paiement et de le pousser sur la blockchain, il va utiliser un facilitateur, c'est-à-dire un serveur tiers spécialisé dans cette tâche. Si le paiement est valide et exécuté, le facilitateur répond favorablement au serveur. Le serveur répond alors au client en lui fournissant le prix de l'action SpaceX.

*note : ni le client ni le serveur n'ont de frais à payer ; ils sont entièrement gérés par le facilitateur, ce qui simplifie la vie de ceux qui paient et de ceux qui sont payés.*

## Mogami : notre expérience et notre stack open source

À la sortie du protocole, j'ai tout de suite voulu creuser pour comprendre. Et quoi de mieux, pour comprendre, que de coder un projet sur le sujet ?

Mon hypothèse de travail est que les entreprises pourraient s'approprier cette technologie, et que beaucoup d'entre elles utilisent Java. J'ai donc développé une stack dédiée avec pour objectif que [Mogami devienne la meilleure stack Java open source pour x402](https://mogami.tech/) :
![[mogami_stack.png]]
- [Mogami client SDK](https://mogami.tech/#clientSDK) ([sources](https://github.com/mogami-tech/x402-java-client)/[documentation](https://mogami.gitbook.io/mogami/java-client-sdk/getting-started)) qui facilite l’intégration des paiements x402 dans les applications Java. En seulement quelques lignes de code, vous pouvez récupérer les exigences de paiement, signer et envoyer les transactions.
- [Mogami server SDK](https://mogami.tech/#serverSDK) ([sources](https://github.com/mogami-tech/x402-spring-boot-starter)/[documentation](https://mogami.gitbook.io/mogami/java-server-sdk/getting-started)) qui permet de transformer n’importe quel endpoint en API payante à l’appel grâce au protocole x402. Avec une simple annotation, vous pouvez exiger un paiement en stablecoins.
- [Mogami facilitator](https://mogami.tech/#facilitator) ([sources](https://github.com/mogami-tech/x402-facilitator)/[documentation]()) vérifie, autorise et transmet les transactions x402. Il connecte vos services à la blockchain de manière sécurisée tout en gardant vos clés privées protégées.
- [Mogami examples](https://mogami.tech/#examples) ([sources](https://github.com/mogami-tech/x402-examples)) illustrent des flux de paiement x402 réels que vous pouvez exécuter et adapter instantanément.

Depuis le décollage de x402, j'ai passé pas mal de temps à travailler sur la partie "facilitator" qui est technologiquement agnostique et qui est disponible en tant que service en ligne. Au moment où j'écris l'article, le service a déjà traité [plus de 10 000 transactions pour une valeur de plus de 275 000 $](https://www.x402scan.com/facilitator/mogami).

Aujourd'hui, la communauté grandit à une vitesse folle et le nombre de projets qui sortent est juste incroyable même si l'utilité de beaucoup d'entre eux peut être remise en question.

## Conclusion

Si ce n'est pas déjà fait, je vous conseille de lire [Read Write Own](https://amzn.to/4nEsKMt), de Chris Dixon. Il y décrit l'évolution d'Internet en trois grandes étapes :
- Le Web 1.0, celui de la lecture (*read*), où l’on consultait des pages écrites par des propriétaires de sites.
- Le Web 2.0, celui de la participation (*read/write*), où chacun peut publier, commenter et créer mais où la valeur est captée par les plateformes (Youtube, Facebook, Instagram...).
- Le Web 3.0 à venir, celui de la propriété et de la valeur (*read/write/own*), où les utilisateurs possèdent et échangent directement ce qu’ils produisent.

x402 s'inscrit parfaitement dans cette logique de Web 3.0 et comble un réel manque. Grâce à ce protocole, payer et se faire payer sur Internet devient aussi simple que partager une information.

x402 ouvre la voie à un web où les humains, les services, les API et les agents IA peuvent s’échanger de la valeur directement, sans comptes, sans abonnements, sans intermédiaires.

L’histoire du web a toujours été celle de la standardisation : TCP/IP pour la communication, HTTP pour le contenu, HTML pour l'affichage... x402 pourrait bien être la prochaine brique de cette évolution.

**Articles pertinents**
[Pourquoi les réseaux ouverts gagnent ?](https://a16zcrypto.substack.com/p/why-open-networks-win?publication_id=811657&post_id=184820339&triggerShare=true&isFreemail=true&r=5km1kj&triedRedirect=true&utm_source=substack&utm_medium=email)

[^1]: Il s'agit d'un JSON partiel, il manque certains champs
