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.
{
"model": "seedance-2.5",
"mode": "text-to-video",
"prompt": "A paper boat drifting into the morning light",
"duration": 5,
"resolution": "720p",
"aspectRatio": "16:9"
}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.
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.
https://seedance3ai.dev/api/v1Domyś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.
/api/v1/videosUż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.
| Parametr | Wartości i wymagania |
|---|---|
modelstring | seedance-2.5Wymagane. API obsługuje obecnie Seedance 2.5. |
modestring | text-to-video | image-to-video | reference-to-videoWymagane. Wybierz tryb wejściowy; pola multimediów muszą być z nim zgodne. |
promptstring | 3–30 000 znakówWymagane. Opisz scenę, ruch i dźwięk. |
durationinteger | 4, 5, 6, 8, 10, 12, 15, 20, 25, 29, 30Wymagane, w sekundach. Edycja wykorzystuje długość wideo źródłowego, zaokrąglaną w górę do pełnych sekund przy naliczaniu opłat. |
resolutionstring | 480p | 720p | 1080pWymagane. Określa stawkę w kredytach. |
aspectRatiostring | 1:1 | 4:3 | 3:4 | 16:9 | 9:16 | 21:9Wymagane. Generowanie z obrazu wykorzystuje proporcje pierwszej klatki. |
firstFrameUrl / lastFrameUrlstring | publicObjectUrl przesłanego plikuGenerowanie z obrazu wymaga pierwszej klatki. Ostatnia klatka jest opcjonalna. |
referenceImageUrlsstring[] | Maksymalnie 30 obrazówDla 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. |
referenceTaskTypestring | reference | edit | extendOpcjonalne, domyślnie reference. edit i extend wymagają trybu reference-to-video z dokładnie jednym wideo źródłowym. |
generateAudioboolean | trueOpcjonalne. Seedance 2.5 zawiera natywne generowanie dźwięku; wartość false jest odrzucana. |
batchCountinteger | 1Opcjonalne. 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
{
"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
{
"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"
]
}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.
// 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.
curl --fail-with-body "https://seedance3ai.dev/api/v1/videos/TASK_ID" \
-H "Authorization: Bearer $SEADANCE_API_KEY"queuedprocessingsucceeded / failed{
"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.
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.
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 kredytyPonawiaj 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ą.
| HTTP | Znaczenie | Następny krok |
|---|---|---|
| 400 | Nieprawidłowe żądanie | Przed ponowieniem sprawdź komunikat błędu, pola i ograniczenia dotyczące multimediów. |
| 401 | Nieprawidłowy klucz API | Sprawdź nagłówek Bearer. Unieważnionych kluczy nie można używać ponownie. |
| 402 | Niewystarczająca liczba kredytów | Dodaj kredyty do tego samego konta Seedance 3.0. |
| 403 | Odmowa dostępu | Dostęp do API jest wyłączony lub klucz nie ma wymaganego uprawnienia. |
| 404 | Nie znaleziono wideo | Użyj identyfikatora zadania utworzonego przez Twoje konto za pośrednictwem tego API. |
| 409 | Konflikt żądania | W 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. |
| 410 | Wideo usunięte | video_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. |
| 429 | Osiągnięto limit konta | Przestrzegaj 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 / 503 | Tymczasowy błąd usługi | Zachowaj 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ę.