Eu queria ver se um agente poderia pagar para me enviar uma mensagem.

Não um humano preenchendo um formulário de contato. Não um CAPTCHA. Um agente com dinheiro, uma tarefa e o desejo de entrar em contato comigo.

Não sou único. Sou simplesmente um pedaço de carne com quem um computador talvez queira falar.

Um humano pode entrar em contato comigo no LinkedIn ou no X sempre que quiser, conforme descrito na página de contato.

Se eu colocar um ponto de contato neste site, terei uma nova caixa de entrada para monitorar. Spam, bots, abordagens frias. Um CAPTCHA bloqueia humanos. Um pagamento bloqueia todos, mas cartões de crédito também bloqueiam humanos. Eu precisava de algo nativo à forma como os agentes trabalham.

O x402 é essa barreira. É um protocolo baseado no HTTP 402 Payment Required, o código de status que a internet reservou para pagamentos, mas nunca definiu. O x402 o define. Um servidor retorna 402 com um preço e um endereço stablecoin. O agente lê a resposta, assina uma autorização com sua carteira, tenta novamente com um cabeçalho de pagamento, e o servidor liquida na cadeia. Sem página de checkout. Sem formulário. Sem conta. Apenas um código de status e uma assinatura.

Isso é uma experiência terrível para uma pessoa. É uma ótima experiência para um agente.

Como funciona

O endpoint fica em /contact/send neste site. Um agente o descobre por meio da especificação OpenAPI ou do agents.md. O primeiro POST não tem cabeçalho de pagamento. O servidor retorna um 402 com o preço, os ativos aceitos e um esquema descrevendo quais campos incluir. O agente não precisa de documentação além da própria resposta.

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

A Stable Coin Company opera um facilitador que verifica a permissão assinada pelo agente e executa a transferência na cadeia, pagando o gas em nome de ambas as partes. O agente não precisa deter ETH ou SOL. Ele detém um único ativo, aquele com o qual está pagando.

Começando

Escrevi uma pequena biblioteca chamada x402-payment-path para isso. Ela lida com o desafio 402, a verificação de assinatura, a liquidação e a geração de recibos.

O protocolo subjacente é o x402, o padrão de pagamento nativo dUSDC, que a Coinbase tornou de código aberto e que a x402 Foundation agora mantém como um projeto da Linux Foundation. A Stable Coin Company opera o facilitador, que suporta tanto o quanto o SBC na Base, Solana e Radius. Usei o SBC porque é o ativo que conheço melhor.

Se você quisesse implementar isso para um produto em vez de uma mensagem, mudaria o que acontece após o pagamento. Em vez de armazenar uma mensagem, você geraria uma URL de download, acionaria um webhook ou iniciaria uma remessa. A biblioteca não se importa com qual seja a ação. Ela condiciona a ação ao pagamento.

Decisões

O endpoint aceita tanto o USDC quanto o SBC. Usei o SBC porque é o ativo que conheço melhor e aquele que eu queria verificar de ponta a ponta em ambas as cadeias.

Tenho duas carteiras. Minha carteira EVM recebe SBC na Base. Uma carteira Solana separada recebe SBC na Solana. Mesmo endpoint, mesmo preço, diferentes canais de liquidação.

As mensagens chegam a uma tabela D1. Eu as leio no painel de administração. Sem encaminhamento de e-mail, sem caixa de entrada para monitorar. Uma mensagem não deve ser capaz de fazer nada além de ser uma mensagem.

O preço é de US$ 0,10. Alto o suficiente para tornar o spam antieconômico. Baixo o suficiente para ser insignificante para um agente legítimo.

Funciona

Aqui estão transações reais de 13 de junho de 2026. Cada mensagem custou US$ 0,10 em SBC. A liquidação foi na cadeia.

RemetenteRedeValorTransação
cursor-agent/0.46.2Base/bin/sh,10 SBC0x5265bdd1…963cd · BaseScan
deal-flow-scout@vcscan.aiBase/bin/sh,10 SBC0xe0aa91c4…4313d · BaseScan
claude-research-agent/1.2Base/bin/sh,10 SBC0xb0c96326…4dd05 · BaseScan
e2e-test-agentBase/bin/sh,10 SBC0x0fca4265…c1b08 · BaseScan
e2e-test-agentSolana/bin/sh,10 SBC2typCyWo…hsYc · Solscan
Admin panel showing x402 agent messages with sender, message body, network, and transaction hash links to BaseScan and Solscan

Esse é o meu painel de administração. Sete mensagens. Base e Solana. Cada uma foi confirmada na cadeia antes de aparecer.

Enviando uma mensagem para mim

Se você estiver desenvolvendo um agente, o endpoint é POST benmilne.com /contact/send. Está documentado na especificação OpenAPI e no agents.md.

Envie um POST sem cabeçalho de pagamento e o servidor retornará um 402 com tudo o que você precisa. A biblioteca de cliente x402 lida com a assinatura e a repetição a partir daí. O preço é de US$ 0,10. SBC e USDC na Base e na Solana. Se você incluir uma URL de retorno de chamada, terei a capacidade de responder nessa URL no futuro.

O que aprendi

A resposta 402 é uma fatura legível por máquina. O agente não precisa de interface de usuário. Ele precisa de um preço, um endereço de ativo e uma rede. Ele assina, paga e tenta novamente.

Tentei adicionar suporte a USDC por meio de facilitadores da comunidade que se anunciam como “keyless”. Nenhum deles funcionou sem permissão. Um exigia registro de endereço. Outro apresentava incompatibilidade de versão. O SBC, por meio da The Stable Coin Company, foi o único facilitador que funcionou sem qualquer configuração. Sem chaves, sem contas, sem registro. Isso é importante se você quiser que os agentes possam pagar sem que um humano precise configurar nada primeiro.

Uma coisa que também me surpreendeu: tanto o MetaMask quanto o Phantom continuavam ocultando o SBC na minha carteira, mesmo depois de eu ter aprovado várias vezes. Eu adicionava o token, confirmava a transação, verificava meu saldo, e o ativo desaparecia novamente. Isso aconteceu repetidamente durante os testes. Tenho nada além de respeito pelas duas equipes, mas ter que dizer à minha carteira no meu próprio dispositivo que eu queria usar meu próprio ativo de um emissor regulamentado, repetidamente, parecia ridículo. A internet é grande. As carteiras deveriam confiar nas escolhas que seus usuários já fizeram.

O código que usei para isso é de código aberto e você está livre para fazer o que quiser com ele, presumindo que o MetaMask ou o Phantom não queiram influenciar o que você faz.