Перейти к основному содержанию
Три способа доставить файл в запрос к модели. Все они сводятся к одному ограничению: то, что вы передали, должно быть доступно без авторизации — по публичной ссылке либо внутри самого запроса.
В примерах ниже $TEXT_MODEL — переменная окружения с идентификатором модели из GET /api/v1/models. Идентификаторы не зашивают в код: состав каталога меняется. Разбор — в разделе Модели и цены.

Публичные ссылки

Любая прямая ссылка https:// работает как есть — и в image_url.url, и в file.file_url, и во входных параметрах медиа-задачи.
Ссылка должна открываться без заголовков авторизации. Файл за сессионной cookie, за подписью в query-строке с коротким сроком или за IP-allow-list провайдер не скачает: запрос уйдёт, а файл не придёт. Публичные CDN-ссылки вроде url из нашего хранилища подходят.

data:-URI с base64

Если ссылка недоступна или файл маленький, вложите содержимое прямо в запрос. Формат — data:<mime>;base64,<данные>. Изображение:
Python
Аудио — блок input_audio принимает только base64, без data-URI:
Python
Документ — через file.file_data в виде data-URI:
Python
Каждый бит base64 стоит примерно 1,33 байта и уезжает в счёт входных токенов. Для файлов от нескольких сотен килобайт и выше переходите на хранилище: ссылка дешевле по трафику, понятнее в логах и не раздувает тело запроса.

Загрузка в хранилище

POST /api/v1/storage/upload — правильный способ для файлов, которые живут дольше одного запроса: изображения пользователей, документы, референсы для генерации. Тело — только multipart/form-data, предел — 100 МБ.
Ответ — 201 Created:
Полный разбор полей и ошибок — на странице Загрузить файл.

Ссылка в запросе

cURL

Ссылка в медиа-задаче

cURL
Имя массива ссылок input_urls поддерживается не у всех моделей. Состав input задаёт поле input_schema в ответе GET /api/v1/media/models, и оно авторитетнее документации.
url из хранилища — обычная публичная ссылка, а не подписанная: срока действия у неё нет, отдавать её можно кому угодно. Если нужна приватная ссылка с ограничением по времени, подписывайте файл по своей схеме — хранилище такое не выдаёт.

Типы блоков ввода

file_id и asset://

Этот API не принимает идентификатор файла. Поле file.file_id в схеме есть, но подставить file_id из ответа хранилища, строку вида asset://0199... или что-то подобное нельзя: модель такой файл не увидит. Единственная рабочая ручка — ссылка url из ответа на загрузку, либо data-URI.
Старые версии документации утверждали обратное, и интеграции, построенные на этом, получают отказ. Если файл нужно передать в модель, загрузите его и подставьте url.

Перекодирование при загрузке

Изображения перекодируются без потерь в PNG, если получившийся файл меньше исходного; длинная сторона при этом ограничивается 2000 пикселями. Последствия:
  • filename в ответе может отличаться от вашего — расширение меняется на .png.
  • size может оказаться меньше отправленного размера. Это норма, а не ошибка загрузки.
  • mime_type в ответе отражает уже сохранённый файл.
Не сравнивайте size с размером исходника в логике расчёта квоты — сверяйтесь с тем, что вернул API.

Какие модели принимают изображения

Зрение — не всеобщее свойство. Модель без него отвергает запрос целиком с 400 invalid_request, а не игнорирует картинку молча.
Перед отправкой изображения убедитесь, что выбранная модель принимает зрение. Отбор по названию — эвристика: надёжный признак только один — пробный запрос. Отсортировать каталог по предполагаемым моделям со зрением помогает пример в разделе Модели и цены.

Что дальше

Загрузить файл

Поля формы, квота и ограничения

Создать задачу

Входные параметры и опрос статуса

Запрос чату

Формат сообщений и блоков контента

Модели и цены

Зрение, контекст и стоимость