Seedance 3.0 API dla programistów / v1

Seedance 2.5.
W Twoim produkcie.

Zamieniaj tekst, obrazy i materiały referencyjne w wideo za pomocą jednego API. Korzystaj z kredytów Seedance 3.0 i zachowaj dotychczasowy sposób pracy — z jasno określonymi żądaniami i wynikami.

Wspólne kredyty kontaAsynchroniczne zadania wideoŻądania idempotentne
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"
}
Twój klucz. Twoje kredyty. Twoja aplikacja.
01 / ROZPOCZNIJ INTEGRACJĘ

Twoje pierwsze wideo w kilku żądaniach.

Zapisz klucz na serwerze jako SEADANCE_API_KEY. Ustaw SEADANCE_REQUEST_KEY na unikalną wartość dla tego wideo (na przykład używając uuidgen) i zachowaj ją przy ponawianiu. Upewnij się, że konto ma wystarczającą liczbę kredytów. Ten przykład rezerwuje 350 kredytów na 5-sekundowe wideo w 720p. Skopiuj zwrócone id, aby sprawdzać status.

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

Ta dokumentacja nigdy nie uruchamia generowania automatycznie. Wysłanie żądania utworzenia wideo zużywa Twoje kredyty.

Uwierzytelniaj żądania na swoim serwerze.

Każde wywołanie API używa Authorization: Bearer sd_live_…. Nie umieszczaj kluczy w przeglądarkach, aplikacjach mobilnych, publicznych repozytoriach ani pakietach kodu klienta. Pełny klucz jest wyświetlany tylko raz; możesz go unieważnić w panelu API.

Bazowy URLhttps://seedance3ai.dev/api/v1

Domyślne uprawnienia kluczy: videos:write do przesyłania plików i generowania; videos:read do modeli i statusu zadań; account:read do kredytów. Dostęp i limity konta są wspólne dla wszystkich kluczy.

Utwórz zadanie wideo.

POST/api/v1/videos

Używaj Content-Type: application/json i unikalnego Idempotency-Key dla każdego zamierzonego generowania. Przyjęcie zadania przez dostawcę może zająć serwerowi trochę czasu. Jeśli połączenie przekroczy limit czasu, ponów tę samą treść z tym samym kluczem. HTTP 202 oznacza przyjęcie, a nie ukończenie. Idempotency-Key akceptuje 1–128 drukowalnych znaków ASCII bez spacji.

ParametrWartości i wymagania
modelstringseedance-2.5

Wymagane. API obsługuje obecnie Seedance 2.5.

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

Wymagane. Wybierz tryb wejściowy; pola multimediów muszą być z nim zgodne.

promptstring3–30 000 znaków

Wymagane. Opisz scenę, ruch i dźwięk.

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

Wymagane, w sekundach. Edycja wykorzystuje długość wideo źródłowego, zaokrąglaną w górę do pełnych sekund przy naliczaniu opłat.

resolutionstring480p | 720p | 1080p

Wymagane. Określa stawkę w kredytach.

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

Wymagane. Generowanie z obrazu wykorzystuje proporcje pierwszej klatki.

firstFrameUrl / lastFrameUrlstringpublicObjectUrl przesłanego pliku

Generowanie z obrazu wymaga pierwszej klatki. Ostatnia klatka jest opcjonalna.

referenceImageUrlsstring[]Maksymalnie 30 obrazów

Dla trybu reference-to-video. Najpierw prześlij każdy plik na swoje konto.

referenceVideoUrls / referenceAudioUrlsstring[]Maksymalnie 10 filmów / 10 plików audio

Łączny czas w każdej grupie nie może przekraczać 30 sekund. Serwer sprawdza multimedia przed generowaniem.

referenceTaskTypestringreference | edit | extend

Opcjonalne, domyślnie reference. edit i extend wymagają trybu reference-to-video z dokładnie jednym wideo źródłowym.

generateAudiobooleantrue

Opcjonalne. Seedance 2.5 zawiera natywne generowanie dźwięku; wartość false jest odrzucana.

batchCountinteger1

Opcjonalne. Jedno wideo na żądanie.

Za pomocą tych pól Seedance 2.5 obsługuje tekst, pierwszą i ostatnią klatkę, multimodalne materiały referencyjne oraz edycję i wydłużanie wideo. Aktualnym, wiążącym źródłem informacji o dostępnych funkcjach i cenach jest GET /models.

Przykładowe żądanie generowania wideo z obrazu
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"
}
Przykładowe żądanie generowania z materiałów referencyjnych
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"
  ]
}
UŻYJ WŁASNYCH MATERIAŁÓW

Prześlij raz. Odwołuj się przez URL.

Wyślij do POST /uploads pola fileName, contentType, size (bajty) i kind (image, video lub audio). Przed expiresAt prześlij surowe bajty pliku metodą PUT do uploadUrl, używając requiredHeaders. Po udanym przesłaniu użyj publicObjectUrl w żądaniu generowania. Materiały referencyjne muszą należeć do tego samego konta; dowolne zewnętrzne adresy URL i dane base64 nie są akceptowane.

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.

Zadeklarowany rozmiar i typ zawartości muszą odpowiadać przesłanemu plikowi. Adresy URL do przesyłania wygasają; w razie potrzeby poproś o nowy. Czas trwania, wymiary i format multimediów są sprawdzane przed generowaniem.

Śledź zadanie aż do ukończenia.

GET /videos/:id zwraca bieżący stan zadania. Odpytuj co 5–10 sekund, zatrzymaj odpytywanie przy succeeded lub failed i wydłuż czas oczekiwania, jeśli występuje Retry-After. Możesz sprawdzać tylko zadania API należące do Twojego konta. Obecna integracja korzysta z cyklicznego odpytywania.

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
Przykład pomyślnie ukończonego zadania
{
  "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 ma wartość null, dopóki wideo nie będzie dostępne. Nieudane zadanie zawiera błąd; sprawdź refund_status, aby poznać stan zwrotu kredytów. Pobieraj gotowe wyniki niezwłocznie. Usunięcie wideo nie resetuje żądania: ponowienie z tym samym Idempotency-Key zwróci 410 video_deleted i nie utworzy wideo ponownie.

JEDNO KONTO, JEDNO SALDO

Poznaj koszt w kredytach przed integracją.

Generowanie przez API korzysta z tych samych kredytów konta i stawek Seedance 2.5 co witryna. Kredyty są rezerwowane po przyjęciu żądania. Przy nieudanym generowaniu wracają na saldo kredytów jednorazowych. Błąd walidacji przed utworzeniem zadania nie powoduje utworzenia płatnego wideo.

480p

30kredytów / sekundę wyniku

+ 20 kredytów / sekundę wideo referencyjnego

720p

70kredytów / sekundę wyniku

+ 50 kredytów / sekundę wideo referencyjnego

1080p

160kredytów / sekundę wyniku

+ 90 kredytów / sekundę wideo referencyjnego

Koszt = czas wyniku × stawka za wynik oraz ewentualnie czas wideo referencyjnego × stawka referencyjna. Czas wideo referencyjnego jest mierzony na serwerze; suma jest zaokrąglana w dół do pełnych sekund przy naliczaniu opłat. Natywny dźwięk jest wliczony. Na przykład 5 sekund w 720p kosztuje 350 kredytów lub 600 kredytów z 5-sekundowym wideo referencyjnym.

Sprawdź modele, ceny i swoje saldo
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"

W panelu API sprawdzisz dostępne kredyty, historię żądań i limity konta. Dodawaj kredyty przez stronę z cenami, używając tego samego konta; nie ma oddzielnego salda API ani punktu końcowego API do doładowań. Aktywna subskrypcja nie jest wymagana, jeśli masz wystarczającą liczbę dostępnych kredytów. Zasady wygasania subskrypcji i kredytów jednorazowych są takie same jak w witrynie.

Dodanie kredytów nie zwiększa limitów częstotliwości, równoczesności ani limitów dziennych API i nie włącza ponownie wyłączonego konta. Limit dzienny obejmuje wszystkie zarezerwowane kredyty, także zwrócone po nieudanych zadaniach, i resetuje się o 00:00 UTC. Skontaktuj się z pomocą techniczną, jeśli Twoja aplikacja potrzebuje wyższych limitów.

Zobacz plany i dodaj kredyty

Ponawiaj bezpiecznie. Unikaj podwójnych opłat.

Używaj jednego Idempotency-Key na każde zamierzone wideo i zachowuj go wraz z dokładną treścią żądania, dopóki wynik nie będzie znany. Nowe klucze oznaczają nowe generowania. Odpowiedź błędu zawiera error.code, error.message i request_id; podaj identyfikator żądania przy kontakcie z pomocą techniczną.

HTTPZnaczenieNastępny krok
400Nieprawidłowe żądaniePrzed ponowieniem sprawdź komunikat błędu, pola i ograniczenia dotyczące multimediów.
401Nieprawidłowy klucz APISprawdź nagłówek Bearer. Unieważnionych kluczy nie można używać ponownie.
402Niewystarczająca liczba kredytówDodaj kredyty do tego samego konta Seedance 3.0.
403Odmowa dostępuDostęp do API jest wyłączony lub klucz nie ma wymaganego uprawnienia.
404Nie znaleziono wideoUżyj identyfikatora zadania utworzonego przez Twoje konto za pośrednictwem tego API.
409Konflikt żądaniaW przypadku request_in_progress poczekaj i ponów żądanie z tą samą treścią i kluczem. idempotency_conflict oznacza ponowne użycie klucza z inną treścią. request_expired lub request_previously_failed potwierdza, że zadanie wideo nie zostało wysłane: rozwiąż zgłoszony problem, a następnie użyj nowego klucza.
410Wideo usuniętevideo_deleted oznacza, że pierwotne żądanie zostało przetworzone, ale jego wideo usunięto. Ten klucz nie może uruchomić kolejnego generowania. Przestań ponawiać żądanie; użyj nowego klucza tylko wtedy, gdy świadomie chcesz rozpocząć nowe, płatne generowanie.
429Osiągnięto limit kontaPrzestrzegaj Retry-After. Limity częstotliwości, równoczesnych zadań i dziennych kredytów są wspólne dla wszystkich kluczy. Budżety dzienne resetują się o 00:00 UTC.
500 / 503Tymczasowy błąd usługiZachowaj Idempotency-Key. Ponów to samo żądanie; nie twórz nowego klucza, jeśli wynik jest niepewny.

Jeśli wysłanie zwróci request_in_progress, poczekaj i ponów to samo żądanie. Nigdy nie zmieniaj klucza tylko po to, aby ominąć przekroczenie limitu czasu. Jeśli zwrot za nieudane zadanie nadal oczekuje na realizację, zachowaj identyfikator zadania i skontaktuj się z pomocą techniczną.

Gotowi do integracji?

Utwórz klucz i zbuduj swoją pierwszą integrację.

Otwórz panel API