Skip to main content
Практический маршрут от пустого ключа до работающей интеграции. Каждый шаг — один работающий пример, который можно выполнить прямо в терминале.
Трёхшаговая версия этого же материала — на странице Быстрый старт. Здесь больше шагов и разбор того, что происходит на каждом.
1

Создайте ключ

Ключ создаётся в веб-приложении: откройте speshu.ai/profile, войдите и создайте ключ в разделе API-ключей. Полное значение показывается один раз — сохраните его сразу.
Подробности — в разделе Аутентификация.
2

Проверьте ключ запросом баланса

Это самый дешёвый способ убедиться, что ключ принят: запрос баланса не стоит токенов и не обращается к моделям.
cURL
Пустой объект {} — тоже корректный ответ: ключ рабочий, записей в кошельке пока нет.
Ответ 401 с кодом invalid_api_key означает, что ключ недействителен, отозван или истёк. Разбираться нужно в разделе API-ключей в профиле, а не в коде.
Перед платным запросом баланс должен быть положительным, иначе придёт 402 insufficient_quota. Пополнение — на speshu.ai/profile.
3

Возьмите идентификатор модели из каталога

Идентификаторы текстовых моделей не зашивайте в код — состав каталога меняется. Возьмите его из ответа API:
cURL
.data[0] — первый элемент, чтобы пример был запускаемым. В своём коде выбирайте по cost_completion, context_length и наличию зрения. Формат ответа разобран в Каталоге моделей.
4

Выполните первый запрос в чат

usage.cost.total_cost — сумма, списанная с кошелька в рублях. Это единственное поле, по которому стоит считать расход. Подробнее — в гайде по учёту средств.
5

Включите потоковую передачу

Тот же запрос с stream: true отдаёт ответ по частям через SSE. В терминале curl -N отключает буферизацию — иначе вы увидите весь ответ разом в самом конце.
cURL
В Python:
Python
Поток идёт на контексте, отвязанном от вашего соединения: если вы закроете соединение, генерация всё равно дойдёт до конца, и деньги спишутся за произведённые токены. Отключение отменяет чтение, но не работу.
Полный разбор — на странице Потоковая передача.
6

Загрузите файл в хранилище

Изображения и документы проще всего передавать публичной ссылкой. Загрузка в хранилище возвращает её.
cURL
Сохраните ссылку в переменную — она понадобится на следующем шаге:
Тело запроса — только multipart/form-data, предел — 100 МБ. Разбор — в Загрузке файла.
Изображение может быть перекодировано без потерь, если в таком виде файл меньше, поэтому size в ответе бывает меньше отправленного размера. Это норма.
7

Отправьте изображение в модель

Ссылка из шага выше подставляется в блок image_url:
cURL
Не каждая модель принимает изображения. Модель без зрения отвергнет запрос целиком с 400 invalid_request — картинка не будет молча проигнорирована. Все четыре типа блоков контента разобраны в гайде по медиавводу.
8

Создайте медиа-задачу и дождитесь результата

Генерация изображений, видео, аудио и музыки живёт в отдельном API: запрос создаёт задачу, оплата — сразу при создании, результат приходит по опросу.
cURL
Опрос:
cURL
Готовый цикл ожидания на Python:
Python
Деньги списываются при создании задачи, а не при успешном результате. Не переотправляйте создание вслепую: повтор с тем же Idempotency-Key вернёт исходную задачу, повтор с новым — создаст новую и спишет снова. Подробности — в Создании задачи.

Что дальше

Запрос в чат

Роли, блоки контента, параметры генерации

Потоковая передача

SSE, [DONE] и кадр со списанием

Вызов функций

Полный цикл вызова инструмента

Медиаввод

Ссылки, base64 и хранилище

Если что-то не работает

Проверьте три вещи: в переменной окружения лежит полное значение с префиксом sk-, в ней нет кавычек и переносов строки, ключ не отозван в профиле. Отладочный вывод: echo "$SPESHU_API_KEY" | wc -c.
Идентификатор устарел или скопирован с ошибкой. Возьмите его заново из GET /api/v1/models и подставьте как есть — без префикса и без обрезки. Каталог меняется, и список в коде устаревает молча.
На балансе нет положительной суммы. Пополнение — в веб-приложении на speshu.ai/profile. Баланс проверяют до обращения к модели. Деньги за отказ не списываются.
Выбранная модель не принимает зрение. Возьмите другую модель из каталога. Подробнее — в разделе Модели и цены.
В curl не хватает -N: без него клиент буферизует вывод. В HTTP-клиенте проверьте, что вы читаете тело по мере прихода, а не целиком.
Файл больше 100 МБ либо исчерпана квота хранилища. Эндпоинта, отдающего текущую квоту, на /api/v1 нет — о лимите вы узнаёте только по факту отказа.
Полная таблица кодов, три формата ошибок и цикл повторов — на странице Ошибки. Таймауты и квоты — в разделе Лимиты.