Seedance 2.5.
In uw eigen product.
Zet tekst, afbeeldingen en referentiemateriaal om in video met één API. Gebruik uw Seedance 3.0-credits en bestaande workflow, met duidelijk vastgelegde verzoeken en resultaten.
{
"model": "seedance-2.5",
"mode": "text-to-video",
"prompt": "A paper boat drifting into the morning light",
"duration": 5,
"resolution": "720p",
"aspectRatio": "16:9"
}Uw eerste video in een paar verzoeken.
Sla uw sleutel op de server op als SEADANCE_API_KEY. Stel SEADANCE_REQUEST_KEY in op een unieke waarde voor deze video (bijvoorbeeld met uuidgen) en behoud die waarde bij nieuwe pogingen. Zorg dat uw account voldoende credits bevat. Dit voorbeeld reserveert 350 credits voor een video van 5 seconden in 720p. Kopieer de geretourneerde id om de status op te vragen.
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
}'Deze documentatie start nooit automatisch een generatie. Een verzoek om een video te maken verbruikt uw credits.
Authenticeer vanaf uw server.
Elke API-aanroep gebruikt Authorization: Bearer sd_live_…. Plaats sleutels niet in browsers, mobiele apps, openbare repositories of clientbundels. De volledige sleutel wordt één keer getoond; u kunt deze intrekken in het API-dashboard.
https://seedance3ai.dev/api/v1Standaardmachtigingen voor sleutels: videos:write voor uploads en generatie; videos:read voor modellen en taakstatus; account:read voor credits. Accounttoegang en limieten gelden voor alle sleutels samen.
Maak een videotaak aan.
/api/v1/videosGebruik Content-Type: application/json en een unieke Idempotency-Key voor elke gewenste generatie. Het kan even duren voordat de server de taak bij de provider heeft ingediend. Bij een verbindingstime-out herhaalt u dezelfde body met dezelfde sleutel. HTTP 202 betekent geaccepteerd, niet voltooid. Idempotency-Key accepteert 1–128 afdrukbare ASCII-tekens zonder spaties.
| Parameter | Waarden en vereisten |
|---|---|
modelstring | seedance-2.5Verplicht. De API ondersteunt momenteel Seedance 2.5. |
modestring | text-to-video | image-to-video | reference-to-videoVerplicht. Kies de invoermodus; de mediavelden moeten bij deze modus passen. |
promptstring | 3–30.000 tekensVerplicht. Beschrijf de scène, beweging en het geluid. |
durationinteger | 4, 5, 6, 8, 10, 12, 15, 20, 25, 29, 30Verplicht, in seconden. Bij bewerken wordt de lengte van de bronvideo gebruikt, voor de facturering naar boven afgerond op hele seconden. |
resolutionstring | 480p | 720p | 1080pVerplicht. Bepaalt het credittarief. |
aspectRatiostring | 1:1 | 4:3 | 3:4 | 16:9 | 9:16 | 21:9Verplicht. Beeld-naar-video gebruikt de beeldverhouding van het eerste frame. |
firstFrameUrl / lastFrameUrlstring | publicObjectUrl van het geüploade bestandBeeld-naar-video vereist een eerste frame. Een laatste frame is optioneel. |
referenceImageUrlsstring[] | Maximaal 30 afbeeldingenVoor reference-to-video. Upload elk bestand eerst naar uw account. |
referenceVideoUrls / referenceAudioUrlsstring[] | Maximaal 10 video's / 10 audiobestandenElke groep mag samen maximaal 30 seconden duren. De server controleert de media vóór het genereren. |
referenceTaskTypestring | reference | edit | extendOptioneel, standaard reference. edit en extend vereisen reference-to-video met precies één bronvideo. |
generateAudioboolean | trueOptioneel. Seedance 2.5 bevat ingebouwde audiogeneratie; false wordt geweigerd. |
batchCountinteger | 1Optioneel. Eén video per verzoek. |
Via deze velden ondersteunt Seedance 2.5 tekst, eerste en laatste frames, multimodale referenties en het bewerken en verlengen van video's. GET /models is de actuele bron voor beschikbare functies en prijzen.
Voorbeeldverzoek voor beeld-naar-video
{
"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"
}Voorbeeldverzoek voor referentie-naar-video
{
"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"
]
}Eén keer uploaden. Verwijzen via URL.
Stuur fileName, contentType, size (bytes) en kind (image, video of audio) naar POST /uploads. Upload de onbewerkte bestandsbytes vóór expiresAt met PUT naar uploadUrl en gebruik daarbij requiredHeaders. Gebruik na een geslaagde upload publicObjectUrl in het generatieverzoek. Referenties moeten bij hetzelfde account horen; willekeurige externe URL's en base64-invoer worden niet geaccepteerd.
// 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.De opgegeven grootte en het inhoudstype moeten overeenkomen met het geüploade bestand. Upload-URL's verlopen; vraag zo nodig een nieuwe aan. Duur, afmetingen en formaat van de media worden vóór het genereren gecontroleerd.
Volg de taak tot deze is voltooid.
GET /videos/:id retourneert de huidige taakstatus. Vraag de status elke 5–10 seconden op, stop bij succeeded of failed en verleng de wachttijd als Retry-After aanwezig is. U kunt alleen API-taken van uw eigen account opvragen. De huidige integratie gebruikt polling.
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 is null totdat er een video beschikbaar is. Een mislukte taak bevat een fout; controleer refund_status voor de status van de creditteruggave. Download geslaagde resultaten tijdig. Een video verwijderen zet het verzoek niet terug: opnieuw indienen met die Idempotency-Key retourneert 410 video_deleted en kan de video niet opnieuw maken.
Ken de creditkosten voordat u begint.
API-generatie gebruikt dezelfde accountcredits en Seedance 2.5-tarieven als de website. Credits worden gereserveerd zodra een verzoek is geaccepteerd. Bij een mislukte generatie worden die credits teruggestort op uw eenmalige creditsaldo. Een validatiefout vóór het aanmaken van de taak leidt niet tot een betaalde video.
480p
30credits / uitvoerseconde
+ 20 credits / seconde referentievideo
720p
70credits / uitvoerseconde
+ 50 credits / seconde referentievideo
1080p
160credits / uitvoerseconde
+ 90 credits / seconde referentievideo
Kosten = uitvoerduur × uitvoertarief, plus eventuele referentievideoduur × referentietarief. De duur van referentievideo's wordt op de server gemeten; het totaal wordt voor de facturering naar beneden afgerond op hele seconden. Ingebouwde audio is inbegrepen. Een video van 5 seconden in 720p kost bijvoorbeeld 350 credits, of 600 credits met een referentievideo van 5 seconden.
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"In het API-dashboard vindt u beschikbare credits, de verzoekgeschiedenis en accountlimieten. Voeg credits toe via de prijspagina van de website met hetzelfde account; er is geen apart API-saldo of API-eindpunt om credits op te waarderen. U hebt geen actief abonnement nodig als u voldoende beschikbare credits hebt. Voor het verlopen van abonnementen en eenmalige credits gelden dezelfde regels als op de website.
Credits toevoegen verhoogt de API-frequentie, het aantal gelijktijdige taken of de daglimieten niet en activeert geen uitgeschakeld account opnieuw. De daglimiet telt alle gereserveerde credits mee, inclusief teruggestorte credits van mislukte taken, en wordt om 00:00 UTC teruggezet. Neem contact op met support als uw toepassing hogere limieten nodig heeft.
Abonnementen bekijken en credits toevoegenVeilig opnieuw proberen. Dubbele kosten voorkomen.
Gebruik één Idempotency-Key per gewenste video en bewaar deze met de exacte verzoekbody totdat het resultaat bekend is. Nieuwe sleutels staan voor nieuwe generaties. Een foutantwoord bevat error.code, error.message en request_id; vermeld de verzoek-ID wanneer u contact opneemt met support.
| HTTP | Betekenis | Volgende stap |
|---|---|---|
| 400 | Ongeldig verzoek | Controleer de foutmelding, velden en mediabeperkingen voordat u het opnieuw probeert. |
| 401 | Ongeldige API-sleutel | Controleer de Bearer-header. Ingetrokken sleutels kunnen niet opnieuw worden gebruikt. |
| 402 | Onvoldoende credits | Voeg credits toe aan hetzelfde Seedance 3.0-account. |
| 403 | Toegang geweigerd | API-toegang is uitgeschakeld of de sleutel heeft niet de vereiste machtiging. |
| 404 | Video niet gevonden | Gebruik de ID van een taak die uw account via deze API heeft aangemaakt. |
| 409 | Verzoekconflict | Wacht bij request_in_progress en probeer het opnieuw met dezelfde body en sleutel. idempotency_conflict betekent dat de sleutel opnieuw is gebruikt voor een andere body. request_expired of request_previously_failed bevestigt dat er geen video-opdracht is ingediend: los het gemelde probleem op en gebruik daarna een nieuwe sleutel. |
| 410 | Video verwijderd | video_deleted betekent dat het oorspronkelijke verzoek is verwerkt, maar de video is verwijderd. Met de bijbehorende sleutel kan niet opnieuw worden gegenereerd. Stop met opnieuw proberen; gebruik alleen een nieuwe sleutel als u bewust een nieuwe, betaalde generatie wilt starten. |
| 429 | Accountlimiet bereikt | Houd rekening met Retry-After. Limieten voor verzoekfrequentie, gelijktijdige taken en dagelijkse credits gelden voor alle sleutels samen. Dagbudgetten worden om 00:00 UTC teruggezet. |
| 500 / 503 | Tijdelijke servicefout | Behoud de Idempotency-Key. Dien hetzelfde verzoek opnieuw in; maak geen nieuwe sleutel aan als het resultaat onzeker is. |
Als het indienen request_in_progress retourneert, wacht dan en herhaal hetzelfde verzoek. Gebruik nooit een nieuwe sleutel alleen om een time-out te omzeilen. Als de creditteruggave voor een mislukte taak nog in behandeling is, bewaar dan de taak-ID en neem contact op met support.
Klaar om te integreren?
Maak een sleutel aan en bouw uw eerste integratie.