Haz tu primera solicitud pagada con x402

Esta guía sigue una solicitud de Solana a través de x402: leer el precio, pagarlo y recibir la respuesta con un recibo de liquidación. Las otras 15 cadenas funcionan igual, cada una en su propia ruta.
Necesitas un monedero con USDC en Solana, o con USDC o EURC en Base, y un cliente x402: el software que lee la respuesta 402, firma un pago desde tu monedero y vuelve a enviar la solicitud con él. Para encontrar un cliente x402, consulta la documentación de x402 en x402.org.

1. Envía la solicitud

Envía la solicitud RPC sin pago:
bash
curl -i https://x402.erpc.global/v1/solana-mainnet \
  --header 'Content-Type: application/json' \
  --data '{"jsonrpc":"2.0","id":1,"method":"getSlot"}'
La respuesta es 402 Payment Required. Sus cabeceras indican el método y el precio:
http
HTTP/2 402
x-payment-required: eyJ4NDAyVmVyc2lvbiI6Mi…
x-rpc-methods: getSlot
x-rpc-weight: 1000
x-rpc-price-usd: 0.001
El cuerpo enumera las opciones de pago en accepts, una por cada stablecoin con la que se puede pagar la solicitud. amount está en la unidad más pequeña de la stablecoin, así que 1000 son 0.001 USDC, o 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. Paga con un cliente x402

Pasa la respuesta 402 a tu cliente x402. El cliente elige una opción que tu monedero pueda pagar, firma un pago por ese importe y lo codifica para la cabecera X-Payment. No necesitas SOL ni ETH para las comisiones de red.

3. Vuelve a enviar la solicitud con el pago

Envía de nuevo el mismo cuerpo, con el pago en la cabecera 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"}'
No cambies el cuerpo. El precio se calcula a partir del cuerpo, así que, si un cuerpo modificado tiene otro precio, el pago deja de coincidir y la respuesta es price_mismatch.
Cuando el pago se verifica y se liquida, la respuesta RPC llega con el recibo de liquidación en la cabecera X-Payment-Response:
http
HTTP/2 200
x-payment-response: <RECEIPT>
json
{ "jsonrpc": "2.0", "id": 1, "result": … }
Cada pago cubre una sola solicitud. Si vuelves a enviar el mismo pago, se rechaza con 402 payment_invalid o 409 duplicate_payment, y la solicitud no se reenvía a la cadena por segunda vez.

Respuestas

Una solicitud a la que x402.erpc.global responde con un error antes de pedir el pago no cuesta nada.
Estadoerror.codeQué ocurrió
402payment_requiredNo se envió ningún pago. El cuerpo indica el precio y las opciones de pago.
402payment_invalidEl pago no superó la verificación. Firma un nuevo pago y vuelve a enviar la solicitud.
402price_mismatchEl pago no coincide con ninguna opción que ofreció la respuesta 402 de esta solicitud, por ejemplo en el precio.
402payment_amount_too_lowEl importe es inferior al pago más pequeño que liquida x402.erpc.global.
402settlement_failedSe informó de que la liquidación falló. La respuesta vuelve a ofrecer las opciones de pago.
409duplicate_paymentEl pago ya se usó.
400method_not_supported, invalid_requestLa ruta no vende el método o no acepta el cuerpo. No se cobra nada.
413batch_too_largeEl lote tiene más de 100 llamadas. No se cobra nada.
500configuration_errorLa ruta no puede atender solicitudes en este momento. No se cobra nada.
503payment_unavailableEn este momento no se puede ofrecer ninguna opción de pago. No se cobra nada. Vuelve a intentarlo cuando pasen los segundos que indica Retry-After.
503service_busyDemasiadas solicitudes a la vez. No se cobra nada. Vuelve a intentarlo cuando pasen los segundos que indica Retry-After.
502settlement_failedEl resultado de la liquidación es desconocido: puede que el pago se haya completado, y no se adjunta ningún recibo. Antes de firmar uno nuevo, comprueba en Solana o en Base si el pago que firmaste se completó.
502, 504upstream_error, upstream_timeoutEl pago se liquidó, pero la cadena no respondió, o no respondió a tiempo. El recibo se adjunta igualmente. Volver a enviar la solicitud requiere un nuevo pago.
En Solana, una llamada que leería demasiados datos, como un getProgramAccounts sin filtrar sobre un programa grande, recibe HTTP 200 y un error JSON-RPC antes de que se pida ningún pago, así que no cuesta nada.

Próximos pasos