Перейти к документации
На этой странице

Seedream 5.0 Pro API

Генерируйте изображения, редактируйте референсы или разделяйте изображение на слои с помощью вашего API-ключа Seevio. Задачи выполняются асинхронно; сохраняйте taskId и опрашивайте эндпоинт задачи либо настройте получение колбэка.

POST https://api.seevio.ai/v1/images/generations

Возможности

ФункцияДопустимые значения
Режимы генерацииtext-to-image, image-to-image, layer-decomposition
Разрешение видео1K, 1.5K, 2K
Соотношение сторон1:1, 4:3, 3:4, 16:9, 9:16, 2:3, 3:2, 21:9
Референсные изображенияПубличные URL-адреса файлов PNG / JPEG / WebP по протоколу HTTPS, до 30 МБ каждый. Не используйте изображения для текст-в-изображение, от 1 до 10 для изображение-в-изображение и строго одно изображение для разделения на слои.
ПромптПромпт должен содержать от 4 до 5000 символов после удаления пробельных символов в начале и конце. Только в режиме layer-decomposition поле prompt можно не передавать или оставить пустым.
Формат выводаpng, jpg

Тарифы и кредиты

Цены ниже указаны за одно возвращенное изображение. Обычная генерация резервирует стоимость одного изображения. Разделение на слои резервирует стоимость 17 изображений, списывает плату по фактическому количеству возвращенных изображений (включая базовое) и возвращает неиспользованные кредиты на исходный баланс. Задачи с ошибкой полностью компенсируются.

Разрешение видеоТарифы и кредиты
1K4 кред.
1.5K4 кред.
2K8 кред.

При разрешении по умолчанию 2K разделение на слои резервирует 136 кр. Если возвращено четыре изображения, итоговое списание составит 32 кр., а 104 кр. будут возвращены на баланс.

Идемпотентность запросов не поддерживается. Каждый корректный запрос POST создает новую тарифицируемую задачу. Если результат отправки неизвестен, проверьте статус по возвращенному taskId. Повторная отправка POST может привести к созданию дублирующей задачи.

Аутентификация

Создайте API-ключ в панели управления. Полный ключ показывается только один раз. Храните его на своём сервере и передавайте в качестве Bearer-токена в заголовке каждого запроса.

Базовый URL

https://api.seevio.ai
Authorization: Bearer sk_live_your_api_key
Content-Type: application/json

Задайте переменную окружения SEEVIO_API_KEY перед запуском этих примеров. Примеры на JavaScript выполняются на стороне сервера с помощью Node.js; примеры на Python используют библиотеку requests.

Тело запроса

ПолеТипОбязательноеОписание и ограничения
model
stringДа

ID модели. Чтобы использовать Seedream 5.0 Pro, укажите в этом поле seedream-5-0-pro.

callback_url
stringНет

Публичный HTTPS-эндпоинт для POST-запросов о завершении или ошибке задачи. Локальные (localhost) и приватные сети не поддерживаются.

Пример: https://example.com/webhooks/seevio
input
objectДа

Настройки генерации. Промпт обязателен для режимов текст-в-изображение и изображение-в-изображение; для разделения на слои он необязателен.

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

ПолеТипОбязательноеПо умолчаниюОписание и ограничения
input.prompt
stringПри условиях—

Промпт должен содержать от 4 до 5000 символов после удаления пробельных символов в начале и конце. Только в режиме layer-decomposition поле prompt можно не передавать или оставить пустым.

Пример: A minimalist ceramic teapot on a stone pedestal, soft studio lighting
input.generation_type
stringНетtext-to-image

Используйте text-to-image для создания нового изображения, image-to-image для редактирования референсных изображений или layer-decomposition для разделения одного изображения на элементы, которые можно использовать повторно.

Допустимые значения
text-to-image | image-to-image | layer-decomposition
input.image_urls
string[]При условиях[]

Публичные URL-адреса файлов PNG / JPEG / WebP по протоколу HTTPS, до 30 МБ каждый. Не используйте изображения для текст-в-изображение, от 1 до 10 для изображение-в-изображение и строго одно изображение для разделения на слои.

Пример: ["https://example.com/teapot.png"]
input.aspect_ratio
stringНет1:1

Соотношение сторон

Допустимые значения
1:1 | 4:3 | 3:4 | 16:9 | 9:16 | 2:3 | 3:2 | 21:9
Пример: 1:1
input.resolution
stringНет2K

Режимы текст-в-изображение и изображение-в-изображение поддерживают 1K (базовое качество) и 2K (высокое качество). Разделение на слои поддерживает 1K, 1.5K и 2K. По умолчанию: 2K.

Допустимые значения
1K | 1.5K | 2K
Пример: 2K
input.output_format
stringНетpng

Запрашиваемый формат готового изображения. При разделении на слои значение png возвращает базовое изображение в формате PNG, а jpg — в формате JPEG. Все разделенные слои возвращаются в формате PNG с сохранением прозрачности.

Допустимые значения
png | jpg
Пример: png

Каждый запрос создает одну задачу. Генерация текста в изображение (text-to-image) и изображения в изображение (image-to-image) возвращают одно изображение. Послойное разложение (layer-decomposition) возвращает от 1 до 17 изображений, включая базовое. Не передавайте параметр aspect_ratio для layer-decomposition.

Быстрый старт

Отправьте этот минимальный запрос, сохраните полученный taskId, а затем используйте пример запроса статуса ниже. Значение credits в ответе на создание задачи — это зарезервированная сумма.

curl --fail-with-body https://api.seevio.ai/v1/images/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedream-5-0-pro",
  "input": {
    "prompt": "A minimalist ceramic teapot on a stone pedestal, soft studio lighting",
    "aspect_ratio": "1:1",
    "resolution": "2K",
    "output_format": "png",
    "generation_type": "text-to-image"
  }
}'

Пример ответа при создании задачи

{
  "taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "credits": 8
}

Из текста в изображение

Генерируйте изображения, редактируйте референсы или разделяйте изображение на слои с помощью вашего API-ключа Seevio. Задачи выполняются асинхронно; сохраняйте taskId и опрашивайте эндпоинт задачи либо настройте получение колбэка.

curl --fail-with-body https://api.seevio.ai/v1/images/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedream-5-0-pro",
  "input": {
    "prompt": "A minimalist ceramic teapot on a stone pedestal, soft studio lighting",
    "aspect_ratio": "1:1",
    "resolution": "2K",
    "output_format": "png",
    "generation_type": "text-to-image"
  }
}'

Из изображения в изображение

Для редактирования изображений установите параметр generation_type в значение image-to-image и передайте массив image_urls. Все остальные параметры используют тот же контракт.

Замените демонстрационные медиа-URL example.com своими собственными публично доступными HTTPS-файлами. Примеры URL служат лишь для демонстрации структуры запроса и не являются скачиваемыми ресурсами.

curl --fail-with-body https://api.seevio.ai/v1/images/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedream-5-0-pro",
  "input": {
    "prompt": "Change the teapot to matte sage green. Preserve its shape and the studio lighting.",
    "aspect_ratio": "1:1",
    "resolution": "2K",
    "output_format": "png",
    "generation_type": "image-to-image",
    "image_urls": [
      "https://example.com/teapot.png"
    ]
  }
}'

Разделение на слои

Установите generation_type в значение layer-decomposition и укажите ровно один URL-адрес изображения. Параметр aspect_ratio указывать не нужно. Параметр output_format влияет только на формат базового изображения. Разделенные слои всегда возвращаются в формате PNG с сохранением прозрачности. Сохраните каждый URL-адрес, возвращённый в data.results.

curl --fail-with-body https://api.seevio.ai/v1/images/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedream-5-0-pro",
  "input": {
    "generation_type": "layer-decomposition",
    "image_urls": [
      "https://example.com/teapot.png"
    ],
    "resolution": "2K",
    "output_format": "png"
  }
}'

Разделение на слои может возвращать несколько URL изображений в массиве data.results: базовое изображение и разделенные слои. Каждый URL указывает на отдельное изображение. Количество результатов зависит от задачи (всего от 1 до 17 изображений); обрабатывайте весь массив целиком, а не только элемент data.results[0]. Этот массив содержится как в ответе на запрос статуса выполненной задачи, так и в вебхуке об успешном завершении. Первоначальный ответ на запрос создания содержит только taskId и зарезервированные кредиты, но не URL изображений.

Пример ответа при создании задачи

{
  "taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "credits": 136
}

Выполнено разделение на слои: несколько URL изображений

В данном примере ответа показаны четыре готовых изображения: одно базовое изображение и три слоя. Ваша задача может вернуть другое количество. При запрошенном разрешении 2K значение credits является окончательной стоимостью за все четыре изображения; неиспользованная часть первоначального резерва на 17 изображений была возвращена на баланс.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1789171200,
  "model": "seedream-5-0-pro",
  "credits": 32,
  "failed_code": null,
  "status": "completed",
  "billing_status": "charged",
  "failed_reason": null,
  "data": {
    "results": [
      "https://cdn.seevio.ai/api/images/example/base.png",
      "https://cdn.seevio.ai/api/images/example/layer-1.png",
      "https://cdn.seevio.ai/api/images/example/layer-2.png",
      "https://cdn.seevio.ai/api/images/example/layer-3.png"
    ],
    "image_expires_at": "2026-10-12T00:00:00.000Z",
    "processing_time": 12
  }
}

Обработка каждого возвращенного изображения

const response = await fetch(
  "https://api.seevio.ai/v1/tasks/TASK_ID",
  { headers: { Authorization: `Bearer ${process.env.SEEVIO_API_KEY}` } }
);
if (!response.ok) throw new Error(await response.text());
const task = await response.json();

if (task.status === "completed") {
  // Process every returned image, including the base image.
  // The number of URLs varies; do not read only results[0].
  for (const [index, imageUrl] of task.data.results.entries()) {
    console.log({ taskId: task.id, index, imageUrl });
    // Download or store this image in your application.
  }
} else if (task.status === "failed") {
  throw new Error(task.failed_reason || "Image generation failed.");
}
// If queued or generating, poll again after at least 5 seconds.

Запрос статуса задачи

GET https://api.seevio.ai/v1/tasks/{taskId}

Замените ID в примере на taskId, полученный при создании. Запросы возвращают только те задачи, которые принадлежат владельцу API-ключа; недоступные или несуществующие ID возвращают HTTP 404.

Для начала делайте запросы каждые 10–20 секунд, увеличивайте интервал при получении HTTP 429 и прекращайте опрос, когда статус изменится на completed или failed. Для продакшена рекомендуется использовать вебхуки. Каждый пример кода ниже выполняет один запрос.

curl --fail-with-body https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
  -H "Authorization: Bearer $SEEVIO_API_KEY"
СтатусДопустимые значения и требования
queuedПринято и ожидает отправки на генерацию.
generatingВыполняется генерация.
completedУспешно завершено. Скачайте файлы из data.results до истечения срока их хранения.
failedОшибка выполнения. Изучите failed_reason и billing_status.
ПолеТипДопустимые значения и требования
idstringИдентификатор задачи. Соответствует taskId из ответа на запрос создания.
created_atnumberВремя создания задачи в формате Unix timestamp (в секундах).
modelstringID публичной модели, использованной для этой задачи.
billing_statusstringСтатус биллинга: reserved, charged, refunded или refund_failed.
creditsnumberОтвет при создании и выполняющаяся задача показывают зарезервированные кредиты. По завершении поле credits содержит фактическую стоимость; неиспользованные зарезервированные кредиты к этому моменту уже возвращены на баланс. Задачи с ошибкой сохраняют исходную зарезервированную сумму.
failed_reasonstring | nullПричина ошибки для невыполненных задач; в противном случае null. Ответы на запросы по ошибочным задачам не содержат объект data.
failed_codestring | nullКод ошибки. Подробное описание ошибки — в failed_reason.
dataobjectПрисутствует в успешных запросах статуса задачи. Содержит результат и детали обработки.
data.resultsstring[]Ссылки на все сгенерированные изображения, включая базовое изображение для разделения на слои. Поле остается пустым до завершения обработки и после истечения срока действия ссылок.
data.image_expires_atstring | nullСрок действия изображений в формате ISO 8601 или null, если ещё неизвестен.
data.processing_timenumber | nullВремя выполнения задачи в секундах (если доступно, в противном случае — null).

В очереди

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1789171200,
  "model": "seedream-5-0-pro",
  "credits": 8,
  "failed_code": null,
  "status": "queued",
  "billing_status": "reserved",
  "failed_reason": null,
  "data": {
    "results": [],
    "image_expires_at": null,
    "processing_time": null
  }
}

Завершено

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1789171200,
  "model": "seedream-5-0-pro",
  "credits": 8,
  "failed_code": null,
  "status": "completed",
  "billing_status": "charged",
  "failed_reason": null,
  "data": {
    "results": [
      "https://cdn.seevio.ai/api/images/example.png"
    ],
    "image_expires_at": "2026-10-12T00:00:00.000Z",
    "processing_time": 12
  }
}

Ошибка

Если запрос возвращает status=failed, генерация завершилась неудачно. Причину ошибки можно узнать в failed_reason, а статус возврата средств — в billing_status. В данном примере значение refunded означает, что кредиты были возвращены на баланс. При этом в credits отображается изначально зарезервированная сумма, а блок data в ответе отсутствует.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1789171200,
  "model": "seedream-5-0-pro",
  "credits": 8,
  "failed_code": "400",
  "status": "failed",
  "billing_status": "refunded",
  "failed_reason": "The input or output was flagged as sensitive. Please try again with different inputs."
}

Ссылки на результаты доступны в течение 30 дней после сохранения. По истечении этого срока массив results будет пуст.

Вебхуки

Укажите callback_url в запросе на создание задачи, чтобы получать POST-запросы с JSON-телом при завершении или ошибке задачи. Возвращайте ответ со статусом 2xx в течение 15 секунд. В случае неудачной доставки попытки повторяются; обрабатывайте повторные доставки идемпотентно по ID задачи.

Ваша конечная точка (endpoint) для обратного вызова должна принимать POST-запросы с телом запроса в формате JSON (Content-Type: application/json).

Создание задачи с вебхуком

curl --fail-with-body https://api.seevio.ai/v1/images/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedream-5-0-pro",
  "input": {
    "prompt": "A minimalist ceramic teapot on a stone pedestal, soft studio lighting",
    "aspect_ratio": "1:1",
    "resolution": "2K",
    "output_format": "png",
    "generation_type": "text-to-image"
  },
  "callback_url": "https://example.com/webhooks/seevio"
}'

Вебхуки используют структуру ответа для запроса задачи. Уведомления о сбоях с возвратом средств также содержат поле credits_refunded на верхнем уровне. Используйте id для идентификации задачи и status для определения её успешного завершения или сбоя. Уведомления могут приходить повторно: обрабатывайте их идемпотентно по id и status. Вебхуки не имеют цифровой подписи; проверяйте статус задачи через аутентифицированную конечную точку запроса. Сбой доставки уведомления не приводит к возврату средств за успешно выполненную задачу.

Задача выполнена: структура успешного ответа (callback payload)

created_at — время создания события, task_created_at — время создания задачи, в секундах Unix. Примеры показывают рекомендуемые поля; ответ может содержать дополнительные поля.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1789171212,
  "model": "seedream-5-0-pro",
  "credits": 8,
  "failed_code": null,
  "status": "completed",
  "billing_status": "charged",
  "failed_reason": null,
  "data": {
    "results": [
      "https://cdn.seevio.ai/api/images/example.png"
    ],
    "image_expires_at": "2026-10-12T00:00:00.000Z",
    "processing_time": 12
  },
  "task_created_at": 1789171200
}

Ошибка выполнения задачи: структура ответа при сбое

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1789171212,
  "model": "seedream-5-0-pro",
  "credits": 8,
  "failed_code": "400",
  "status": "failed",
  "billing_status": "refunded",
  "failed_reason": "The input or output was flagged as sensitive. Please try again with different inputs.",
  "task_created_at": 1789171200,
  "credits_refunded": 8
}

Пример обработчика (receiver)

export async function POST(request: Request) {
  const callbackData = await request.json();

  if (callbackData.status === "completed") {
    const imageUrls = callbackData.data.results;
    // Save the image URLs and mark this task as completed in your application.
    console.log(callbackData.id, imageUrls);
  }

  if (callbackData.status === "failed") {
    const { failed_reason, credits_refunded } = callbackData;
    // Record the failure reason and refunded credits for this task.
    console.error(callbackData.id, failed_reason, credits_refunded);
  }

  return new Response(null, { status: 200 });
}

В этом примере для Next.js показано, как считывать JSON-тело вебхука и обрабатывать успешно выполненные и проваленные задачи. Для интеграции в продакшн добавьте сохранение данных в БД и дедупликацию по task-ID, а ресурсоемкие фоновые задачи отправляйте в очередь перед отправкой ответа на вебхук.

Ошибки

Ошибки HTTP возвращают объект error с полями code и message. Успешно принятая задача всё ещё может завершиться ошибкой позже; запрашивайте статус задачи или обрабатывайте вебхук об ошибке.

{
  "error": {
    "code": "invalid_request",
    "message": "input.prompt is required."
  }
}
HTTPПолеЧто делать
400invalid_request
Исправьте JSON, добавьте отсутствующий промпт, скорректируйте диапазоны параметров или проверьте медиа-URL перед повторной отправкой.
401invalid_api_key
Проверьте Bearer-токен и активность вашего API-ключа.
402insufficient_credits
Пополните баланс кредитов или снизьте стоимость задачи. Ответ может содержать требуемую и доступную суммы.
403forbidden
Проверьте ограничения на уровне аккаунта, указанные в тексте ошибки.
404not_found
Проверьте ID задачи и убедитесь, что ключ принадлежит пользователю, создавшему задачу.
429rate_limited
Подождите указанный в Retry-After интервал перед повторным запросом.
500internal_error
Изучите сообщение об ошибке и логи API. Повторяйте запросы с осторожностью; повторная отправка запроса на создание может создать ещё одну тарифицируемую задачу.

Ошибки содержат коды error.code и сообщения error.message: 400 invalid_request, 401 invalid_api_key, 402 insufficient_credits, 403 forbidden, 404 not_found, 429 rate_limited, 500 internal_error. Ошибка 402 insufficient_credits означает, что на вашем балансе недостаточно кредитов для выполнения этого запроса.

Лимиты запросов

Создание задач: по умолчанию для каждого API-ключа разрешено до 100 запросов в минуту. Индивидуальные лимиты запросов на данный момент не поддерживаются.

Получение информации о задачах: по умолчанию для каждого API-ключа разрешено до 120 запросов в минуту. Запросы на получение информации и запросы на создание задач учитываются раздельно.

Запросы на создание изображений и видео используют общий лимит частоты запросов для одного API-ключа.

HTTP 429 возвращает заголовок Retry-After: 60 для создания задач и Retry-After: 5 для запросов статуса. Используйте экспоненциальную задержку и избегайте избыточного опроса.

HTTP/1.1 429 Too Many Requests
Content-Type: application/json
Retry-After: 60
{
  "error": {
    "code": "rate_limited",
    "message": "Rate limit exceeded."
  }
}