Quería comprobar si un agente podía pagar para enviarme un mensaje.
No un humano rellenando un formulario de contacto. No un CAPTCHA. Un agente con dinero, una tarea y el deseo de ponerse en contacto conmigo.
No soy único. Solo soy un trozo de carne al que un ordenador podría querer decirle algo.
Un humano puede ponerse en contacto conmigo en LinkedIn o X cuando quiera, tal y como se indica en la página de contacto.
Si pongo un punto de contacto en este sitio, me sale una nueva bandeja de entrada que vigilar. Spam, bots, contactos en frío. Un CAPTCHA filtra a los humanos. Un pago filtra a todo el mundo, pero las tarjetas de crédito también filtran a los humanos. Necesitaba algo propio de cómo funcionan los agentes.
x402 es esa puerta. Es un protocolo basado en el código de estado HTTP 402 «Pago requerido», el código que Internet reservó para los pagos pero que nunca definió. x402 lo define. Un servidor devuelve un 402 con un precio y una dirección stablecoin. El agente lee la respuesta, firma un permiso con su monedero, vuelve a intentarlo con un encabezado de pago y el servidor liquida en la cadena. Sin página de pago. Sin formulario. Sin cuenta. Solo un código de estado y una firma.
Es una experiencia terrible para una persona. Es una experiencia fantástica para un agente.
Cómo funciona
El punto final se encuentra en /contact/send en este sitio. Un agente lo descubre a través de la especificación OpenAPI o de agents.md. El primer POST no tiene encabezado de pago. El servidor devuelve un 402 con el precio, los activos aceptados y un esquema que describe qué campos incluir. El agente no necesita documentación más allá de la propia respuesta.
sequenceDiagram
participant Human as Human
participant Agent as Agent
participant Site as benmilne.com
participant Facilitator as x402 Facilitator
participant Chain as Blockchain
participant Admin as Admin Panel
Human-->>Agent: "Contact Ben Milne about X"
Agent-->>Site: POST /contact/send (no payment)
Site-->>Agent: 402 + price + assets + field schema
Agent-->>Agent: Sign stablecoin permit
Agent-->>Site: POST + PAYMENT-SIGNATURE + message body
Site-->>Facilitator: Verify signature
Facilitator-->>Site: Valid
Site-->>Facilitator: Settle
Facilitator->>Chain: On-chain transfer (SBC)
Chain-->>Facilitator: Tx hash
Facilitator-->>Site: Settlement confirmed
Site-->>Site: Store message in D1
Site-->>Agent: 200 + receipt with tx hash
Admin-->>Admin: Message appears with block explorer link
rect rgba(200, 120, 50, 0.08)
Note over Human,Admin: Future: callback URL enables two-way communication
end
The Stable Coin Company opera un facilitador que verifica el permiso firmado del agente y ejecuta la transferencia en cadena, pagando el gas en nombre de ambas partes. El agente no necesita tener ETH ni SOL. Solo tiene un activo: el que está utilizando para pagar.
Puesta en marcha
Escribí una pequeña biblioteca llamada x402-payment-path para esto. Se encarga del desafío 402, la verificación de la firma, la liquidación y la generación del recibo.
El protocolo subyacente es x402, el estándar de pago nativo de la Red de Intercambio de Mensajes (stablecoin) que Coinbase convirtió en código abierto y que la Fundación x402 mantiene ahora como un proyecto de la Fundación Linux. The Stable Coin Company gestiona el facilitador, que es compatible tanto con USDC como con SBC en Base, Solana y Radius. Utilicé SBC porque es el activo que mejor conozco.
Si quisieras implementar esto para un producto en lugar de un mensaje, cambiarías lo que ocurre tras el pago. En lugar de almacenar un mensaje, generarías una URL de descarga, activarías un webhook o iniciarías un envío. A la biblioteca no le importa cuál sea la acción. Simplemente condiciona la acción al pago.
Decisiones
El punto final acepta tanto «USDC» como SBC. Utilicé SBC porque es el activo que mejor conozco y el que quería verificar de extremo a extremo en ambas cadenas.
Tengo dos carteras. Mi cartera EVM recibe SBC en Base. Una cartera Solana independiente recibe SBC en Solana. Mismo punto final, mismo precio, diferentes vías de liquidación.
Los mensajes llegan a una tabla D1. Los leo en el panel de administración. Sin reenvío de correos electrónicos, sin bandeja de entrada que supervisar. Un mensaje no debería poder hacer nada más que ser un mensaje.
El precio es de 0,10 $. Lo suficientemente alto como para que el spam resulte antieconómico. Lo suficientemente bajo como para que sea insignificante para un agente legítimo.
Funciona
Aquí hay transacciones reales del 13 de junio de 2026. Cada mensaje costó 0,10 $ en SBC. La liquidación se realizó en cadena.
| Remitente | Red | Importe | Transacción |
|---|---|---|---|
cursor-agent/0.46.2 | Base | 0,10 $ SBC | 0x5265bdd1…963cd · BaseScan |
deal-flow-scout@vcscan.ai | Base | 0,10 $ SBC | 0xe0aa91c4…4313d · BaseScan |
claude-research-agent/1.2 | Base | 0,10 $ SBC | 0xb0c96326…4dd05 · BaseScan |
e2e-test-agent | Base | 0,10 $ SBC | 0x0fca4265…c1b08 · BaseScan |
e2e-test-agent | Solana | 0,10 $ SBC | 2typCyWo…hsYc · Solscan |

Ese es mi panel de administración. Siete mensajes. Base y Solana. Cada uno se liquidó en la cadena antes de aparecer.
Enviarme un mensaje
Si estás creando un agente, el punto final es POST benmilne.com /contact/send. Está documentado en la especificación OpenAPI y en agents.md.
Envía un POST sin encabezado de pago y el servidor devolverá un 402 con todo lo que necesitas. La biblioteca de cliente x402 se encarga de la firma y los reintentos a partir de ahí. El precio es de 0,10 $. SBC y USDC en Base y Solana. Si incluyes una URL de callback, tendré la posibilidad de responder en esa URL en el futuro.
Lo que he aprendido
La respuesta 402 es una factura legible por máquina. El agente no necesita interfaz de usuario. Necesita un precio, una dirección de activos y una red. Firma, paga y vuelve a intentarlo.
Intenté añadir compatibilidad con USDC a través de facilitadores de la comunidad que se anuncian como «sin claves». Ninguno de ellos funcionaba sin permisos. Uno requería el registro de la dirección. Otro tenía incompatibilidad de versiones. SBC a través de The Stable Coin Company fue el único facilitador que funcionó sin necesidad de configuración alguna. Sin claves, sin cuentas, sin registro. Eso es importante si quieres que los agentes puedan pagar sin que un humano tenga que configurar nada primero.
Otra cosa que también me sorprendió: tanto MetaMask como Phantom seguían ocultando SBC en mi monedero, incluso después de haberlo aprobado varias veces. Añadía el token, confirmaba la transacción, comprobaba mi saldo y el activo volvía a desaparecer. Esto ocurrió repetidamente durante las pruebas. No tengo más que respeto por ambos equipos, pero tener que decirle a mi monedero en mi propio dispositivo que quería usar mi propio activo de un emisor regulado, una y otra vez, me pareció ridículo. Internet es grande. Los monederos deberían confiar en las elecciones que sus usuarios ya han hecho.
El código que utilicé para esto es de código abierto y eres libre de hacer lo que quieras con él, siempre que MetaMask o Phantom no quieran influir en lo que haces.