Seedance 3.0 API для разработчиков / v1

Seedance 2.5.
В вашем продукте.

Превращайте текст, изображения и референсы в видео через один API. Используйте кредиты Seedance 3.0 и привычный рабочий процесс: от отправки запроса до получения результата действует единая понятная спецификация.

Общие кредиты аккаунтаАсинхронная генерация видеоИдемпотентные запросы
POST /api/v1/videos
{
  "model": "seedance-2.5",
  "mode": "text-to-video",
  "prompt": "A paper boat drifting into the morning light",
  "duration": 5,
  "resolution": "720p",
  "aspectRatio": "16:9"
}
Ваш ключ. Ваши кредиты. Ваше приложение.
01 / НАЧАЛО РАБОТЫ

Первое видео за несколько запросов.

Сохраните ключ на сервере в переменной SEADANCE_API_KEY. Задайте уникальное значение SEADANCE_REQUEST_KEY для этого видео (например, с помощью uuidgen) и сохраняйте его для повторных попыток. Убедитесь, что на аккаунте достаточно кредитов. В этом примере предварительно списывается 350 кредитов за видео длительностью 5 секунд в 720p. Сохраните полученный id, чтобы проверять статус задачи.

Терминал
export SEADANCE_API_KEY="sd_live_your_key"
# Keep this value for retries; choose a new value for a new video.
export SEADANCE_REQUEST_KEY="${SEADANCE_REQUEST_KEY:-$(uuidgen)}"

curl --fail-with-body "https://seedance3ai.dev/api/v1/videos" \
  -H "Authorization: Bearer $SEADANCE_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $SEADANCE_REQUEST_KEY" \
  --data '{
  "model": "seedance-2.5",
  "mode": "text-to-video",
  "prompt": "A paper boat floating through a sunlit stream, gentle camera movement",
  "aspectRatio": "16:9",
  "resolution": "720p",
  "duration": 5
}'

Эта документация не запускает генерацию автоматически. Отправка запроса на создание видео расходует ваши кредиты.

Выполняйте аутентификацию на сервере.

Каждый вызов API использует Authorization: Bearer sd_live_…. Не размещайте ключи в браузере, мобильных приложениях, открытых репозиториях или клиентском коде. Полный ключ показывается один раз; его можно отозвать в панели API.

Базовый URLhttps://seedance3ai.dev/api/v1

Разрешения ключа по умолчанию: videos:write — загрузка и генерация; videos:read — модели и статус задач; account:read — баланс кредитов. Настройки доступа и лимиты аккаунта распространяются на все ключи.

Создайте задачу генерации видео.

POST/api/v1/videos

Используйте Content-Type: application/json и уникальный Idempotency-Key для каждого запланированного видео. Приём задачи внешним провайдером может занять время. Если соединение прервалось по тайм-ауту, повторите то же тело запроса с тем же ключом. HTTP 202 означает, что задача принята, но ещё не завершена. Idempotency-Key допускает 1–128 печатных символов ASCII без пробелов.

ПараметрЗначения и требования
modelstringseedance-2.5

Обязательно. Сейчас API поддерживает Seedance 2.5.

modestringtext-to-video | image-to-video | reference-to-video

Обязательно. Выберите режим ввода; поля с материалами должны соответствовать этому режиму.

promptstring3–30 000 символов

Обязательно. Опишите сцену, движение и звук.

durationinteger4, 5, 6, 8, 10, 12, 15, 20, 25, 29, 30

Обязательно, в секундах. При редактировании используется длительность исходного видео, округлённая вверх до целых секунд для расчёта стоимости.

resolutionstring480p | 720p | 1080p

Обязательно. Определяет тариф в кредитах.

aspectRatiostring1:1 | 4:3 | 3:4 | 16:9 | 9:16 | 21:9

Обязательно. При генерации по изображению используется соотношение сторон первого кадра.

firstFrameUrl / lastFrameUrlstringpublicObjectUrl загруженного материала

Для генерации по изображению нужен первый кадр. Последний кадр необязателен.

referenceImageUrlsstring[]До 30 изображений

Для reference-to-video. Сначала загрузите каждый файл в свой аккаунт.

referenceVideoUrls / referenceAudioUrlsstring[]До 10 видео / 10 аудиофайлов

Общая длительность каждой группы — не более 30 секунд. Сервер проверяет материалы перед генерацией.

referenceTaskTypestringreference | edit | extend

Необязательно, по умолчанию reference. Для edit и extend нужен режим reference-to-video и ровно одно исходное видео.

generateAudiobooleantrue

Необязательно. Seedance 2.5 включает генерацию звука; значение false не допускается.

batchCountinteger1

Необязательно. Одно видео на запрос.

Эти поля позволяют использовать в Seedance 2.5 текст, первый и последний кадры, мультимодальные референсы, редактирование и продление видео. Актуальные возможности и цены указаны в ответе GET /models.

Пример запроса генерации по изображению
request.json
{
  "model": "seedance-2.5",
  "mode": "image-to-video",
  "prompt": "A paper boat floating through a sunlit stream, gentle camera movement",
  "aspectRatio": "16:9",
  "resolution": "720p",
  "duration": 5,
  "firstFrameUrl": "YOUR_UPLOADED_PUBLIC_OBJECT_URL"
}
Пример запроса генерации по референсам
request.json
{
  "model": "seedance-2.5",
  "mode": "reference-to-video",
  "prompt": "A paper boat floating through a sunlit stream, gentle camera movement",
  "aspectRatio": "16:9",
  "resolution": "720p",
  "duration": 5,
  "referenceImageUrls": [
    "YOUR_UPLOADED_IMAGE_URL"
  ],
  "referenceVideoUrls": [
    "YOUR_UPLOADED_VIDEO_URL"
  ]
}
ИСПОЛЬЗУЙТЕ СВОИ РЕФЕРЕНСЫ

Загрузите один раз. Используйте URL.

Отправьте в POST /uploads поля fileName, contentType, size (в байтах) и kind (image, video или audio). До expiresAt загрузите исходные байты файла методом PUT на uploadUrl с заголовками requiredHeaders. После успешной загрузки используйте publicObjectUrl в запросе генерации. Материалы должны принадлежать тому же аккаунту; произвольные внешние URL и данные base64 не принимаются.

upload.mjs
// Node.js 20+ · upload once, then use publicObjectUrl
import { readFile } from "node:fs/promises";

const bytes = await readFile("./first-frame.jpg");
const signed = await fetch("https://seedance3ai.dev/api/v1/uploads", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.SEADANCE_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    fileName: "first-frame.jpg", contentType: "image/jpeg",
    size: bytes.length, kind: "image",
  }),
});
const upload = await signed.json();
if (!signed.ok) throw new Error(JSON.stringify(upload));
const stored = await fetch(upload.uploadUrl, {
  method: "PUT", headers: upload.requiredHeaders, body: bytes,
});
if (!stored.ok) throw new Error("Upload failed");
console.log(upload.publicObjectUrl);
// Use this URL as firstFrameUrl in an image-to-video request.

Указанные размер и тип содержимого должны совпадать с загруженным файлом. URL загрузки имеет срок действия; при необходимости запросите новый. Перед генерацией проверяются длительность, размеры и формат материалов.

Следите за задачей до завершения.

GET /videos/:id возвращает текущую задачу. Опрашивайте её каждые 5–10 секунд и остановитесь при succeeded или failed. При наличии Retry-After выдерживайте указанную задержку. Доступны только задачи, созданные вашим аккаунтом через API. Текущая интеграция использует периодический опрос.

GET /api/v1/videos/:id
curl --fail-with-body "https://seedance3ai.dev/api/v1/videos/TASK_ID" \
  -H "Authorization: Bearer $SEADANCE_API_KEY"
queuedprocessingsucceeded / failed
Пример успешно завершённой задачи
{
  "id": "a1b2c3d4-1234-4567-8901-abcdef123456",
  "status": "succeeded",
  "credits_reserved": 350,
  "created_at": "2026-10-27T00:00:00.000Z",
  "output": {
    "url": "https://your-result-host.example/video.mp4"
  },
  "error": null,
  "refund_status": "not_applicable"
}

Пока видео не готово, output равен null. Неудачная задача содержит error; статус возврата кредитов указан в refund_status. Скачивайте готовые видео своевременно. Удаление видео не сбрасывает запрос: повтор с тем же Idempotency-Key вернёт 410 video_deleted и не создаст видео заново.

ОДИН АККАУНТ, ОБЩИЙ БАЛАНС

Узнайте стоимость в кредитах до интеграции.

Генерация через API использует те же кредиты аккаунта и тарифы Seedance 2.5, что и сайт. При приёме запроса кредиты списываются предварительно. Если генерация не удалась, они возвращаются на баланс разовых кредитов. Ошибка проверки до создания задачи не создаёт платного видео.

480p

30кредитов / секунду результата

+ 20 кредитов / секунду видеореференса

720p

70кредитов / секунду результата

+ 50 кредитов / секунду видеореференса

1080p

160кредитов / секунду результата

+ 90 кредитов / секунду видеореференса

Стоимость = длительность результата × тариф результата + длительность видеореференса × тариф референса. Длительность видеореференсов измеряется на сервере; общая длительность округляется вниз до целых секунд для расчёта стоимости. Генерация звука включена. Например, 5 секунд в 720p стоят 350 кредитов, а с видеореференсом длительностью 5 секунд — 600 кредитов.

Получить модели, цены и баланс
curl --fail-with-body "https://seedance3ai.dev/api/v1/models" \
  -H "Authorization: Bearer $SEADANCE_API_KEY"

curl --fail-with-body "https://seedance3ai.dev/api/v1/credits" \
  -H "Authorization: Bearer $SEADANCE_API_KEY"

В панели API можно проверить доступные кредиты, историю запросов и лимиты аккаунта. Пополняйте кредиты на странице тарифов сайта из того же аккаунта; отдельного баланса API или эндпоинта пополнения нет. При достаточном количестве доступных кредитов активная подписка не требуется. Правила истечения подписки и использования разовых кредитов такие же, как на сайте.

Пополнение кредитов не увеличивает частоту запросов, число параллельных задач или суточные лимиты API и не включает отключённый аккаунт. В суточный лимит входят все предварительно списанные кредиты, включая возвращённые после неудачной генерации. Лимит сбрасывается в 00:00 UTC. Для повышения лимитов обратитесь в поддержку.

Посмотреть тарифы и пополнить кредиты

Повторяйте безопасно, без повторной оплаты.

Используйте один Idempotency-Key на каждое запланированное видео и сохраняйте его вместе с точным телом запроса, пока результат не станет известен. Новый ключ означает новую генерацию. Ответ с ошибкой содержит error.code, error.message и request_id; при обращении в поддержку укажите ID запроса.

HTTPЗначениеЧто делать
400Некорректный запросПеред повтором проверьте сообщение об ошибке, поля и ограничения для материалов.
401Недействительный API-ключПроверьте заголовок Bearer. Отозванные ключи нельзя использовать повторно.
402Недостаточно кредитовПополните баланс того же аккаунта Seedance 3.0.
403Доступ запрещёнДоступ к API отключён или у ключа нет необходимого разрешения.
404Видео не найденоИспользуйте ID задачи, созданной вашим аккаунтом через этот API.
409Конфликт запросаПри request_in_progress подождите и повторите запрос с тем же телом и ключом. idempotency_conflict означает, что ключ использован повторно с другим телом запроса. request_expired или request_previously_failed подтверждает, что видео не было отправлено на генерацию: устраните указанную проблему и используйте новый ключ.
410Видео удаленоvideo_deleted означает, что исходный запрос обработан, но видео удалено. Его ключ нельзя использовать для повторной генерации. Прекратите повторы; используйте новый ключ, только если намеренно хотите запустить новую платную генерацию.
429Лимит аккаунтаСоблюдайте Retry-After. Ограничения частоты запросов, параллельных задач и суточного расхода кредитов общие для всех ключей. Суточный лимит сбрасывается в 00:00 UTC.
500 / 503Временная ошибка сервисаСохраните Idempotency-Key и повторите тот же запрос. Не создавайте новый ключ, если результат предыдущего запроса неизвестен.

Если отправка вернула request_in_progress, подождите и повторите тот же запрос. Не меняйте ключ, чтобы обойти тайм-аут. Если возврат кредитов за неудачную задачу ещё не выполнен, сохраните её ID и обратитесь в поддержку.

Готовы подключиться?

Создайте ключ и начните первую интеграцию.

Открыть панель API