Интеграция платного API руками нейросети: что дать агенту и где он сожжёт депозит

Как поручить интеграцию платного API нейросети: какую спецификацию дать на входе, какие правила вписать в задание и как проверить код на минимальной сумме.

Содержание 7 разделов
  1. Бриф одним текстом вместо ссылки на сайт
  2. Ключ живёт в переменной окружения
  3. Что вписать в задание
  4. Пять ошибок в коде агента, которые стоят денег
  5. Проверка на минимальной сумме
  6. Для VPN-подписок: срок и повторные события
  7. Чек-лист

С бесплатным API ошибка агента стоит времени, с платным она списывает деньги с депозита. Поэтому агенту нужны на входе полная спецификация и явные правила, а его код проверяют на минимальной сумме до запуска.

#Бриф одним текстом вместо ссылки на сайт

Агент, которому дали адрес документации, может увидеть её лишь частично. Страницы обрезаются, часть текста подгружается скриптом, коды ошибок лежат на странице, до которой он не дошёл. Недостающее он додумывает, а додуманное поведение в платном API заканчивается двойными списаниями.

У обоих наших API есть бриф: вся спецификация одним текстом, с методами, полями, статусами и кодами отказов. Он собирается из той же спецификации, что и API, и начинается с указания опираться только на него и прямо говорить, если чего-то не хватает. Положите его в контекст целиком до описания задачи.

Где взять бриф для агента
APIГде взятьКлюч
Цифровые товарысправочник в кабинете API, раздел «Для ИИ-агента»не нужен
VPN-подпискиGET /api/v1/vpn/llms.txtне нужен
Скачать бриф VPN API
curl -s https://api.relayhub.surf/api/v1/vpn/llms.txt -o vpn-api-brief.md

#Ключ живёт в переменной окружения

Ключ тратит деньги с депозита. Промпт с ключом остаётся в истории переписки, в логах сервиса, а иногда и в репозитории, если агент вставит его в пример. Попросите агента читать ключ из переменной окружения и не печатать его в логи. Сам ключ впишите на сервере руками.

#Что вписать в задание

Явное правило агент выполняет точнее, чем выводит его из документации. Вставьте после брифа список требований. Пример для цифрового API:

Требования к интеграции
1. Ключ API читать из переменной окружения HEX_API_KEY. Не писать его в код, логи и примеры.
2. custom_id генерировать один раз на заказ (UUID) и сохранять в базе до отправки запроса.
3. После таймаута и ответа 5xx повторять запрос с тем же custom_id и тем же телом.
4. На 429 ждать столько секунд, сколько указано в заголовке Retry-After.
5. Ответы 400, 401, 402 и 409 не повторять автоматически, записывать на разбор.
6. Статус опрашивать GET /order/{custom_id} до delivered, failed, cancelled или rejected,
   даже если вебхук настроен.
7. Суммы считать в целых полях *_nano, округлять один раз при выводе.
8. Подпись вебхука проверять по сырым байтам тела:
   "sha256=" + HMAC-SHA256(секрет, тело), сравнение через hmac.compare_digest.
9. Незнакомое событие вебхука и незнакомый error_code не считать ошибкой схемы.
10. Своего таймаута на доставку не ставить: у асинхронных товаров смотреть
    delivery_state и eta_seconds.
Для VPN API поменяйте пять пунктов: ключ в VPN_API_KEY (1); 409 operation_in_progress повторять тем же запросом через секунду (5); состояние читать из GET /subscriptions/{subscription_id} (6); суммы в полях *_minor (7); пункт 10 убрать.

#Пять ошибок в коде агента, которые стоят денег

Частые ошибки в коде агента
ОшибкаЧем кончитсяЧто искать в коде
custom_id генерируется внутри цикла повторовкаждый повтор становится новым платным заказомuuid4() рядом с try
повторяются все ответы подряд402 и 409 с ошибкой в запросе крутятся в цикле и съедают лимитусловие повтора
свой таймаут на доставку и возврат по немупокупатель получает и деньги, и товарsleep с верхней границей рядом с возвратом
суммы во floatкопейки расходятся с балансом через сотню заказовfloat() и round() в расчётах
подпись считается по пересобранному JSONподпись не сходится, и агент отключает проверкуjson.dumps перед hmac

#Проверка на минимальной сумме

событиеДепозит на минимумсумма, которую не жалко
1Один заказ до концаопросом до delivered
2Тот же запрос ещё разбаланс не изменился
3Обрыв сетиповтор не создал второй заказ
4Чужая подписьвебхук отбит

Баланс до и после смотрите через GET /balance. У VPN API повтор с тем же custom_id приходит с idempotent_replay: true, а событие для проверки обработчика отправляет POST /webhook/test. Каждую доставку с ответом вашего сервера видно в кабинете, в разделе «Доставки вебхуков».

Журнал доставок вебхуков: событие, результат, HTTP-код, число попыток и время ответа
Кабинет VPN API, «Доставки вебхуков»: видно, что дошло и что ответил ваш сервер. Демо-данные.

#Для VPN-подписок: срок и повторные события

Подписка живёт после выдачи: продлевается, замораживается, меняет тариф. Попросите агента брать end_date из ответа API, а не считать от даты покупки: заморозка останавливает срок, и своя арифметика начнёт врать. Замороженную подписку API не продлевает и отвечает 409 subscription_frozen.

Одно событие VPN API может прийти повторно, поэтому дедуп идёт по event_id. Перед действием по событию обработчик перечитывает GET /subscriptions/{subscription_id}. Подробно про продления и события написано в статье про вебхуки VPN API.

#Чек-лист

Следующий шаг

Отдайте агенту бриф

Бриф цифрового API: справочник в кабинете API, раздел «Для ИИ-агента». Бриф VPN API отдаёт GET /api/v1/vpn/llms.txt. Проверку из статьи проходите на минимальном депозите.

Читать дальше

Идемпотентность, вебхуки и ретраи: как не потерять деньги

Откуда взялись правила из задания, с примерами кода.

API · DigitalИнтеграция5 мин
Интеграция Reseller API: от ключа до первого заказа

Запросы и ответы, которые агент должен воспроизвести.

API · DigitalИнтеграция5 мин
Запуск продаж VPN через API: от ключа до первой подписки

Если агент пишет интеграцию VPN API.

VPN · APIИнтеграция, Запуск5 мин
Собираем анонимную аналитику посещений. Подробнее