Мне хотелось проверить, сможет ли агент заплатить за отправку мне сообщения.
Не человек, заполняющий контактную форму. Не CAPTCHA. Агент с кошельком, задачей и желанием связаться со мной.
Я не уникален. Я просто кусок мяса, с которым компьютер, возможно, захочет что-то обсудить.
Человек может связаться со мной в LinkedIn или X, когда захочет, как указано на странице контактов.
Если я размещу контактную координата на этом сайте, у меня появится новый почтовый ящик, за которым придется следить. Спам, боты, холодные обращения. CAPTCHA ограничивает доступ людям. Оплата ограничивает всех, но кредитные карты тоже ограничивают людей. Мне нужно было что-то, присущее тому, как работают агенты.
x402 — это тот самый барьер. Это протокол, построенный на HTTP 402 Payment Required — статусе, который Интернет зарезервировал для платежей, но так и не определил. x402 определяет его. Сервер возвращает 402 с ценой и адресом stablecoin. Агент считывает ответ, подписывает разрешение своим кошельком, повторяет попытку с заголовком оплаты, и сервер проводит расчет в цепочке. Никакой страницы оформления заказа. Никакой формы. Никакой учетной записи. Просто код статуса и подпись.
Для человека это ужасный опыт. Для агента — отличный опыт.
Как это работает
Конечная точка находится по адресу /contact/send на этом сайте. Агент находит ее через спецификацию OpenAPI или agents.md. Первый POST не имеет заголовка оплаты. Сервер возвращает 402 с ценой, принимаемыми активами и схемой, описывающей, какие поля нужно включить. Агенту не нужна документация, кроме самого ответа.
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
Компания Stable Coin Company управляет посредником, который проверяет подписанное разрешение агента и выполняет перевод в цепочке, оплачивая газ от имени обеих сторон. Агенту не нужно держать ETH или SOL. Он держит один актив — тот, которым он платит.
Начало работы
Я написал для этого небольшую библиотеку под названием x402-payment-path. Она обрабатывает запрос 402, проверку подписи, расчет и генерацию квитанции.
В основе лежит протокол x402 — собственный платежный стандарт «stablecoin», который Coinbase открыла для общего доступа, а теперь поддерживает x402 Foundation в рамках проекта Linux Foundation. Компания Stable Coin Company управляет посредником, который поддерживает как «USDC», так и SBC на Base, Solana и Radius. Я использовал SBC, потому что это актив, который я знаю лучше всего.
Если вы хотите реализовать это для продукта, а не для сообщения, вам нужно изменить то, что происходит после оплаты. Вместо хранения сообщения вы будете генерировать URL-адрес для скачивания, запускать веб-хук или инициировать отправку. Библиотеке неважно, каким будет действие. Она просто связывает действие с оплатой.
Решения
Конечная точка принимает как USDC, так и SBC. Я использовал SBC, потому что это актив, который я знаю лучше всего, и который я хотел проверить от начала до конца на обеих цепочках.
У меня два кошелька. Мой кошелек EVM принимает SBC на Base. Отдельный кошелек Solana принимает SBC на Solana. Один и тот же конечный пункт, одна и та же цена, разные каналы расчетов.
Сообщения попадают в таблицу D1. Я читаю их в панели администратора. Никакой пересылки по электронной почте, никакого почтового ящика, который нужно отслеживать. Сообщение не должно ничего делать, кроме как быть сообщением.
Цена составляет 0,10 доллара. Достаточно высокая, чтобы сделать спам нерентабельным. Достаточно низкая, чтобы быть незначительной для легитимного агента.
Это работает
Вот реальные транзакции от 13 июня 2026 года. Каждое сообщение стоило 0,10 доллара в SBC. Расчеты производились в цепочке.
| Отправитель | Сеть | Сумма | Транзакция |
|---|---|---|---|
cursor-agent/0.46.2 | Базовая | 0,10 $ SBC | 0x5265bdd1…963cd · BaseScan |
deal-flow-scout@vcscan.ai | База | 0,10 $ SBC | 0xe0aa91c4…4313d · BaseScan |
claude-research-agent/1.2 | Base | /bin/sh,10 SBC | 0xb0c96326…4dd05 · BaseScan |
e2e-test-agent | Base | /bin/sh,10 SBC | 0x0fca4265…c1b08 · BaseScan |
e2e-test-agent | Solana | /bin/sh,10 SBC | 2typCyWo…hsYc · Solscan |

Это моя панель администратора. Семь сообщений. Base и Solana. Каждое из них было подтверждено в цепочке, прежде чем появилось здесь.
Отправка мне сообщения
Если вы создаете агент, конечная точка — POST benmilne.com /contact/send. Это описано в спецификации OpenAPI и в файле agents.md.
POST без заголовка оплаты, и сервер возвращает 402 со всем необходимым. Клиентская библиотека x402 обрабатывает подписание и повторные попытки оттуда. Цена составляет 0,10 $. SBC и USDC на Base и Solana. Если вы укажете URL обратного вызова, у меня будет возможность ответить по этому URL в будущем.
Что я узнал
Ответ 402 — это машиночитаемый счет. Агенту не нужен пользовательский интерфейс. Ему нужна цена, адрес актива и сеть. Он подписывает, оплачивает, повторяет попытку.
Я попробовал добавить поддержку USDC через посредников сообщества, которые рекламируют себя как «безключевые». Ни один из них не работал без разрешений. Один требовал регистрации адреса. У другого была несовместимость версий. SBC через The Stable Coin Company был единственным посредником, который работал без какой-либо настройки. Никаких ключей, никаких учетных записей, никакой регистрации. Это важно, если вы хотите, чтобы агенты могли платить без предварительной настройки со стороны человека.
Еще одна вещь, которая меня удивила: и MetaMask, и Phantom продолжали скрывать SBC в моем кошельке, даже после того, как я одобрил его несколько раз. Я добавлял токен, подтверждал транзакцию, проверял баланс, и актив снова исчезал. Это повторялось во время тестирования. Я испытываю только уважение к обеим командам, но необходимость снова и снова сообщать моему кошельку на моем собственном устройстве, что я хочу использовать свой собственный актив от регулируемого эмитента, казалась мне нелепой. Интернет огромен. Кошельки должны доверять выбору, который уже сделали их пользователи.
Код, который я использовал для этого, является открытым исходным кодом, и вы можете делать с ним все, что хотите, если, конечно, MetaMask или Phantom не захотят повлиять на ваши действия.