Envoyer votre première requête payante avec x402

Ce guide fait passer une requête Solana par x402 : lire le prix, le payer, puis recevoir la réponse avec un reçu de règlement. Les 15 autres chaînes fonctionnent de la même façon, chacune sur sa propre route.
Il vous faut un portefeuille qui contient de l'USDC sur Solana, ou de l'USDC ou de l'EURC sur Base, ainsi qu'un client x402 : le logiciel qui lit la réponse 402, signe un paiement depuis votre portefeuille et renvoie la requête avec ce paiement. Pour les clients x402, consultez la documentation x402 sur x402.org.

1. Envoyer la requête

Envoyez la requête RPC sans paiement :
bash
curl -i https://x402.erpc.global/v1/solana-mainnet \
  --header 'Content-Type: application/json' \
  --data '{"jsonrpc":"2.0","id":1,"method":"getSlot"}'
La réponse est 402 Payment Required. Ses en-têtes indiquent la méthode et le prix :
http
HTTP/2 402
x-payment-required: eyJ4NDAyVmVyc2lvbiI6Mi…
x-rpc-methods: getSlot
x-rpc-weight: 1000
x-rpc-price-usd: 0.001
Le corps liste les options de paiement dans accepts, une pour chaque stablecoin accepté pour payer la requête. amount est exprimé dans la plus petite unité du stablecoin, donc 1000 correspond à 0.001 USDC, ou à 0.001 EURC :
json
{
  "error": { "code": "payment_required", "message": "Payment required", "request_id": "…" },
  "x402Version": 2,
  "accepts": [
    { "scheme": "exact", "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", "amount": "1000", "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", … },
    { "scheme": "exact", "network": "eip155:8453", "amount": "1000", "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", … },
    { "scheme": "exact", "network": "eip155:8453", "amount": "1000", "asset": "0x60a3E35Cc302bFA44Cb288Bc5a4F316Fdb1adb42", … }
  ],
  "pricing": { "methods": ["getSlot"], …, "weight": 1000, "rawWeight": 42, …, "price": "$0.001", … },
  …
}

2. Payer avec un client x402

Transmettez la réponse 402 à votre client x402. Il choisit une option que votre portefeuille peut payer, signe un paiement de ce montant et l'encode pour l'en-tête X-Payment. Le paiement ne demande ni SOL ni ETH pour les frais de réseau.

3. Renvoyer la requête avec le paiement

Renvoyez le même corps, avec le paiement dans l'en-tête X-Payment :
bash
curl -i https://x402.erpc.global/v1/solana-mainnet \
  --header 'Content-Type: application/json' \
  --header 'X-Payment: <PAYMENT_PAYLOAD>' \
  --data '{"jsonrpc":"2.0","id":1,"method":"getSlot"}'
Ne modifiez pas le corps. Le prix est calculé à partir du corps : si un corps modifié a un autre prix, le paiement ne correspond plus et la réponse est price_mismatch.
Une fois le paiement vérifié et réglé, la réponse RPC revient avec le reçu de règlement dans l'en-tête X-Payment-Response :
http
HTTP/2 200
x-payment-response: <RECEIPT>
json
{ "jsonrpc": "2.0", "id": 1, "result": … }
Un paiement ne couvre qu'une seule requête. Si vous envoyez à nouveau le même paiement, il est refusé avec 402 payment_invalid ou 409 duplicate_payment, et la requête n'est pas transmise une seconde fois.

Réponses

Une requête à laquelle x402.erpc.global répond par une erreur avant de demander un paiement ne coûte rien.
Statuterror.codeCe qui s'est passé
402payment_requiredAucun paiement n'a été envoyé. Le corps indique le prix et les options de paiement.
402payment_invalidLe paiement n'a pas été validé. Signez un nouveau paiement et renvoyez la requête.
402price_mismatchLe paiement ne correspond à aucune option proposée par la réponse 402 de cette requête, par exemple sur le prix.
402payment_amount_too_lowLe montant est inférieur au plus petit paiement que x402.erpc.global règle.
402settlement_failedLe règlement a été signalé comme ayant échoué. La réponse propose à nouveau les options de paiement.
409duplicate_paymentLe paiement a déjà été utilisé.
400method_not_supported, invalid_requestLa route ne vend pas la méthode, ou n'accepte pas le corps. Rien n'est facturé.
413batch_too_largeLe batch contient plus de 100 appels. Rien n'est facturé.
500configuration_errorLa route ne peut pas traiter de requêtes pour le moment. Rien n'est facturé.
503payment_unavailableAucune option de paiement ne peut être proposée pour le moment. Rien n'est facturé. Réessayez après le nombre de secondes indiqué par Retry-After.
503service_busyTrop de requêtes en même temps. Rien n'est facturé. Réessayez après le nombre de secondes indiqué par Retry-After.
502settlement_failedLe résultat du règlement est inconnu : le paiement a peut-être abouti, et aucun reçu n'est joint. Vérifiez sur Solana ou sur Base si le paiement que vous avez signé a abouti avant d'en signer un nouveau.
502, 504upstream_error, upstream_timeoutLe paiement a été réglé, mais la chaîne n'a pas répondu, ou pas à temps. Le reçu est tout de même joint. Renvoyer la requête demande un nouveau paiement.
Sur Solana, un appel qui lirait trop de données, comme un getProgramAccounts sans filtre sur un programme volumineux, reçoit une réponse HTTP 200 avec une erreur JSON-RPC avant toute demande de paiement. Il ne coûte donc rien.

Étapes suivantes