Трёхшаговая версия этого же материала — на странице Быстрый старт. Здесь больше шагов и разбор того, что происходит на каждом.
1
Создайте ключ
Ключ создаётся в веб-приложении: откройте speshu.ai/profile, войдите и создайте ключ в разделе API-ключей. Полное значение показывается один раз — сохраните его сразу.Подробности — в разделе Аутентификация.
2
Проверьте ключ запросом баланса
Это самый дешёвый способ убедиться, что ключ принят: запрос баланса не стоит токенов и не обращается к моделям.Пустой объект
cURL
{} — тоже корректный ответ: ключ рабочий, записей в кошельке пока нет.Перед платным запросом баланс должен быть положительным, иначе придёт 402 insufficient_quota. Пополнение — на speshu.ai/profile.3
Возьмите идентификатор модели из каталога
Идентификаторы текстовых моделей не зашивайте в код — состав каталога меняется. Возьмите его из ответа API:
cURL
.data[0] — первый элемент, чтобы пример был запускаемым. В своём коде выбирайте по cost_completion, context_length и наличию зрения. Формат ответа разобран в Каталоге моделей.4
Выполните первый запрос в чат
usage.cost.total_cost — сумма, списанная с кошелька в рублях. Это единственное поле, по которому стоит считать расход. Подробнее — в гайде по учёту средств.5
Включите потоковую передачу
Тот же запрос с В Python:Полный разбор — на странице Потоковая передача.
stream: true отдаёт ответ по частям через SSE. В терминале curl -N отключает буферизацию — иначе вы увидите весь ответ разом в самом конце.cURL
Python
6
Загрузите файл в хранилище
Изображения и документы проще всего передавать публичной ссылкой. Загрузка в хранилище возвращает её.Сохраните ссылку в переменную — она понадобится на следующем шаге:Тело запроса — только
cURL
multipart/form-data, предел — 100 МБ. Разбор — в Загрузке файла.Изображение может быть перекодировано без потерь, если в таком виде файл меньше, поэтому
size в ответе бывает меньше отправленного размера. Это норма.7
Отправьте изображение в модель
Ссылка из шага выше подставляется в блок
image_url:cURL
8
Создайте медиа-задачу и дождитесь результата
Генерация изображений, видео, аудио и музыки живёт в отдельном API: запрос создаёт задачу, оплата — сразу при создании, результат приходит по опросу.Опрос:Готовый цикл ожидания на Python:
cURL
cURL
Python
Что дальше
Запрос в чат
Роли, блоки контента, параметры генерации
Потоковая передача
SSE,
[DONE] и кадр со списаниемВызов функций
Полный цикл вызова инструмента
Медиаввод
Ссылки, base64 и хранилище
Если что-то не работает
401 invalid_api_key на первом же запросе
401 invalid_api_key на первом же запросе
Проверьте три вещи: в переменной окружения лежит полное значение с префиксом
sk-, в ней нет кавычек и переносов строки, ключ не отозван в профиле. Отладочный вывод: echo "$SPESHU_API_KEY" | wc -c.404 model_not_found
404 model_not_found
Идентификатор устарел или скопирован с ошибкой. Возьмите его заново из
GET /api/v1/models и подставьте как есть — без префикса и без обрезки. Каталог меняется, и список в коде устаревает молча.402 insufficient_quota
402 insufficient_quota
На балансе нет положительной суммы. Пополнение — в веб-приложении на speshu.ai/profile. Баланс проверяют до обращения к модели. Деньги за отказ не списываются.
400 invalid_request на запрос с изображением
400 invalid_request на запрос с изображением
Выбранная модель не принимает зрение. Возьмите другую модель из каталога. Подробнее — в разделе Модели и цены.
Поток отдаётся целиком в конце, а не по частям
Поток отдаётся целиком в конце, а не по частям
В
curl не хватает -N: без него клиент буферизует вывод. В HTTP-клиенте проверьте, что вы читаете тело по мере прихода, а не целиком.413 payload_too_large на загрузке
413 payload_too_large на загрузке
Файл больше 100 МБ либо исчерпана квота хранилища. Эндпоинта, отдающего текущую квоту, на
/api/v1 нет — о лимите вы узнаёте только по факту отказа.