Seedance API

Integreer videogeneratie in je product met Seedance 2.5 of Seedance 2.0, asynchrone taken, webhooks en credit-gebaseerde facturatie.

Basis-URL
https://api.seevio.ai
Op deze pagina

Introductie

Met de API kun je programmatisch Seedance 2.5 en Seedance 2.0 videogeneratietaken indienen. Seedance 2.5 is het aanbevolen model en ondersteunt tekst-naar-video, afbeelding-naar-video (met eerste frame of eerste en laatste frame) en multimodale referentie-naar-video. Generatie verloopt asynchroon: je maakt een taak aan, ontvangt direct een taak-ID en haalt vervolgens de voltooide video op via polling van het taak-endpoint of via een webhook.

Asynchrone taken

Polling werkt goed voor ontwikkeling en eenvoudige integraties.

Klaar voor webhooks

Webhooks worden aanbevolen voor productie omdat ze agressieve polling voorkomen en je service direct op de hoogte stellen wanneer een taak de eindstatus bereikt.

Credit-bewust

Credits worden gereserveerd bij het indienen van de taak. Succesvolle taken worden in rekening gebracht via deze reservering; mislukte of verlopen taken worden automatisch terugbetaald.

Authenticatie

Maak een API-sleutel aan in het dashboard en stuur deze als Bearer-token mee bij elk verzoek. De volledige sleutel wordt slechts eenmalig getoond bij het aanmaken.

Authorization: Bearer sk_live_xxxxxxxx
sk_live_

Gebruik sk_live_ sleutels voor productie.

sk_test_

Gebruik sk_test_ sleutels voor integratietesten in de sandbox met hetzelfde API-contract.

401

Ontbrekende, ongeldige of ingetrokken sleutels retourneren invalid_api_key met HTTP 401.

Snelstartgids

Dien eerst een taak in. Zodra de taak is geaccepteerd, kies je een methode voor het ontvangen van het resultaat: poll het taak-endpoint of ontvang de eindstatus via een webhook.

Een taak indienen

Maak een asynchrone videogeneratietaak aan en ontvang direct een taak-ID.

curl https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-5",
    "callback_url": "https://your-domain.com/api/seedance/webhook",
    "input": {
      "prompt": "a cat surfing on a neon wave, cinematic lighting",
      "generation_type": "text-to-video",
      "duration": 5,
      "aspect_ratio": "16:9",
      "resolution": "1080p",
      "generate_audio": true,
      "watermark": false,
      "web_search": false,
      "return_last_frame": false
    }
  }'
Resultaatoptie: Polling

Vraag de status op via het taakstatus-endpoint als je integratie de voorkeur geeft aan expliciete polling.

curl https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
  -H "Authorization: Bearer sk_live_xxx"
Resultaatoptie: Webhook

Geef een callback_url mee bij het indienen van de taak om callbacks voor voltooiing of fouten te ontvangen en je eigen taakstatus bij te werken.

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

  if (callbackData.status === "completed") {
    const videoUrl = callbackData.data.results[0];
    // Save the video URL or update your own task record here.
  }

  if (callbackData.status === "failed") {
    const errorMessage = callbackData.data.failed_reason;
    // Mark your own task record as failed here.
  }

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

Videotaak aanmaken

Maak een videogeneratietaak aan met POST /v1/videos/generations. De request-body bevat een model op het hoogste niveau, een optionele callback_url en een input-object met prompt- en generatie-instellingen.

POST
/v1/videos/generations
curl https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-5",
    "callback_url": "https://your-domain.com/api/seedance/webhook",
    "input": {
      "prompt": "a cat surfing on a neon wave, cinematic lighting",
      "generation_type": "text-to-video",
      "duration": 5,
      "aspect_ratio": "16:9",
      "resolution": "1080p",
      "generate_audio": true,
      "watermark": false,
      "web_search": false,
      "return_last_frame": false
    }
  }'

Generatiemodi

generation_type bepaalt welke media-inputs worden geaccepteerd en hoe het model deze interpreteert.

Mogelijkheden van Seedance 2.5
seedance-2-5

Stel model in op seedance-2-5 om 480p-, 720p- of 1080p-video's te genereren met een duur van 4 tot 30 seconden.

  • Tekst-naar-video met adaptieve, 16:9, 9:16, 1:1, 4:3, 3:4 of 21:9 aspect ratio
  • Afbeelding-naar-video op basis van één eerste-frame afbeelding of twee eerste-en-laatste-frame afbeeldingen; de aspect ratio moet op adaptive staan
  • Referentie-naar-video met maximaal 30 afbeeldingen, 10 video's en 10 audiobestanden, tot een maximum van 50 materialen in totaal
  • Elke video- of audioreferentie moet 2-30 seconden duren; de gecombineerde video- en gecombineerde audioduur mag elk maximaal 30 seconden zijn
  • Alleen audio als referentie-input en return_last_frame worden ondersteund; seed wordt niet ondersteund
ModusVereiste mediaOptionele mediaOpmerkingen
text-to-videopromptduration, aspect_ratio, resolution, seedAlleen tekstprompt. image_urls, video_urls en audio_urls zijn niet nodig.
image-to-videoprompt + image_urls array (1-2 afbeelding-URL's)duration, aspect_ratio, resolution, seedimage_urls moet een array zijn. Geef 1 afbeelding-URL op voor het eerste frame, of 2 afbeelding-URL's voor het eerste en laatste frame. Video en audio worden genegeerd.
reference-to-videoprompt + ten minste één afbeelding-, video- of audioreferentieafbeeldingen, video's en audio binnen de materiaallimietenSeedance 2.5 ondersteunt referenties die alleen uit audio bestaan. Voeg voor Seedance 2.0 ten minste één afbeelding of video toe wanneer audio wordt meegeleverd.
text-to-video

Gebruik tekst-naar-video wanneer de prompt de enige creatieve input is.

curl https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-5",
    "callback_url": "https://your-domain.com/api/seedance/webhook",
    "input": {
      "prompt": "a cinematic drone shot over a futuristic coastal city at sunrise",
      "generation_type": "text-to-video",
      "duration": 5,
      "aspect_ratio": "16:9",
      "resolution": "1080p",
      "generate_audio": true,
      "watermark": false,
      "web_search": false,
      "return_last_frame": false
    }
  }'
image-to-video

Gebruik afbeelding-naar-video wanneer input.image_urls een array is met 1-2 afbeelding-URL's: één URL bepaalt het eerste frame, twee URL's bepalen het eerste en laatste frame. Video- en audioreferenties worden in deze modus genegeerd.

curl https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-5",
    "input": {
      "prompt": "the subject turns toward camera, soft studio motion",
      "generation_type": "image-to-video",
      "image_urls": ["https://your.cdn.com/first-frame.jpg"],
      "duration": 5,
      "resolution": "720p"
    }
  }'
reference-to-video

Gebruik referentie-naar-video voor meer gerichte sturing met behulp van referentie-afbeeldingen, video's en audio. Seedance 2.5 accepteert audio als het enige referentietype; Seedance 2.0 vereist ten minste één afbeelding of video wanneer audio wordt meegeleverd.

Limieten voor materialen

  • Seedance 2.5: maximaal 30 referentie-afbeeldingen
  • Seedance 2.5: maximaal 10 referentievideo's, elk 2-30 seconden en totale duur <= 30 seconden
  • Seedance 2.5: maximaal 10 referentie-audiobestanden, elk 2-30 seconden en totale duur <= 30 seconden
  • Seedance 2.5: maximaal 50 materialen in totaal over alle typen heen
  • Seedance 2.0-varianten behouden hun bestaande limieten: 9 afbeeldingen, 3 video's, 3 audiobestanden en 15 seconden per video-/audiogroep

Ondersteunde inputcombinaties

Tekst + Afbeelding
Tekst + Video
Tekst + Audio (Seedance 2.5)
Tekst + Afbeelding + Video
Tekst + Afbeelding + Audio
Tekst + Video + Audio
Tekst + Afbeelding + Video + Audio
curl https://api.seevio.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-5",
    "input": {
      "prompt": "use the product from image 1 and the camera motion from the reference video",
      "generation_type": "reference-to-video",
      "image_urls": ["https://your.cdn.com/product.jpg"],
      "video_urls": ["https://your.cdn.com/camera-motion.mp4"],
      "audio_urls": [],
      "duration": 8,
      "resolution": "720p"
    }
  }'

Request-parameters

Parameternamen, enum-waarden, endpoint-paden en voorbeelden maken deel uit van het API-contract. De onderstaande beschrijvingen leggen de werking van elk veld uit.

Headers

HeaderVereistBeschrijvingVoorbeeld
AuthorizationJaBearer API-sleutel die wordt gebruikt om het verzoek te verifiëren.Bearer sk_live_xxx
Content-TypeJaAlle schrijfbewerkingen gebruiken JSON.application/json

Velden op het hoogste niveau

VeldTypeVereistStandaardBereik / EnumModiVoorbeeld
model

Modelvariant die wordt gebruikt voor de generatie. Gebruik seedance-2-5 voor Seedance 2.5, seedance-2-0 voor Seedance 2.0, seedance-2-0-fast voor Seedance 2.0 Fast of seedance-2-0-mini voor Seedance 2.0 Mini.

stringJa-seedance-2-5 | seedance-2-0 | seedance-2-0-fast | seedance-2-0-minialleseedance-2-5
callback_url

HTTPS-endpoint dat de callbacks voor voltooide of mislukte taken ontvangt.

stringNee-HTTPS-URL, geen privénetwerkenallehttps://your-domain.com/hook
input

Generatie-instellingen en mediareferenties.

objectJa--alle-

input.* velden

VeldTypeVereistStandaardBereik / EnumModiVoorbeeld
input.prompt

Tekstprompt die de te maken video beschrijft.

stringJa-niet-lege tekstallea cat surfing
input.generation_type

Generatiemodus. Standaard ingesteld op text-to-video.

stringNeetext-to-videotext-to-video | image-to-video | reference-to-video-image-to-video
input.image_urls

Publiek toegankelijke afbeelding-URL's. Stuur voor afbeelding-naar-video 1 afbeelding mee voor het eerste frame, of 2 afbeeldingen voor het eerste en laatste frame. Voor referentie-naar-video accepteert Seedance 2.5 maximaal 30 afbeeldingen en Seedance 2.0 maximaal 9.

string[]Voorwaardelijk[]Afbeelding-naar-video: 1 of 2 afbeeldingen. Referentie-naar-video: maximaal 30 voor Seedance 2.5; maximaal 9 voor Seedance 2.0.image-to-video / reference-to-video["https://.../a.jpg"]
input.video_urls

Publiek toegankelijke referentievideo's, uitsluitend voor referentie-naar-video. Seedance 2.5 accepteert maximaal 10 video's van elk 2-30 seconden met een gecombineerde afspeeltijd van <= 30 seconden. Seedance 2.0 accepteert maximaal 3 video's met een gecombineerde afspeeltijd van <= 15 seconden.

string[]Nee[]Seedance 2.5: maximaal 10 video's, elk 2-30 seconden, gecombineerde duur <= 30 seconden. Seedance 2.0: maximaal 3, gecombineerde duur <= 15 seconden.reference-to-video[]
input.audio_urls

Publiek toegankelijke referentie-audiobestanden, uitsluitend voor referentie-naar-video. Seedance 2.5 accepteert maximaal 10 audiobestanden van elk 2-30 seconden met een gecombineerde afspeeltijd van <= 30 seconden en staat uitsluitend audio-referenties toe. Seedance 2.0 accepteert maximaal 3 audiobestanden met een gecombineerde afspeeltijd van <= 15 seconden.

string[]Nee[]Seedance 2.5: maximaal 10 audiobestanden, elk 2-30 seconden, gecombineerde duur <= 30 seconden. Seedance 2.0: maximaal 3, gecombineerde duur <= 15 seconden.reference-to-video[]
input.duration

Duur van de gegenereerde video in seconden.

intNee5Seedance 2.5: 4-30 seconden. Seedance 2.0: 4-15 seconden.alle5
input.aspect_ratio

Aspect ratio van de output. Met adaptive bepaalt de service zelf de beste verhouding. Seedance 2.5 afbeelding-naar-video ondersteunt alleen adaptive.

stringNeeadaptive16:9 | 4:3 | 1:1 | 3:4 | 9:16 | 21:9 | adaptivealle16:9
input.resolution

Resolutieniveau van de output.

stringNee720pSeedance 2.5: 480p | 720p | 1080p. Seedance 2.0: 480p | 720p | 1080p | 4k (afhankelijk van variant).alle720p
input.generate_audio

Bepaalt of het model audio moet genereren indien dit wordt ondersteund.

booleanNeetruetrue | falsealletrue
input.watermark

Bepaalt of er een watermerk moet worden toegevoegd.

booleanNeefalsetrue | falseallefalse
input.web_search

Bepaalt of zoeken op het web mag worden gebruikt ter verrijking, indien ondersteund.

booleanNeefalsetrue | falseallefalse
input.return_last_frame

Bepaalt of de URL van het laatste frame moet worden geretourneerd indien beschikbaar.

booleanNeefalsetrue | falseallefalse
input.seed

Determinische seed voor Seedance 2.0-varianten. Seedance 2.5 ondersteunt dit veld niet; laat dit veld weg.

intNee-1-1 of 0-4294967295alle-1

Het aantal credits varieert op basis van resolutie, duur, model en of referentie-naar-video video-referenties bevat. De creditwaarde die in de response van het aanmaken wordt geretourneerd, is het daadwerkelijk gereserveerde bedrag voor die taak.

Bekijk credit-tarieven

Response

Dit is de succesvolle response van POST /v1/videos/generations. Dit betekent dat de taak is geaccepteerd en dat de credits zijn gereserveerd. Gebruik de geretourneerde taskId om de status te polleren via GET /v1/tasks/:id of om deze te koppelen aan een callback bij voltooiing of een fout.

Succesvolle response van POST /v1/videos/generations

{
  "taskId": "3f2aK9mR...",
  "credits": 100
}

Taakstatus ophalen

Gebruik GET /v1/tasks/:id om de huidige status van een taak op te halen. Poll niet vaker dan één keer per 10 seconden. Voor productiesystemen wordt het gebruik van webhooks aanbevolen.

curl https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
  -H "Authorization: Bearer sk_live_xxx"

Response bij voltooide taak

{
  "id": "3f2aK9mR...",
  "status": "completed",
  "created_at": 1781234567,
  "model": "seedance-2-5",
  "billing_status": "charged",
  "credits": 100,
  "failed_reason": null,
  "data": {
    "results": ["https://cdn.seevio.ai/.../x.mp4"],
    "video_expires_at": "2026-06-13T10:00:00Z",
    "last_frame_url": null,
    "processing_time": 48
  }
}

Response bij mislukte taak

{
  "id": "3f2aK9mR...",
  "status": "failed",
  "created_at": 1781234567,
  "model": "seedance-2-5",
  "billing_status": "refunded",
  "credits": 100,
  "failed_reason": "provider_failed"
}
WaardeBetekenis
status=queuedGeaccepteerd en wachtend op indiening of verwerking.
status=generatingDe provider is bezig met het genereren van de video.
status=completedVideo succesvol gegenereerd; data.results bevat de URL van het resultaat.
status=failedGeneratie mislukt of time-out opgetreden.
billing_status=reservedCredits zijn gereserveerd zolang de taak in uitvoering is.
billing_status=chargedTaak geslaagd en de credit-reservering is definitief afgerekend.
billing_status=refundedTaak mislukt of time-out opgetreden; de gereserveerde credits zijn teruggestort.
billing_status=refund_failedTerugstorting mislukt; handmatige afhandeling is vereist.

Na video_expires_at is data.results leeg. Download en sla het bestand op voordat de geldigheidsperiode verloopt.

Webhooks

Wanneer callback_url is opgegeven, roept Seedance je endpoint aan zodra de taak is voltooid of mislukt, en stuurt JSON-data met de definitieve resultaten. Als je endpoint een non-2xx statuscode retourneert of niet binnen 15 seconden reageert, wordt de poging tot maximaal 5 keer herhaald. Bij herhalingen wordt hetzelfde task id gebruikt, dus ontdubbel op basis van dit ID. Stuur direct een 200-response zodra je de callback-data veilig hebt opgeslagen.

Callback bij voltooide taak

{
  "id": "3f2aK9mR...",
  "status": "completed",
  "created_at": 1781234567,
  "model": "seedance-2-5",
  "data": {
    "results": ["https://cdn.seevio.ai/.../x.mp4"],
    "video_expires_at": "2026-06-13T10:00:00Z",
    "last_frame_url": null,
    "processing_time": 48
  }
}

Callback bij mislukte taak

{
  "id": "3f2aK9mR...",
  "status": "failed",
  "created_at": 1781234567,
  "model": "seedance-2-5",
  "data": {
    "failed_reason": "provider_failed",
    "credits_refunded": 100
  }
}
export async function POST(request: Request) {
  const callbackData = await request.json();

  if (callbackData.status === "completed") {
    const videoUrl = callbackData.data.results[0];
    // Save the video URL or update your own task record here.
  }

  if (callbackData.status === "failed") {
    const errorMessage = callbackData.data.failed_reason;
    // Mark your own task record as failed here.
  }

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

Valideer de structuur van de callback-data, ontdubbel op basis van ID, werk je eigen taakgegevens bij en reageer snel.

De callback_url moet HTTPS gebruiken en mag niet verwijzen naar private, loopback- of link-local netwerken.

Foutmeldingen

POST /v1/videos/generations en GET /v1/tasks/:id retourneren deze foutstructuur wanneer de API-aanroep zelf mislukt, zoals bij ongeldige parameters, een ongeldige API-sleutel, onvoldoende credits, rate limiting of wanneer de taak niet is gevonden. Sommige foutmeldingen bevatten extra velden zoals required, available of retry_after, afhankelijk van de situatie.

{
  "error": {
    "code": "insufficient_credits",
    "message": "Not enough credits for this task.",
    "required": 100,
    "available": 12
  }
}
CodeHTTPBetekenisOpnieuw proberen?
invalid_request400Ontbrekende of ongeldige parameters.Nee, pas de aanvraag aan.
invalid_api_key401API-sleutel ontbreekt, is ongeldig of is ingetrokken.Nee, gebruik een geldige sleutel.
insufficient_credits402Onvoldoende credits. De taak is niet geaccepteerd en er zijn geen credits afgeschreven.Na opwaarderen.
forbidden403API-sleutel heeft niet de vereiste rechten (scope).Nee.
not_found404De taak bestaat niet of is niet van de eigenaar van de API-sleutel.Nee.
rate_limited429Maximum aantal aanvragen overschreden.Ja, volg de Retry-After-header.
internal_error500Interne serverfout.Ja, probeer het later opnieuw.

Rate limits

Rate limits worden per API-sleutel toegepast op basis van een sliding window. Voor generaties geldt een standaardlimiet van 100 aanvragen per minuut; statusopvragingen zijn ruimer ingesteld. HTTP 429-responses bevatten een Retry-After-header.

Generatie

100/min

Status opvragen

Ruimer ingesteld

429-header

Retry-After

Facturatie & credits

De API werkt op basis van reservering bij indiening, afschrijving bij succes en terugstorting bij fouten. De verbruikspagina's in het dashboard tonen de geschiedenis van je API-credits, taaklogboeken en verbruiksstatistieken over tijd.

Gereserveerd

Credits worden gecontroleerd en gereserveerd zodra de taak is geaccepteerd.

Afgeschreven

Bij succesvol voltooide taken wordt de openstaande reservering definitief afgerekend.

Teruggestort

Bij mislukte of verlopen taken worden de gereserveerde credits automatisch teruggestort.

Analyseer je verbruik in het dashboard

Bekijk API-logs, taaktijdlijnen, credit-geschiedenis en verbruiksstatistieken over tijd.

API-logs