Seedance 2.0 API

Вбудуйте генерацію відео у свій продукт за допомогою створення асинхронних завдань, опитування статусу, веб-хуків та білінгу з урахуванням кредитів.

Базова URL
https://api.seedance2.ai
На цій сторінці

Вступ

API дозволяє програмно надсилати завдання на генерацію відео Seedance 2.0. Генерація асинхронна: створіть завдання, негайно отримайте ідентифікатор завдання, а потім отримайте готове відео, опитуючи кінцеву точку завдання або отримуючи веб-хук.

Асинхронні завдання

Опитування добре працює для розробки та простих інтеграцій.

Готовність веб-хуків

Веб-хуки рекомендуються для виробництва, оскільки вони дозволяють уникнути надмірного опитування та повідомляють ваш сервіс, коли завдання досягає кінцевого стану.

З урахуванням кредитів

Кредити резервуються при відправці. За успішні завдання стягується плата з цього резерву; невдалі або такі, що вийшли за часом, завдання автоматично повертаються.

Автентифікація

Створіть ключ API на панелі керування та надсилайте його як токен Bearer у кожному запиті. Повний ключ відображається лише один раз під час створення.

Authorization: Bearer sk_live_xxxxxxxx
sk_live_

Використовуйте ключі sk_live_ для виробничого трафіку.

sk_test_

Використовуйте ключі sk_test_ для тестування інтеграції в пісочниці з тим самим контрактом API.

401

Відсутні, недійсні або відкликані ключі повертають invalid_api_key з HTTP 401.

Швидкий старт

Спочатку надішліть завдання. Після того, як завдання буде прийнято, виберіть один із методів доставки результату: опитувати кінцеву точку завдання або отримувати кінцевий результат через веб-хук.

Надіслати завдання

Створіть асинхронне відеозавдання та негайно отримайте ідентифікатор завдання.

curl https://api.seedance2.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-0",
    "callback_url": "https://your-domain.com/api/seedance/webhook",
    "input": {
      "prompt": "a cat surfing on a neon wave, cinematic lighting",
      "generation_type": "text-to-video",
      "duration": 5,
      "aspect_ratio": "16:9",
      "resolution": "720p",
      "generate_audio": true,
      "watermark": false,
      "web_search": false,
      "return_last_frame": false,
      "seed": -1
    }
  }'
Варіант результату: Опитування

Отримуйте кінцеву точку статусу завдання, якщо ваша інтеграція віддає перевагу явному опитуванню.

curl https://api.seedance2.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
  -H "Authorization: Bearer sk_live_xxx"
Варіант результату: Веб-хук

Передайте callback_url при відправці завдання, а потім отримуйте зворотні виклики про завершення або невдачу та оновлюйте власний запис завдання.

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

  if (callbackData.status === "completed") {
    const videoUrl = callbackData.data.results[0];
    // Save the video URL or update your own task record here.
  }

  if (callbackData.status === "failed") {
    const errorMessage = callbackData.data.failed_reason;
    // Mark your own task record as failed here.
  }

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

Створити завдання на відео

Створіть відеозавдання за допомогою POST /v1/videos/generations. Тіло запиту має модель верхнього рівня, необов'язковий callback_url та об'єкт input, що містить prompt та налаштування генерації.

POST
/v1/videos/generations
curl https://api.seedance2.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-0",
    "callback_url": "https://your-domain.com/api/seedance/webhook",
    "input": {
      "prompt": "a cat surfing on a neon wave, cinematic lighting",
      "generation_type": "text-to-video",
      "duration": 5,
      "aspect_ratio": "16:9",
      "resolution": "720p",
      "generate_audio": true,
      "watermark": false,
      "web_search": false,
      "return_last_frame": false,
      "seed": -1
    }
  }'

Режими генерації

generation_type контролює, які медіа-входи приймаються та як модель їх інтерпретує.

РежимОбов'язкові медіаДодаткові медіаПримітки
text-to-videopromptduration, aspect_ratio, resolution, seedЛише текстова підказка. image_urls, video_urls та audio_urls не потрібні.
image-to-videoprompt + масив image_urls (1-2 URL-адреси зображень)duration, aspect_ratio, resolution, seedimage_urls має бути масивом. Надайте 1 URL-адресу зображення для першого кадру або 2 URL-адреси зображень для першого та останнього кадрів. Відео та аудіо ігноруються.
reference-to-videoprompt + принаймні одне зображення або відеозображення, відео та аудіо в межах лімітів матеріалуАудіо не може використовуватися окремо з текстом. Додайте принаймні одне зображення або відео, коли надається аудіо.
text-to-video

Використовуйте текст у відео, коли підказка є єдиним креативним входом. (text-to-video)

curl https://api.seedance2.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-0",
    "callback_url": "https://your-domain.com/api/seedance/webhook",
    "input": {
      "prompt": "a cinematic drone shot over a futuristic coastal city at sunrise",
      "generation_type": "text-to-video",
      "duration": 5,
      "aspect_ratio": "16:9",
      "resolution": "720p",
      "generate_audio": true,
      "watermark": false,
      "web_search": false,
      "return_last_frame": false,
      "seed": -1
    }
  }'
image-to-video

Використовуйте зображення у відео, коли input.image_urls є масивом з 1-2 URL-адресами зображень: одна URL-адреса встановлює перший кадр, а дві URL-адреси встановлюють перший та останній кадри. Посилання на відео та аудіо ігноруються в цьому режимі. (image-to-video)

curl https://api.seedance2.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-0",
    "input": {
      "prompt": "the subject turns toward camera, soft studio motion",
      "generation_type": "image-to-video",
      "image_urls": ["https://your.cdn.com/first-frame.jpg"],
      "duration": 5,
      "resolution": "720p"
    }
  }'
reference-to-video

Використовуйте посилання на відео для більш детального направлення за допомогою еталонних зображень, відео та аудіо. Аудіо не може використовуватися окремо з текстом; включіть принаймні одне зображення або відео, коли надається аудіо. (reference-to-video)

Обмеження матеріалів

  • До 9 еталонних зображень
  • До 3 еталонних відео, загальна тривалість <= 15 секунд
  • До 3 еталонних аудіо, загальна тривалість <= 15 секунд
  • Максимум 12 матеріалів загалом для всіх типів

Підтримувані комбінації входу

Текст + Зображення
Текст + Відео
Текст + Зображення + Відео
Текст + Зображення + Аудіо
Текст + Відео + Аудіо
Текст + Зображення + Відео + Аудіо
curl https://api.seedance2.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-0",
    "input": {
      "prompt": "use the product from image 1 and the camera motion from the reference video",
      "generation_type": "reference-to-video",
      "image_urls": ["https://your.cdn.com/product.jpg"],
      "video_urls": ["https://your.cdn.com/camera-motion.mp4"],
      "audio_urls": [],
      "duration": 8,
      "resolution": "1080p"
    }
  }'

Параметри запиту

Імена параметрів, значення перерахувань, шляхи кінцевих точок та приклади є частиною контракту API. Описи нижче пояснюють, як поводиться кожне поле.

Заголовки

ЗаголовокОбов'язковоОписПриклад
AuthorizationТакBearer API ключ, що використовується для автентифікації запиту.Bearer sk_live_xxx
Content-TypeТакУсі запити на запис використовують JSON.application/json

Поля верхнього рівня

ПолеТипОбов'язковоЗа замовчуваннямДіапазон / ПерерахуванняРежимиПриклад
model

Варіант моделі, що використовується для генерації.

stringТак-seedance-2-0 | seedance-2-0-fastвсіseedance-2-0
callback_url

Кінцева точка HTTPS, яка отримує зворотні виклики про завершення та невдачу завдання.

stringНі-HTTPS URL, без приватних мережвсіhttps://your-domain.com/hook
input

Налаштування генерації та посилання на медіа.

objectТак--всі-

input.* поля

ПолеТипОбов'язковоЗа замовчуваннямДіапазон / ПерерахуванняРежимиПриклад
input.prompt

Текстова підказка, що описує відео для створення.

stringТак-непорожній текствсіa cat surfing
input.generation_type

Режим генерації. За замовчуванням text-to-video.

stringНіtext-to-videotext-to-video | image-to-video | reference-to-video-image-to-video
input.image_urls

Публічно доступні URL-адреси зображень. Для зображення до відео, надішліть 1 зображення для першого кадру або 2 зображення для першого та останнього кадрів. Для посилання на відео, надішліть до 9 зображень як візуальні посилання. (image-to-video) (reference-to-video)

string[]Умовно[]Зображення до відео: 1 або 2 зображення. Посилання на відео: до 9 зображень. (image-to-video) (reference-to-video)image-to-video / reference-to-video["https://.../a.jpg"]
input.video_urls

Публічно доступні еталонні відео лише для посилання на відео. Ви можете надіслати до 3 відеофайлів, і їх сукупний час відтворення має бути 15 секунд або менше. (reference-to-video)

string[]Ні[]До 3 відео. Загальна довжина відео повинна бути не більше 15 секунд.reference-to-video[]
input.audio_urls

Публічно доступні еталонні аудіофайли лише для посилання на відео. Ви можете надіслати до 3 аудіофайлів, і їх сукупний час відтворення має бути 15 секунд або менше. (reference-to-video)

string[]Ні[]До 3 аудіофайлів. Загальна довжина аудіо повинна бути не більше 15 секунд.reference-to-video[]
input.duration

Довжина вихідного відео в секундах.

intНі54-15 секундвсі5
input.aspect_ratio

Співвідношення сторін вихідного зображення. adaptive дозволяє сервісу визначити найкраще співвідношення.

stringНіadaptive16:9 | 4:3 | 1:1 | 3:4 | 9:16 | 21:9 | adaptiveвсі16:9
input.resolution

Рівень роздільної здатності вихідного зображення.

stringНі720p480p | 720p | 1080pвсі720p
input.generate_audio

Чи повинна модель генерувати аудіо, якщо це підтримується.

booleanНіtruetrue | falseвсіtrue
input.watermark

Чи додавати водяний знак.

booleanНіfalsetrue | falseвсіfalse
input.web_search

Чи дозволяти розширення веб-пошуку, якщо це підтримується.

booleanНіfalsetrue | falseвсіfalse
input.return_last_frame

Чи повертати URL останнього кадру, якщо він доступний.

booleanНіfalsetrue | falseвсіfalse
input.seed

Детерміноване зерно. Використовуйте -1 для випадкового зерна.

intНі-1-1 або 0-4294967295всі-1

Кредити змінюються залежно від роздільної здатності, тривалості, моделі та того, чи містить посилання на відео посилання на відео. Значення кредитів, що повертається відповіддю на створення, є фактичною зарезервованою сумою для цього завдання. (reference-to-video)

Переглянути ціни на кредити

Відповідь

Це успішна відповідь від POST /v1/videos/generations. Це означає, що завдання прийнято та кредити зарезервовано. Використовуйте повернутий taskId для опитування GET /v1/tasks/:id або для зіставлення зворотного виклику про завершення або невдачу.

Успішна відповідь на POST /v1/videos/generations

{
  "taskId": "3f2aK9mR...",
  "credits": 60
}

Отримати статус завдання

Використовуйте GET /v1/tasks/:id, щоб отримати поточний стан завдання. Опитуйте не частіше, ніж раз на 10 секунд. Для виробничих систем віддавайте перевагу веб-хукам.

curl https://api.seedance2.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
  -H "Authorization: Bearer sk_live_xxx"

Відповідь на завершене завдання

{
  "id": "3f2aK9mR...",
  "status": "completed",
  "created_at": 1781234567,
  "model": "seedance-2-0",
  "billing_status": "charged",
  "credits": 60,
  "failed_reason": null,
  "data": {
    "results": ["https://cdn.seedance2.ai/.../x.mp4"],
    "video_expires_at": "2026-06-13T10:00:00Z",
    "last_frame_url": null,
    "processing_time": 48
  }
}

Відповідь на невдале завдання

{
  "id": "3f2aK9mR...",
  "status": "failed",
  "created_at": 1781234567,
  "model": "seedance-2-0",
  "billing_status": "refunded",
  "credits": 60,
  "failed_reason": "provider_failed"
}
ЗначенняЗначення
status=queuedПрийнято та очікує відправки або обробки.
status=generatingПостачальник обробляє генерацію.
status=completedВідео завершено, і data.results містить URL результату.
status=failedГенерація не вдалася або вийшла за часом.
billing_status=reservedКредити зарезервовані, поки завдання виконується.
billing_status=chargedЗавдання успішно виконано, і резервація погашена.
billing_status=refundedЗавдання не вдалося або вийшло за часом, і кредити повернуті.
billing_status=refund_failedТранзакція повернення не вдалася і потребує ручної обробки.

Після video_expires_at, data.results порожній. Завантажте та збережіть файл до закінчення терміну дії.

Веб-хуки

Коли присутній callback_url, Seedance викликає вашу кінцеву точку, коли завдання завершується або не вдається, і надсилає дані JSON, що описують кінцевий результат. Якщо ваша кінцева точка повертає відповідь, відмінну від 2xx, або не відповідає протягом 15 секунд, доставка повторюється до 5 разів. Повторні спроби використовують той самий ідентифікатор завдання, тому виконайте дедуплікацію за ідентифікатором. Поверніть відповідь 200, як тільки ви безпечно записали дані зворотного виклику.

Зворотний виклик про завершення завдання

{
  "id": "3f2aK9mR...",
  "status": "completed",
  "created_at": 1781234567,
  "model": "seedance-2-0",
  "data": {
    "results": ["https://cdn.seedance2.ai/.../x.mp4"],
    "video_expires_at": "2026-06-13T10:00:00Z",
    "last_frame_url": null,
    "processing_time": 48
  }
}

Зворотний виклик про невдачу завдання

{
  "id": "3f2aK9mR...",
  "status": "failed",
  "created_at": 1781234567,
  "model": "seedance-2-0",
  "data": {
    "failed_reason": "provider_failed",
    "credits_refunded": 60
  }
}
export async function POST(request: Request) {
  const callbackData = await request.json();

  if (callbackData.status === "completed") {
    const videoUrl = callbackData.data.results[0];
    // Save the video URL or update your own task record here.
  }

  if (callbackData.status === "failed") {
    const errorMessage = callbackData.data.failed_reason;
    // Mark your own task record as failed here.
  }

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

Перевірте форму даних зворотного виклику, виконайте дедуплікацію за ідентифікатором, оновіть власний запис завдання та швидко відповідайте.

callback_url має бути HTTPS і не повинен вказувати на приватні, петлеві або локальні мережеві діапазони.

Помилки

POST /v1/videos/generations та GET /v1/tasks/:id повертають таку форму помилки, коли сам запит API не вдається, наприклад, через недійсні параметри, недійсний ключ API, недостатню кількість кредитів, перевищення ліміту запитів або відсутність завдання. Деякі помилки включають додаткові поля, такі як required, available або retry_after, залежно від ситуації.

{
  "error": {
    "code": "insufficient_credits",
    "message": "Not enough credits for this task.",
    "required": 60,
    "available": 12
  }
}
КодHTTPЗначенняПовторити?
invalid_request400Відсутні або недійсні параметри.Ні, виправте запит.
invalid_api_key401Ключ API відсутній, недійсний або відкликаний.Ні, використовуйте дійсний ключ.
insufficient_credits402Недостатньо кредитів. Завдання не приймається і не оплачується.Після поповнення.
forbidden403Ключу API бракує необхідної області.Ні.
not_found404Завдання не існує або не належить власнику ключа.Ні.
rate_limited429Перевищено ліміт запитів.Так, дотримуйтесь Retry-After.
internal_error500Помилка сервера.Так, повторіть пізніше.

Ліміти запитів

Ліміти запитів застосовуються для кожного ключа API з плаваючим вікном. Генерація за замовчуванням становить 60 запитів на хвилину; запити статусу є більш лояльними. Відповіді HTTP 429 включають Retry-After.

Генерація

60/min

Запити статусу

Більш лояльні

Заголовок 429

Retry-After

Білінг та кредити

API використовує резервування при відправці, стягнення плати при успіху та повернення коштів при невдачі. Сторінки використання на панелі керування показують історію кредитів API, журнали завдань та статистику використання за часом.

Зарезервовано

Кредити перевіряються та резервуються, коли завдання прийнято.

Списано

Завершені завдання закривають існуючу резервацію.

Повернено

Невдалі або такі, що вийшли за часом, завдання автоматично повертають зарезервовані кредити.

Перегляньте використання на панелі керування

Переглядайте журнали API, тимчасові шкали завдань, історію кредитів та метрики використання за часом.

Журнали API