x402: cómo una IA paga una API sin tener cuenta

Todas las API del mundo se venden a través de un formulario.

Llegas a una página de precios, escribes un correo, lo confirmas desde tu bandeja, pegas una tarjeta, copias una clave y la guardas en una variable de entorno. Son cuatro minutos y funciona perfectamente — porque eres humano, y los humanos tienen bandeja de entrada, tarjeta y paciencia.

Ahora imagina un agente de IA a mitad de un bucle de investigación. Necesita una página web convertida a Markdown, ahora mismo, para terminar la tarea que le encargaron. No puede recibir un correo de confirmación. No tiene tarjeta. No puede esperar a que un humano se despierte y le pegue una clave.

Así que hace lo único que le queda: se rinde y usa otra cosa.

Ese es exactamente el hueco que cierra x402 — y desde hoy, la API de Minibase lo responde en producción.

HTTP ya lo había previsto en 1997

El código de estado 402 Payment Required está en la especificación HTTP desde el principio, marcado como «reservado para uso futuro». Durante casi treinta años fue el chiste de la RFC: el código que nadie podía implementar, porque la web no tenía forma de mover cantidades pequeñas de dinero dentro de una petición.

x402 es el protocolo que por fin lo usa. La idea cabe en tres pasos:

  1. Un cliente llama a tu endpoint sin credencial alguna.
  2. En lugar de un 401 Unauthorized, el servidor responde 402 Payment Required y adjunta las condiciones de pago legibles por máquina: cuánto, en qué activo, en qué red, a qué dirección.
  3. El cliente paga y repite la petición con la prueba de pago adjunta. El servidor verifica, liquida y sirve la respuesta.

Sin cuenta. Sin clave. Sin panel de control. Toda la negociación ocurre en dos idas y vueltas HTTP, en un formato que otro programa sabe leer.

Cómo se ve en un endpoint real

Llama a nuestro endpoint de conversión sin nada:

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

Recibes un 402, y las condiciones vuelven codificadas en base64 dentro de una cabecera payment-required:

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

Todo lo que un cliente autónomo necesita está ahí. network es un identificador CAIP-2eip155:8453 es Base mainnet. asset es el contrato de USDC. amount va en unidades atómicas: USDC tiene seis decimales, así que 10000 es un céntimo. payTo es donde va el dinero.

El cliente firma una transferencia de USDC, repite la petición con el pago adjunto y recibe su Markdown. Intervención humana: cero.

Lo que nadie menciona: no hace falta tener cripto

La objeción obvia a cualquier discurso de «acepta stablecoins» es que ahora tienes que gestionar una cartera. Claves privadas. Custodia. Un saldo denominado en algo que tu contable no ha visto nunca, valorado a un tipo que se movió mientras dormías.

Nosotros no hacemos nada de eso, y tú tampoco tienes por qué. La dirección de depósito del payload anterior la emitió Stripe. Los pagos se liquidan on-chain hacia esa dirección, Stripe registra cada uno como un PaymentIntent normal y paga en euros en el calendario habitual.

La consecuencia práctica es que el dinero aparece en el mismo panel que cualquier pago con tarjeta, en la misma transferencia, en los mismos libros. No hay cartera que proteger, ni valoración de divisa recibo a recibo, ni libro paralelo que conciliar al cierre. La parte stablecoin es real, y a la vez completamente invisible desde la contabilidad.

Dos cosas que nos costaron tiempo

Si vas a implementarlo tú mismo, estas son las dos trampas que pagamos.

El handshake con el facilitador no es opcional. Un servidor de recursos tiene que preguntar al facilitador qué pares de esquema y red liquida realmente antes de poder cotizar nada. Sáltatelo y absolutamente todas las llamadas mueren con Facilitator does not support exact on eip155:8453 — un mensaje que parece un error de configuración y que en realidad es una ida y vuelta que falta. En mainnet, ese facilitador es el de Coinbase; el público de testnet no liquida dinero real.

Un precio por debajo del céntimo rompe tu contabilidad en silencio. Nuestro coste ronda los 0,002 $ por página, así que poner la puerta x402 a 0,002 $ parecía lo obvio. No lo es: los PaymentIntents se denominan en céntimos enteros, así que cualquier cosa por debajo de un céntimo se liquida on-chain y luego no puede registrarse en absoluto. El dinero llega y no entra en ningún libro. Por eso cobramos la puerta sin clave a 0,01 $ por llamada — cinco veces nuestra tarifa por volumen, que un pago por llamada sin cuenta ni compromiso absorbe sin problema.

¿Merece la pena añadirlo?

Seamos honestos con el tamaño: x402 no va a sustituir tus suscripciones este trimestre. Los pagos iniciados por agentes son algo temprano, las herramientas de cliente son jóvenes, y la mayoría de tus clientes siguen siendo humanos con tarjeta.

Pero la asimetría es poco habitual. Montar la puerta nos costó unos cientos de líneas y solo se activa para quien no presenta ninguna credencial — cualquier titular de clave cae directamente en el camino que ya tenía, con la misma cuota y el mismo plan. Nada de lo que ya vendes queda en riesgo.

Y el modo de fallo de no tenerlo es invisible. Un llamante sin clave que se topa con un 401 no deja rastro: ni registro, ni ticket de soporte, ni una línea en tus métricas. Nunca te enteras de que estuvo ahí. Ahora lo instrumentamos específicamente — cada llamada sin credencial se registra, junto con si el llamante ya habla el protocolo — porque «¿hay alguien llamando a la puerta?» es la única pregunta que decide si algo de esto valía la pena.

Si los agentes van a comprar cosas en la web abierta, necesitan una forma de pagar que no pase por un formulario de registro. Esa forma ya existe, lleva en la especificación HTTP desde 1997, y se conecta en una tarde.


Pruébalo: llama a POST https://api.minibase.md/v1/convert sin credenciales y lee la cabecera payment-required. ¿Prefieres una clave? El plan gratuito son 1.000 páginas al mes, sin tarjeta. Especificación completa para agentes: minibase.md/api.md.

Continue reading

¿Listo para guardar de forma más inteligente?

Convierte cualquier página web a Markdown con un clic.

Agregar a Chrome