Seedance 2.5.
Au cœur de votre produit.
Transformez du texte, des images et des médias de référence en vidéo avec une seule API. Utilisez vos crédits Seedance 3.0, conservez votre processus de travail et développez votre intégration avec un parcours clair de la requête au résultat.
{
"model": "seedance-2.5",
"mode": "text-to-video",
"prompt": "A paper boat drifting into the morning light",
"duration": 5,
"resolution": "720p",
"aspectRatio": "16:9"
}Votre première vidéo en quelques requêtes.
Enregistrez votre clé sous SEADANCE_API_KEY sur votre serveur. Attribuez à SEADANCE_REQUEST_KEY une valeur unique pour cette vidéo (par exemple avec uuidgen) et conservez cette valeur pour les nouvelles tentatives. Vérifiez que votre compte dispose de suffisamment de crédits. Cet exemple réserve 350 crédits pour une vidéo de 5 secondes en 720p. Copiez l’id renvoyé pour consulter son état.
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
}'Cette documentation ne lance jamais de génération automatiquement. L’envoi d’une requête de création consomme vos crédits.
Authentifiez-vous depuis votre serveur.
Chaque appel API utilise Authorization: Bearer sd_live_…. Ne placez pas les clés dans les navigateurs, les applications mobiles, les dépôts publics ou le code côté client. La clé complète n’est affichée qu’une fois ; vous pouvez la révoquer dans le tableau de bord de l’API.
https://seedance3ai.dev/api/v1Autorisations par défaut des clés : videos:write pour les imports et la génération ; videos:read pour les modèles et l’état des tâches ; account:read pour les crédits. L’accès et les limites du compte s’appliquent à toutes les clés.
Créez une tâche vidéo.
/api/v1/videosUtilisez Content-Type: application/json et un Idempotency-Key unique pour chaque génération prévue. Le serveur peut mettre du temps à obtenir l’acceptation de la tâche par le fournisseur. Si votre connexion expire, renvoyez le même corps avec la même clé. HTTP 202 signifie que la tâche est acceptée, pas terminée. Idempotency-Key accepte de 1 à 128 caractères ASCII imprimables sans espaces.
| Paramètre | Valeurs et conditions |
|---|---|
modelstring | seedance-2.5Obligatoire. L’API prend actuellement en charge Seedance 2.5. |
modestring | text-to-video | image-to-video | reference-to-videoObligatoire. Choisissez le mode d’entrée ; les champs multimédias doivent correspondre à ce mode. |
promptstring | 3–30 000 caractèresObligatoire. Décrivez la scène, le mouvement et le son. |
durationinteger | 4, 5, 6, 8, 10, 12, 15, 20, 25, 29, 30Obligatoire, en secondes. Le montage utilise la durée de la vidéo source, arrondie à la seconde supérieure pour la facturation. |
resolutionstring | 480p | 720p | 1080pObligatoire. Détermine le tarif en crédits. |
aspectRatiostring | 1:1 | 4:3 | 3:4 | 16:9 | 9:16 | 21:9Obligatoire. La génération à partir d’une image utilise le rapport d’aspect de la première image. |
firstFrameUrl / lastFrameUrlstring | publicObjectUrl du fichier importéLa génération à partir d’une image nécessite une première image. La dernière image est facultative. |
referenceImageUrlsstring[] | Jusqu’à 30 imagesPour reference-to-video. Importez d’abord chaque fichier dans votre compte. |
referenceVideoUrls / referenceAudioUrlsstring[] | Jusqu’à 10 vidéos / 10 fichiers audioChaque groupe peut totaliser au maximum 30 secondes. Le serveur valide les médias avant la génération. |
referenceTaskTypestring | reference | edit | extendFacultatif ; la valeur par défaut est reference. edit et extend nécessitent reference-to-video avec exactement une vidéo source. |
generateAudioboolean | trueFacultatif. Seedance 2.5 inclut le son natif ; false est refusé. |
batchCountinteger | 1Facultatif. Une vidéo par requête. |
Ces champs permettent à Seedance 2.5 de prendre en charge le texte, les premières et dernières images, les références multimodales, le montage et la prolongation vidéo. GET /models est la référence à jour pour les fonctionnalités et les tarifs disponibles.
Exemple de requête image vers vidéo
{
"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"
}Exemple de requête avec références
{
"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"
]
}Importez une fois. Référencez par URL.
Envoyez POST /uploads avec fileName, contentType, size (en octets) et kind (image, video ou audio). Avant expiresAt, envoyez les octets bruts du fichier vers uploadUrl avec PUT et les en-têtes requiredHeaders. Une fois l’import réussi, utilisez publicObjectUrl dans la requête de génération. Les références doivent appartenir au même compte ; les URL externes arbitraires et les entrées en base64 ne sont pas acceptées.
// 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.La taille et le type de contenu déclarés doivent correspondre au fichier importé. Les URL d’import expirent ; demandez-en une autre si nécessaire. La durée, les dimensions et le format des médias sont validés avant la génération.
Suivez la tâche jusqu’à son terme.
GET /videos/:id renvoie la tâche actuelle. Interrogez-la toutes les 5–10 secondes, arrêtez-vous à succeeded ou failed et respectez le délai indiqué par Retry-After s’il est présent. Les requêtes sont limitées aux tâches API de votre compte. L’intégration actuelle utilise des interrogations périodiques.
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 vaut null tant qu’aucune vidéo n’est disponible. Une tâche échouée inclut une erreur ; consultez refund_status pour connaître l’état du remboursement des crédits. Téléchargez rapidement les résultats réussis. Supprimer une vidéo ne réinitialise pas sa requête : réutiliser cet Idempotency-Key renvoie 410 video_deleted et ne peut pas la recréer.
Comprenez le coût en crédits avant d’intégrer.
La génération via l’API utilise les mêmes crédits du compte et les mêmes tarifs Seedance 2.5 que le site. Les crédits sont réservés lorsqu’une requête est acceptée. Si la génération échoue, ces crédits sont reversés au solde de crédits hors abonnement. Un échec de validation avant la création de la tâche ne produit pas de vidéo facturable.
480p
30crédits / seconde de sortie
+ 20 crédits / seconde de vidéo de référence
720p
70crédits / seconde de sortie
+ 50 crédits / seconde de vidéo de référence
1080p
160crédits / seconde de sortie
+ 90 crédits / seconde de vidéo de référence
Coût = durée de sortie × tarif de sortie, plus la durée des éventuelles vidéos de référence × tarif de référence. La durée des vidéos de référence est mesurée sur le serveur ; le total est arrondi à la seconde entière inférieure pour la facturation. Le son natif est inclus. Par exemple, 5 secondes en 720p coûtent 350 crédits, ou 600 crédits avec une vidéo de référence de 5 secondes.
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"Consultez les crédits disponibles, l’historique des requêtes et les limites du compte dans le tableau de bord de l’API. Ajoutez des crédits via la page des tarifs du site avec le même compte ; il n’existe ni solde distinct ni point de terminaison de recharge pour l’API. Aucun abonnement actif n’est nécessaire si vos crédits disponibles sont suffisants. Les règles d’expiration de l’abonnement et des crédits hors abonnement sont les mêmes que sur le site.
Ajouter des crédits n’augmente pas les limites de fréquence, de simultanéité ou d’utilisation quotidienne de l’API et ne réactive pas un compte désactivé. La limite quotidienne comptabilise tous les crédits réservés, y compris ceux des échecs remboursés, et se réinitialise à 00:00 UTC. Contactez l’assistance si votre application a besoin de limites plus élevées.
Voir les offres et ajouter des créditsRéessayez en toute sécurité. Évitez les doubles débits.
Utilisez un Idempotency-Key par vidéo prévue et conservez-le avec le corps exact de la requête jusqu’à connaître le résultat. Les nouvelles clés représentent de nouvelles générations. Une réponse d’erreur contient error.code, error.message et request_id ; indiquez l’ID de la requête lorsque vous contactez l’assistance.
| HTTP | Signification | Étape suivante |
|---|---|---|
| 400 | Requête non valide | Vérifiez le message d’erreur, les champs et les restrictions des médias avant de réessayer. |
| 401 | Clé API non valide | Vérifiez l’en-tête Bearer. Les clés révoquées ne peuvent plus être utilisées. |
| 402 | Crédits insuffisants | Ajoutez des crédits au même compte Seedance 3.0. |
| 403 | Accès refusé | L’accès à l’API est désactivé ou la clé ne dispose pas de l’autorisation nécessaire. |
| 404 | Vidéo introuvable | Utilisez l’ID d’une tâche créée par votre compte via cette API. |
| 409 | Conflit de requête | Pour request_in_progress, patientez puis réessayez avec le même corps et la même clé. idempotency_conflict indique que la clé a été réutilisée avec un corps différent. request_expired ou request_previously_failed confirme qu’aucune vidéo n’a été soumise : corrigez le problème signalé, puis utilisez une nouvelle clé. |
| 410 | Vidéo supprimée | video_deleted indique que la requête initiale a été traitée, mais que sa vidéo a été supprimée. Sa clé ne peut plus lancer de génération. Cessez les tentatives ; utilisez une nouvelle clé uniquement si vous souhaitez volontairement lancer une nouvelle génération facturable. |
| 429 | Limite du compte | Respectez Retry-After. Les limites de fréquence, de tâches simultanées et de crédits quotidiens sont partagées par toutes les clés. Les budgets quotidiens sont réinitialisés à 00:00 UTC. |
| 500 / 503 | Erreur temporaire du service | Conservez l’Idempotency-Key. Réessayez le même envoi ; ne créez pas de nouvelle clé lorsque le résultat est incertain. |
Si l’envoi renvoie request_in_progress, patientez puis répétez la même requête. Ne passez jamais à une nouvelle clé uniquement pour contourner un délai d’attente dépassé. Si le remboursement d’une tâche échouée est toujours en attente, conservez son ID et contactez l’assistance.
Prêt à connecter votre application ?
Créez une clé et développez votre première intégration.