Seedance 2.0
Genereer video's met Seedance 2.0 op basis van tekst, eerste en laatste frames of multimodale referenties. Deze pagina beschrijft de volledige workflow van request tot resultaat voor dit model.
API-model-ID: seedance-2-0
Generatie verloopt asynchroon. Sla de taskId op die wordt geretourneerd bij het aanmaken van een taak, en vraag vervolgens de status op of ontvang een webhook.
Mogelijkheden
| Functie | Ondersteunde waarden |
|---|---|
| Outputresolutie | 480p · 720p · 1080p · 4k |
| Outputduur | 4–15 seconden |
| Beeldverhouding | 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive |
| Referentieafbeeldingen | Maxinaal 9 afbeeldingen |
| Referentievideo's | Maximaal 3 video's |
| Referentie-audiobestanden | Maximaal 3 audiobestanden |
| Alle referenties gecombineerd | Maximaal 12 referentiebestanden in totaal |
| Totale duur per video-/audiogroep | 15 seconden |
| seed | -1 tot 4294967295 |
Tarieven & credits
Voor het genereren van video's worden credits in rekening gebracht op basis van de factureerbare duur in seconden. Zonder video-invoer is de factureerbare duur gelijk aan de uitvoerduur. Met video-invoer is dit inclusief de duur van de referentievideo.
De onderstaande tabel toont het aantal credits dat per seconde in rekening wordt gebracht, niet de totale kosten van een taak. Het tarief is afhankelijk van het model, de uitvoerresolutie en of er referentievideo's worden meegeleverd in de referentie-naar-video-modus. Zie de formules en voorbeelden onder de tabel om de totale kosten te berekenen.
| Outputresolutie | Zonder video-input | Met video-input |
|---|---|---|
480p | 6 credits/seconde | 4 credits/seconde |
720p | 12 credits/seconde | 8 credits/seconde |
1080p | 30 credits/seconde | 20 credits/seconde |
4k | 70 credits/seconde | 40 credits/seconde |
- Zonder video-input: output in seconden × tarief zonder video.
- Met video-input: (output in seconden + gemeten seconden referentievideo) × tarief met video. De server meet de totale duur van de referentievideo en rondt dit af naar boven op hele seconden voor de facturering.
- Bij gebruik van alleen afbeelding- of audioreferenties geldt het tarief zonder video. Het tarief voor referentievideo's is alleen van toepassing in de referentie-naar-video-modus wanneer er daadwerkelijk videoreferenties worden meegeleverd.
Voorbeelden van kostenberekening
5 seconden 720p tekst-naar-video: 5 × 12 = 60 credits.
5 seconden 720p output met een referentievideo of 5 seconden: (5 + 5) × 8 = 80 credits.
Credits worden gereserveerd bij indiening en afgeschreven bij succes. Mislukte of getimede taken gaan naar de terugbetalingsprocedure. Een facturatiestatus refund_failed betekent dat de terugbetaling niet is voltooid; controleer de API-logs of neem contact op met support.
Authenticatie
Maak een API-sleutel aan in het dashboard. De volledige sleutel wordt slechts eenmalig getoond. Bewaar deze op je server en stuur hem mee als Bearer-token bij elk request.
Basis-URL
https://api.seevio.aiAuthorization: Bearer sk_live_your_api_key
Content-Type: application/jsonStel de omgevingsvariabele SEEVIO_API_KEY in voordat je deze voorbeelden uitvoert. De JavaScript-voorbeelden draaien op je server met Node.js; de Python-voorbeelden gebruiken het requests-pakket.
Snelstart
Dien dit minimale request in, sla de geretourneerde taskId op en gebruik vervolgens het onderstaande voorbeeld om de taak op te vragen. De creditwaarde in de response bij aanmaken is het gereserveerde aantal.
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-0",
"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
}
}'Voorbeeldrespons taak aanmaken
Nadat het bovenstaande verzoek is geaccepteerd, retourneert de API deze JSON-respons. De taskId is de taak-id die wordt gebruikt voor volgende statusopvragingen; credits is het aantal credits dat voor deze taak is gereserveerd. Deze respons bevestigt dat de taak is aangemaakt, niet dat de video al klaar is. Je moet de status van de taak pollen of een webhook gebruiken om de videoresultaten te ontvangen.
{
"taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"credits": 60
}Taak maken
POST https://api.seevio.ai/v1/videos/generationsStuur een JSON-object met daarin model en input, plus een optionele callback_url. Geef altijd de model-ID op die op deze pagina wordt getoond; als je model weglaat, wordt automatisch seedance-2-0 geselecteerd.
Request body
| Veld | Type | Vereist | Beschrijving & beperkingen |
|---|---|---|---|
model | string | Ja | Model-id. Stel dit veld in op seedance-2-0 om Seedance 2.0 te gebruiken. |
callback_url | string | Nee | Openbaar HTTPS-eindpunt voor POST-callbacks bij voltooiing en fouten. Privénetwerken en localhost zijn niet toegestaan. Voorbeeld: https://example.com/webhooks/seevio |
input | object | Ja | Generatie-instellingen. Moet een niet-lege prompt bevatten. |
Input-parameters
Geef image_urls, video_urls en audio_urls op als arrays van URL-strings (string[]). Elke opgegeven URL moet publiekelijk toegankelijk zijn via HTTPS, inclusief media die door de geselecteerde modus worden genegeerd.
| Veld | Type | Vereist | Standaard | Beschrijving & beperkingen |
|---|---|---|---|---|
input.prompt | string | Ja | — | Voor elke modus is een prompt vereist. Deze mag na het trimmen maximaal 10.000 tekens bevatten en mag niet volledig uit spaties of witregels bestaan. Voorbeeld: A cat surfing at sunset |
input.generation_type | string | Nee | text-to-video | text-to-video gebruikt alleen de prompt; image-to-video gebruikt 1–2 afbeeldingen; reference-to-video gebruikt afbeelding-, video- en/of audioreferenties. Ondersteunde waarden text-to-video | image-to-video | reference-to-video |
input.image_urls | string[] | Voorwaardelijk | [] | image-to-video: 1 afbeelding voor het eerste frame, of 2 geordende afbeeldingen voor het eerste en laatste frame. reference-to-video: maximaal 9 afbeeldingen. Wordt genegeerd bij text-to-video. Voorbeeld: ["https://example.com/first-frame.jpg"] |
input.video_urls | string[] | Voorwaardelijk | [] | Alleen doorgestuurd bij reference-to-video; maximaal 3 video's en 15 seconden gecombineerd. Wordt in andere modi genegeerd. Voorbeeld: ["https://example.com/source.mp4"] |
input.audio_urls | string[] | Voorwaardelijk | [] | Alleen doorgestuurd bij reference-to-video; maximaal 3 audiobestanden en 15 seconden gecombineerd. Wordt in andere modi genegeerd. Audio kan bij dit model niet als enig referentiemateriaal worden gebruikt. Als u audio_urls opgeeft, moet u ook ten minste één referentieafbeelding in image_urls of één referentievideo in video_urls opgeven. Voorbeeld: ["https://example.com/music.mp3"] |
input.duration | integer | Nee | 5 | Gehele getal voor de outputduur van 4 tot 15 seconden. Ondersteunde waarden 4–15Voorbeeld: 5 |
input.aspect_ratio | string | Nee | adaptive | Beeldverhouding van de output. Met adaptive kan het model zelf de verhouding bepalen. Ondersteunde waarden 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptiveVoorbeeld: adaptive |
input.resolution | string | Nee | 720p | Gebruik een van de hier vermelde ondersteunde outputresoluties. Ondersteunde waarden 480p | 720p | 1080p | 4kVoorbeeld: 720p |
input.generate_audio | boolean | Nee | true | Vraag om de generatie van gesynchroniseerde audio. Ondersteunde waarden true | falseVoorbeeld: true |
input.watermark | boolean | Nee | false | Vraag om een AI-watermerk op de gegenereerde video. Ondersteunde waarden true | falseVoorbeeld: false |
input.web_search | boolean | Nee | false | Sta webzoekopdrachten toe wanneer dit door het model wordt ondersteund. Ondersteunde waarden true | falseVoorbeeld: false |
input.return_last_frame | boolean | Nee | false | Vraag het laatste frame op. Het queryresultaat bevat data.last_frame_url zodra het frame beschikbaar is; anders is dit null. Ondersteunde waarden true | falseVoorbeeld: true |
input.seed | integer | Nee | -1 | Geheel getal van -1 tot 4294967295. Bij -1 wordt een willekeurige seed gekozen. Ondersteunde waarden -1 tot 4294967295Voorbeeld: 42 |
Booleaanse velden moeten de JSON-waarde true of false hebben, geen strings of getallen.
Response bij aanmaken
HTTP 200 retourneert taskId (string) en credits (getal). Dit bevestigt het aanmaken van de taak, niet de voltooiing. De onderstaande waarde komt overeen met de snelstart van 5 seconden in 720p.
{
"taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"credits": 60
}Generatiemodi & voorbeelden
Tekst naar video
Genereer op basis van een tekstprompt. Media-URL's worden in deze modus niet doorgestuurd.
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-0",
"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
}
}'Eerste frame
Geef één afbeelding op als het eerste frame en beschrijf de beweging in je prompt.
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-0",
"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"
}
}'Eerste en laatste frame
Geef twee afbeelding-URL's op in volgorde: eerst het beginframe, daarna het eindframe. Dit voorbeeld vraagt ook om het laatste frame van de gegenereerde video.
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-0",
"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
}
}'Multimodale referentie
Combineer afbeelding-, video- en audioreferenties. De prompt blijft vereist. Input van een referentievideo verandert de formule voor de facturering.
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-0",
"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"
}
}'Taak opvragen
GET https://api.seevio.ai/v1/tasks/{taskId}Vervang de voorbeeld-ID door de taskId die is geretourneerd bij het aanmaken. Queries retourneren alleen taken die eigendom zijn van de gebruiker van de API-sleutel; niet-toegankelijke of onbekende ID's retourneren HTTP 404.
Doe als uitgangspunt elke 10-20 seconden een poll, verminder de frequentie bij HTTP 429 en stop wanneer de status completed of failed is. Gebruik bij voorkeur webhooks voor productieomgevingen. Elk codevoorbeeld hieronder voert één query uit.
curl --fail-with-body https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer $SEEVIO_API_KEY"| Status | Beschrijving & beperkingen |
|---|---|
queued | Geaccepteerd en wachtend op verwerking. |
generating | Generatie is in uitvoering. |
completed | Succesvol voltooid. Download data.results voordat deze verlopen. |
failed | Definitief mislukt. Controleer failed_reason en billing_status. |
| Veld | Type | Beschrijving & beperkingen |
|---|---|---|
id | string | Taak-ID. Dit is de taskId uit de response bij het aanmaken. |
created_at | number | Tijdstip van aanmaken van de taak in Unix-seconden. |
model | string | De openbare model-ID die voor deze taak is gebruikt. |
billing_status | string | reserved, charged, refunded of refund_failed. |
credits | number | Credits gereserveerd voor deze taak. Deze waarde blijft behouden na een terugbetaling; controleer billing_status om het uiteindelijke factureringsresultaat te bepalen. |
failed_reason | string | null | Reden van mislukken bij mislukte taken; anders null. Mislukte query-responses bevatten geen data. |
data | object | Aanwezig bij succesvol opgevraagde taken. Bevat details over de output en de verwerking. |
data.results | string[] | Array van video-URL's. Leeg tot de voltooiing of nadat de video is verlopen. |
data.video_expires_at | string | null | Vervaltijd van de video als ISO 8601-timestamp, of null voordat deze beschikbaar is. Sla het resultaat vóór dit tijdstip op. |
data.last_frame_url | string | null | URL van het laatste frame indien aangevraagd en beschikbaar, anders null. |
data.processing_time | number | null | Verwerkingstijd van de provider in seconden indien beschikbaar, anders null. |
Voltooide taak: opvraagrespons met video-resultaten
Wanneer de opvraging status=completed retourneert, is het genereren van de video voltooid. Lees de video-URL's uit via data.results en download deze vóór data.video_expires_at. De status billing_status=charged geeft aan dat de gereserveerde credits in rekening zijn gebracht.
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1788652800,
"model": "seedance-2-0",
"status": "completed",
"billing_status": "charged",
"credits": 60,
"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
}
}Mislukte taak: opvraagrespons met fout- en factureringsdetails
Wanneer de opvraging status=failed retourneert, is het genereren mislukt. Zie failed_reason voor de oorzaak en billing_status voor het resultaat van de terugbetaling. In dit voorbeeld betekent refunded dat de credits zijn teruggestort. Bij credits blijft het oorspronkelijk gereserveerde aantal staan en de respons bevat geen data.
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1788652800,
"model": "seedance-2-0",
"status": "failed",
"billing_status": "refunded",
"credits": 60,
"failed_reason": "provider_failed"
}Webhooks
Stel callback_url in het aanmaak-request in om een JSON POST te ontvangen wanneer de taak is voltooid of mislukt. Retourneer binnen 15 seconden een 2xx-response. Mislukte leveringen worden opnieuw geprobeerd; verwerk herhaalde leveringen idempotent op basis van de taak-ID.
Je callback-endpoint moet POST-verzoeken met een JSON-body accepteren (Content-Type: application/json).
Maak een taak met een 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-0",
"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"
}'Webhook-payloads verschillen van responses op taakqueries: ze bevatten geen billing_status en credits; details over fouten bevinden zich in data.failed_reason en data.credits_refunded. De created_at van de webhook is het tijdstip van de gebeurtenis in Unix-seconden.
Taak voltooid: payload voor succesvolle callback
Als het genereren is geslaagd, bevat de callback status=completed. Gebruik id om de taak te identificeren en data.results om de video-URL's op te halen. Download en bewaar de resultaten vóór data.video_expires_at.
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1788652800,
"model": "seedance-2-0",
"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
}
}Taak mislukt: payload voor mislukte callback
Als het genereren mislukt, bevat de callback status=failed. Gebruik id om de taak te identificeren, data.failed_reason voor de reden van de fout en data.credits_refunded voor het aantal teruggestorte credits.
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1788652800,
"model": "seedance-2-0",
"status": "failed",
"data": {
"failed_reason": "provider_failed",
"credits_refunded": 60
}
}Voorbeeld van een ontvanger
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 });
}Dit Next.js-voorbeeld leest de JSON-callback-body en verwerkt voltooide en mislukte taken direct. Voeg persistentie en taak-ID-deduplicatie toe voor je eigen applicatie; zet traag werk in de wachtrij voordat je de callback bevestigt.
Mediavereisten & beperkingen
- Alle media- en callback-URL's moeten openbare HTTPS-URL's zijn. Vermijd localhost, privé-IP-adressen en bestanden die cookies of een login vereisen. Referentievideo-/-audio-URL's moeten rechtstreeks naar leesbare media verwijzen.
- Geef bij reference-to-video ten minste één referentie op, met niet meer dan 9 afbeeldingen, 3 video's, 3 audiobestanden en 12 materialen in totaal. De totale videoduur en totale audioduur mogen elk maximaal 15 seconden bedragen.
- text-to-video negeert alle mediareferenties. image-to-video stuurt alleen de afbeeldingen voor het eerste/laatste frame door en negeert video- en audioreferenties. Gebruik reference-to-video om media te combineren.
- Gebruik voor Seedance 2.0-modellen audio in combinatie met ten minste één afbeelding of video vanwege de modelcompatibiliteit. Voorbeelden met alleen audio zijn te vinden op de Seedance 2.5-pagina.
Afbeeldingseisen
- Elke afbeelding mag maximaal 30 MB groot zijn.
- Ondersteunde indelingen: jpeg, png, webp, bmp, tiff, gif.
- Beeldverhouding (breedte ÷ hoogte): tussen 0,4 en 2,5 (inclusief).
- Zowel de breedte als de hoogte moeten tussen de 300 en 6.000 pixels liggen.
Video-eisen
- Ondersteunde indelingen: mp4, mov.
- Elke video mag maximaal 100 MB groot zijn.
- Beeldsnelheid: 24 tot 60 fps (inclusief).
- Beeldverhouding (breedte ÷ hoogte): tussen 0,4 en 2,5 (inclusief).
- Totaal aantal pixels (breedte × hoogte): tussen 407.696 en 8.295.044 (inclusief). Bijvoorbeeld: 614 × 664 = 407.696 en 3.326 × 2.494 = 8.295.044. Dit zijn voorbeelden van het aantal pixels, geen vaste eisen voor de breedte en hoogte.
Audio-eisen
- Ondersteunde indelingen: wav, mp3.
- Elk audiobestand mag maximaal 15 MB groot zijn.
Foutmeldingen
HTTP-fouten bevatten een error-object met een code en message. Een succesvol geaccepteerde taak kan later alsnog mislukken; vraag de taak op of handel de fout af via de callback.
{
"error": {
"code": "invalid_request",
"message": "input.prompt is required."
}
}| HTTP | Veld | Wat te doen |
|---|---|---|
| 400 | invalid_request | Corrigeer de JSON, de ontbrekende prompt, het parameterbereik of de media-URL voordat je het opnieuw probeert. |
| 401 | invalid_api_key | Controleer het Bearer-token en of de API-sleutel actief is. |
| 402 | insufficient_credits | Waardeer je credits op of verlaag de kosten van de taak. De response kan de vereiste en beschikbare hoeveelheden bevatten. |
| 403 | forbidden | Controleer de beperking op accountniveau die in de foutmelding wordt beschreven. |
| 404 | not_found | Controleer de taak-ID en of de sleutel hoort bij de gebruiker van de taak. |
| 429 | rate_limited | Wacht tot het Retry-After-interval is verstreken voordat je het opnieuw probeert. |
| 500 | internal_error | Controleer de foutmelding en de API-logs. Wees voorzichtig met opnieuw proberen; het opnieuw verzenden van een aanmaak-request kan leiden tot een nieuwe factureerbare taak. |
Rate limits
Taken aanmaken: elke API-sleutel staat standaard maximaal 100 verzoeken per minuut toe. Aangepaste limieten zijn momenteel niet beschikbaar.
Taken opvragen: elke API-sleutel staat standaard maximaal 120 verzoeken per minuut toe. Zoekopdrachten en verzoeken voor het aanmaken van taken worden apart geteld.