Изображения и видео
OpenAI-совместимые эндпоинты генерации и редактирования изображений, а также отправка и опрос асинхронного видео Grok Imagine.
Изображения и видео используют эндпоинты в форме оригиналов OpenAI / xAI, авторизация — Authorization: Bearer. Нативная генерация изображений Gemini сюда не входит: отдельного эндпоинта у неё нет, она по-прежнему идёт через generateContent, см. Gemini API.
Генерация изображений
/v1/images/generationsТело совпадает с OpenAI Images API: model, prompt, опционально n, size, quality и т. д. Модели изображений (например, gpt-image-2 и grok-imagine-image-2.0) перечислены в разделе Модели.
curl https://soleapi.com/v1/images/generations \
-H "Authorization: Bearer $SOLEAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "A watercolor lighthouse at dawn",
"size": "1024x1024"
}'{
"created": 1757030400,
"data": [
{ "b64_json": "iVBORw0KGgo..." }
],
"usage": { "input_tokens": 12, "output_tokens": 0, "total_tokens": 12 }
}Редактирование изображений
/v1/images/editsmultipart/form-data: поле image содержит исходное изображение (можно несколько), prompt — инструкцию; остальные поля те же, что при генерации.
curl https://soleapi.com/v1/images/edits \
-H "Authorization: Bearer $SOLEAPI_API_KEY" \
-F model=gpt-image-2 \
-F image=@lighthouse.png \
-F prompt="Turn the sky into a starry night"Изображения тарифицируются поштучно независимо от эндпоинта: цену за штуку см. на странице модели; n изображений стоят в n раз дороже. Эндпоинт генерации принимает "stream": true для SSE-превью и финального изображения — в зависимости от целевой модели. Эндпоинты изображений допускают встроенные медиа, поэтому действует больший лимит тела, как у диалоговых эндпоинтов.
Генерация видео (асинхронно)
Видео — единственный асинхронный эндпоинт шлюза: отправка возвращает только id задания, апстрим рендерит в фоне, а клиент опрашивает статус до готовности.
/v1/videos/generationsТело следует официальным полям xAI Grok Imagine: model (например, grok-imagine-video-1.5), prompt, опционально duration (секунды), aspect_ratio, resolution и т. д.
curl https://soleapi.com/v1/videos/generations \
-H "Authorization: Bearer $SOLEAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-imagine-video-1.5",
"prompt": "A lighthouse in a storm, cinematic",
"duration": 6,
"aspect_ratio": "16:9"
}'
# => { "request_id": "8f0c…" }/v1/videos/editsРедактирование видео работает так же, в тело добавляется исходное видео; ответ — снова request_id.
/v1/videos/{request_id}Опрашивайте по request_id, полученному при отправке. Пока status равен pending — ждите; при done в video.url лежит готовый файл, а video.duration — его длительность в секундах; failed / expired означают, что рендер на апстриме не удался или результат истёк.
curl https://soleapi.com/v1/videos/8f0c… \
-H "Authorization: Bearer $SOLEAPI_API_KEY"
# => { "status": "done", "video": { "url": "https://…/video.mp4", "duration": 6 } }Тарификация: при отправке ничего не списывается, лишь резервируется оценка; списание происходит, когда опрос видит status = done, секунды считаются по duration, указанному вами при отправке (длина готового ролика используется только если вы его не передали). Неудавшийся рендер бесплатен. Всегда опрашивайте до терминального состояния: даже если результат вам больше не нужен, шлюз сам запросит апстрим и проведёт списание, так что «не опрашивать» не значит «не платить». Опрашивайте каждые 5–10 секунд; опрос учитывается в RPM.
Связанные ошибки
| Id сообщения | HTTP | Значение |
|---|---|---|
video_job_missing | 400 | В пути опроса нет request_id. |
video_job_not_found | 404 | Задание не существует или принадлежит другому аккаунту. |
video_job_route_gone | 502 | Апстрим, использованный заданием, удалён; результат получить нельзя. |
video_job_unavailable | 500 | Сервис заданий временно недоступен — повторите позже. |
Остальные ошибки совпадают с диалоговыми эндпоинтами, см. Ошибки.