Przejdź do dokumentacji
Na tej stronie

Seedance 2.5

Generuj wideo za pomocą modelu Seedance 2.5, używając tekstu, pierwszej i ostatniej klatki lub referencji multimodalnych. Ta strona opisuje pełny proces od wysłania żądania do otrzymania gotowego wyniku.

ID modelu w API: seedance-2-5

Generowanie odbywa się asynchronicznie. Zapisz identyfikator taskId zwrócony przy tworzeniu zadania, a następnie odpytuj o jego status lub odbierz webhook.

Możliwości

FunkcjaObsługiwane wartości
Rozdzielczość wyjściowa480p · 720p · 1080p
Czas trwania wyniku4–30 s
Proporcje obrazu16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive
Obrazy referencyjneMaksymalnie 30 zdjęć
Wideo referencyjneMaksymalnie 10 filmów
Pliki audio referencyjneMaksymalnie 10 plików dźwiękowych
Suma wszystkich plików referencyjnychŁącznie maksymalnie 50 plików referencyjnych
Łączny czas trwania na grupę wideo/audioSekundy: 30
seedNieobsługiwane
W trybie referencji do wideo dopuszczalna jest również wartość duration=-1; szczegóły dotyczące edycji wideo i cennika znajdziesz poniżej. Tryb image-to-video akceptuje wyłącznie wartość adaptive; pomiń to pole lub ustaw je na adaptive.

Cennik i kredyty

Generowanie wideo jest rozliczane w kredytach na podstawie naliczanego czasu trwania w sekundach. Bez wejściowego pliku wideo naliczany czas trwania odpowiada długości wygenerowanego materiału; w przypadku korzystania z wejściowego pliku wideo uwzględnia się również czas trwania wideo referencyjnego.

Poniższa tabela przedstawia liczbę kredytów pobieranych za sekundę, a nie całkowity koszt zadania. Stawka zależy od modelu, rozdzielczości wyjściowej oraz tego, czy w trybie referencyjnym (reference-to-video) dostarczono wideo referencyjne. Wzory i przykłady obliczania całkowitego kosztu znajdują się pod tabelą.

Rozdzielczość wyjściowaBez wejściowego wideoZ wejściowym wideo
480p10 kredytów/sekundę6 kredytów/sekundę
720p20 kredytów/sekundę12 kredytów/sekundę
1080p30 kredytów/sekundę20 kredytów/sekundę
  • Bez wejściowego wideo: sekundy wyjściowe × stawka bez wideo.
  • Z wejściowym wideo: (sekundy wyjściowe + zmierzony czas trwania wejściowego wideo) × stawka z wideo. Serwer mierzy łączny czas trwania referencyjnego materiału wideo i przed naliczeniem opłaty zaokrągla go w górę do pełnych sekund.
  • Użycie samych obrazów lub plików audio jako referencji rozliczane jest według stawki bez wideo. Stawka dla referencji wideo ma zastosowanie wyłącznie w trybie referencyjnym (reference-to-video), gdy dostarczono pliki wideo.

Przykłady obliczania kosztów

5-sekundowe wideo 720p z tekstu (text-to-video): 5 × 20 = 100 kredytów.

5-sekundowy wynik 720p z 5-sekundowym wideo referencyjnym: (5 + 5) × 12 = 120 kredytów.

Kredyty te są pobierane z góry w momencie utworzenia zadania. Jeśli zadanie zakończy się pomyślnie, kwota ta stanowi ostateczną opłatę – nie zostanie ona zwiększona ani częściowo zwrócona na podstawie rzeczywistego czasu trwania wygenerowanego pliku. W przypadku zadań nieudanych lub przekroczenia limitu czasu następuje automatyczny zwrot środków.

Kredyty są rezerwowane w momencie przesłania zadania i pobierane po jego pomyślnym zakończeniu. Zadania zakończone błędem lub przerwane z powodu limitu czasu trafiają do procesu zwrotu. Status rozliczenia refund_failed oznacza, że zwrot nie został sfinalizowany – sprawdź wtedy logi API lub skontaktuj się ze wsparciem.

Jak naliczane są kredyty, gdy duration=-1

Gdy czas trwania jest ustawiony na -1, końcowa długość wyjściowa nie jest stała i decyduje o niej model.

W większości przypadków zaleca się ustawienie konkretnego czasu trwania wideo zamiast wartości -1. Użycie wartości -1 rekomendujemy wyłącznie do edycji wideo, a nie do innych zastosowań związanych z generowaniem wideo.

Materiały referencyjneSposób obliczania opłatyPrzykład
Z wideo referencyjnymZsumuj czas trwania wszystkich filmów referencyjnych i zaokrąglij wynik w górę do pełnej sekundy – oznaczmy go jako T. Opłata wynosi (T + T) × stawka dla wideo: jedno T odpowiada szacowanemu czasowi trwania wyjściowego wideo, a drugie czasowi trwania wejściowego wideo referencyjnego.720p z 5-sekundowym wideo referencyjnym: (5 + 5) × 12 = 120 kredytów.
Bez wideo referencyjnego (tylko obrazy lub dźwięk)Jako szacowany czas trwania wyjściowego wideo przyjmuje się 30 sekund. Opłata wynosi 30 × stawka bez wideo.720p bez wideo referencyjnego: 30 × 20 = 600 kredytów.

Uwierzytelnianie

Utwórz klucz API w panelu użytkownika. Pełny klucz zostanie wyświetlony tylko raz. Przechowuj go bezpiecznie na swoim serwerze i przesyłaj w nagłówku jako token Bearer przy każdym żądaniu.

Bazowy adres URL

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

Przed uruchomieniem poniższych przykładów ustaw zmienną środowiskową SEEVIO_API_KEY. Przykłady w JavaScript należy uruchamiać na serwerze przy użyciu Node.js; przykłady w Pythonie korzystają z pakietu requests.

Szybki start

Wyślij to proste żądanie, zapisz zwrócony identyfikator taskId, a następnie użyj poniższego przykładu odpytywania o stan zadania. Liczba kredytów w odpowiedzi na utworzenie zadania to kwota zarezerwowana.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "text-to-video",
    "aspect_ratio": "16:9",
    "generate_audio": true
  }
}'

Przykładowa odpowiedź na utworzenie zadania

Po zaakceptowaniu powyższego żądania interfejs API zwraca tę odpowiedź JSON. taskId to identyfikator zadania służący do późniejszego sprawdzania jego statusu, a credits określa liczbę kredytów zarezerwowanych na poczet tego zadania. Ta odpowiedź potwierdza jedynie utworzenie zadania, a nie gotowość wideo. Aby otrzymać gotowy plik wideo, należy odpytywać API o status zadania lub skorzystać z Webhooka.

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

Utwórz zadanie

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

Wyślij obiekt JSON zawierający model, input oraz opcjonalny callback_url. Zawsze podawaj dokładny identyfikator modelu pokazany na tej stronie; pominięcie pola model spowoduje wybranie seedance-2-0.

Treść żądania

PoleTypWymaganeOpis i ograniczenia
model
stringTak

Identyfikator modelu. Aby użyć modelu Seedance 2.5, ustaw w tym polu wartość seedance-2-5.

callback_url
stringNie

Publiczny punkt końcowy HTTPS dla wywołań zwrotnych POST po zakończeniu lub błędzie zadania. Sieci prywatne i localhost nie są obsługiwane.

Przykład: https://example.com/webhooks/seevio
input
objectTak

Ustawienia generowania. Pole musi zawierać niepusty prompt.

Parametry wejściowe

Pole image_urls jest wymagane w trybie image-to-video. Tryb reference-to-video wymaga co najmniej jednej referencji w polach image_urls, video_urls lub audio_urls.

Podaj wartości image_urls, video_urls i audio_urls jako tablice ciągów znaków URL (string[]). Każdy podany adres URL musi być publicznie dostępny przez protokół HTTPS, w tym również multimedia ignorowane przez wybrany tryb.

PoleTypWymaganeDomyślnieOpis i ograniczenia
input.prompt
stringTak

Wymagane w każdym trybie, nawet przy samych referencjach multimedialnych. Maksymalnie 10000 znaków przed przycięciem; musi zawierać znaki inne niż białe spacji.

Przykład: A cat surfing at sunset
input.generation_type
stringNietext-to-video

Tryb text-to-video korzysta tylko z promptu; image-to-video używa 1–2 obrazów; reference-to-video korzysta z referencji obrazu, wideo i/lub audio.

Obsługiwane wartości
text-to-video | image-to-video | reference-to-video
input.image_urls
string[]Warunkowo[]

image-to-video: 1 obraz jako pierwsza klatka lub 2 uporządkowane obrazy jako pierwsza i ostatnia klatka. reference-to-video: maksymalnie 30 obrazów. Ignorowane w trybie text-to-video.

Przykład: ["https://example.com/first-frame.jpg"]
input.video_urls
string[]Warunkowo[]

Przekazywane tylko w trybie reference-to-video; maksymalnie 10 plików wideo o łącznym czasie trwania do 30 s. Ignorowane w pozostałych trybach.

Przykład: ["https://example.com/source.mp4"]
input.audio_urls
string[]Warunkowo[]

Przekazywane tylko w trybie reference-to-video; maksymalnie 10 plików audio o łącznym czasie trwania do 30 s. Ignorowane w pozostałych trybach.

Przykład: ["https://example.com/music.mp3"]
input.duration
integerNie5

Czas trwania wygenerowanego wideo jako liczba całkowita od 4 do 30 sekund. Akceptuje również wartość -1 (wyłącznie w trybie reference-to-video). Używaj jej z wideo źródłowym do edycji; rozliczenie następuje według powyższych zasad specjalnych.

Obsługiwane wartości
-1 | 4–30
Przykład: 5
input.aspect_ratio
stringNieadaptive

Proporcje obrazu wyjściowego. Wartość adaptive pozwala modelowi samodzielnie określić proporcje. Tryb image-to-video akceptuje wyłącznie wartość adaptive; pomiń to pole lub ustaw je na adaptive.

Obsługiwane wartości
16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive
Przykład: adaptive
input.resolution
stringNie720p

Użyj jednej z obsługiwanych rozdzielczości wyjściowych wymienionych w tym miejscu.

Obsługiwane wartości
480p | 720p | 1080p
Przykład: 720p
input.generate_audio
booleanNietrue

Zażądaj wygenerowania zsynchronizowanej ścieżki dźwiękowej.

Obsługiwane wartości
true | false
Przykład: true
input.watermark
booleanNiefalse

Zażądaj dodania znaku wodnego AI do wygenerowanego wideo.

Obsługiwane wartości
true | false
Przykład: false
input.web_search
booleanNiefalse

Zezwól na wyszukiwanie w sieci, jeśli model obsługuje tę funkcję.

Obsługiwane wartości
true | false
Przykład: false
input.return_last_frame
booleanNiefalse

Zażądaj wyodrębnienia ostatniej klatki. Wynik zapytania będzie zawierał adres w data.last_frame_url, gdy klatka będzie gotowa; w przeciwnym razie wartość wyniesie null.

Obsługiwane wartości
true | false
Przykład: true

Pola logiczne (boolean) muszą mieć wartość true lub false w formacie JSON (nie jako ciąg znaków czy liczba).

Odpowiedź na utworzenie

Kod HTTP 200 zwraca taskId (string) oraz credits (number). Oznacza to przyjęcie zadania do realizacji, a nie jego zakończenie. Wartość poniżej odpowiada 5-sekundowemu wideo 720p z sekcji szybkiego startu.

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

Tryby generowania i przykłady

Zastąp przykładowe adresy URL multimediów z domeny example.com własnymi, publicznie dostępnymi plikami HTTPS. Przykładowe adresy pokazują strukturę żądania i nie są plikami do pobrania.

Tekst na wideo

Generowanie na podstawie promptu tekstowego. Adresy URL multimediów nie są przekazywane w tym trybie.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "text-to-video",
    "aspect_ratio": "16:9",
    "generate_audio": true
  }
}'

Pierwsza klatka

Prześlij jeden obraz jako pierwszą klatkę, a następnie opisz ruch w prompcie.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "image-to-video",
    "image_urls": [
      "https://example.com/first-frame.jpg"
    ],
    "aspect_ratio": "adaptive"
  }
}'

Pierwsza i ostatnia klatka

Prześlij dwa adresy URL obrazów w kolejności: pierwsza klatka, a następnie ostatnia klatka. Ten przykład żąda również wyodrębnienia ostatniej klatki wygenerowanego wideo.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "image-to-video",
    "image_urls": [
      "https://example.com/first-frame.jpg",
      "https://example.com/last-frame.jpg"
    ],
    "aspect_ratio": "adaptive",
    "return_last_frame": true
  }
}'

Referencja multimodalna

Połącz referencje obrazu, wideo i audio. Prompt tekstowy pozostaje wymagany. Przesłanie wideo referencyjnego zmienia sposób naliczania opłat.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "Follow the reference camera movement and keep the character consistent. Use the audio for ambience.",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "reference-to-video",
    "image_urls": [
      "https://example.com/character.jpg"
    ],
    "video_urls": [
      "https://example.com/camera.mp4"
    ],
    "audio_urls": [
      "https://example.com/ambience.mp3"
    ],
    "aspect_ratio": "adaptive"
  }
}'

Referencja audio

Użyj dźwięku jako jedynego typu referencji wraz z wymaganym promptem tekstowym opisującym pożądane wideo.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "Create a coastal sunrise scene matching the rhythm of this audio.",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "reference-to-video",
    "audio_urls": [
      "https://example.com/music.mp3"
    ]
  }
}'

Edycja wideo

W przypadku edycji wideo w programie Seedance 2.5 parametr duration musi mieć wartość -1, a aspect_ratio musi być ustawiony na adaptive. Wymagane jest skonfigurowanie obu tych ustawień – w przeciwnym razie wygenerowanie pliku się nie powiedzie.

Opisz edycję i prześlij wideo źródłowe. Ustaw duration=-1 i użyj proporcji adaptive. Do tego procesu użyj klipu źródłowego o długości co najmniej 4 sekund. Zasady rozliczeń dla wartości duration=-1 podano powyżej.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "Edit the source video: change the character’s coat to blue and preserve the camera movement.",
    "duration": -1,
    "resolution": "720p",
    "generation_type": "reference-to-video",
    "video_urls": [
      "https://example.com/source.mp4"
    ],
    "aspect_ratio": "adaptive"
  }
}'

Przedłużenie wideo

W przypadku rozszerzenia wideo Seedance 2.5 parametr aspect_ratio musi być ustawiony na adaptive – w przeciwnym razie generowanie może się nie powieść. Parametr duration należy ustawić normalnie, na żądaną długość wyjściowego wideo w obsługiwanym zakresie; nie ma potrzeby używania wartości -1.

Opisz, jak powinno kontynuować się wideo źródłowe. Użyj proporcji adaptive i ustaw standardowy czas trwania z zakresu obsługiwanego przez dany model.

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "Continue the camera movement from the source video, revealing a forest clearing.",
    "duration": 8,
    "resolution": "720p",
    "generation_type": "reference-to-video",
    "video_urls": [
      "https://example.com/source.mp4"
    ],
    "aspect_ratio": "adaptive"
  }
}'

Sprawdź stan zadania

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

Zastąp przykładowy identyfikator wartością taskId otrzymaną przy tworzeniu zadania. Zapytania zwracają wyłącznie zadania należące do użytkownika powiązanego z danym kluczem API; nieznane lub niedostępne identyfikatory zwracają HTTP 404.

Na początek odpytuj o stan co 10–20 sekund, wydłużaj odstępy w przypadku błędu HTTP 429 i przerwij, gdy status zmieni się na completed lub failed. W środowisku produkcyjnym zalecamy korzystanie z webhooków. Każdy poniższy przykład kodu wykonuje jedno zapytanie.

curl --fail-with-body https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
  -H "Authorization: Bearer $SEEVIO_API_KEY"
StatusOpis i ograniczenia
queuedZaakceptowano i oczekuje na uruchomienie.
generatingTrwa generowanie wideo.
completedZakończono sukcesem. Pobierz pliki z data.results przed upływem limitu czasu.
failedZakończono błędem. Sprawdź failed_reason oraz billing_status.
PoleTypOpis i ograniczenia
idstring
Identyfikator zadania. Jest to wartość taskId z odpowiedzi na utworzenie.
created_atnumber
Czas utworzenia zadania jako znacznik czasu Unix (w sekundach).
modelstring
Publiczny identyfikator modelu użyty do tego zadania.
billing_statusstring
Status rozliczenia: reserved (zarezerwowane), charged (pobrane), refunded (zwrócone) lub refund_failed (błąd zwrotu).
creditsnumber
Kredyty zarezerwowane dla tego zadania. Wartość ta jest widoczna również po zwrocie; sprawdź billing_status, aby poznać ostateczny wynik rozliczenia.
failed_reasonstring | null
Powód błędu dla zadań zakończonych niepowodzeniem; w przeciwnym razie null. Odpowiedzi na zapytania o błędne zadania nie zawierają obiektu data.
dataobject
Obecne w zapytaniach o zadania, które nie zakończyły się błędem. Zawiera szczegóły dotyczące wyniku i przetwarzania.
data.resultsstring[]
Tablica adresów URL wygenerowanych wideo. Pusta do momentu zakończenia zadania lub po wygaśnięciu plików wideo.
data.video_expires_atstring | null
Czas wygaśnięcia plików wideo jako znacznik czasu ISO 8601 (lub null, zanim plik będzie dostępny). Zapisz wynik przed tym czasem.
data.last_frame_urlstring | null
Adres URL ostatniej klatki (jeśli o nią wnioskowano i jest dostępna); w przeciwnym razie null.
data.processing_timenumber | null
Czas przetwarzania po stronie dostawcy w sekundach (jeśli jest dostępny); w przeciwnym razie null.

Zakończone zadanie: odpowiedź na zapytanie z wynikowym wideo

Gdy zapytanie zwróci status=completed, oznacza to, że generowanie wideo zostało zakończone. Pobierz adresy URL materiałów wideo z pola data.results i zapisz pliki przed upływem czasu wskazanego w data.video_expires_at. Wartość billing_status=charged oznacza, że zarezerwowane kredyty zostały pobrane.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652800,
  "model": "seedance-2-5",
  "status": "completed",
  "billing_status": "charged",
  "credits": 100,
  "failed_reason": null,
  "data": {
    "results": [
      "https://cdn.seevio.ai/api/videos/example.mp4"
    ],
    "video_expires_at": "2026-09-07T00:00:00Z",
    "last_frame_url": null,
    "processing_time": 48
  }
}

Nieudane zadanie: odpowiedź na zapytanie ze szczegółami błędu i rozliczenia

Gdy zapytanie zwróci status=failed, oznacza to, że generowanie zakończyło się niepowodzeniem. Przyczynę błędu znajdziesz w polu failed_reason, a wynik zwrotu środków w billing_status. W tym przykładzie status refunded oznacza, że kredyty zostały zwrócone. Pole credits zachowuje pierwotnie zarezerwowaną wartość, a odpowiedź nie zawiera obiektu data.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652800,
  "model": "seedance-2-5",
  "status": "failed",
  "billing_status": "refunded",
  "credits": 100,
  "failed_reason": "provider_failed"
}

Webhooki

Ustaw parametr callback_url w żądaniu utworzenia, aby otrzymać żądanie POST z formatem JSON, gdy zadanie zostanie zakończone sukcesem lub błędem. Zwróć odpowiedź z kodem 2xx w ciągu 15 sekund. Nieudane doręczenia są ponawiane; powtarzające się wywołania należy przetwarzać idempotentnie na podstawie identyfikatora zadania.

Twój punkt końcowy (callback endpoint) musi akceptować żądania POST z treścią w formacie JSON (Content-Type: application/json).

Utwórz zadanie z wywołaniem zwrotnym (callback)

curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-5",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "text-to-video",
    "aspect_ratio": "16:9",
    "generate_audio": true
  },
  "callback_url": "https://example.com/webhooks/seevio"
}'

Zawartość webhooka różni się od odpowiedzi na zapytanie o stan zadania: nie zawiera parametrów billing_status i credits; szczegóły błędu znajdują się w data.failed_reason oraz data.credits_refunded. Pole created_at w webhooku to czas utworzenia zdarzenia (Unix timestamp).

Zadanie zakończone: struktura danych pomyślnego wywołania zwrotnego

Gdy generowanie zakończy się sukcesem, wywołanie zwrotne zawiera status=completed. Użyj parametru id do identyfikacji zadania, a data.results do pobrania adresów URL wideo. Pobierz i zapisz wyniki przed upływem czasu określonego w data.video_expires_at.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652800,
  "model": "seedance-2-5",
  "status": "completed",
  "data": {
    "results": [
      "https://cdn.seevio.ai/api/videos/example.mp4"
    ],
    "video_expires_at": "2026-09-07T00:00:00Z",
    "last_frame_url": null,
    "processing_time": 48
  }
}

Zadanie nie powiodło się: struktura danych błędu wywołania zwrotnego

Gdy generowanie nie powiedzie się, wywołanie zwrotne zawiera status=failed. Użyj parametru id do identyfikacji zadania, data.failed_reason, aby poznać przyczynę błędu, oraz data.credits_refunded, aby sprawdzić liczbę zwróconych kredytów.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652800,
  "model": "seedance-2-5",
  "status": "failed",
  "data": {
    "failed_reason": "provider_failed",
    "credits_refunded": 100
  }
}

Przykładowy odbiorca

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

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

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

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

Ten przykład dla Next.js odczytuje treść wywołania zwrotnego JSON i bezpośrednio obsługuje zakończone oraz nieudane zadania. W swojej aplikacji dodaj mechanizm trwałości danych oraz deduplikację identyfikatorów zadań (task-ID). Przed potwierdzeniem odbioru wywołania zwrotnego dodaj czasochłonne operacje do kolejki.

Wymagania i ograniczenia plików

  • Wszystkie adresy URL multimediów i wywołań zwrotnych muszą być publicznymi adresami HTTPS. Unikaj adresów localhost, prywatnych IP oraz plików wymagających plików cookie lub logowania. Adresy URL referencyjnych wideo/audio muszą wskazywać bezpośrednio na pliki multimedialne.
  • W trybie reference-to-video prześlij co najmniej jedną referencję, maksymalnie do 30 obrazów, 10 wideo, 10 plików audio i łącznie do 50 materiałów. Łączny czas trwania wideo oraz łączny czas trwania audio nie mogą przekraczać 30 sekund każdy.
  • Tryb text-to-video ignoruje wszystkie referencje multimedialne. Tryb image-to-video uwzględnia wyłącznie obrazy pierwszej/ostatniej klatki, a ignoruje referencje wideo i audio. Aby łączyć różne multimedia, użyj trybu reference-to-video.
  • Każde referencyjne wideo oraz plik audio musi trwać od 2 do 30 sekund. W przypadku edycji wideo używaj klipów źródłowych o długości co najmniej 4 sekund.

Wymagania dotyczące obrazów

  • Rozmiar pojedynczego obrazu nie może przekraczać 30 MB.
  • Obsługiwane formaty: jpeg, png, webp, bmp, tiff, gif.
  • Proporcje obrazu (szerokość ÷ wysokość): od 0,4 do 2,5 włącznie.
  • Szerokość i wysokość muszą mieścić się w przedziale od 300 do 6000 pikseli włącznie.

Wymagania dotyczące filmów

  • Obsługiwane formaty: mp4, mov.
  • Rozmiar pojedynczego pliku wideo nie może przekraczać 100 MB.
  • Liczba klatek na sekundę: od 24 do 60 FPS włącznie.
  • Proporcje obrazu (szerokość ÷ wysokość): od 0,4 do 2,5 włącznie.
  • Całkowita liczba pikseli (szerokość × wysokość): od 407 696 do 8 295 044 włącznie. Na przykład: 614 × 664 = 407 696 oraz 3326 × 2494 = 8 295 044. Są to jedynie przykłady liczby pikseli, a nie sztywne wymagania dotyczące szerokości i wysokości.

Wymagania dotyczące dźwięku

  • Obsługiwane formaty: wav, mp3.
  • Rozmiar pojedynczego pliku audio nie może przekraczać 15 MB.

Błędy

Błędy HTTP zawierają obiekt error z polami code i message. Pomyślnie przyjęte zadanie może nadal zakończyć się błędem na późniejszym etapie – sprawdzaj stan zadania lub obsłuż wywołanie zwrotne (callback) informujące o błędzie.

{
  "error": {
    "code": "invalid_request",
    "message": "input.prompt is required."
  }
}
HTTPPoleCo zrobić
400invalid_request
Przed ponownym wysłaniem popraw strukturę JSON, brakujący prompt, zakresy parametrów lub adresy URL multimediów.
401invalid_api_key
Sprawdź poprawność tokenu Bearer oraz czy klucz API jest aktywny.
402insufficient_credits
Doładuj konto lub zmniejsz koszt zadania. Odpowiedź może zawierać informacje o wymaganej i dostępnej liczbie kredytów.
403forbidden
Sprawdź ograniczenia na poziomie konta opisane w komunikacie o błędzie.
404not_found
Sprawdź identyfikator zadania oraz czy klucz API należy do właściciela zadania.
429rate_limited
Odczekaj czas wskazany w nagłówku Retry-After przed ponowną próbą.
500internal_error
Sprawdź treść błędu oraz logi API. Ponawiaj próby ostrożnie – ponowne wysłanie żądania utworzenia może wygenerować kolejne płatne zadanie.

Limity żądań

Tworzenie zadań: każdy klucz API pozwala domyślnie na maksymalnie 100 żądań na minutę. Niestandardowe limity żądań nie są obecnie dostępne.

Zapytania o zadania: każdy klucz API pozwala domyślnie na maksymalnie 120 żądań na minutę. Zapytania i żądania utworzenia zadań są liczone oddzielnie.

Błąd HTTP 429 zawiera nagłówek Retry-After: 60 dla tworzenia zadań oraz Retry-After: 5 dla zapytań o stan. Stosuj algorytm ponawiania z opóźnieniem (backoff) i unikaj zbyt częstego odpytywania.