Если задача — понять, как подключить api нейросети и не обнаружить проблемы уже после выкладки, удобнее пройти проверки по порядку: доступы, лимиты, таймауты, повторы, журнал, деньги и тестовые данные. Ниже — практический чек-лист подключения api для API, у которого запросы оплачиваются за запуск, а отдельные операции могут выполняться не мгновенно.
Перед началом получите ключ в разделе API после входа в аккаунт. Ключ показывается один раз, поэтому его стоит сразу сохранить в секретном хранилище приложения, а не помещать в исходный код или конфигурацию, которая попадает в репозиторий.
API работает по адресу https://genius-bot.ru/wp-json/genius/v1. В этом чек-листе проверяем не только сам первый запрос, но и то, что произойдёт при превышении лимита, временной ошибке, повторной отправке задачи, недостаточном балансе или неожиданном росте расхода.
1) Ключи и доступы: три проверки
Пункт 1. Проверить наличие ключа и способ его передачи. Авторизация выполняется заголовком Authorization: Bearer <ключ>. Самая простая проверка — выполнить запрос к /balance и убедиться, что API принимает ключ и возвращает данные об остатке.
curl -X GET "https://genius-bot.ru/wp-json/genius/v1/balance" \
-H "Authorization: Bearer YOUR_API_KEY"
Если ключ оставить непосредственно в коде, его легко случайно отправить в Git, логи или систему мониторинга. В приложении ключ лучше читать из переменной окружения или другого механизма хранения секретов, а в журнале заменять его на значение вроде [REDACTED].
Пункт 2. Проверить, что ключ относится к нужному окружению. До релиза выполните отдельный запрос с конфигурацией, которую будет использовать production. Это позволяет обнаружить ситуацию, когда локальная машина работает с одним ключом, а сервер — с другим или с пустым значением.
import os
import requests
API_KEY = os.environ["GENIUS_API_KEY"]
BASE_URL = "https://genius-bot.ru/wp-json/genius/v1"
response = requests.get(
f"{BASE_URL}/balance",
headers={"Authorization": f"Bearer {API_KEY}"},
timeout=10,
)
response.raise_for_status()
print(response.json())
Пункт 3. Проверить сохранение ключа после его выдачи. Ключ показывается один раз. Поэтому процедура развёртывания должна предполагать, что приложение получает уже сохранённое значение, а не рассчитывает заново показать ключ через интерфейс. Если секрет потерян, этот сценарий нельзя компенсировать чтением старого значения из API.
Эти три проверки закрывают базовый риск доступа: ключ существует, приложение действительно его использует, а секрет не оказывается в исходниках и диагностических сообщениях. Для задачи «как подключить api нейросети» это первый обязательный слой проверки: без него дальнейшие тесты не имеют смысла.

2) Лимиты и таймауты: что выставить заранее
Пункт 4. Заложить ограничение частоты. Для одного ключа установлено ограничение не более 60 запросов в минуту. Это нужно учитывать не только в основном обработчике, но и в фоновых очередях, скриптах миграции, массовых импортах и повторных запросах.
Простой локальный тест может отправить несколько запросов с контролируемой скоростью и записать фактический результат. В production полезно иметь собственный ограничитель, чтобы приложение не пыталось отправить больше разрешённой частоты одновременно.
import time
import requests
for _ in range(10):
response = requests.get(
"https://genius-bot.ru/wp-json/genius/v1/balance",
headers={"Authorization": "Bearer " + API_KEY},
timeout=10,
)
print(response.status_code)
time.sleep(1)
Этот пример не должен использоваться как нагрузочный тест: он показывает сам принцип контролируемой отправки. Перед запуском массовых задач отдельно проверьте, сколько запросов формирует одна пользовательская операция, включая проверки статуса.
Пункт 5. Задать таймауты на HTTP-запросы. Нельзя оставлять сетевой вызов без ограничения времени ожидания. При проблеме соединения поток или воркер может зависнуть, а очередь — постепенно заполниться такими задачами.
Для коротких запросов управления можно использовать отдельный небольшой таймаут, а для операций, связанных с созданием результата, — более длительный. Важно различать таймаут HTTP-запроса и время выполнения самой задачи: наличие маршрута GET /tasks/{id} означает, что состояние задачи можно проверять отдельно.
Пункт 6. Проверить сценарий асинхронной задачи. Маршрут POST /generate запускает операцию, после чего состояние и результат можно получать через GET /tasks/{id}. Для приложения это означает, что один пользовательский запрос не обязательно должен удерживать HTTP-соединение до готовности результата.
Есть и необязательный webhook: при передаче параметра callback_url на него приходит POST, когда задача готова. Перед выкладкой проверьте, что обработчик webhook отвечает быстро, корректно обрабатывает повторную доставку на уровне приложения и не записывает секретные данные в открытый журнал.
3) Повторы и идемпотентность
Пункт 7. Разделить повтор проверки статуса и повтор запуска операции. Повторный GET /tasks/{id} и повторный POST /generate — принципиально разные действия. Если клиент не получил ответ на запуск из-за сетевого сбоя, автоматический повтор POST может привести к дополнительному запуску и, соответственно, дополнительному расходу.
Для каждой операции, которую вы запускаете, полезно хранить у себя внутренний идентификатор запроса, исходные параметры и состояние. Если ответ от API потерян, сначала нужно определить, можно ли восстановить состояние уже созданной задачи, а не безусловно создавать новую.
На уровне приложения удобно хранить запись примерно с такими полями: request_id, время отправки, тип операции, идентификатор задачи API, состояние, время последней проверки и итог. Тогда повторная обработка очереди не превращается автоматически в повторный платный запуск.
Если используется callback_url, обработчик также должен быть устойчив к повторной обработке одного события. Практический вариант — сохранять идентификатор задачи и перед изменением состояния проверять, не обработан ли этот результат ранее.
Пропуск этой проверки особенно заметен на операциях с ценой за запуск. Ошибка в retry-логике может не выглядеть как технический сбой: HTTP-запросы будут успешно выполняться, но количество платных запусков окажется выше ожидаемого.

4) Журнал и наблюдение: какие числа писать
Пункт 8. Логировать измеримые показатели. Минимальный журнал должен позволять ответить на пять вопросов: сколько запросов отправлено, сколько завершилось ошибкой, сколько заняло времени, сколько задач осталось в работе и сколько денег потрачено за выбранный период.
Для каждого запроса записывайте время, тип операции, HTTP-метод и маршрут, статус ответа, длительность и внутренний идентификатор запроса. Для задач дополнительно полезны идентификатор задачи, число проверок статуса и конечное состояние.
Ключ API в журнал писать нельзя. Если необходимо связать события с ключом, используйте заранее рассчитанный безопасный идентификатор или маскированное представление, не позволяющее восстановить исходный секрет.
Для ошибок разделяйте хотя бы сетевые ошибки, HTTP-ошибки и ошибки бизнес-логики приложения. Например, превышение частоты запросов и недоступность сервера — разные ситуации, для которых нужны разные действия.
Если используется webhook, отдельно считайте количество полученных уведомлений, обработанных событий и повторных событий. Это позволяет заметить рассинхронизацию между вашей базой и состоянием задач, не пытаясь искать её вручную по отдельным пользователям.
Такой журнал помогает понять, как ведёт себя api нейросети в продакшене, а не только работает ли один тестовый запрос. Важна динамика: например, увеличение среднего времени выполнения, рост числа повторов или резкое изменение числа запусков на одного пользователя.
5) Бюджет и оповещение о расходе
Пункт 9. Зафиксировать цены операций до включения production-сценария. Оплата производится за запуск, без абонентской платы и без минимального платежа. При выпуске первого ключа на баланс начисляется 50 ₽ для пробы.
| Операция | Цена |
|---|---|
| Картинка по описанию (image) | 9 ₽ |
| Звук по описанию (sfx) | 9 ₽ |
| Расшифровка записи (stt) | 10 ₽ |
| Озвучка текста (tts) | 18 ₽ за 1000 знаков |
| Оживить фото (photo-video) | 25 ₽ |
| Изменить фото по описанию (image-edit) | 35 ₽ |
| Убрать шум (denoise) | 36 ₽ |
| Убрать вокал (vocal) | 45 ₽ |
| Увеличить качество фото (upscale) | 50 ₽ |
| Создать музыку (music) | 59 ₽ |
| Видео по описанию (video) | 119 ₽ |
| Говорящий аватар (avatar) | 120 ₽ |
| Звук из видео (ytaudio) | 0 ₽ |
Цены в таблице указаны за один запуск, кроме озвучки: для tts цена указана за 1000 знаков. Для контроля расходов важно не просто хранить остаток, а считать количество запусков каждой операции и сопоставлять его с ожидаемой стоимостью.
Пункт 10. Проверить расчёт бюджета на реальном сценарии. Допустим, тестовый сценарий создаёт 20 изображений по 9 ₽ и 5 операций изменения фото по 35 ₽. Ожидаемый расход составляет 20 × 9 + 5 × 35 = 355 ₽. Такой расчёт можно сравнить с изменением баланса после тестового прогона.
Отдельно учитывайте, что доступен маршрут GET /services, который возвращает список операций и цен. Перед массовым запуском его можно использовать как источник актуального перечня операций для отображения или внутренней проверки конфигурации.
curl -X GET "https://genius-bot.ru/wp-json/genius/v1/services" \
-H "Authorization: Bearer YOUR_API_KEY"
Пункт 11. Настроить оповещение о расходе. Самый полезный контроль — сравнивать расход за час или сутки с установленным для проекта порогом. Если число запусков неожиданно выросло, оповещение должно появиться до того, как проблема превратится в большой счёт.
Для разных операций пороги должны отличаться. Например, массовый запуск дешёвой генерации и случайный повтор дорогостоящей операции на 120 ₽ за запуск имеют разный финансовый эффект, поэтому один общий порог по числу запросов может быть недостаточен.

6) Тестовые данные и прогон перед выкладкой
Пункт 12. Провести финальный прогон на тестовых данных. Не начинайте проверку с реальных пользовательских файлов. Для файловых сценариев сначала проверьте POST /uploads, который загружает файл и возвращает ссылку, затем используйте полученную ссылку в операции.
Тестовые данные должны покрывать не только нормальный случай. Подготовьте небольшой файл, типичный файл, файл на границе ожидаемого размера вашего приложения, некорректный вход и данные, на которых можно проверить обработку ошибки без риска для пользовательской информации.
После загрузки проверьте полный маршрут: загрузка, запуск через /generate, получение идентификатора задачи, проверка через /tasks/{id} и получение результата. Если вместо polling используется callback_url, отдельно прогоните тот же сценарий через webhook.
Для финального теста удобно составить таблицу ожиданий: операция, входные данные, ожидаемый статус, допустимое время ожидания, ожидаемый результат и ожидаемый расход. После прогона фактические значения сравниваются с этой таблицей, а не оцениваются визуально.
Если приложение использует чатовый API, перед выкладкой проверьте также совместимость с предусмотренным форматом. Доступны POST /chat/completions и GET /models; они работают в том же формате, что и OpenAI, поэтому в клиентской библиотеке достаточно изменить base_url и ключ.
Для чата тариф составляет 40 ₽ за 1 млн токенов запроса и 400 ₽ за 1 млн токенов ответа. Поэтому в журнале чатового приложения имеет смысл отдельно учитывать объём входных и выходных токенов, чтобы расход можно было сопоставить с количеством обращений.
Финальный чек-лист перед релизом можно свести к одной последовательности: ключ сохранён безопасно; авторизация проверена; лимит 60 запросов в минуту учтён; таймауты заданы; состояние задач обрабатывается отдельно от запуска; повторный POST не выполняется автоматически без проверки; журнал содержит нужные числа; ключи не попадают в логи; стоимость операций известна; расход считается; оповещения настроены; тестовые данные прошли полный цикл.
Если все пункты пройдены, вы уже проверили не только то, как подключить api нейросети, но и поведение приложения после подключения. Именно второй этап обычно определяет, насколько предсказуемо интеграция ведёт себя при очередях, сетевых сбоях, повторных запросах и росте нагрузки.
Частые вопросы
Где получить API-ключ?
Ключ выдаётся после входа в разделе API. Он показывается один раз, поэтому после выпуска его нужно сохранить в конфигурации приложения или секретном хранилище.
Какой заголовок используется для авторизации?
Используется заголовок Authorization: Bearer <ключ>. Базовый адрес API — https://genius-bot.ru/wp-json/genius/v1.
Как узнать остаток на балансе?
Для этого предусмотрен GET /balance. Запрос выполняется с вашим Bearer-ключом.
Что проверить перед запуском api?
Минимальный набор — ключ и его хранение, лимит 60 запросов в минуту, таймауты, обработку повторов, журнал, расчёт стоимости, оповещения и полный тестовый сценарий от загрузки или запуска до получения результата.
Как отслеживать задачу после запуска?
После POST /generate состояние и результат можно получать через GET /tasks/{id}. Также можно передать callback_url, чтобы получить POST, когда задача готова.
Есть ли способ использовать API в формате OpenAI?
Для чатового API доступны POST /chat/completions и GET /models в том же формате, что и у OpenAI. В клиентской библиотеке достаточно изменить base_url и ключ.
Перед публикацией ещё раз проверьте ключ, лимиты, расчёт стоимости и тестовый прогон в том окружении, где будет работать приложение. А получить ключ и открыть настройки подключения можно в разделе управления API.
