Seedance 2.0 API

Wbuduj generowanie wideo w swój produkt dzięki asynchronicznemu tworzeniu zadań, odpytywaniu statusu, webhookom i rozliczeniom uwzględniającym kredyty.

Bazowy URL
https://api.seedance2.ai
Na tej stronie

Wprowadzenie

API umożliwia programowe przesyłanie zadań generowania wideo Seedance 2.0. Generowanie jest asynchroniczne: utwórz zadanie, natychmiast otrzymasz identyfikator zadania, a następnie uzyskasz gotowe wideo poprzez odpytywanie punktu końcowego zadania lub odbieranie webhooka.

Zadania asynchroniczne

Odpytywanie sprawdza się w przypadku programowania i prostych integracji.

Gotowe do webhooka

Webhooki są zalecane do produkcji, ponieważ unikają agresywnego odpytywania i powiadamiają usługę, gdy zadanie osiągnie stan końcowy.

Uwzględnia kredyty

Kredyty są rezerwowane w momencie przesłania. Pomyślne zadania są obciążane z tej rezerwacji; nieudane lub przekroczone czasowo zadania są automatycznie zwracane.

Uwierzytelnianie

Utwórz klucz API w panelu i wysyłaj go jako bearer token przy każdym żądaniu. Pełny klucz jest wyświetlany tylko raz w momencie tworzenia.

Authorization: Bearer sk_live_xxxxxxxx
sk_live_

Używaj kluczy sk_live_ do ruchu produkcyjnego.

sk_test_

Używaj kluczy sk_test_ do testowania integracji w środowisku sandbox z tym samym kontraktem API.

401

Brakujące, nieprawidłowe lub unieważnione klucze zwracają invalid_api_key z HTTP 401.

Szybki start

Najpierw prześlij zadanie. Po zaakceptowaniu zadania wybierz jedną metodę dostarczania wyników: odpytuj punkt końcowy zadania lub odbieraj wynik końcowy za pośrednictwem webhooka.

Prześlij zadanie

Utwórz asynchroniczne zadanie wideo i natychmiast otrzymaj identyfikator zadania.

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
    }
  }'
Opcja wyniku: Odpytywanie

Pobieraj punkt końcowy statusu zadania, gdy Twoja integracja preferuje jawne odpytywanie.

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

Przekaż callback_url podczas przesyłania zadania, a następnie odbierz wywołania zwrotne ukończenia lub niepowodzenia i zaktualizuj własny rekord zadania.

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

Utwórz zadanie wideo

Utwórz zadanie wideo za pomocą POST /v1/videos/generations. Treść żądania zawiera model najwyższego poziomu, opcjonalny callback_url oraz obiekt wejściowy zawierający prompt i ustawienia generowania.

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
    }
  }'

Tryby generowania

generation_type kontroluje, jakie dane wejściowe multimediów są akceptowane i jak model je interpretuje.

TrybWymagane mediaOpcjonalne mediaUwagi
text-to-videopromptduration, aspect_ratio, resolution, seedTylko prompt tekstowy. image_urls, video_urls i audio_urls nie są potrzebne.
image-to-videoprompt + tablica image_urls (1-2 adresy URL obrazów)duration, aspect_ratio, resolution, seedimage_urls musi być tablicą. Podaj 1 adres URL obrazu dla pierwszej klatki lub 2 adresy URL obrazów dla pierwszej i ostatniej klatki. Wideo i audio są ignorowane.
reference-to-videoprompt + co najmniej jeden obraz lub wideoobrazy, filmy i audio w ramach limitów materiałówAudio nie może być używane samodzielnie z tekstem. Dodaj co najmniej jeden obraz lub wideo, gdy dostarczono audio.
text-to-video

Użyj text-to-video, gdy prompt jest jedynym kreatywnym wejściem.

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

Użyj image-to-video, gdy input.image_urls jest tablicą zawierającą 1-2 adresy URL obrazów: jeden adres URL ustawia pierwszą klatkę, a dwa adresy URL ustawiają pierwszą i ostatnią klatkę. Odniesienia do wideo i audio są ignorowane w tym trybie.

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

Użyj reference-to-video dla bogatszych wskazówek z obrazami referencyjnymi, filmami i dźwiękiem. Audio nie może być używane samodzielnie z tekstem; dołącz co najmniej jeden obraz lub film, gdy dostarczono audio.

Limity materiałów

  • Do 9 obrazów referencyjnych
  • Do 3 filmów referencyjnych, łączny czas trwania <= 15 sekund
  • Do 3 plików audio referencyjnych, łączny czas trwania <= 15 sekund
  • Maksymalnie 12 materiałów łącznie dla wszystkich typów

Obsługiwane kombinacje wejściowe

Tekst + obraz
Tekst + wideo
Tekst + obraz + wideo
Tekst + obraz + audio
Tekst + wideo + audio
Tekst + obraz + wideo + audio
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"
    }
  }'

Parametry żądania

Nazwy parametrów, wartości wyliczeniowe, ścieżki punktów końcowych i przykłady są częścią kontraktu API. Poniższe opisy wyjaśniają zachowanie każdego pola.

Nagłówki

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

Pola najwyższego poziomu

PoleTypWymaganeDomyślneZakres / EnumTrybyPrzykład
model

Wariant modelu używany do generowania.

stringTak-seedance-2-0 | seedance-2-0-fastwszystkoseedance-2-0
callback_url

Punkt końcowy HTTPS, który odbiera wywołania zwrotne ukończenia i niepowodzenia zadań.

stringNie-Adres URL HTTPS, brak sieci prywatnychwszystkohttps://your-domain.com/hook
input

Ustawienia generowania i odniesienia do multimediów.

objectTak--wszystko-

input.* pola

PoleTypWymaganeDomyślneZakres / EnumTrybyPrzykład
input.prompt

Prompt tekstowy opisujący film do utworzenia.

stringTak-niepusty tekstwszystkoa cat surfing
input.generation_type

Tryb generowania. Domyślnie 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. Dla image-to-video, wyślij 1 obraz dla pierwszej klatki lub 2 obrazy dla pierwszej i ostatniej klatki. Dla reference-to-video, wyślij do 9 obrazów jako odniesienia wizualne.

string[]Warunkowo[]Image-to-video: 1 lub 2 obrazy. Reference-to-video: do 9 obrazów. (image-to-video) (reference-to-video)image-to-video / reference-to-video["https://.../a.jpg"]
input.video_urls

Publicznie dostępne filmy referencyjne tylko dla reference-to-video. Możesz wysłać do 3 plików wideo, a ich łączny czas odtwarzania musi wynosić 15 sekund lub mniej.

string[]Nie[]Do 3 filmów. Łączna długość wideo musi wynosić 15 sekund lub mniej.reference-to-video[]
input.audio_urls

Publicznie dostępne pliki audio referencyjne tylko dla reference-to-video. Możesz wysłać do 3 plików audio, a ich łączny czas odtwarzania musi wynosić 15 sekund lub mniej.

string[]Nie[]Do 3 plików audio. Łączna długość audio musi wynosić 15 sekund lub mniej.reference-to-video[]
input.duration

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

intNie54-15 sekundwszystko5
input.aspect_ratio

Wyjściowy współczynnik proporcji. adaptive pozwala usłudze wywnioskować najlepszy współczynnik.

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

Poziom rozdzielczości wyjściowej.

stringNie720p480p | 720p | 1080pwszystko720p
input.generate_audio

Czy model powinien generować audio, jeśli jest obsługiwane.

booleanNietruetrue | falsewszystkotrue
input.watermark

Czy dodać znak wodny.

booleanNiefalsetrue | falsewszystkofalse
input.web_search

Czy zezwolić na rozszerzenie wyszukiwania w sieci, jeśli jest obsługiwane.

booleanNiefalsetrue | falsewszystkofalse
input.return_last_frame

Czy zwrócić adres URL ostatniej klatki, jeśli jest dostępny.

booleanNiefalsetrue | falsewszystkofalse
input.seed

Deterministyczne ziarno. Użyj -1 dla losowego ziarna.

intNie-1-1 lub 0-4294967295wszystko-1

Kredyty różnią się w zależności od rozdzielczości, czasu trwania, modelu i tego, czy reference-to-video zawiera odniesienia wideo. Wartość kredytów zwrócona przez odpowiedź utworzenia jest rzeczywistą zarezerwowaną kwotą dla tego zadania.

Zobacz cennik kredytów

Odpowiedź

To jest pomyślna odpowiedź z POST /v1/videos/generations. Oznacza to, że zadanie zostało zaakceptowane, a kredyty zostały zarezerwowane. Użyj zwróconego taskId do odpytywania GET /v1/tasks/:id lub do dopasowania wywołania zwrotnego ukończenia lub niepowodzenia.

Pomyślna odpowiedź POST /v1/videos/generations

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

Pobierz status zadania

Użyj GET /v1/tasks/:id, aby pobrać aktualny stan zadania. Odpytuj nie częściej niż raz na 10 sekund. W systemach produkcyjnych preferowane są webhooki.

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

Odpowiedź na ukończone zadanie

{
  "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
  }
}

Odpowiedź na nieudane zadanie

{
  "id": "3f2aK9mR...",
  "status": "failed",
  "created_at": 1781234567,
  "model": "seedance-2-0",
  "billing_status": "refunded",
  "credits": 60,
  "failed_reason": "provider_failed"
}
WartośćZnaczenie
status=queuedZaakceptowane i oczekujące na przesłanie lub przetworzenie.
status=generatingDostawca przetwarza generowanie.
status=completedWideo ukończone, a data.results zawiera URL wyniku.
status=failedGenerowanie nie powiodło się lub przekroczyło limit czasu.
billing_status=reservedKredyty są rezerwowane, gdy zadanie jest w toku.
billing_status=chargedZadanie zakończone pomyślnie, a rezerwacja została uregulowana.
billing_status=refundedZadanie nie powiodło się lub przekroczyło limit czasu, a kredyty zostały zwrócone.
billing_status=refund_failedTransakcja zwrotu nie powiodła się i wymaga ręcznej obsługi.

Po video_expires_at, data.results jest puste. Pobierz i zapisz plik przed upływem okresu ważności.

Webhooki

Gdy callback_url jest obecny, Seedance wywołuje Twój punkt końcowy, gdy zadanie zostanie zakończone lub nie powiedzie się, i wysyła dane JSON opisujące końcowy wynik. Jeśli Twój punkt końcowy zwróci odpowiedź inną niż 2xx lub nie odpowie w ciągu 15 sekund, dostarczenie jest ponawiane do 5 razy. Ponowne próby wykorzystują ten sam identyfikator zadania, więc usuń duplikaty według identyfikatora. Zwróć odpowiedź 200, gdy bezpiecznie zarejestrowałeś dane wywołania zwrotnego.

Wywołanie zwrotne ukończenia zadania

{
  "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
  }
}

Wywołanie zwrotne niepowodzenia zadania

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

Zweryfikuj kształt danych wywołania zwrotnego, usuń duplikaty według identyfikatora, zaktualizuj własny rekord zadania i szybko odpowiedz.

callback_url musi być HTTPS i nie może wskazywać na prywatne, pętlowe lub lokalne zakresy sieciowe.

Błędy

POST /v1/videos/generations i GET /v1/tasks/:id zwracają ten kształt błędu, gdy samo żądanie API zakończy się niepowodzeniem, np. z powodu nieprawidłowych parametrów, nieprawidłowego klucza API, niewystarczających kredytów, limitu żądań lub nieznalezionego zadania. Niektóre błędy zawierają dodatkowe pola, takie jak required, available lub retry_after, w zależności od sytuacji.

{
  "error": {
    "code": "insufficient_credits",
    "message": "Not enough credits for this task.",
    "required": 60,
    "available": 12
  }
}
KodHTTPZnaczeniePonowić?
invalid_request400Brakujące lub nieprawidłowe parametry.Nie, popraw żądanie.
invalid_api_key401Klucz API jest brakujący, nieprawidłowy lub unieważniony.Nie, użyj prawidłowego klucza.
insufficient_credits402Niewystarczająca liczba kredytów. Zadanie nie jest akceptowane ani obciążane.Po doładowaniu.
forbidden403Klucz API nie posiada wymaganego zakresu.Nie.
not_found404Zadanie nie istnieje lub nie należy do właściciela klucza.Nie.
rate_limited429Przekroczono limit żądań.Tak, postępuj zgodnie z Retry-After.
internal_error500Błąd serwera.Tak, spróbuj ponownie później.

Limity żądań

Limity żądań są stosowane dla każdego klucza API z przesuwnym oknem. Generowanie domyślnie wynosi 60 żądań na minutę; zapytania o status są bardziej łagodne. Odpowiedzi HTTP 429 zawierają Retry-After.

Generowanie

60/min

Zapytania o status

Bardziej łagodne

Nagłówek 429

Retry-After

Rozliczenia i kredyty

API wykorzystuje rezerwację w momencie zgłoszenia, obciążenie po sukcesie i zwrot kosztów w przypadku niepowodzenia. Strony użycia w panelu pokazują historię kredytów API, logi zadań i statystyki użycia oparte na czasie.

Zarezerwowane

Kredyty są sprawdzane i rezerwowane w momencie akceptacji zadania.

Obciążone

Ukończone zadania regulują istniejącą rezerwację.

Zwrócone

Nieudane lub przekroczone czasowo zadania automatycznie zwracają zarezerwowane kredyty.

Sprawdź wykorzystanie w panelu

Wyświetl logi API, osie czasu zadań, historię kredytów i metryki użycia oparte na czasie.

Logi API