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.
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éez une tâche de description
Soumettez une URL vidéo et spécifiez votre endpoint webhook pour recevoir les résultats.
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"]
}
}'
Recevez le webhook avec les résultats
Une fois le traitement terminé, nous enverrons les résultats à votre URL webhook avec signature HMAC.
{
"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
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ésultatPOST /api/demo/v1/video-descriptions/{job_id}/replay-webhook— rejouer le webhook transmis à votre récepteurGET /api/demo/v1/webhook-secret— obtenir le secret webhook pour vérification de signature
Créer une tâche démo (exemple)
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
/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
/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
Vous soumettez une tâche avec configuration
source.provider - 2 Notre API appelle votre endpoint avec requête signée
- 3 Vous vérifiez la signature et retournez l'URL pré-signée
- 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.