Passer à la documentation
Sur cette page

Documentation

Développez avec l'API Seevio

Intégrez la génération vidéo à votre produit. Choisissez un modèle, envoyez une requête et récupérez le résultat par interrogation ou via un webhook.

Choisir un modèle

Chaque référence de modèle détaille ses paramètres complets, ses tarifs et des exemples. Vous pouvez finaliser votre intégration directement depuis la page d'un modèle.

Authentification

Générez une clé API depuis votre tableau de bord. La clé complète ne s'affiche qu'une seule fois. Conservez-la en toute sécurité sur votre serveur et transmettez-la comme jeton Bearer lors de chaque requête.

URL de base

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

Définissez la variable d'environnement SEEVIO_API_KEY avant d'exécuter ces exemples. Les exemples en JavaScript s'exécutent sur votre serveur avec Node.js ; les exemples en Python utilisent la bibliothèque requests.

Démarrage rapide

Cet exemple génère une vidéo 720p de 5 secondes avec Seedance 2.5. Consultez la référence du modèle pour découvrir tous les modes de génération et les limites des paramètres.

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

Exemple de réponse à la création de tâche

Une fois la requête ci-dessus acceptée, l'API renvoie cette réponse au format JSON. taskId correspond à l'identifiant de tâche à utiliser pour les requêtes de statut ultérieures ; credits indique le nombre de crédits réservés pour cette tâche. Cette réponse confirme la création de la tâche, et non la finalisation de la vidéo. Vous devez interroger le statut de la tâche ou utiliser un Webhook pour obtenir le rendu vidéo final.

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

Interroger une tâche

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

Remplacez l'ID d'exemple par le taskId obtenu lors de la création. Les requêtes renvoient uniquement les tâches créées par l'utilisateur de la clé API ; les identifiants inconnus ou inaccessibles renvoient une erreur HTTP 404.

Nous vous suggérons d'interroger l'API toutes les 10 à 20 secondes au début, d'espacer les requêtes en cas d'erreur HTTP 429 et d'arrêter dès que le statut est completed ou failed. Privilégiez les webhooks pour la production. Chaque exemple de code ci-dessous effectue une seule interrogation.

curl --fail-with-body https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
  -H "Authorization: Bearer $SEEVIO_API_KEY"
StatutDescription et contraintes
queuedAcceptée et en attente de traitement.
generatingGénération en cours.
completedSuccès. Téléchargez le contenu de data.results avant son expiration.
failedÉchec définitif. Examinez failed_reason et billing_status.
ChampTypeDescription et contraintes
idstring
Identifiant de la tâche. Il s'agit du taskId obtenu lors de la création.
created_atnumber
Date de création de la tâche au format horodatage Unix (en secondes).
modelstring
ID public du modèle utilisé pour cette tâche.
billing_statusstring
Statut de facturation : reserved, charged, refunded ou refund_failed.
creditsnumber
Crédits réservés pour cette tâche. Cette valeur est conservée même après un remboursement ; fiez-vous au billing_status pour connaître l'issue de la facturation.
failed_reasonstring | null
Raison de l'échec pour les tâches ayant échoué ; null dans les autres cas. Les réponses d'interrogation en échec n'incluent pas l'objet data.
dataobject
Présent pour les requêtes de tâches qui n'ont pas échoué. Contient les fichiers de sortie et les détails du traitement.
data.resultsstring[]
Tableau d'URL de vidéos. Vide jusqu'à la finalisation ou après l'expiration de la vidéo.
data.video_expires_atstring | null
Date d'expiration de la vidéo au format ISO 8601, ou null avant sa mise à disposition. Enregistrez le résultat avant cette échéance.
data.last_frame_urlstring | null
URL de la dernière image si elle a été demandée et qu'elle est disponible, sinon null.
data.processing_timenumber | null
Durée de traitement par le fournisseur en secondes si disponible, sinon null.

Tâche terminée : réponse à la requête avec les résultats vidéo

Lorsque la requête renvoie status=completed, la génération de la vidéo est terminée. Récupérez les URL des vidéos dans data.results et téléchargez-les avant la date indiquée dans data.video_expires_at. Le statut billing_status=charged indique que les crédits réservés ont été débités.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652800,
  "model": "seedance-2-5",
  "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
  }
}

Échec de la tâche : réponse à la requête avec détails de l'échec et de la facturation

Lorsque la requête renvoie status=failed, la génération a échoué. Consultez le champ failed_reason pour en connaître la cause et billing_status pour le statut du remboursement. Dans cet exemple, refunded signifie que les crédits ont été restitués. Le champ credits conserve le montant initialement réservé, et la réponse ne contient pas de nœud data.

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

Webhooks

Pour vos intégrations en production, fournissez une callback_url lors de la création d'une tâche. Chaque référence de modèle comprend des exemples de charges utiles de webhook et un code de réception.

Configurez le champ callback_url dans votre requête de création pour recevoir un POST JSON lorsque la tâche se termine ou échoue. Renvoyez une réponse HTTP 2xx sous 15 secondes. En cas d'échec de distribution, de nouvelles tentatives seront effectuées ; gérez les doublons de manière idempotente grâce à l'identifiant de la tâche.

Votre point de terminaison de rappel (callback) doit accepter les requêtes POST contenant un corps de requête JSON (Content-Type : application/json).

Créer une tâche avec un webhook de 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"
}'

Les charges utiles des webhooks diffèrent des réponses d'interrogation de tâche : elles excluent billing_status et credits ; les détails de l'échec sont placés dans data.failed_reason et data.credits_refunded. Le champ created_at du webhook indique l'heure de l'événement en secondes Unix.

Tâche terminée : charge utile du callback réussi

En cas de réussite de la génération, le callback renvoie le statut status=completed. Utilisez le paramètre id pour identifier la tâche et data.results pour récupérer les URL des vidéos. Assurez-vous de télécharger et d'enregistrer les résultats avant la date indiquée dans data.video_expires_at.

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

Échec de la tâche : charge utile du callback d'échec

En cas d'échec de la génération, le callback renvoie le statut status=failed. Utilisez l'id pour identifier la tâche, data.failed_reason pour connaître la cause de l'échec et data.credits_refunded pour vérifier le nombre de crédits remboursés.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1788652800,
  "model": "seedance-2-5",
  "status": "failed",
  "data": {
    "failed_reason": "provider_failed",
    "credits_refunded": 100
  }
}

Exemple de réception de webhook

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

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

Cet exemple Next.js lit le corps JSON du callback et traite directement les tâches réussies et échouées. Pour votre application de production, pensez à ajouter une couche de persistance, à dédoublonner les identifiants de tâche (task-ID) et à placer les tâches lourdes en file d'attente avant d'accuser réception du callback.

Erreurs

Les erreurs HTTP contiennent un objet error avec un code (code) et un message (message). Une tâche acceptée avec succès peut toujours échouer ultérieurement ; interrogez régulièrement la tâche ou configurez un webhook pour suivre son statut.

{
  "error": {
    "code": "invalid_request",
    "message": "input.prompt is required."
  }
}
HTTPChampAction recommandée
400invalid_request
Corrigez le JSON, le prompt manquant, la plage des paramètres ou l'URL du média avant de soumettre à nouveau.
401invalid_api_key
Vérifiez votre jeton Bearer ainsi que l'état d'activation de votre clé API.
402insufficient_credits
Ajoutez des crédits ou réduisez le coût estimé de la tâche. La réponse peut indiquer le solde requis et votre solde disponible.
403forbidden
Veuillez vérifier la restriction au niveau du compte décrite dans le message d'erreur.
404not_found
Vérifiez l'identifiant de la tâche et assurez-vous que la clé API utilisée appartient bien au propriétaire de la tâche.
429rate_limited
Patientez durant l'intervalle indiqué par l'en-tête Retry-After avant de soumettre une nouvelle requête.
500internal_error
Examinez le message d'erreur et les journaux de l'API. Réessayez avec modération ; le renvoi d'une requête de création peut générer une nouvelle tâche facturable.