Hoppa till dokumentation
På denna sida

Seedance 2.5

Generera videor med Seedance 2.5 med hjälp av text, första och sista bildrutan eller multimodala referenser. Den här sidan täcker hela arbetsflödet från anrop till resultat för denna modell.

Modell-ID för API: seedance-2-5

Genereringen sker asynkront. Spara det taskId som returneras när du skapar en uppgift, och fråga sedan efter dess status eller ta emot en webhook.

Funktioner

FunktionTillåtna värden
Upplösning480p · 720p · 1080p
Längd4–30 sekunder
Bildformat16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive
ReferensbilderUpp till 30 bilder
ReferensvideorUpp till 10 videor
ReferensljudfilerUpp till 10 ljudfiler
Alla referenser totaltUpp till totalt 50 referensfiler
Total längd per video-/ljudgrupp30 sekunder
seedStöds ej
Accepterar även duration=-1 i referens-till-video-läge; se videoredigering och prissättning nedan. image-to-video stöder endast adaptive; utelämna detta fält eller sätt det till adaptive.

Priser och krediter

Videogenerering debiteras i krediter baserat på den fakturerbara längden i sekunder. Utan videoinmatning är den fakturerbara längden lika med utgandets längd. Med videoinmatning inkluderas även referensvideons längd.

Utkast debiteras enligt 480p-priserna ovan, inklusive eventuell referensvideo. Slutversioner debiteras enligt det fasta priset för 1080p (endast utdata) på 30 krediter/sekund; referensvideon debiteras inte igen. Till exempel kostar ett utkast på 5 sekunder utan referensvideo 50 krediter, och en slutversion på 5 sekunder kostar ytterligare 150 krediter.

Tabellen nedan visar antalet krediter som debiteras per sekund, inte den totala kostnaden för en uppgift. Tariffen beror på modell, utgångsupplösning och om referensvideor används i referens-till-video-läget. Se formlerna och exemplen under tabellen för hur den totala kostnaden beräknas.

UpplösningUtan video som indataMed video som indata
480p10 krediter/sekund6 krediter/sekund
720p20 krediter/sekund12 krediter/sekund
1080p30 krediter/sekund20 krediter/sekund
  • Utan video som indata: antal sekunder utdata × pris utan video.
  • Med video som indata: (antal sekunder utdata + uppmätta sekunder för referensvideo) × pris med video. Servern mäter den totala längden på referensvideon och avrundar uppåt till hela sekunder innan debitering sker.
  • Bilder eller enbart ljudreferenser använder priset utan video. Priset med video tillämpas endast i referens-till-video-läge när videoreferenser skickas med.

Exempel på kostnadsberäkning

5 sekunders text-till-video i 720p: 5 × 20 = 100 krediter.

5 sekunders utdata i 720p med en 5 sekunder lång referensvideo: (5 + 5) × 12 = 120 krediter.

Dessa krediter dras i förväg när uppgiften skapas. Om uppgiften slutförs framgångsrikt är detta den slutgiltiga kostnaden. Summan kommer inte att höjas eller delvis återbetalas baserat på den faktiska speltiden för den genererade videon. Misslyckade uppgifter eller uppgifter som tidsavbryts återbetalas i sin helhet.

Krediter reserveras när anropet skickas och dras när uppgiften lyckas. Uppgifter som misslyckas eller gör timeout återbetalas automatiskt. Betalningsstatusen refund_failed innebär att återbetalningen inte kunde slutföras; kontrollera API-loggarna eller kontakta support.

Hur krediter debiteras när duration=-1

När varaktigheten är inställd på -1 är den slutliga speltiden inte fast, utan bestäms helt av modellen.

I de flesta fall bör du ställa in varaktigheten till den faktiska videolängd du behöver i stället för -1. Vi rekommenderar att du endast använder -1 för videoredigering, och inte för andra typer av videoskapande.

ReferensfilerHur debiteringen beräknasExempel
Med referensvideorLägg ihop speltiden för alla referensvideor och runda av uppåt till närmaste hel sekund. Låt oss kalla detta för T. Debiteringen blir (T + T) × priset med video: det ena T:et motsvarar den uppskattade speltiden för den genererade videon, och det andra motsvarar referensvideons speltid.720p med en referensvideo på 5 sekunder: (5 + 5) × 12 = 120 krediter.
Utan referensvideor (endast bilder eller ljud)30 sekunder används som uppskattad speltid för den genererade videon. Debiteringen blir 30 × priset utan video.720p utan referensvideor: 30 × 20 = 600 krediter.

Autentisering

Skapa en API-nyckel i instrumentpanelen. Den fullständiga nyckeln visas bara en gång. Spara den säkert på din server och skicka den som en Bearer-token i varje anrop.

Bas-URL

https://api.seevio.ai
Authorization: Bearer sk_live_your_api_key
Content-Type: application/json

Sätt miljövariabeln SEEVIO_API_KEY innan du kör dessa exempel. JavaScript-exemplen körs på din server med Node.js; Python-exemplen använder requests-paketet.

Snabbstart

Skicka detta minimala anrop, spara det returnerade taskId-värdet och använd sedan exemplet för statuskontroll nedan. Kreditvärdet i svaret är det belopp som reserveras.

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-5",
  "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
  }
}'

Exempel på svar vid skapande av uppgift

När begäran ovan har godkänts returnerar API:et detta JSON-svar. taskId är det ID som används för efterföljande statusförfrågningar, och credits är antalet krediter som reserverats för uppgiften. Svaret bekräftar endast att uppgiften har skapats, inte att videon är klar. Du behöver göra regelbundna anrop för att kontrollera status eller använda en webhook för att ta emot videoresultatet.

{
  "taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "credits": 100
}

Skapa en uppgift

POST https://api.seevio.ai/v1/videos/generations

Skicka ett JSON-objekt som innehåller model och input, samt en valfri callback_url. Ange alltid det exakta modell-ID som visas på denna sida; om model utelämnas väljs seedance-2-0.

Anropskropp

FältTypObligatoriskBeskrivning och begränsningar
model
stringJa

Modell-ID. För att använda Seedance 2.5, ange seedance-2-5 i detta fält.

callback_url
stringNej

Offentlig HTTPS-slutpunkt för POST-callbacks vid slutförda eller misslyckade uppgifter. Privata nätverk och localhost är inte tillåtna.

Exempel: https://example.com/webhooks/seevio
input
objectJa

Genereringsinställningar. Måste innehålla en prompt som inte är tom.

Indataparametrar

image_urls krävs i image-to-video. reference-to-video kräver minst en referens i antingen image_urls, video_urls eller audio_urls.
När draft_task_id används ska du utelämna prompt, generation_type, image_urls, video_urls, audio_urls, duration, aspect_ratio, seed, generate_audio, web_search och omni_reference_task_type, även om deras värden matchar utkastet. Dessa inställningar ärvs automatiskt. Kombinera inte draft=true med draft_task_id.

Ange image_urls, video_urls och audio_urls som matriser av URL-strängar (string[]). Alla angivna webbadresser måste vara offentligt tillgängliga via HTTPS, inklusive media som ignoreras av det valda läget.

FältTypObligatoriskStandardBeskrivning och begränsningar
input.draft
booleanNejfalse

Skapa en utkastförhandsvisning i 480p. Endast för Seedance 2.5. Kan inte kombineras med draft_task_id.

Tillåtna värden
true | false
input.draft_task_id
stringNej—

Skapa en slutversion i 1080p från ett slutfört API-utkast som tillhör ditt konto och skapats för mindre än 7 dagar sedan. Ange det taskId som returnerades av API:et och utelämna ärvda genereringsfält.

Exempel: 3f2aK9mR7xQp4TnZ8bLc6YwH
input.output_format
stringNejmp4

Filbehållare för video. Stöder mp4 och mov, även för utkast och slutversioner.

Tillåtna värden
mp4 | mov
input.prompt
stringVillkorlig—

Obligatorisk för vanlig generering och för att skapa utkast. Skicka inte med detta fält när du genererar en slutversion med draft_task_id; utkastets prompt ärvs automatiskt.

Exempel: A cat surfing at sunset
input.generation_type
stringNejtext-to-video

text-to-video använder endast prompten; image-to-video använder 1–2 bilder; reference-to-video använder bild-, video- och/eller ljudreferenser.

Tillåtna värden
text-to-video | image-to-video | reference-to-video
input.image_urls
string[]Villkorlig[]

image-to-video: 1 bild för den första rutan, eller 2 sorterade bilder för den första och sista rutan. reference-to-video: upp till 30 bilder. Ignoreras i text-to-video.

Exempel: ["https://example.com/first-frame.jpg"]
input.video_urls
string[]Villkorlig[]

Skickas endast vidare i reference-to-video; upp till 10 videor och totalt 30 sekunder. Ignoreras i andra lägen.

Exempel: ["https://example.com/source.mp4"]
input.audio_urls
string[]Villkorlig[]

Skickas endast vidare i reference-to-video; upp till 10 ljudfiler och totalt 30 sekunder. Ignoreras i andra lägen.

Exempel: ["https://example.com/music.mp3"]
input.duration
integerNej5

Videolängd: 4–30 sekunder, standard är 5. duration=-1 accepteras för utkast och i referens-till-video-läge. Utelämna fältet för en slutversion; det ärvs från utkastet.

Tillåtna värden
-1 | 4–30
Exempel: 5
input.aspect_ratio
stringNejadaptive

Bildformat för utdata. Genom att ange adaptive låter du modellen bestämma formatet. image-to-video stöder endast adaptive; utelämna detta fält eller sätt det till adaptive.

Tillåtna värden
16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive
Exempel: adaptive
input.resolution
stringNej720p

Vanlig generering är som standard 720p. Utkast stöder endast 480p (standard för utkast). Slutversioner stöder endast 1080p (standard för slutversion).

Tillåtna värden
480p | 720p | 1080p
Exempel: 720p
input.generate_audio
booleanNejtrue

Begär generering av synkroniserat ljud.

Tillåtna värden
true | false
Exempel: true
input.watermark
booleanNejfalse

Begär en AI-vattenstämpel på den genererade videon.

Tillåtna värden
true | false
Exempel: false
input.web_search
booleanNejfalse

Tillåt webbsökning om modellen stöder det.

Tillåtna värden
true | false
Exempel: false
input.return_last_frame
booleanNejfalse

Begär den sista bildrutan. Svaret på statusfrågan innehåller data.last_frame_url när rutan är tillgänglig; annars är värdet null.

Tillåtna värden
true | false
Exempel: true

Booleska fält måste vara JSON-värdena true eller false, inte strängar eller siffror.

Svar vid skapande

HTTP 200 returnerar taskId (sträng) och credits (nummer). Detta bekräftar att uppgiften har skapats, inte att den är färdig. Beloppet nedan motsvarar snabbstarten på 5 sekunder i 720p.

{
  "taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "credits": 100
}

Utkastförhandsvisning → 1080p slutversion

Seedance 2.5 stöder ett arbetsflöde i två steg: generera först ett utkast (Draft) i 480p för att kontrollera det visuella och rörelserna, och återanvänd det sedan för att skapa en slutgiltig version i 1080p. Båda stegen använder POST /v1/videos/generations och skapar separata, debiterbara uppgifter.

Utkastläget kan minska kostnaden när du vill testa olika idéer. Istället för att generera varje försök i 1080p kan du skapa flera billigare utkast i 480p, välja det du gillar bäst och sedan använda det utkastet för att generera en slutversion i 1080p. Det gör att du kan utforska olika resultat till en lägre kostnad innan du betalar för den högupplösta versionen.

Använd ett slutfört utkast (Draft) inom 7 dagar från att det skapades för att generera en slutversion. Utkastet måste tillhöra samma API-konto. Använd det taskId som returneras av detta API.

1. Generera ett utkast i 480p

Sätt input.draft=true och ange prompt, referenser och genereringsinställningar som vanligt. Upplösningen är som standard 480p i utkastläge; andra upplösningar avvisas. Du kan aktivera return_last_frame för utkastet, som visas nedan.

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-5",
  "input": {
    "prompt": "A cat surfing at sunset, cinematic lighting",
    "draft": true,
    "duration": 5,
    "resolution": "480p",
    "return_last_frame": true
  }
}'
{
  "taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "credits": 50
}

2. Vänta på att utkastet blir klart

Spara taskId från svaret och gör statuskontroller mot GET /v1/tasks/TASK_ID tills status är completed. Svaret har is_draft=true; förhandsgranska videon i data.results. Den begärda sista bildrutan finns i data.last_frame_url när den är tillgänglig.

Du kan också ta emot en webhook när utkastet är klart. Ange callback_url på rotnivå i anropet när du skapar utkastet. När utkastet har slutförts skickas en avisering till den URL:en, och ditt system kan hantera anropet för att spara resultatet, uppdatera statusen eller starta nästa steg i din process. Se avsnittet om Webhooks på den här sidan för information om webhook-formatet.

curl --fail-with-body https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
  -H "Authorization: Bearer $SEEVIO_API_KEY"
{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652800,
  "model": "seedance-2-5",
  "is_draft": true,
  "draft_task_id": null,
  "status": "completed",
  "billing_status": "charged",
  "credits": 50,
  "failed_reason": null,
  "data": {
    "results": [
      "https://cdn.seevio.ai/api/videos/example.mp4"
    ],
    "video_expires_at": "2026-09-07T00:00:00Z",
    "last_frame_url": "https://cdn.seevio.ai/api/images/draft-last-frame.jpg",
    "processing_time": 48
  }
}

3. Generera en slutversion i 1080p

Ersätt draft_task_id i detta exempel med ditt slutförda utkasts taskId. Slutversionen ärver utkastets innehåll och längd. Upplösningen är som standard 1080p och inga andra upplösningar accepteras. output_format, watermark och return_last_frame kan ställas in oberoende för varje slutversion; callback_url anges fortfarande på rotnivå.

När draft_task_id används ska du utelämna prompt, generation_type, image_urls, video_urls, audio_urls, duration, aspect_ratio, seed, generate_audio, web_search och omni_reference_task_type, även om deras värden matchar utkastet. Dessa inställningar ärvs automatiskt. Kombinera inte draft=true med draft_task_id.
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-5",
  "input": {
    "draft_task_id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
    "resolution": "1080p",
    "output_format": "mp4",
    "watermark": false,
    "return_last_frame": true
  }
}'

Svaret innehåller ett nytt taskId för slutversionen. Kontrollera status på det nya ID:t eller vänta på dess webhook. Svaret för slutversionen har is_draft=false och draft_task_id satt till det ursprungliga utkastets API-uppgifts-ID. Det ursprungliga utkastet ligger kvar. Varje godkänt anrop för en slutversion skapar en ny, separat debiterad uppgift.

{
  "taskId": "final_7mQx2pN8kR4vT9cL6bW3",
  "credits": 150
}

Prissättning för utkast och slutversion

Utkast debiteras enligt 480p-priserna ovan, inklusive eventuell referensvideo. Slutversioner debiteras enligt det fasta priset för 1080p (endast utdata) på 30 krediter/sekund; referensvideon debiteras inte igen. Till exempel kostar ett utkast på 5 sekunder utan referensvideo 50 krediter, och en slutversion på 5 sekunder kostar ytterligare 150 krediter.

När duration=-1 reserverar både utkastet och slutversionen krediter för upp till 30 sekunders video, plus referensvideo för utkastet. När uppgiften är klar justeras debiteringen till den faktiska längden om den kan fastställas, och oanvända krediter återbetalas. En slutversion reserverar upp till 900 krediter.

En källfil som inte är klar, har löpt ut, inte är ett utkast eller saknar åtkomst avvisas med HTTP 400 (invalid_request). Ogiltig upplösning, ärvda fält som skickas med eller motstridiga utkastparametrar ger också HTTP 400. Otillräckliga krediter ger HTTP 402.

Genereringslägen och exempel

Ersätt exempel-URL:erna för media med egna, offentligt tillgängliga HTTPS-filer. Exempel-URL:erna visar endast anropets struktur och är inte nedladdningsbara filer.

Text till video

Generera från en textprompt. Medie-URL:er skickas inte vidare i detta läge.

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-5",
  "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
  }
}'

Första bildrutan

Ange en bild som första bildruta och beskriv sedan rörelsen i din 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-5",
  "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"
  }
}'

Första och sista bildrutan

Ange två bild-URL:er i ordning: först den första bildrutan, sedan den sista. Det här exemplet begär även den sista bildrutan från den genererade videon.

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-5",
  "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
  }
}'

Multimodal referens

Kombinera bild-, video- och ljudreferenser. Prompten är fortfarande obligatorisk. Video som indata ändrar debiteringsformeln.

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-5",
  "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"
  }
}'

Ljudreferens

Använd ljud som enda referenstyp, tillsammans med en obligatorisk textprompt som beskriver den önskade videon.

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-5",
  "input": {
    "prompt": "Create a coastal sunrise scene matching the rhythm of this audio.",
    "duration": 5,
    "resolution": "720p",
    "generation_type": "reference-to-video",
    "audio_urls": [
      "https://example.com/music.mp3"
    ]
  }
}'

Videoredigering

För videoredigering i Seedance 2.5 måste varaktigheten ställas in på -1 och bildförhållandet (aspect_ratio) på adaptive. Båda inställningarna krävs, annars kommer genereringen att misslyckas.

Beskriv ändringen och skicka med källvideon. Sätt duration=-1 och använd bildformatet adaptive. Använd ett källklipp på minst 4 sekunder för detta arbetsflöde. Debiteringsregeln för duration=-1 visas ovan.

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-5",
  "input": {
    "prompt": "Edit the source video: change the character’s coat to blue and preserve the camera movement.",
    "duration": -1,
    "resolution": "720p",
    "generation_type": "reference-to-video",
    "video_urls": [
      "https://example.com/source.mp4"
    ],
    "aspect_ratio": "adaptive"
  }
}'

Videoförlängning

För videoförlängning i Seedance 2.5 måste aspect_ratio ställas in på adaptive, annars kan genereringen misslyckas. Ange duration som vanligt för önskad längd på den genererade videon inom det intervall som stöds – du behöver inte använda -1.

Beskriv hur källvideon ska fortsätta. Använd bildformatet adaptive och ange en normal utdatalängd inom modellens tillåtna intervall.

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-5",
  "input": {
    "prompt": "Continue the camera movement from the source video, revealing a forest clearing.",
    "duration": 8,
    "resolution": "720p",
    "generation_type": "reference-to-video",
    "video_urls": [
      "https://example.com/source.mp4"
    ],
    "aspect_ratio": "adaptive"
  }
}'

Fråga efter en uppgift

GET https://api.seevio.ai/v1/tasks/{taskId}

Ersätt exempel-ID:t med det taskId som returnerades när uppgiften skapades. Statusfrågor returnerar endast uppgifter som tillhör API-nyckelns användare; okända eller oåtkomliga ID:n returnerar HTTP 404.

Gör en statuskontroll var 10:e till 20:e sekund som utgångspunkt. Vid HTTP 429 bör du vänta längre, och sluta när statusen är completed eller failed. Använd webhooks i produktionsmiljö. Varje kodexempel nedan utför en enskild sökning.

curl --fail-with-body https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
  -H "Authorization: Bearer $SEEVIO_API_KEY"
StatusBeskrivning och begränsningar
queuedMottagen och väntar på att köras.
generatingGenerering pågår.
completedLyckades. Ladda ner data.results innan giltighetstiden går ut.
failedMisslyckades. Kontrollera failed_reason och billing_status.
FältTypBeskrivning och begränsningar
idstring
Unikt ID för uppgiften. Detta är samma taskId som i svaret vid skapandet.
created_atnumber
Tidpunkt då uppgiften skapades, i Unix-sekunder.
modelstring
Det publika modell-ID som användes för uppgiften.
is_draftboolean
True för ett utkast i 480p; false för en slutversion eller en vanlig video.
draft_task_idstring | null
Källutkastets API-uppgifts-ID för en slutversion; null för utkast och vanliga videor.
billing_statusstring
reserved, charged, refunded eller refund_failed.
creditsnumber
Krediter reserverade för denna uppgift. Detta värde ligger kvar efter en återbetalning; kontrollera billing_status för att se det slutgiltiga debiteringsresultatet.
failed_reasonstring | null
Felorsak för misslyckade uppgifter; annars null. Misslyckade anrop utelämnar data-objektet.
dataobject
Finns med när uppgiften inte har misslyckats. Innehåller resultat och bearbetningsdetaljer.
data.resultsstring[]
En array med video-URL:er. Tom fram till att videon är klar, eller efter att videon har löpt ut.
data.video_expires_atstring | null
Tidpunkt då videon raderas, i ISO 8601-format, eller null innan den är tillgänglig. Spara resultatet före denna tidpunkt.
data.last_frame_urlstring | null
URL till den sista bildrutan om det begärts och är tillgängligt, annars null.
data.processing_timenumber | null
Leverantörens bearbetningstid i sekunder om tillgänglig, annars null.

Slutförd uppgift: svar på statusförfrågan med videoresultat

När statusförfrågan returnerar status=completed är videogenereringen klar. Hämta videons URL-adresser från data.results och ladda ner dem före data.video_expires_at. billing_status=charged visar att de reserverade krediterna har dragits.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652800,
  "model": "seedance-2-5",
  "is_draft": false,
  "draft_task_id": null,
  "status": "completed",
  "billing_status": "charged",
  "credits": 100,
  "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
  }
}

Misslyckad uppgift: svar på statusförfrågan med fel- och debiteringsinformation

När statusförfrågan returnerar status=failed har genereringen misslyckats. Läs failed_reason för att se orsaken och billing_status för återbetalningsresultatet. I detta exempel innebär refunded att krediterna har återförts. credits visar det ursprungliga reserverade beloppet, och svaret innehåller inte data.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652800,
  "model": "seedance-2-5",
  "is_draft": false,
  "draft_task_id": null,
  "status": "failed",
  "billing_status": "refunded",
  "credits": 100,
  "failed_reason": "provider_failed"
}

Webhooks

Ange callback_url i anropet för att ta emot en JSON-POST när uppgiften slutförs eller misslyckas. Svara med en 2xx-statuskod inom 15 sekunder. Misslyckade leveranser försöks igen; hantera dubbletter i din kod baserat på uppgiftens ID (idempotens).

Ditt callback-ändpunkt måste acceptera POST-anrop med JSON-body (Content-Type: application/json).

Skapa en uppgift med 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-5",
  "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"
}'

Uppgiften slutförd: callback-payload för lyckat anrop

När genereringen lyckas innehåller callback-anropet status=completed. Använd id för att identifiera uppgiften och data.results för att hämta videolänkarna. Ladda ner och spara resultaten före data.video_expires_at.

created_at är händelsens skapandetid; task_created_at är uppgiftens skapandetid, i Unix-sekunder. Exemplen visar rekommenderade fält; svar kan innehålla ytterligare fält.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652848,
  "model": "seedance-2-5",
  "status": "completed",
  "task_created_at": 1788652800,
  "billing_status": "charged",
  "credits": 100,
  "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
  }
}

Uppgiften misslyckades: callback-payload för misslyckat anrop

När genereringen misslyckas innehåller callback-anropet status=failed. Använd id för att identifiera uppgiften, failed_reason för felorsaken och credits_refunded för antalet återbetalade krediter.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652848,
  "model": "seedance-2-5",
  "status": "failed",
  "task_created_at": 1788652800,
  "billing_status": "refunded",
  "credits": 100,
  "failed_reason": "provider_failed",
  "credits_refunded": 100
}

Exempel på mottagarkod

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;
    // Record the failure reason and refunded credits for this task.
    console.error(callbackData.id, failed_reason, credits_refunded);
  }

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

Detta Next.js-exempel läser callback-anropets JSON-body och hanterar slutförda och misslyckade uppgifter direkt. Lägg till persistens och deduplicering av uppgifts-ID:n för din applikation. Köa långsamma processer innan du bekräftar callback-anropet.

Mediekrav och begränsningar

  • Alla medie- och callback-URL:er måste vara offentliga HTTPS-länkar. Undvik localhost, privata IP-adresser och filer som kräver cookies eller inloggning. URL:er till referensvideo och referensljud måste leda till direkt läsbara mediefiler.
  • I referens-till-video måste du ange minst en referens, och max 30 bilder, 10 videor, 10 ljudfiler och totalt 50 filer. Total videolängd och total ljudlängd får inte överstiga 30 sekunder vardera.
  • text-to-video ignorerar alla mediereferenser. image-to-video skickar endast vidare bilderna för första/sista bildrutan och ignorerar video- och ljudreferenser. Använd reference-to-video för att kombinera olika typer av medier.
  • Varje referensvideo och ljudfil måste vara mellan 2 och 30 sekunder. För videoredigering bör du använda källklipp på minst 4 sekunder.

Bildkrav

  • Varje bild får inte vara större än 30 MB.
  • Format som stöds: jpeg, png, webp, bmp, tiff, gif.
  • Bildförhållande (bredd ÷ höjd): 0,4 till 2,5.
  • Både bredd och höjd måste vara mellan 300 och 6 000 pixlar.

Videokrav

  • Format som stöds: mp4, mov.
  • Varje video får inte överstiga 100 MB.
  • Bildhastighet: 24 till 60 FPS.
  • Bildförhållande (bredd ÷ höjd): 0,4 till 2,5.
  • Totalt antal pixlar (bredd × höjd): 407 696 till 8 295 044. Till exempel 614 × 664 = 407 696 och 3 326 × 2 494 = 8 295 044. Detta är exempel på antal pixlar, inte fasta krav på bredd och höjd.

Ljudkrav

  • Format som stöds: wav, mp3.
  • Varje ljudfil får inte överstiga 15 MB.

Felmeddelanden

HTTP-fel returnerar ett error-objekt med code och message. En uppgift som har tagits emot utan fel kan fortfarande misslyckas senare; kontrollera uppgiftens status eller hantera webhooken för misslyckade uppgifter.

{
  "error": {
    "code": "invalid_request",
    "message": "input.prompt is required."
  }
}
HTTPFältÅtgärd
400invalid_request
Korrigera din JSON, saknad prompt, felaktiga parametervärden eller medie-URL:er innan du försöker igen.
401invalid_api_key
Kontrollera din Bearer-token och att API-nyckeln är aktiv.
402insufficient_credits
Fyll på krediter eller minska uppgiftens kostnad. Svaret kan innehålla information om saldo som krävs samt ditt nuvarande saldo.
403forbidden
Kontrollera kontobegränsningen som beskrivs i felmeddelandet.
404not_found
Kontrollera uppgiftens ID och att API-nyckeln tillhör samma användare som skapade uppgiften.
429rate_limited
Vänta den tid som anges i Retry-After innan du försöker igen.
500internal_error
Kontrollera felmeddelandet och API-loggarna. Försök igen med försiktighet; att skicka om ett anrop kan skapa ytterligare en debiterbar uppgift.

Anropsbegränsningar

Skapa uppgifter: Varje API-nyckel tillåter som standard upp till 100 anrop per minut. Anpassade anropsgränser är inte tillgängliga för närvarande.

Söka uppgifter: Varje API-nyckel tillåter som standard upp till 120 anrop per minut. Sökanrop och anrop för att skapa uppgifter räknas separat.

HTTP 429 returnerar Retry-After: 60 för skapande och Retry-After: 5 för statusfrågor. Använd gradvis fördröjning (backoff) och undvik att göra statuskontroller oftare än nödvändigt.