Seedance 2.0 API

Bouw videogeneratie in uw product met het maken van asynchrone taken, status polling, webhooks en credit-gebaseerde facturatie.

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

Introductie

De API stelt u in staat om Seedance 2.0 videogeneratietaken programmatisch in te dienen. Generatie is asynchroon: creëer een taak, ontvang onmiddellijk een taak-ID, en verkrijg vervolgens de voltooide video door het taakeindpunt te peilen of door een webhook te ontvangen.

Asynchrone taken

Polling werkt goed voor ontwikkeling en eenvoudige integraties.

Webhook klaar

Webhooks worden aanbevolen voor productie omdat ze agressieve polling vermijden en uw service op de hoogte stellen wanneer een taak een terminalstatus bereikt.

Credietbewust

Credits worden gereserveerd bij inzending. Succesvolle taken worden van die reservering afgeschreven; mislukte of time-out taken worden automatisch terugbetaald.

Authenticatie

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

Authorization: Bearer sk_live_xxxxxxxx
sk_live_

Gebruik sk_live_-sleutels voor productieverkeer.

sk_test_

Gebruik sk_test_-sleutels voor sandbox integratietests met hetzelfde API-contract.

401

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

Snelstart

Dien eerst een taak in. Nadat de taak is geaccepteerd, kiest u een methode voor het leveren van resultaten: peil het taakeindpunt, of ontvang het terminale resultaat via een webhook.

Een taak indienen

Maak een asynchrone videotask aan en ontvang onmiddellijk een taak-ID.

curl https://api.seedance2.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-0",
    "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": "720p",
      "generate_audio": true,
      "watermark": false,
      "web_search": false,
      "return_last_frame": false,
      "seed": -1
    }
  }'
Resultaatoptie: Polling

Haal het taakstatus-eindpunt op wanneer uw integratie expliciete polling verkiest.

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

Geef callback_url door bij het indienen van de taak, en ontvang vervolgens voltooiings- of mislukte callbacks en update uw eigen taakrecord.

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 });
}

Een videotask aanmaken

Creëer een videotask met POST /v1/videos/generations. De request body heeft een top-level model, een optionele callback_url, en een input object met prompt en generatie-instellingen.

POST
/v1/videos/generations
curl https://api.seedance2.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-0",
    "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": "720p",
      "generate_audio": true,
      "watermark": false,
      "web_search": false,
      "return_last_frame": false,
      "seed": -1
    }
  }'

Generatiemodi

generation_type bepaalt welke mediainvoer wordt geaccepteerd en hoe het model deze interpreteert.

ModusVereiste mediaOptionele mediaOpmerkingen
text-to-videopromptduur, beeldverhouding, resolutie, seedAlleen tekstprompt. image_urls, video_urls en audio_urls zijn niet nodig.
image-to-videoprompt + image_urls array (1-2 afbeeldings-URL's)duur, beeldverhouding, resolutie, seedimage_urls moet een array zijn. Geef 1 afbeeldings-URL op voor het eerste frame, of 2 afbeeldings-URL's voor het eerste en laatste frame. Video en audio worden genegeerd.
reference-to-videoprompt + ten minste één afbeelding of videoafbeeldingen, video's en audio binnen materiële limietenAudio kan niet alleen met tekst worden gebruikt. Voeg ten minste één afbeelding of video toe wanneer audio wordt geleverd.
text-to-video

Gebruik tekst-naar-video wanneer de prompt de enige creatieve invoer is. (text-to-video)

curl https://api.seedance2.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-0",
    "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": "720p",
      "generate_audio": true,
      "watermark": false,
      "web_search": false,
      "return_last_frame": false,
      "seed": -1
    }
  }'
image-to-video

Gebruik afbeelding-naar-video wanneer input.image_urls een array is met 1-2 afbeeldings-URL's: één URL stelt het eerste frame in, en twee URL's stellen het eerste en laatste frame in. Video- en audio-referenties worden in deze modus genegeerd. (image-to-video)

curl https://api.seedance2.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-0",
    "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 rijkere sturing met referentieafbeeldingen, -video's en -audio. Audio kan niet alleen met tekst worden gebruikt; voeg ten minste één afbeelding of video toe wanneer audio wordt geleverd. (reference-to-video)

Materiële limieten

  • Tot 9 referentieafbeeldingen
  • Tot 3 referentievideo's, totale duur <= 15 seconden
  • Tot 3 referentieaudiobestanden, totale duur <= 15 seconden
  • Maximaal 12 materialen in totaal over alle typen

Ondersteunde invoercombinaties

Tekst + Afbeelding
Tekst + Video
Tekst + Afbeelding + Video
Tekst + Afbeelding + Audio
Tekst + Video + Audio
Tekst + Afbeelding + Video + Audio
curl https://api.seedance2.ai/v1/videos/generations \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-0",
    "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": "1080p"
    }
  }'

Verzoekparameters

Parameternamen, opsommingswaarden, eindpuntpaden en voorbeelden maken deel uit van het API-contract. De onderstaande beschrijvingen leggen uit hoe elk veld zich gedraagt.

Headers

HeaderVereistBeschrijvingVoorbeeld
AuthorizationJaBearer API-sleutel gebruikt om het verzoek te authentiseren.Bearer sk_live_xxx
Content-TypeJaAlle schrijfverzoeken gebruiken JSON.application/json

Top-level velden

VeldTypeVereistStandaardBereik / OpsommingModiVoorbeeld
model

Modelvariant gebruikt voor generatie.

stringJa-seedance-2-0 | seedance-2-0-fastalleseedance-2-0
callback_url

HTTPS-eindpunt dat task voltooiings- en mislukte callbacks ontvangt.

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

Generatie-instellingen en mediareferenties.

objectJa--alle-

input.* velden

VeldTypeVereistStandaardBereik / OpsommingModiVoorbeeld
input.prompt

Tekstprompt die de te maken video beschrijft.

stringJa-niet-lege tekstallea cat surfing
input.generation_type

Generatiemodus. Standaard tekst-naar-video. (text-to-video)

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

Openbaar bereikbare afbeeldings-URL's. Voor afbeelding-naar-video, stuur 1 afbeelding voor het eerste frame of 2 afbeeldingen voor het eerste en laatste frame. Voor referentie-naar-video, stuur tot 9 afbeeldingen als visuele referenties. (image-to-video) (reference-to-video)

string[]Conditioneel[]Afbeelding-naar-video: 1 of 2 afbeeldingen. Referentie-naar-video: tot 9 afbeeldingen. (image-to-video) (reference-to-video)image-to-video / reference-to-video["https://.../a.jpg"]
input.video_urls

Openbaar bereikbare referentievideo's alleen voor referentie-naar-video. U kunt tot 3 videobestanden verzenden, en hun gecombineerde afspeeltijd moet 15 seconden of minder zijn. (reference-to-video)

string[]Nee[]Tot 3 video's. Gecombineerde videolengte moet 15 seconden of minder zijn.reference-to-video[]
input.audio_urls

Openbaar bereikbare referentie audiobestanden alleen voor referentie-naar-video. U kunt tot 3 audiobestanden verzenden, en hun gecombineerde afspeeltijd moet 15 seconden of minder zijn. (reference-to-video)

string[]Nee[]Tot 3 audiobestanden. Gecombineerde audiolengte moet 15 seconden of minder zijn.reference-to-video[]
input.duration

Output videolengte in seconden.

intNee54-15 secondenalle5
input.aspect_ratio

Output beeldverhouding. adaptive laat de service de beste verhouding afleiden.

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

Output resolutieniveau.

stringNee720p480p | 720p | 1080palle720p
input.generate_audio

Of het model audio moet genereren wanneer ondersteund.

booleanNeetruetrue | falsealletrue
input.watermark

Of een watermerk moet worden toegevoegd.

booleanNeefalsetrue | falseallefalse
input.web_search

Of webzoekopdrachtaugmentatie moet worden toegestaan wanneer ondersteund.

booleanNeefalsetrue | falseallefalse
input.return_last_frame

Of de URL van het laatste frame moet worden geretourneerd wanneer beschikbaar.

booleanNeefalsetrue | falseallefalse
input.seed

Deterministische seed. Gebruik -1 voor een willekeurige seed.

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

Credits variëren per resolutie, duur, model en of referentie-naar-video videoreferenties bevat. De creditwaarde die wordt geretourneerd door de aanmaakrespons is het daadwerkelijke gereserveerde bedrag voor die taak. (reference-to-video)

Bekijk creditprijzen

Antwoord

Dit is de succesrespons van POST /v1/videos/generations. Het betekent dat de taak is geaccepteerd en credits zijn gereserveerd. Gebruik de geretourneerde taskId om GET /v1/tasks/:id te peilen of om een voltooiings- of mislukte callback te matchen.

POST /v1/videos/generations succesrespons

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

Taskstatus ophalen

Gebruik GET /v1/tasks/:id om de huidige taakstatus op te halen. Peil niet meer dan eens per 10 seconden. Voor productiesystemen, geef de voorkeur aan webhooks.

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

Voltooide taakrespons

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

Mislukte taakrespons

{
  "id": "3f2aK9mR...",
  "status": "failed",
  "created_at": 1781234567,
  "model": "seedance-2-0",
  "billing_status": "refunded",
  "credits": 60,
  "failed_reason": "provider_failed"
}
WaardeBetekenis
status=queuedGeaccepteerd en wachtend om te worden ingediend of verwerkt.
status=generatingProvider verwerkt de generatie.
status=completedVideo voltooid en data.results bevat de resultaat-URL.
status=failedGeneratie mislukt of time-out.
billing_status=reservedCredits zijn gereserveerd terwijl de taak bezig is.
billing_status=chargedTaak geslaagd en de reservering is afgehandeld.
billing_status=refundedTaak mislukt of time-out en credits zijn teruggestort.
billing_status=refund_failedTerugstortingstransactie mislukt en vereist handmatige afhandeling.

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

Webhooks

Wanneer callback_url aanwezig is, roept Seedance uw eindpunt aan wanneer de taak is voltooid of mislukt, en stuurt JSON-gegevens die het uiteindelijke resultaat beschrijven. Als uw eindpunt een niet-2xx-respons retourneert of niet binnen 15 seconden reageert, wordt de levering maximaal 5 keer opnieuw geprobeerd. Nieuwe pogingen gebruiken dezelfde taak-ID, dus dedupliceer op ID. Retourneer een 200-respons zodra u de callback-gegevens veilig hebt opgeslagen.

Callback voor taakvoltooiing

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

Callback voor taakfout

{
  "id": "3f2aK9mR...",
  "status": "failed",
  "created_at": 1781234567,
  "model": "seedance-2-0",
  "data": {
    "failed_reason": "provider_failed",
    "credits_refunded": 60
  }
}
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 callback-gegevensstructuur, dedupliceer op ID, werk uw eigen taakrecord bij en reageer snel.

callback_url moet HTTPS zijn en mag niet verwijzen naar privé-, loopback- of link-lokale netwerkbereiken.

Fouten

POST /v1/videos/generations en GET /v1/tasks/:id retourneren deze foutstructuur wanneer de API-aanvraag zelf mislukt, zoals ongeldige parameters, ongeldige API-sleutel, onvoldoende credits, rate limiting, of taak niet gevonden. Sommige fouten 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": 60,
    "available": 12
  }
}
CodeHTTPBetekenisOpnieuw proberen?
invalid_request400Ontbrekende of ongeldige parameters.Nee, corrigeer het verzoek.
invalid_api_key401API-sleutel ontbreekt, is ongeldig of is ingetrokken.Nee, gebruik een geldige sleutel.
insufficient_credits402Niet genoeg credits. De taak wordt niet geaccepteerd of in rekening gebracht.Na opladen.
forbidden403API-sleutel mist de vereiste scope.Nee.
not_found404Taak bestaat niet of behoort niet toe aan de sleuteleigenaar.Nee.
rate_limited429Verzoekfrequentie overschreden.Ja, volg Retry-After.
internal_error500Serverfout.Ja, probeer later opnieuw.

Rate limits

Rate limits worden per API-sleutel toegepast met een sliding window. Generatie is standaard 60 verzoeken per minuut; statusvragen zijn toleranter. HTTP 429-antwoorden bevatten Retry-After.

Generatie

60/min

Statusvragen

Toleranter

429 header

Retry-After

Facturering & credits

De API gebruikt reserve met submit, charge op succes, en refund bij mislukking. Dashboard gebruikslogboeken tonen API-credithistorie, taaklogs en tijdsgebonden gebruiksstatistieken.

Gereserveerd

Credits worden gecontroleerd en gereserveerd wanneer de taak wordt geaccepteerd.

In rekening gebracht

Voltooide taken verrekenen de bestaande reservering.

Terugbetaald

Mislukte of getimede taken retourneren de gereserveerde credits automatisch.

Gebruik controleren in het dashboard

Bekijk API-logs, taaktijdlijnen, credithistorie en tijdsgebonden gebruiksstatistieken.

API-logs