API Seedance

Intégrez la génération vidéo dans votre produit avec Seedance 2.5 ou Seedance 2.0, des tâches asynchrones, des webhooks et une facturation basée sur les crédits.

URL de base
https://api.seevio.ai
Sur cette page

Introduction

L'API vous permet de soumettre des tâches de génération vidéo Seedance 2.5 et Seedance 2.0 de manière programmatique. Seedance 2.5 est le modèle recommandé et prend en charge le text-to-video, l'image-to-video (première image ou première et dernière images) et le reference-to-video multimodal. La génération est asynchrone : vous créez une tâche, recevez immédiatement un ID de tâche, puis récupérez la vidéo finale en interrogeant l'API (polling) ou via un webhook.

Tâches asynchrones

L'interrogation (polling) convient parfaitement pour le développement et les intégrations simples.

Prêt pour les webhooks

Les webhooks sont recommandés en production afin d'éviter les requêtes répétitives et de notifier votre service dès qu'une tâche atteint son état final.

Gestion des crédits

Les crédits sont réservés lors de la soumission de la tâche. Les tâches réussies sont facturées sur cette réserve ; les tâches échouées ou expirées sont automatiquement remboursées.

Authentification

Générez une clé API dans votre tableau de bord et transmettez-la en tant que jeton Bearer lors de chaque requête. La clé complète ne s'affiche qu'une seule fois au moment de sa création.

Authorization: Bearer sk_live_xxxxxxxx
sk_live_

Utilisez des clés sk_live_ pour le trafic de production.

sk_test_

Utilisez des clés sk_test_ pour vos tests d'intégration dans l'environnement de sandbox (bac à sable) avec le même contrat API.

401

Les clés manquantes, invalides ou révoquées renvoient une erreur invalid_api_key avec un code HTTP 401.

Démarrage rapide

Commencez par soumettre une tâche. Une fois celle-ci acceptée, choisissez votre méthode de récupération du résultat : interrogez le point de terminaison de la tâche (polling) ou recevez le résultat final via un webhook.

Soumettre une tâche

Créez une tâche vidéo asynchrone et recevez immédiatement un ID de tâche.

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": "720p",
      "generate_audio": true,
      "watermark": false,
      "web_search": false,
      "return_last_frame": false
    }
  }'
Option de résultat : Polling

Interrogez le point de terminaison de statut de la tâche si votre intégration préfère les requêtes explicites.

curl https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
  -H "Authorization: Bearer sk_live_xxx"
Option de résultat : Webhook

Renseignez le paramètre callback_url lors de la soumission pour recevoir une notification en cas de succès ou d'échec, et mettre à jour votre propre base de données.

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

Créer une tâche vidéo

Créez une tâche de génération vidéo via une requête POST sur /v1/videos/generations. Le corps de la requête doit contenir un modèle de niveau supérieur, un paramètre callback_url optionnel et un objet input contenant le prompt et les paramètres de génération.

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": "720p",
      "generate_audio": true,
      "watermark": false,
      "web_search": false,
      "return_last_frame": false
    }
  }'

Modes de génération

Le paramètre generation_type détermine les types de médias acceptés en entrée et la manière dont le modèle les interprète.

Capacités de Seedance 2.5
seedance-2-5

Définissez le modèle sur seedance-2-5 pour générer des vidéos en 480p ou 720p d'une durée de 4 à 30 secondes.

  • Text-to-video avec format d'image adaptatif, 16:9, 9:16, 1:1, 4:3, 3:4 ou 21:9
  • Image-to-video à partir d'une image de départ ou de deux images (début et fin) ; le format d'image doit être configuré sur adaptatif
  • Reference-to-video avec un maximum de 30 images, 10 vidéos et 10 fichiers audio (limite globale de 50 éléments)
  • Chaque référence vidéo ou audio doit durer entre 2 et 30 secondes ; la durée cumulée des vidéos et celle des audios ne doivent pas dépasser 30 secondes chacune
  • La référence audio seule et return_last_frame sont pris en charge ; le paramètre seed n'est pas disponible
ModeMédias requisMédias facultatifsRemarques
text-to-videopromptduration, aspect_ratio, resolution, seedPrompt textuel uniquement. image_urls, video_urls et audio_urls ne sont pas nécessaires.
image-to-videoprompt + tableau image_urls (1 à 2 URL d'images)duration, aspect_ratio, resolution, seedimage_urls doit être un tableau. Fournissez 1 URL d'image pour la première image, ou 2 URL pour la première et la dernière. Les vidéos et audios sont ignorés.
reference-to-videoprompt + au moins une référence image, vidéo ou audioimages, vidéos et audios dans la limite des fichiers autorisésSeedance 2.5 prend en charge les références audio seules. Pour Seedance 2.0, ajoutez au moins une image ou une vidéo lorsque de l'audio est fourni.
text-to-video

Utilisez le mode text-to-video lorsque le prompt textuel est votre seule entrée créative.

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": "720p",
      "generate_audio": true,
      "watermark": false,
      "web_search": false,
      "return_last_frame": false
    }
  }'
image-to-video

Utilisez le mode image-to-video lorsque input.image_urls contient un tableau de 1 à 2 URL d'images : une URL définit la première image, deux URL définissent la première et la dernière. Les références vidéo et audio sont ignorées dans ce mode.

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

Utilisez le mode reference-to-video pour un contrôle plus précis à l'aide d'images, de vidéos ou d'audios de référence. Seedance 2.5 accepte l'audio comme unique type de référence ; Seedance 2.0 requiert au moins une image ou une vidéo lorsque de l'audio est fourni.

Limites de fichiers sources

  • Seedance 2.5 : jusqu'à 30 images de référence
  • Seedance 2.5 : jusqu'à 10 vidéos de référence (2-30 secondes chacune, durée cumulée <= 30 secondes)
  • Seedance 2.5 : jusqu'à 10 fichiers audio de référence (2-30 secondes chacun, durée cumulée <= 30 secondes)
  • Seedance 2.5 : maximum de 50 fichiers de référence au total, tous types confondus
  • Les variantes de Seedance 2.0 conservent leurs limites actuelles : 9 images, 3 vidéos, 3 audios et 15 secondes max par groupe vidéo/audio

Combinaisons d'entrées prises en charge

Texte + Image
Texte + Vidéo
Texte + Audio (Seedance 2.5)
Texte + Image + Vidéo
Texte + Image + Audio
Texte + Vidéo + Audio
Texte + Image + Vidéo + 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"
    }
  }'

Paramètres de requête

Les noms de paramètres, les valeurs d'énumération, les chemins d'accès et les exemples font partie intégrante du contrat de l'API. Les descriptions ci-dessous expliquent le comportement de chaque champ.

En-têtes

En-têteRequisDescriptionExemple
AuthorizationOuiClé API Bearer utilisée pour authentifier la requête.Bearer sk_live_xxx
Content-TypeOuiToutes les requêtes d'écriture utilisent le format JSON.application/json

Champs de premier niveau

ChampTypeRequisPar défautPlage / ÉnumérationModesExemple
model

Variante du modèle utilisée pour la génération. Utilisez seedance-2-5 pour Seedance 2.5, seedance-2-0 pour Seedance 2.0, seedance-2-0-fast pour Seedance 2.0 Fast ou seedance-2-0-mini pour Seedance 2.0 Mini.

stringOui-seedance-2-5 | seedance-2-0 | seedance-2-0-fast | seedance-2-0-minitousseedance-2-5
callback_url

Point de terminaison HTTPS qui reçoit les notifications de succès et d'échec de la tâche.

stringNon-URL HTTPS (les réseaux privés ne sont pas autorisés)toushttps://your-domain.com/hook
input

Paramètres de génération et fichiers de référence.

objectOui--tous-

input.* champs

ChampTypeRequisPar défautPlage / ÉnumérationModesExemple
input.prompt

Prompt textuel décrivant la vidéo à générer.

stringOui-texte non videtousa cat surfing
input.generation_type

Mode de génération. Valeur par défaut : text-to-video.

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

URL d'images publiques. Pour le mode image-to-video, envoyez 1 image pour la première image ou 2 images pour la première et la dernière. Pour le mode reference-to-video, Seedance 2.5 accepte jusqu'à 30 images et Seedance 2.0 jusqu'à 9.

string[]Conditionnel[]Image-to-video : 1 ou 2 images. Reference-to-video : jusqu'à 30 pour Seedance 2.5 ; jusqu'à 9 pour Seedance 2.0.image-to-video / reference-to-video["https://.../a.jpg"]
input.video_urls

Vidéos de référence publiques (uniquement pour le mode reference-to-video). Seedance 2.5 accepte jusqu'à 10 vidéos de 2-30 secondes chacune (durée cumulée <= 30 secondes). Seedance 2.0 accepte jusqu'à 3 vidéos (durée cumulée <= 15 secondes).

string[]Non[]Seedance 2.5 : jusqu'à 10 vidéos de 2-30 secondes, durée cumulée <= 30 secondes. Seedance 2.0 : jusqu'à 3, durée cumulée <= 15 secondes.reference-to-video[]
input.audio_urls

Fichiers audio de référence publics (uniquement pour le mode reference-to-video). Seedance 2.5 accepte jusqu'à 10 fichiers de 2-30 secondes chacun (durée cumulée <= 30 secondes) et autorise les références audio seules. Seedance 2.0 accepte jusqu'à 3 fichiers (durée cumulée <= 15 secondes).

string[]Non[]Seedance 2.5 : jusqu'à 10 fichiers audio de 2-30 secondes, durée cumulée <= 30 secondes. Seedance 2.0 : jusqu'à 3, durée cumulée <= 15 secondes.reference-to-video[]
input.duration

Durée de la vidéo de sortie en secondes.

intNon5Seedance 2.5 : 4-30 secondes. Seedance 2.0 : 4-15 secondes.tous5
input.aspect_ratio

Format d'image de sortie. Le mode adaptive permet au service de déterminer le meilleur format. Le mode image-to-video de Seedance 2.5 ne prend en charge que le format adaptive.

stringNonadaptive16:9 | 4:3 | 1:1 | 3:4 | 9:16 | 21:9 | adaptivetous16:9
input.resolution

Résolution de la vidéo de sortie.

stringNon720pSeedance 2.5 : 480p | 720p. Seedance 2.0 : 480p | 720p | 1080p | 4k (selon la variante).tous720p
input.generate_audio

Indique si le modèle doit générer de l'audio lorsque cela est possible.

booleanNontruetrue | falsetoustrue
input.watermark

Indique s'il faut appliquer un filigrane.

booleanNonfalsetrue | falsetousfalse
input.web_search

Indique s'il faut autoriser l'enrichissement par recherche web lorsque la fonctionnalité est disponible.

booleanNonfalsetrue | falsetousfalse
input.return_last_frame

Indique s'il faut retourner l'URL de la dernière image lorsqu'elle est disponible.

booleanNonfalsetrue | falsetousfalse
input.seed

Seed déterministe pour les variantes de Seedance 2.0. Seedance 2.5 ne prend pas en charge ce paramètre ; veuillez l'omettre.

intNon-1-1 ou 0-4294967295tous-1

Le coût en crédits varie selon la résolution, la durée, le modèle sélectionné et la présence de références vidéo dans le mode reference-to-video. La valeur credits retournée dans la réponse de création correspond au montant exact réservé pour cette tâche.

Voir les tarifs en crédits

Réponse

Il s'agit de la réponse de succès renvoyée par POST /v1/videos/generations. Elle confirme que la tâche a été acceptée et que les crédits ont été réservés. Utilisez le taskId retourné pour interroger le point de terminaison GET /v1/tasks/:id ou pour identifier la notification de succès ou d'échec.

Réponse de succès pour POST /v1/videos/generations

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

Obtenir le statut de la tâche

Utilisez la requête GET /v1/tasks/:id pour récupérer l'état actuel d'une tâche. Limitez vos requêtes à une toutes les 10 secondes au maximum. Pour les systèmes en production, privilégiez l'usage des webhooks.

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

Réponse d'une tâche terminée avec succès

{
  "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
  }
}

Réponse d'une tâche ayant échoué

{
  "id": "3f2aK9mR...",
  "status": "failed",
  "created_at": 1781234567,
  "model": "seedance-2-5",
  "billing_status": "refunded",
  "credits": 100,
  "failed_reason": "provider_failed"
}
ValeurSignification
status=queuedAcceptée et en attente d'envoi ou de traitement.
status=generatingLe fournisseur traite actuellement la génération.
status=completedGénération vidéo terminée. L'objet data.results contient l'URL du fichier généré.
status=failedLa génération a échoué ou a expiré.
billing_status=reservedLes crédits sont réservés pendant toute la durée de traitement de la tâche.
billing_status=chargedLa tâche a réussi, la réservation de crédits est validée et facturée.
billing_status=refundedLa tâche a échoué ou a expiré, les crédits réservés ont été restitués.
billing_status=refund_failedLa transaction de remboursement a échoué et nécessite une intervention manuelle.

Une fois la date video_expires_at dépassée, l'objet data.results est vidé. Téléchargez et stockez le fichier avant l'expiration de cette période de validité.

Webhooks

Si callback_url est renseigné, Seedance appelle votre point de terminaison dès que la tâche est terminée (succès ou échec) et lui transmet les données JSON du résultat final. Si votre serveur renvoie un code autre que 2xx ou ne répond pas dans les 15 secondes, la notification est tentée de nouveau jusqu'à 5 fois. Les tentatives successives conservent le même ID de tâche ; veillez à dédoublonner les requêtes reçues à l'aide de cet ID. Renvoyez une réponse HTTP 200 dès que vous avez enregistré les données du webhook.

Webhook de fin de tâche (succès)

{
  "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
  }
}

Webhook d'échec de tâche

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

Validez le format des données reçues, dédoublonnez les requêtes grâce à l'ID, mettez à jour le statut de la tâche dans votre système et renvoyez une réponse rapidement.

La callback_url doit impérativement utiliser le protocole HTTPS et ne pas pointer vers des plages d'adresses privées, de bouclage (loopback) ou de liaison locale (link-local).

Erreurs

Les requêtes POST /v1/videos/generations et GET /v1/tasks/:id renvoient ce format d'erreur lorsque la requête API échoue (paramètres non valides, clé API incorrecte, crédits insuffisants, limite de requêtes atteinte ou tâche introuvable). Selon le cas, certaines erreurs contiennent des champs supplémentaires comme required, available ou retry_after.

{
  "error": {
    "code": "insufficient_credits",
    "message": "Not enough credits for this task.",
    "required": 100,
    "available": 12
  }
}
CodeHTTPSignificationRéessayer ?
invalid_request400Paramètres manquants ou non valides.Non, corrigez la requête.
invalid_api_key401Clé API manquante, non valide ou révoquée.Non, utilisez une clé valide.
insufficient_credits402Nombre de crédits insuffisant. La tâche n'est ni acceptée ni facturée.Après rechargement du compte.
forbidden403La clé API ne dispose pas des droits requis.Non.
not_found404La tâche n'existe pas ou n'appartient pas au propriétaire de la clé API.Non.
rate_limited429Limite de requêtes dépassée.Oui, conformez-vous à l'en-tête Retry-After.
internal_error500Erreur interne du serveur.Oui, réessayez plus tard.

Limites de requêtes

Les limites de requêtes s'appliquent par clé API selon un principe de fenêtre glissante. Par défaut, la génération est limitée à 100 requêtes par minute ; les requêtes de statut de tâche bénéficient d'une limite plus souple. Les réponses HTTP 429 incluent l'en-tête Retry-After.

Génération

100/min

Requêtes de statut

Limite plus souple

En-tête 429

Retry-After

Facturation & crédits

L'API applique un principe de réservation à la soumission, de facturation en cas de succès et de remboursement en cas d'échec. Les pages de suivi de consommation de votre tableau de bord affichent l'historique des crédits API, les journaux d'activité et des statistiques d'utilisation détaillées.

Réservés

Les crédits sont vérifiés et réservés dès que la tâche est acceptée.

Facturés

La réussite d'une tâche valide définitivement la réservation de crédits correspondante.

Remboursés

Les tâches en échec ou expirées restituent automatiquement les crédits qui avaient été réservés.

Suivez votre consommation depuis le tableau de bord

Consultez les journaux d'activité de l'API, la chronologie des tâches, l'historique des crédits et des indicateurs d'utilisation dans le temps.

Journaux d'activité API