API Seedance 3.0 pour les développeurs / v1

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.

Crédits du compte partagésTâches vidéo asynchronesRequêtes idempotentes
POST /api/v1/videos
{
  "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 clé. Vos crédits. Votre application.
01 / COMMENCEZ À DÉVELOPPER

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.

Terminal
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.

URL de basehttps://seedance3ai.dev/api/v1

Autorisations 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.

POST/api/v1/videos

Utilisez 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ètreValeurs et conditions
modelstringseedance-2.5

Obligatoire. L’API prend actuellement en charge Seedance 2.5.

modestringtext-to-video | image-to-video | reference-to-video

Obligatoire. Choisissez le mode d’entrée ; les champs multimédias doivent correspondre à ce mode.

promptstring3–30 000 caractères

Obligatoire. Décrivez la scène, le mouvement et le son.

durationinteger4, 5, 6, 8, 10, 12, 15, 20, 25, 29, 30

Obligatoire, en secondes. Le montage utilise la durée de la vidéo source, arrondie à la seconde supérieure pour la facturation.

resolutionstring480p | 720p | 1080p

Obligatoire. Détermine le tarif en crédits.

aspectRatiostring1:1 | 4:3 | 3:4 | 16:9 | 9:16 | 21:9

Obligatoire. La génération à partir d’une image utilise le rapport d’aspect de la première image.

firstFrameUrl / lastFrameUrlstringpublicObjectUrl 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 images

Pour reference-to-video. Importez d’abord chaque fichier dans votre compte.

referenceVideoUrls / referenceAudioUrlsstring[]Jusqu’à 10 vidéos / 10 fichiers audio

Chaque groupe peut totaliser au maximum 30 secondes. Le serveur valide les médias avant la génération.

referenceTaskTypestringreference | edit | extend

Facultatif ; la valeur par défaut est reference. edit et extend nécessitent reference-to-video avec exactement une vidéo source.

generateAudiobooleantrue

Facultatif. Seedance 2.5 inclut le son natif ; false est refusé.

batchCountinteger1

Facultatif. 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
request.json
{
  "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
request.json
{
  "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"
  ]
}
UTILISEZ VOS RÉFÉRENCES

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.

upload.mjs
// 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.

GET /api/v1/videos/:id
curl --fail-with-body "https://seedance3ai.dev/api/v1/videos/TASK_ID" \
  -H "Authorization: Bearer $SEADANCE_API_KEY"
queuedprocessingsucceeded / failed
Exemple de tâche réussie
{
  "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.

UN COMPTE, UN SOLDE

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.

Consulter les modèles, les tarifs et le solde
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édits

Ré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.

HTTPSignificationÉtape suivante
400Requête non valideVérifiez le message d’erreur, les champs et les restrictions des médias avant de réessayer.
401Clé API non valideVérifiez l’en-tête Bearer. Les clés révoquées ne peuvent plus être utilisées.
402Crédits insuffisantsAjoutez des crédits au même compte Seedance 3.0.
403Accès refuséL’accès à l’API est désactivé ou la clé ne dispose pas de l’autorisation nécessaire.
404Vidéo introuvableUtilisez l’ID d’une tâche créée par votre compte via cette API.
409Conflit de requêtePour 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é.
410Vidéo suppriméevideo_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.
429Limite du compteRespectez 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 / 503Erreur temporaire du serviceConservez 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.

Ouvrir le tableau de bord de l’API