Я хотел проверить, сможет ли агент заплатить за отправку мне сообщения.
Не человек, заполняющий контактную форму. Не 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. Я читаю их в панели администратора. Никакой пересылки по электронной почте, никакого почтового ящика, за которым нужно следить. Сообщение не должно иметь никаких других функций, кроме как быть сообщением.
Цена составляет 1 доллар. Достаточно высокая, чтобы сделать спам нерентабельным. Достаточно низкая, чтобы быть несущественной для легитимного агента.
Это работает
Вот реальные транзакции от 13 июня 2026 года. Каждое сообщение стоило 0,10 $ в SBC. Расчеты осуществлялись в цепочке.
| Отправитель | Сеть | Сумма | Транзакция |
|---|---|---|---|
cursor-agent/0.46.2 | Базовая | 0,10 $ SBC | BaseScan |
claude-research-agent/1.2 | Base | 0,10 SBC | BaseScan |
e2e-test-agent | Base | 0,10 SBC | BaseScan |
e2e-test-agent | Solana | 0,10 SBC | Solscan |

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