Seedance API

Wbuduj generowanie wideo bezpośrednio do swojego produktu dzięki Seedance 2.5 lub Seedance 2.0, zadaniom asynchronicznym, webhookom i rozliczeniom uwzględniającym stan kredytów.

Bazowy adres URL
https://api.seevio.ai
Na tej stronie

Wprowadzenie

API umożliwia programowe zlecanie zadań generowania wideo przy użyciu modeli Seedance 2.5 oraz Seedance 2.0. Seedance 2.5 to zalecany model, który obsługuje generowanie z tekstu na wideo, z obrazu na wideo (na podstawie pierwszej ramki lub pierwszej i ostatniej) oraz z multimodalnych referencji na wideo. Generowanie odbywa się asynchronicznie: po utworzeniu zadania natychmiast otrzymujesz jego identyfikator (ID), a gotowe wideo odbierasz poprzez odpytywanie punktu końcowego zadania lub za pomocą webhooka.

Zadania asynchroniczne

Odpytywanie (polling) sprawdza się świetnie na etapie programowania i w prostych integracjach.

Obsługa webhooków

Webhooki są zalecane w środowiskach produkcyjnych – pozwalają uniknąć zbyt częstego odpytywania i automatycznie powiadamiają Twój system, gdy zadanie osiągnie stan końcowy.

Kontrola kredytów

Kredyty są rezerwowane w momencie przesłania zadania. Udane zadania są opłacane z tej rezerwacji, natomiast w przypadku błędów lub przekroczenia limitu czasu kredyty są automatycznie zwracane.

Uwierzytelnianie

Utwórz klucz API w panelu i przesyłaj go jako token Bearer w nagłówku każdego żądania. Pełny klucz jest wyświetlany tylko raz, bezpośrednio po jego utworzeniu.

Authorization: Bearer sk_live_xxxxxxxx
sk_live_

Do obsługi ruchu produkcyjnego używaj kluczy sk_live_.

sk_test_

Do testowania integracji w środowisku piaskownicy (sandbox) z zachowaniem tej samej specyfikacji API używaj kluczy sk_test_.

401

Brakujące, nieprawidłowe lub unieważnione klucze powodują zwrócenie błędu invalid_api_key z kodem HTTP 401.

Szybki start

Najpierw prześlij zadanie. Gdy zostanie zaakceptowane, wybierz preferowany sposób odbioru wyniku: możesz odpytywać punkt końcowy zadania lub odebrać ostateczny rezultat za pomocą webhooka.

Prześlij zadanie

Utwórz asynchroniczne zadanie wideo i natychmiast odbierz jego identyfikator (ID).

curl https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-5",
    "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
    }
  }'
Metoda odbioru: Odpytywanie

Odpytuj punkt końcowy stanu zadania, jeśli Twoja integracja wymaga jawnego pobierania statusu.

curl https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
  -H "Authorization: Bearer sk_live_xxx"
Metoda odbioru: Webhook

Przekaż parametr callback_url podczas przesyłania zadania, aby otrzymać powiadomienie o sukcesie lub błędzie i zaktualizować status we własnej bazie.

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 });
}

Tworzenie zadania wideo

Utwórz zadanie wideo, wykonując żądanie POST /v1/videos/generations. Treść żądania zawiera główny parametr model, opcjonalny callback_url oraz obiekt input z opisem (prompt) i ustawieniami generowania.

POST
/v1/videos/generations
curl https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-5",
    "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
    }
  }'

Tryby generowania

Parametr generation_type określa, jakie pliki wejściowe są akceptowane i jak model ma je zinterpretować.

Możliwości Seedance 2.5
seedance-2-5

Ustaw model na seedance-2-5, aby wygenerować wideo w rozdzielczości 480p lub 720p o długości od 4 do 30 sekund.

  • Tekst na wideo (text-to-video) z adaptacyjnym współczynnikiem proporcji lub wymiarami 16:9, 9:16, 1:1, 4:3, 3:4, 21:9
  • Obraz na wideo (image-to-video) na podstawie jednego obrazu (pierwsza klatka) lub dwóch obrazów (pierwsza i ostatnia klatka); współczynnik proporcji musi być ustawiony na adaptive
  • Referencja na wideo (reference-to-video) przy użyciu maksymalnie 30 obrazów, 10 materiałów wideo i 10 plików audio (łącznie do 50 materiałów)
  • Każda referencja wideo lub audio musi trwać od 2 do 30 sekund; łączny czas trwania materiałów wideo oraz łączny czas materiałów audio nie mogą przekraczać 30 sekund
  • Obsługiwana jest sama referencja audio oraz parametr return_last_frame; parametr seed nie jest obsługiwany
TrybWymagane multimediaOpcjonalne multimediaUwagi
text-to-videopromptduration, aspect_ratio, resolution, seedTylko opis tekstowy. Parametry image_urls, video_urls oraz audio_urls nie są wymagane.
image-to-videoprompt + tablica image_urls (1-2 adresy URL)duration, aspect_ratio, resolution, seedimage_urls musi być tablicą. Podaj 1 adres URL dla klatki początkowej lub 2 adresy dla klatki początkowej i końcowej. Multimedia wideo i audio są ignorowane.
reference-to-videoprompt + co najmniej jedna referencja obrazu, wideo lub audioobrazy, wideo i audio mieszczące się w limitachSeedance 2.5 obsługuje referencje składające się wyłącznie z audio. W przypadku Seedance 2.0 należy dodać co najmniej jeden obraz lub wideo, jeśli dołączany jest dźwięk.
text-to-video

Użyj trybu tekst na wideo, gdy jedynym elementem wejściowym jest opis tekstowy (prompt).

curl https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-5",
    "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
    }
  }'
image-to-video

Użyj trybu obraz na wideo, gdy parametr input.image_urls zawiera tablicę z 1 lub 2 adresami URL obrazów: jeden adres ustawia pierwszą klatkę, a dwa adresy określają klatkę początkową i końcową. Referencje wideo i audio są w tym trybie ignorowane.

curl https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-5",
    "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

Użyj trybu referencja na wideo, aby precyzyjniej sterować generowaniem przy użyciu obrazów, wideo i audio o charakterze referencyjnym. Model Seedance 2.5 pozwala na użycie samego dźwięku jako referencji; model Seedance 2.0 w przypadku dodania dźwięku wymaga dołączenia przynajmniej jednego obrazu lub wideo.

Limity materiałów referencyjnych

  • Seedance 2.5: do 30 obrazów referencyjnych
  • Seedance 2.5: do 10 materiałów wideo, każdy o długości 2-30 s, łączny czas trwania <= 30 s
  • Seedance 2.5: do 10 plików audio, każdy o długości 2-30 s, łączny czas trwania <= 30 s
  • Seedance 2.5: maksymalnie 50 materiałów referencyjnych łącznie
  • Warianty Seedance 2.0 zachowują swoje dotychczasowe limity: 9 obrazów, 3 materiały wideo, 3 pliki audio i do 15 sekund na grupę wideo/audio

Obsługiwane kombinacje danych wejściowych

Tekst + Obraz
Tekst + Wideo
Tekst + Audio (Seedance 2.5)
Tekst + Obraz + Wideo
Tekst + Obraz + Audio
Tekst + Wideo + Audio
Tekst + Obraz + Wideo + Audio
curl https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-5",
    "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": "720p"
    }
  }'

Parametry żądania

Nazwy parametrów, wartości typów wyliczeniowych (enum), ścieżki punktów końcowych i przykłady stanowią stałą część specyfikacji API. Poniższe opisy wyjaśniają działanie poszczególnych pól.

Nagłówki

NagłówekWymaganeOpisPrzykład
AuthorizationTakKlucz API typu Bearer używany do uwierzytelniania żądań.Bearer sk_live_xxx
Content-TypeTakWszystkie żądania zapisu wymagają formatu JSON.application/json

Pola główne

PoleTypWymaganeDomyślnieZakres / EnumTrybyPrzykład
model

Wariant modelu używany do generowania. Wybierz seedance-2-5 dla Seedance 2.5, seedance-2-0 dla Seedance 2.0, seedance-2-0-fast dla Seedance 2.0 Fast lub seedance-2-0-mini dla Seedance 2.0 Mini.

stringTak-seedance-2-5 | seedance-2-0 | seedance-2-0-fast | seedance-2-0-miniwszystkieseedance-2-5
callback_url

Punkt końcowy HTTPS, na który wysyłane są powiadomienia o zakończeniu lub błędzie zadania.

stringNie-Adres URL HTTPS, wykluczając sieci prywatnewszystkiehttps://your-domain.com/hook
input

Ustawienia generowania oraz multimedia referencyjne.

objectTak--wszystkie-

input.* pola

PoleTypWymaganeDomyślnieZakres / EnumTrybyPrzykład
input.prompt

Opis tekstowy określający treść filmu, który ma zostać wygenerowany.

stringTak-niepusty ciąg znakówwszystkiea cat surfing
input.generation_type

Tryb generowania. Domyślnie ustawiony na text-to-video.

stringNietext-to-videotext-to-video | image-to-video | reference-to-video-image-to-video
input.image_urls

Publicznie dostępne adresy URL obrazów. W trybie obraz na wideo podaj 1 obraz dla klatki początkowej lub 2 obrazy dla klatki początkowej i końcowej. W trybie referencja na wideo model Seedance 2.5 przyjmuje do 30 obrazów, a Seedance 2.0 do 9.

string[]Warunkowo[]Obraz na wideo: 1 lub 2 obrazy. Referencja na wideo: do 30 dla Seedance 2.5; do 9 dla Seedance 2.0.image-to-video / reference-to-video["https://.../a.jpg"]
input.video_urls

Publicznie dostępne referencyjne pliki wideo – wyłącznie dla trybu referencja na wideo. Seedance 2.5 obsługuje do 10 filmów (każdy 2-30 s, łączny czas odtwarzania <= 30 s). Seedance 2.0 obsługuje do 3 filmów (łączny czas <= 15 s).

string[]Nie[]Seedance 2.5: do 10 filmów (każdy 2-30 s, łączna długość <= 30 s). Seedance 2.0: do 3 (łączna długość <= 15 s).reference-to-video[]
input.audio_urls

Publicznie dostępne referencyjne pliki audio – wyłącznie dla trybu referencja na wideo. Seedance 2.5 obsługuje do 10 plików (każdy 2-30 s, łączny czas odtwarzania <= 30 s) i pozwala na użycie samego audio. Seedance 2.0 obsługuje do 3 plików (łączny czas <= 15 s).

string[]Nie[]Seedance 2.5: do 10 plików audio (każdy 2-30 s, łączna długość <= 30 s). Seedance 2.0: do 3 (łączna długość <= 15 s).reference-to-video[]
input.duration

Długość wyjściowego wideo w sekundach.

intNie5Seedance 2.5: 4-30 sekund. Seedance 2.0: 4-15 sekund.wszystkie5
input.aspect_ratio

Proporcje obrazu wyjściowego. Wartość adaptive pozwala systemowi dobrać najlepsze proporcje. Tryb obraz na wideo w modelu Seedance 2.5 obsługuje wyłącznie wartość adaptive.

stringNieadaptive16:9 | 4:3 | 1:1 | 3:4 | 9:16 | 21:9 | adaptivewszystkie16:9
input.resolution

Rozdzielczość wyjściowa wideo.

stringNie720pSeedance 2.5: 480p | 720p. Seedance 2.0: 480p | 720p | 1080p | 4k (w zależności od wariantu).wszystkie720p
input.generate_audio

Określa, czy model powinien wygenerować ścieżkę dźwiękową (jeśli jest obsługiwana).

booleanNietruetrue | falsewszystkietrue
input.watermark

Określa, czy dodać znak wodny.

booleanNiefalsetrue | falsewszystkiefalse
input.web_search

Określa, czy zezwolić na wspomaganie generowania wynikami z wyszukiwarki internetowej (jeśli jest obsługiwane).

booleanNiefalsetrue | falsewszystkiefalse
input.return_last_frame

Określa, czy zwracać adres URL ostatniej klatki wideo (jeśli jest dostępny).

booleanNiefalsetrue | falsewszystkiefalse
input.seed

Ziarno deterministyczne dla wariantów Seedance 2.0. Model Seedance 2.5 nie obsługuje tego pola (należy je pominąć).

intNie-1-1 lub zakres 0-4294967295wszystkie-1

Koszt w kredytach zależy od rozdzielczości, czasu trwania, modelu oraz tego, czy tryb referencja na wideo uwzględnia materiały wideo. Wartość kredytów zwrócona w odpowiedzi na żądanie utworzenia zadania to rzeczywista liczba zablokowanych kredytów.

Zobacz cennik kredytów

Odpowiedź

To jest poprawna odpowiedź zwrotna z żądania POST /v1/videos/generations. Oznacza ona, że zadanie zostało przyjęte do realizacji, a kredyty zostały zarezerwowane. Użyj zwróconego taskId do odpytywania GET /v1/tasks/:id lub do powiązania go z nadesłanym webhookiem.

Prawidłowa odpowiedź (POST /v1/videos/generations)

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

Sprawdzanie stanu zadania

Użyj GET /v1/tasks/:id, aby pobrać aktualny stan zadania. Nie odpytuj częściej niż raz na 10 sekund. W systemach produkcyjnych zaleca się stosowanie webhooków.

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

Odpowiedź dla ukończonego zadania

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

Odpowiedź dla nieudanego zadania

{
  "id": "3f2aK9mR...",
  "status": "failed",
  "created_at": 1781234567,
  "model": "seedance-2-5",
  "billing_status": "refunded",
  "credits": 100,
  "failed_reason": "provider_failed"
}
WartośćZnaczenie
status=queuedZadanie przyjęte; czeka na przekazanie do realizacji lub przetworzenie.
status=generatingDostawca przetwarza proces generowania.
status=completedGenerowanie wideo zakończone sukcesem; pole data.results zawiera URL do pliku.
status=failedGenerowanie nie powiodło się lub przekroczono limit czasu.
billing_status=reservedKredyty są zablokowane na czas trwania zadania.
billing_status=chargedZadanie zakończone sukcesem – rezerwacja została sfinalizowana pobraniem opłaty.
billing_status=refundedZadanie nie powiodło się lub upłynął limit czasu – zablokowane kredyty zostały zwrócone.
billing_status=refund_failedTransakcja zwrotu kredytów nie powiodła się i wymaga ręcznej interwencji.

Po upływie czasu określonego w video_expires_at pole data.results będzie puste. Pobierz i zapisz plik u siebie przed upływem tego okresu.

Webhooki

Jeśli parametr callback_url jest podany, Seedance wyśle żądanie na Twój punkt końcowy po zakończeniu zadania (sukcesem lub błędem), przesyłając dane JSON z ostatecznym rezultatem. Jeśli Twój serwer zwróci kod inny niż 2xx lub nie odpowie w ciągu 15 sekund, próba zostanie ponowiona maksymalnie 5 razy. Ponowne próby korzystają z tego samego identyfikatora zadania (task id), co pozwala na eliminację duplikatów. Zwróć odpowiedź z kodem 200 od razu po bezpiecznym zapisaniu danych z powiadomienia.

Webhook informujący o ukończeniu zadania

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

Webhook informujący o niepowodzeniu zadania

{
  "id": "3f2aK9mR...",
  "status": "failed",
  "created_at": 1781234567,
  "model": "seedance-2-5",
  "data": {
    "failed_reason": "provider_failed",
    "credits_refunded": 100
  }
}
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 });
}

Zweryfikuj format danych z webhooka, usuń ewentualne duplikaty na podstawie identyfikatora ID, zaktualizuj status zadania u siebie i natychmiast wyślij odpowiedź.

Parametr callback_url musi korzystać z protokołu HTTPS i nie może wskazywać na prywatne adresy IP, pętlę zwrotną (loopback) ani adresy lokalne linku (link-local).

Błędy

Metody POST /v1/videos/generations i GET /v1/tasks/:id zwracają poniższą strukturę błędu, gdy samo żądanie do API zakończy się niepowodzeniem (np. nieprawidłowe parametry, błędny klucz API, niewystarczająca liczba kredytów, przekroczenie limitów lub nieznalezione zadanie). Niektóre błędy mogą zawierać dodatkowe pola, takie jak required, available lub retry_after.

{
  "error": {
    "code": "insufficient_credits",
    "message": "Not enough credits for this task.",
    "required": 100,
    "available": 12
  }
}
KodHTTPZnaczeniePonowić?
invalid_request400Brakujące lub nieprawidłowe parametry.Nie, popraw strukturę żądania.
invalid_api_key401Klucz API jest nieobecny, nieprawidłowy lub został unieważniony.Nie, użyj poprawnego klucza.
insufficient_credits402Niewystarczająca liczba kredytów. Zadanie nie zostanie przyjęte ani rozliczone.Po doładowaniu konta.
forbidden403Klucz API nie posiada wymaganych uprawnień.Nie.
not_found404Zadanie nie istnieje lub nie należy do właściciela użytego klucza API.Nie.
rate_limited429Przekroczono limit częstotliwości żądań.Tak, zgodnie z nagłówkiem Retry-After.
internal_error500Wewnętrzny błąd serwera.Tak, spróbuj ponownie później.

Limity żądań

Limity częstotliwości żądań są naliczane dla każdego klucza API w oparciu o ruchome okno czasowe. Limit dla generowania wynosi domyślnie 100 żądań na minutę; zapytania o status zadania podlegają łagodniejszym limitom. Odpowiedzi HTTP 429 zawierają nagłówek Retry-After.

Generowanie

100/min

Zapytania o status

Łagodniejsze limity

Nagłówek 429

Retry-After

Rozliczenia i kredyty

API działa w modelu: rezerwacja przy zgłoszeniu zadania, pobranie opłaty przy sukcesie i zwrot środków przy błędzie. W zakładkach rozliczeń w panelu znajdziesz historię zużycia kredytów API, dzienniki zadań oraz statystyki użycia w czasie.

Rezerwacja

Kredyty są sprawdzane i blokowane w momencie zaakceptowania zadania.

Pobranie opłaty

Ukończone zadania powodują ostateczne rozliczenie zablokowanej rezerwacji.

Zwrot

Zadania nieudane lub te, których czas upłynął, automatycznie zwalniają zablokowane kredyty.

Monitoruj zużycie w panelu

Przeglądaj logi API, osie czasu zadań, historię salda kredytów oraz wykresy zużycia w czasie.

Logi API