x402: как ИИ-агент платит за API без аккаунта
Любой API в интернете продаётся через форму.
Вы попадаете на страницу с тарифами, вводите почту, подтверждаете её из ящика, вставляете карту, копируете ключ и кладёте его в переменную окружения. Четыре минуты — и всё отлично работает, потому что вы человек, а у людей есть почтовый ящик, карта и терпение.
А теперь представьте ИИ-агента посреди исследовательского цикла. Ему нужна одна веб-страница в виде Markdown прямо сейчас, чтобы закончить порученную задачу. Он не получит письмо с подтверждением. У него нет карты. Он не может ждать, пока человек проснётся и вставит ему ключ.
И он делает единственное, что ему остаётся: сдаётся и уходит к другим.
Именно этот разрыв закрывает x402 — и с сегодняшнего дня API Minibase отвечает на него в продакшене.
У HTTP был план на этот случай ещё в 1997 году
Код состояния 402 Payment Required есть в спецификации HTTP с самого начала — с пометкой «зарезервировано для будущего использования». Почти тридцать лет он оставался шуткой из RFC: кодом, который никто не мог реализовать, потому что у веба не было способа передвигать небольшие суммы внутри запроса.
x402 — протокол, который наконец им пользуется. Вся схема укладывается в три шага:
- Клиент вызывает ваш эндпоинт вообще без учётных данных.
- Вместо
401 Unauthorizedсервер отвечает402 Payment Requiredи прикладывает машиночитаемые условия оплаты: сколько, в каком активе, в какой сети, на какой адрес. - Клиент платит и повторяет запрос с подтверждением платежа. Сервер проверяет, проводит расчёт и отдаёт ответ.
Никакого аккаунта. Никакого ключа. Никакой панели. Все переговоры укладываются в два обмена HTTP, в формате, который умеет читать другая программа.
Как это выглядит на живом эндпоинте
Вызовите наш эндпоинт конвертации вообще без всего:
curl -i -X POST https://api.minibase.md/v1/convert \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/article"}'
Вы получаете 402, а условия возвращаются в base64 в заголовке payment-required:
{
"x402Version": 2,
"accepts": [{
"scheme": "exact",
"network": "eip155:8453",
"amount": "10000",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"payTo": "0xfb8157a583e3050440301f418f5e890190222a5c",
"maxTimeoutSeconds": 300
}]
}
Здесь есть всё, что нужно автономному клиенту. network — идентификатор CAIP-2, eip155:8453 это Base mainnet. asset — контракт USDC. amount указан в атомарных единицах: у USDC шесть знаков после запятой, так что 10000 — это один цент. payTo — куда уходят деньги.
Клиент подписывает перевод USDC, повторяет запрос с приложенным платежом и получает свой Markdown. Участие человека: нулевое.
То, о чём не говорят: держать криптовалюту не нужно
Очевидное возражение против любого призыва «принимайте стейблкоины» — что теперь вы держите кошелёк. Приватные ключи. Хранение. Баланс в чём-то, чего ваш бухгалтер никогда не видел, оценённый по курсу, который сдвинулся, пока вы спали.
Мы ничего из этого не делаем, и вам тоже не нужно. Адрес для приёма средств из payload выше выпущен Stripe. Платежи рассчитываются он-чейн на этот адрес, Stripe фиксирует каждый как обычный PaymentIntent и выплачивает в евро по обычному графику.
Практический итог: деньги появляются в той же панели, что и любой платёж картой, в той же выплате, в тех же книгах. Ни кошелька, который надо защищать, ни валютной переоценки по каждому чеку, ни параллельного реестра, который надо сводить в конце года. Стейблкоиновая часть совершенно реальна — и при этом полностью невидима со стороны бухгалтерии.
Две вещи, которые стоили нам времени
Если будете внедрять это сами, вот две ловушки, за которые мы заплатили.
Рукопожатие с фасилитатором не опционально. Ресурсный сервер обязан спросить у фасилитатора, какие пары схема/сеть тот реально рассчитывает, прежде чем сможет назвать цену. Пропустите этот шаг — и абсолютно каждый вызов умирает с Facilitator does not support exact on eip155:8453. Сообщение выглядит как ошибка конфигурации, а на деле это недостающий сетевой запрос. В mainnet таким фасилитатором выступает сервис Coinbase; публичный тестовый настоящие деньги не рассчитывает.
Цена ниже цента тихо ломает бухгалтерию. Наша себестоимость около 0,002 $ за страницу, поэтому назначить двери x402 цену 0,002 $ казалось очевидным. Это не так: PaymentIntent выражается в целых центах, поэтому всё, что ниже цента, рассчитывается он-чейн, а потом вообще не может быть учтено. Деньги приходят и не попадают ни в одну книгу. Поэтому дверь без ключа у нас стоит 0,01 $ за вызов — впятеро выше нашего объёмного тарифа, что оплата за вызов без аккаунта и без обязательств выдерживает спокойно.
Стоит ли это добавлять?
Будем честны насчёт масштаба: x402 не заменит вашу подписочную выручку в этом квартале. Платежи, инициируемые агентами, — ранняя история, клиентский инструментарий молод, а большинство ваших клиентов по-прежнему люди с картой.
Но асимметрия здесь необычная. Дверь обошлась нам в несколько сотен строк и срабатывает исключительно для тех, кто не предъявил никаких учётных данных: любой владелец ключа проваливается прямо в тот путь, который у него и был, с той же квотой и тем же тарифом. Ничто из того, что вы уже продаёте, не подвергается риску.
А режим отказа при отсутствии такой двери невидим. Клиент без ключа, получивший 401, не оставляет следа: ни регистрации, ни обращения в поддержку, ни строчки в аналитике. Вы никогда не узнаете, что он приходил. Теперь мы измеряем это специально — каждый вызов без учётных данных логируется вместе с признаком, говорит ли клиент на протоколе, — потому что «стучится ли вообще кто-нибудь?» единственный вопрос, который решает, стоило ли всё это делать.
Если агенты собираются что-то покупать в открытом вебе, им нужен способ платить, не проходящий через форму регистрации. Такой способ уже есть, он дремлет в спецификации HTTP с 1997 года, и подключается за один вечер.
Попробуйте: вызовите POST https://api.minibase.md/v1/convert без учётных данных и прочитайте заголовок payment-required. Предпочитаете ключ? Бесплатный тариф — 1000 страниц в месяц, без карты. Полная спецификация для агентов: minibase.md/api.md.
Continue reading
Graph engineering: от циклов к графам знаний
Graph engineering начался в июле 2026 года как шутка. Три значения термина и почему ваше Markdown-хранилище — уже большая часть графа.
Buzz Джека Дорси: агенты, Git и Markdown
Buzz от Block впускает ИИ-агентов в командные каналы с подписанной личностью и встроенным Git. Что удалось и почему память остаётся в Markdown.
Почему Markdown — лучший формат для LLM и AI-агентов
Markdown сокращает расход токенов до 10 раз против HTML. Почему AI-агенты и LLM предпочитают его для контекста и как оптимизировать процессы.
AUI: новая парадигма интерфейсов для каждого продукта
Технический директор HubSpot советует делать «безголовую» версию продукта для AI-агентов. Разбираем наступившую эпоху агентских интерфейсов.