x402 : payer une API sans compte, quand on est une IA

Toutes les API du monde se vendent à travers un formulaire.

Vous arrivez sur une page de tarifs, vous tapez un email, vous le confirmez depuis votre boîte, vous collez une carte, vous copiez une clé et vous la rangez dans une variable d’environnement. Ça prend quatre minutes et ça marche très bien — parce que vous êtes un humain, et que les humains ont une boîte mail, une carte et de la patience.

Maintenant imaginez un agent IA au milieu d’une boucle de recherche. Il a besoin d’une page web convertie en Markdown, tout de suite, pour finir la tâche qu’on lui a confiée. Il ne peut pas recevoir d’email de confirmation. Il n’a pas de carte. Il ne peut pas attendre qu’un humain se réveille pour lui coller une clé.

Alors il fait la seule chose qui lui reste : il abandonne et va voir ailleurs.

C’est exactement le trou que comble x402 — et depuis aujourd’hui, l’API Minibase y répond en production.

HTTP avait prévu le coup en 1997

Le code de statut 402 Payment Required est dans la spécification HTTP depuis les origines, avec la mention « réservé pour un usage futur ». Pendant près de trente ans, il est resté la blague de la RFC : le code que personne ne pouvait implémenter, parce que le web n’avait aucun moyen de déplacer de petites sommes à l’intérieur d’une requête.

x402 est le protocole qui s’en sert enfin. Le principe tient en trois étapes :

  1. Un client appelle votre endpoint sans aucun identifiant.
  2. Au lieu d’un 401 Unauthorized, le serveur répond 402 Payment Required et joint les conditions de paiement lisibles par une machine : combien, dans quel actif, sur quel réseau, vers quelle adresse.
  3. Le client paie et rejoue la requête avec la preuve de paiement. Le serveur vérifie, encaisse, et sert la réponse.

Pas de compte. Pas de clé. Pas de tableau de bord. Toute la négociation tient en deux allers-retours HTTP, dans un format qu’un autre programme sait lire.

À quoi ça ressemble sur un endpoint réel

Appelez notre endpoint de conversion sans rien :

curl -i -X POST https://api.minibase.md/v1/convert \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/article"}'

Vous récupérez un 402, et les conditions reviennent encodées en base64 dans un en-tête payment-required :

{
  "x402Version": 2,
  "accepts": [{
    "scheme": "exact",
    "network": "eip155:8453",
    "amount": "10000",
    "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "payTo": "0xfb8157a583e3050440301f418f5e890190222a5c",
    "maxTimeoutSeconds": 300
  }]
}

Tout ce dont un client autonome a besoin est là. network est un identifiant CAIP-2eip155:8453, c’est Base mainnet. asset est le contrat USDC. amount est en unités atomiques : l’USDC a six décimales, donc 10000 vaut un centime. payTo est la destination des fonds.

Le client signe un transfert USDC, rejoue sa requête avec le paiement attaché, et récupère son Markdown. Intervention humaine : zéro.

Ce que personne ne dit : vous n’avez pas à détenir de crypto

L’objection immédiate à tout discours « acceptez les stablecoins », c’est qu’il faut désormais gérer un portefeuille. Des clés privées. De la conservation. Un solde libellé dans quelque chose que votre comptable n’a jamais vu, valorisé à un cours qui a bougé pendant votre sommeil.

Nous ne faisons rien de tout ça, et vous n’êtes pas obligé non plus. L’adresse de dépôt du payload ci-dessus a été émise par Stripe. Les paiements sont réglés on-chain vers cette adresse, Stripe enregistre chacun d’eux comme un PaymentIntent ordinaire, et verse en euros sur le calendrier habituel.

Conséquence concrète : l’argent apparaît dans le même tableau de bord que n’importe quel paiement par carte, sur le même virement, dans les mêmes livres. Aucun portefeuille à sécuriser, aucune valorisation de devise à faire reçu par reçu, aucun registre parallèle à rapprocher en fin d’exercice. La partie stablecoin est bien réelle — et parfaitement invisible côté comptabilité.

Deux choses qui nous ont coûté du temps

Si vous implémentez ça vous-même, voici les deux pièges que nous avons payés.

Le handshake avec le facilitateur n’est pas optionnel. Un serveur de ressources doit demander au facilitateur quels couples schéma/réseau il règle réellement avant de pouvoir proposer un prix. Sautez cette étape et absolument tous vos appels meurent sur Facilitator does not support exact on eip155:8453 — un message qui ressemble à une erreur de configuration et qui n’est en fait qu’un aller-retour manquant. Sur le mainnet, ce facilitateur est celui de Coinbase ; celui du testnet public ne règle pas de vrai argent.

Un prix sous le centime casse votre comptabilité en silence. Notre coût de revient tourne autour de 0,002 $ par page, donc facturer la porte x402 à 0,002 $ paraissait évident. Ça ne l’est pas : les PaymentIntents sont libellés en centimes entiers, donc tout ce qui passe sous le centime est réglé on-chain puis ne peut plus être enregistré du tout. L’argent arrive et n’entre dans aucun livre. Nous facturons donc la porte sans clé 0,01 $ par appel — cinq fois notre tarif au volume, ce qu’un paiement à l’appel sans compte ni engagement absorbe sans difficulté.

Faut-il l’ajouter ?

Soyons honnêtes sur les ordres de grandeur : x402 ne va pas remplacer vos abonnements ce trimestre. Les paiements initiés par des agents sont un sujet neuf, l’outillage client est jeune, et la plupart de vos clients restent des humains avec une carte.

Mais l’asymétrie est inhabituelle. Installer la porte nous a coûté quelques centaines de lignes, et elle ne se déclenche que pour les appelants qui ne présentent aucun identifiant — tout détenteur de clé existant retombe directement sur le chemin qu’il avait déjà, même quota, même formule. Rien de ce que vous vendez déjà n’est mis en risque.

Et l’absence de cette porte a un coût invisible. Un appelant sans clé qui se prend un 401 ne laisse aucune trace : pas d’inscription, pas de ticket, pas une ligne dans vos statistiques. Vous n’apprenez jamais qu’il est passé. Nous instrumentons ça spécifiquement désormais — chaque appel sans identifiant est journalisé, avec le fait de savoir si l’appelant parle déjà le protocole — parce que « est-ce que quelqu’un frappe à la porte ? » est la seule question qui dit si tout ça valait la peine.

Si les agents doivent acheter des choses sur le web ouvert, il leur faut un moyen de payer qui ne passe pas par un formulaire d’inscription. Ce moyen existe déjà, il dort dans la spécification HTTP depuis 1997, et il se branche en un après-midi.


Essayez : appelez POST https://api.minibase.md/v1/convert sans aucun identifiant et lisez l’en-tête payment-required. Vous préférez une clé ? L’offre gratuite donne 1 000 pages par mois, sans carte. Spécification complète pour les agents : minibase.md/api.md.

Continue reading

Prêt à sauvegarder plus intelligemment ?

Convertissez n'importe quelle page web en Markdown en un clic.

Ajouter à Chrome