API v1 Stable

API de description vidéo Documentation

Générez des titres, des descriptions et des balises alimentés par IA pour n'importe quelle vidéo. Traitement asynchrone avec livraison webhook, sandbox gratuit pour les tests. Vous préférez une interface utilisateur ? Utilisez le portail web Descrideo pour télécharger des vidéos et gérer les tâches.

Vous préférez une interface ? Utilisez notre Générateur vidéo pour télécharger des vidéos et obtenir des résultats sans écrire de code.

Démarrage rapide

Commencez avec l'API Descrideo en 3 étapes simples. Générez votre première description vidéo en moins de 5 minutes.

1

Obtenez votre clé API

Créez un compte et obtenez votre clé API depuis le tableau de bord. Chaque clé est préfixée avec nxt_.

Créer un compte →
2

Créez une tâche de description

Soumettez une URL vidéo et spécifiez votre endpoint webhook pour recevoir les résultats.

Request POST
curl -X POST https://api.descrideo.com/v1/video-descriptions \
  -H "X-API-Key: nxt_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "source": {
      "type": "direct_url",
      "url": "https://example.com/video.mp4"
    },
    "frames": 20,
    "generation_mode": "vision",
    "webhook": {
      "url": "https://your-app.com/webhooks/video"
    },
    "client_context": {
      "lang": "en",
      "output_fields": ["title", "description", "tags"]
    }
  }'
3

Recevez le webhook avec les résultats

Une fois le traitement terminé, nous enverrons les résultats à votre URL webhook avec signature HMAC.

Webhook Payload
{
  "job_id": "01HXYZ123ABC",
  "status": "succeeded",
  "result": {
    "title": "Mountain Hiking Adventure in Swiss Alps",
    "description": "A breathtaking journey through...",
    "tags": ["hiking", "mountains", "switzerland", "nature"]
  },
  "billing": {
    "token_cost": 1.23,
    "base_cost": 1.0,
    "transcription_cost": 0.23,
    "franchise_cost": 0.0
  },
  "meta": {
    "generation_mode": "vision_audio",
    "transcription": {
      "enabled": true,
      "status": "completed",
      "seconds": 45.5
    }
  },
  "timing_ms": {
    "probe": 500,
    "audio": 3200,
    "frames": 2100,
    "ai": 8100,
    "webhook": 120
  }
}

Authentification

Toutes les requêtes API nécessitent une authentification via jeton Bearer dans l'en-tête Authorization.

Authorization: Bearer nxt_your_api_key_here

Sécurité : N'exposez jamais votre clé API dans du code côté client. Effectuez toujours les appels API depuis votre serveur backend.

Tests Sandbox

Testez votre intégration webhook gratuitement en utilisant notre environnement sandbox. Les tâches sandbox simulent le flux de travail complet sans traitement vidéo réel.

Avantages du Sandbox

  • Quota quotidien gratuit - aucun jeton requis
  • Livraisons webhook réelles avec signatures HMAC
  • Aucune URL vidéo requise
  • Rejeu webhook pour débogage
Sandbox Request POST
POST /v1/sandbox/video-descriptions

{
  "frames": 10,
  "webhook": {
    "url": "https://your-app.com/webhooks/video"
  },
  "client_context": {
    "lang": "en",
    "output_fields": ["title", "description", "tags"],
    "custom_instructions": "Focus on technical details"
  }
}

API démo (passerelle)

L'API démo vous permet d'intégrer un flux de travail asynchrone réel avec livraison webhook avant la mise en production. Utilisez-la pour valider l'accès direct à l'URL vidéo et le récepteur webhook.

Limites : 1 tâche/jour par clé API démo, frames=10 uniquement, lang=en uniquement (les autres langues renvoient 422). Les instructions personnalisées sont autorisées.

Endpoints

  • POST /api/demo/v1/video-descriptions — créer une tâche démo (URL directe uniquement)
  • GET /api/demo/v1/video-descriptions/{job_id} — obtenir le statut/résultat
  • POST /api/demo/v1/video-descriptions/{job_id}/replay-webhook — rejouer le webhook transmis à votre récepteur
  • GET /api/demo/v1/webhook-secret — obtenir le secret webhook pour vérification de signature

Créer une tâche démo (exemple)

Request POST
curl -X POST https://your-portal.com/api/demo/v1/video-descriptions \
  -H "X-API-Key: demo_your_demo_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "source": {
      "type": "direct_url",
      "url": "https://example.com/video.mp4"
    },
    "frames": 10,
    "webhook": {
      "url": "https://your-app.com/webhooks/demo"
    },
    "client_context": {
      "lang": "en",
      "output_fields": ["title", "description", "tags"],
      "custom_instructions": "Make the description more detailed"
    }
  }'

Signatures webhook

L'API démo transmet les webhooks à votre URL en utilisant les mêmes en-têtes de signature que l'API principale : X-Nxt-Timestamp et X-Nxt-Signature. Utilisez GET /api/demo/v1/webhook-secret pour récupérer le secret utilisé pour la vérification.

Créer une tâche de description

POST /v1/video-descriptions

Corps de la requête

Parameter Type Required Description
source object Yes Configuration de la source vidéo
type string * direct_url ou source_provider
url string * URL directe vers le fichier vidéo (quand type=direct_url)
provider object * Configuration endpoint Source Provider (quand type=source_provider)
webhook.url string Yes URL pour recevoir les résultats
client_context.output_fields array No Champs à générer : titre, description, balises
client_context.lang string No Langue de sortie (ISO 639-1), défaut : en
frames integer Yes Nombre d'images à extraire : 10, 20 ou 30. Requis pour les modes vision et vision_audio. Non utilisé en mode audio.
generation_mode string No vision (défaut), vision_audio ou audio. Détermine le mode d'analyse.
transcription object No Paramètres de transcription audio. Les champs requis dépendent du generation_mode.
enabled boolean * Activer la transcription audio. Auto-activé pour les modes vision_audio/audio.
segments integer * Nombre de segments audio à échantillonner : 10, 20 ou 30
segment_sec number * Durée de chaque segment en secondes (5–60)
client_context.custom_instructions string No Instructions IA personnalisées pour le style de sortie

Réponse

Retourne 202 Accepted avec l'ID de la tâche.

{
  "job_id": "01HXYZ123ABC",
  "status": "queued"
}

Obtenir le statut de la tâche

GET /v1/video-descriptions/{job_id}

Interrogez le statut de la tâche. Utile pour surveiller la progression si les webhooks ne conviennent pas.

Statuts de tâche

queued

Tâche en attente de traitement

resolving_source

Résolution de l'accès vidéo

probing

Analyse des métadonnées vidéo

extracting_audio

Extraction des segments audio

transcribing_audio

Transcription audio en texte

extracting_frames

Extraction des images vidéo

ai_request

IA générant des descriptions

succeeded

Traitement terminé

failed

Échec du traitement

Sécurité des webhooks

Tous les webhooks sont signés en utilisant HMAC-SHA256. Vérifiez les signatures pour garantir l'authenticité.

En-têtes de signature

X-Nxt-Timestamp: 1707400000
X-Nxt-Signature: sha256=abc123def456...

Exemple de vérification (Python)

import hmac
import hashlib

def verify_webhook(raw_body: bytes, timestamp: str, signature_header: str, secret: str) -> bool:
    # Signature header format: "sha256="
    expected_sig = signature_header.removeprefix("sha256=")
    message = raw_body + timestamp.encode()
    computed = hmac.new(secret.encode(), message, hashlib.sha256).hexdigest()
    return hmac.compare_digest(computed, expected_sig)

Astuce : Obtenez votre secret webhook depuis GET /v1/webhook-secret

Modèle Source Provider

Pour les vidéos privées, utilisez le modèle Source Provider. Votre endpoint agit comme courtier d'accès, retournant des URL pré-signées lorsque notre API a besoin de récupérer la vidéo.

Flux

  1. 1 Vous soumettez une tâche avec configuration source.provider
  2. 2 Notre API appelle votre endpoint avec requête signée
  3. 3 Vous vérifiez la signature et retournez l'URL pré-signée
  4. 4 Notre API récupère la vidéo depuis l'URL pré-signée

Sécurité : Vos vidéos restent privées. Nous y accédons uniquement via des URL pré-signées temporaires que vous contrôlez.

Gestion des erreurs

L'API retourne des codes de statut HTTP standard avec messages d'erreur détaillés.

Status Meaning
400 Mauvaise requête - Paramètres invalides
401 Non autorisé - Clé API invalide
402 Paiement requis - Jetons insuffisants
404 Non trouvé - La ressource n'existe pas
429 Limite de taux - Trop de requêtes
500 Erreur interne - Problème serveur

Facturation et jetons

Le coût de base par tâche réussie est de 1 jeton. La transcription audio est un supplément facturé par tranche de 10 secondes d'audio échantillonné. Le coût final est rapporté dans le champ webhook billing.token_cost.

Mode prépayé

Achetez des paquets de jetons à l'avance. Les jetons sont réservés à la création de la tâche et capturés en cas de succès.

Mode postpayé

Payez à la fin du cycle de facturation. Définissez des limites mensuelles optionnelles pour contrôler les dépenses.