API Seedance 2.0

Intégrez la génération vidéo à votre produit avec la création de tâches asynchrones, l'interrogation de statut, les webhooks et une facturation basée sur les crédits.

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

Introduction

L'API vous permet de soumettre des tâches de génération vidéo Seedance 2.0 par programmation. La génération est asynchrone : créez une tâche, recevez un ID de tâche immédiatement, puis obtenez la vidéo terminée en interrogeant le point de terminaison de la tâche ou en recevant un webhook.

Tâches asynchrones

L'interrogation fonctionne bien pour le développement et les intégrations simples.

Prêt pour les webhooks

Les webhooks sont recommandés pour la production car ils évitent une interrogation agressive et informent votre service lorsqu'une tâche atteint un état terminal.

Conscient des crédits

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

Authentification

Créez une clé API dans le tableau de bord et envoyez-la en tant que jeton Bearer à chaque requête. La clé complète n'est affichée qu'une seule fois au moment de la création.

Authorization: Bearer sk_live_xxxxxxxx
sk_live_

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

sk_test_

Utilisez les clés sk_test_ pour les tests d'intégration sandbox avec le même contrat API.

401

Les clés manquantes, non valides ou révoquées renvoient invalid_api_key avec le code HTTP 401.

Démarrage rapide

Soumettez d'abord une tâche. Une fois la tâche acceptée, choisissez une méthode de livraison des résultats : interrogez le point de terminaison de la tâche ou recevez le résultat terminal via un webhook.

Soumettre une tâche

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

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
    }
  }'
Option de résultat : Interrogation

Récupérez le point de terminaison de l'état de la tâche lorsque votre intégration préfère l'interrogation explicite.

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

Passez callback_url lors de la soumission de la tâche, puis recevez les rappels de réussite ou d'échec et mettez à jour votre propre enregistrement de tâche.

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 vidéo avec POST /v1/videos/generations. Le corps de la requête contient un modèle de niveau supérieur, un callback_url facultatif et un objet d'entrée contenant des paramètres de promtp et de génération.

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
    }
  }'

Modes de génération

generation_type contrôle les entrées média acceptées et la façon dont le modèle les interprète.

ModeMédia requisMédia facultatifNotes
text-to-videopromptdurée, rapport d'aspect, résolution, seedTexte prompt uniquement. image_urls, video_urls et audio_urls ne sont pas nécessaires.
image-to-videoprompt + tableau image_urls (1-2 URL d'image)durée, rapport d'aspect, résolution, seedimage_urls doit être un tableau. Fournissez 1 URL d'image pour la première image, ou 2 URL d'image pour la première et la dernière image. La vidéo et l'audio sont ignorés.
reference-to-videoprompt + au moins une image ou vidéoimages, vidéos et audio dans les limites du matérielL'audio ne peut pas être utilisé seul avec du texte. Ajoutez au moins une image ou une vidéo lorsque de l'audio est fourni.
text-to-video

Utilisez le texte-vers-vidéo lorsque le prompt est la seule entrée créative. (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

Utilisez l'image-vers-vidéo lorsque input.image_urls est un tableau avec 1 à 2 URL d'image : une URL définit la première image, et deux URL définissent la première et la dernière image. Les références vidéo et audio sont ignorées dans ce mode. (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

Utilisez la référence-vers-vidéo pour une direction plus riche avec des images, des vidéos et de l'audio de référence. L'audio ne peut pas être utilisé seul avec du texte ; incluez au moins une image ou une vidéo lorsque de l'audio est fourni. (reference-to-video)

Limites des matériaux

  • Jusqu'à 9 images de référence
  • Jusqu'à 3 vidéos de référence, durée totale <= 15 secondes
  • Jusqu'à 3 fichiers audio de référence, durée totale <= 15 secondes
  • Maximum 12 matériaux au total pour tous les types

Combinaisons d'entrées prises en charge

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

Paramètres de requête

Les noms de paramètres, les valeurs d'énumération, les chemins de point de terminaison et les exemples font partie du contrat API. Les descriptions ci-dessous expliquent comment chaque champ se comporte.

En-têtes

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

Champs de niveau supérieur

ChampTypeObligatoirePar défautPlage / ÉnumérationModesExemple
model

Variante de modèle utilisée pour la génération.

stringOui-seedance-2-0 | seedance-2-0-fasttousseedance-2-0
callback_url

Point de terminaison HTTPS qui reçoit les rappels de réussite et d'échec de la tâche.

stringNon-URL HTTPS, pas de réseaux privéstoushttps://your-domain.com/hook
input

Paramètres de génération et références médias.

objectOui--tous-

input.* champs

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

Invite de texte décrivant la vidéo à créer.

stringOui-texte non videtousa cat surfing
input.generation_type

Mode de génération. Par défaut à texte-vers-vidéo. (text-to-video)

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

URL d'images accessibles publiquement. Pour l'image-vers-vidéo, envoyez 1 image pour la première trame ou 2 images pour la première et la dernière trame. Pour la référence-vers-vidéo, envoyez jusqu'à 9 images comme références visuelles. (image-to-video) (reference-to-video)

string[]Conditionnel[]Image-vers-vidéo : 1 ou 2 images. Référence-vers-vidéo : jusqu'à 9 images. (image-to-video) (reference-to-video)image-to-video / reference-to-video["https://.../a.jpg"]
input.video_urls

Vidéos de référence accessibles publiquement pour la référence-vers-vidéo uniquement. Vous pouvez envoyer jusqu'à 3 fichiers vidéo, et leur durée de lecture combinée doit être de 15 secondes ou moins. (reference-to-video)

string[]Non[]Jusqu'à 3 vidéos. La longueur combinée des vidéos doit être de 15 secondes ou moins.reference-to-video[]
input.audio_urls

Fichiers audio de référence accessibles publiquement pour la référence-vers-vidéo uniquement. Vous pouvez envoyer jusqu'à 3 fichiers audio, et leur durée de lecture combinée doit être de 15 secondes ou moins. (reference-to-video)

string[]Non[]Jusqu'à 3 fichiers audio. La longueur combinée des audios doit être de 15 secondes ou moins.reference-to-video[]
input.duration

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

intNon54-15 secondestous5
input.aspect_ratio

Rapport d'aspect de sortie. adaptive permet au service d'inférer le meilleur rapport.

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

Niveau de résolution de sortie.

stringNon720p480p | 720p | 1080ptous720p
input.generate_audio

Indique si le modèle doit générer de l'audio lorsqu'il est pris en charge.

booleanNontruetrue | falsetoustrue
input.watermark

Indique si un filigrane doit être ajouté.

booleanNonfalsetrue | falsetousfalse
input.web_search

Indique si l'augmentation de la recherche web est autorisée lorsqu'elle est prise en charge.

booleanNonfalsetrue | falsetousfalse
input.return_last_frame

Indique si l'URL de la dernière trame doit être renvoyée lorsqu'elle est disponible.

booleanNonfalsetrue | falsetousfalse
input.seed

Seed déterministe. Utilisez -1 pour une seed aléatoire.

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

Les crédits varient en fonction de la résolution, de la durée, du modèle et du fait que la référence-vers-vidéo inclue des références vidéo. La valeur des crédits renvoyée par la réponse de création est le montant réel réservé pour cette tâche. (reference-to-video)

Voir la tarification des crédits

Réponse

Ceci est la réponse de succès de POST /v1/videos/generations. Cela signifie que la tâche a été acceptée et que des crédits ont été réservés. Utilisez le taskId renvoyé pour interroger GET /v1/tasks/:id ou pour correspondre à un rappel de réussite ou d'échec.

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

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

Obtenir le statut de la tâche

Utilisez GET /v1/tasks/:id pour récupérer l'état actuel de la tâche. N'interrogez pas plus d'une fois toutes les 10 secondes. Pour les systèmes de production, préférez les webhooks.

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

Réponse de tâche terminée

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

Réponse de tâche échouée

{
  "id": "3f2aK9mR...",
  "status": "failed",
  "created_at": 1781234567,
  "model": "seedance-2-0",
  "billing_status": "refunded",
  "credits": 60,
  "failed_reason": "provider_failed"
}
ValeurSignification
status=queuedAccepté et en attente de soumission ou de traitement.
status=generatingLe fournisseur traite la génération.
status=completedVidéo terminée et data.results contient l'URL du résultat.
status=failedLa génération a échoué ou a expiré.
billing_status=reservedLes crédits sont réservés pendant que la tâche est en cours.
billing_status=chargedLa tâche a réussi et la réservation est réglée.
billing_status=refundedLa tâche a échoué ou a expiré et les crédits ont été retournés.
billing_status=refund_failedLa transaction de remboursement a échoué et nécessite une gestion manuelle.

Après video_expires_at, data.results est vide. Téléchargez et stockez le fichier avant la fin de la fenêtre de validité.

Webhooks

Lorsque callback_url est présent, Seedance appelle votre point de terminaison lorsque la tâche est terminée ou échouée, et envoie des données JSON décrivant le résultat final. Si votre point de terminaison renvoie une réponse non 2xx ou ne répond pas dans les 15 secondes, la livraison est relancée jusqu'à 5 fois. Les relances réutilisent le même ID de tâche, donc dédoublonnez par ID. Renvoyez une réponse 200 dès que vous avez enregistré les données de rappel en toute sécurité.

Rappel d'achèvement de tâche

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

Rappel d'échec de tâche

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

Validez la forme des données de rappel, dédoublonnez par ID, mettez à jour votre propre enregistrement de tâche et répondez rapidement.

callback_url doit être HTTPS et ne doit pas pointer vers des plages de réseaux privés, de bouclage ou locaux de liaison.

Erreurs

POST /v1/videos/generations et GET /v1/tasks/:id renvoient cette forme d'erreur lorsque la requête API elle-même échoue, par exemple des paramètres non valides, une clé API non valide, des crédits insuffisants, une limitation de débit ou une tâche introuvable. Certaines erreurs incluent des champs supplémentaires tels que required, available ou retry_after selon la situation.

{
  "error": {
    "code": "insufficient_credits",
    "message": "Not enough credits for this task.",
    "required": 60,
    "available": 12
  }
}
CodeHTTPSignificationRéessayer ?
invalid_request400Paramètres manquants ou non valides.Non, corrigez la requête.
invalid_api_key401La clé API est manquante, non valide ou révoquée.Non, utilisez une clé valide.
insufficient_credits402Crédits insuffisants. La tâche n'est pas acceptée ou facturée.Après la recharge.
forbidden403La clé API n'a pas la portée requise.Non.
not_found404La tâche n'existe pas ou n'appartient pas au propriétaire de la clé.Non.
rate_limited429Taux de requêtes dépassé.Oui, suivez Retry-After.
internal_error500Erreur de serveur.Oui, réessayez plus tard.

Limites de débit

Les limites de débit sont appliquées par clé API avec une fenêtre glissante. La génération est par défaut de 60 requêtes par minute ; les requêtes de statut sont plus indulgentes. Les réponses HTTP 429 incluent Retry-After.

Génération

60/min

Requêtes de statut

Plus indulgent

En-tête 429

Retry-After

Facturation et crédits

L'API utilise la réservation à la soumission, la facturation au succès et le remboursement à l'échec. Les pages d'utilisation du tableau de bord affichent l'historique des crédits API, les journaux de tâches et les statistiques d'utilisation basées sur le temps.

Réservé

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

Facturé

Les tâches terminées règlent la réservation existante.

Remboursé

Les tâches échouées ou expirées renvoient automatiquement les crédits réservés.

Examinez l'utilisation dans le tableau de bord

Affichez les journaux API, les chronologies de tâches, l'historique des crédits et les métriques d'utilisation basées sur le temps.

Journaux API