API v1 Estable

API de descripción de video Documentación

Genere títulos, descripciones y etiquetas impulsados por IA para cualquier video. Procesamiento asíncrono con entrega webhook, sandbox gratuito para pruebas. ¿Prefiere una interfaz? Use el portal web Descrideo para subir videos y gestionar tareas.

¿Prefiere una interfaz? Use nuestro Generador de video para subir videos y obtener resultados sin escribir código.

Inicio rápido

Comience con la API Descrideo en 3 simples pasos. Genere su primera descripción de video en menos de 5 minutos.

1

Obtenga su clave API

Cree una cuenta y obtenga su clave API desde el panel. Cada clave tiene el prefijo nxt_.

Crear cuenta →
2

Cree una tarea de descripción

Envíe una URL de video y especifique su endpoint webhook para recibir resultados.

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

Reciba el webhook con resultados

Una vez completado el procesamiento, enviaremos los resultados a su URL webhook con firma 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
  }
}

Autenticación

Todas las solicitudes API requieren autenticación mediante token Bearer en el encabezado Authorization.

Authorization: Bearer nxt_your_api_key_here

Seguridad: Nunca exponga su clave API en código del lado cliente. Realice siempre las llamadas API desde su servidor backend.

Pruebas Sandbox

Pruebe su integración webhook gratis usando nuestro entorno sandbox. Las tareas sandbox simulan el flujo de trabajo completo sin procesamiento de video real.

Beneficios del Sandbox

  • Cuota diaria gratuita - no se requieren tokens
  • Entregas webhook reales con firmas HMAC
  • No se requiere URL de video
  • Reproducción webhook para depuración
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 demo (puerta de enlace)

La API demo le permite integrar con un flujo de trabajo asíncrono real con entrega webhook antes de la producción. Úsela para validar el acceso directo a URL de video y el receptor webhook.

Límites: 1 tarea/día por clave API demo, solo frames=10, solo lang=en (otros idiomas devuelven 422). Se permiten instrucciones personalizadas.

Endpoints

  • POST /api/demo/v1/video-descriptions — crear tarea demo (solo URL directa)
  • GET /api/demo/v1/video-descriptions/{job_id} — obtener estado/resultado
  • POST /api/demo/v1/video-descriptions/{job_id}/replay-webhook — reproducir webhook reenviado a su receptor
  • GET /api/demo/v1/webhook-secret — obtener secreto webhook para verificación de firma

Crear tarea demo (ejemplo)

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

Firmas webhook

La API demo reenvía webhooks a su URL usando los mismos encabezados de firma que la API principal: X-Nxt-Timestamp y X-Nxt-Signature. Use GET /api/demo/v1/webhook-secret para recuperar el secreto usado para verificación.

Crear tarea de descripción

POST /v1/video-descriptions

Cuerpo de solicitud

Parameter Type Required Description
source object Yes Configuración de fuente de video
type string * direct_url o source_provider
url string * URL directa al archivo de video (cuando type=direct_url)
provider object * Configuración endpoint Source Provider (cuando type=source_provider)
webhook.url string Yes URL para recibir resultados
client_context.output_fields array No Campos a generar: título, descripción, etiquetas
client_context.lang string No Idioma de salida (ISO 639-1), predeterminado: en
frames integer Yes Número de fotogramas a extraer: 10, 20 o 30. Requerido para modos vision y vision_audio. No usado en modo audio.
generation_mode string No vision (predeterminado), vision_audio o audio. Determina el modo de análisis.
transcription object No Configuración de transcripción de audio. Los campos requeridos dependen de generation_mode.
enabled boolean * Habilitar transcripción de audio. Auto-habilitado para modos vision_audio/audio.
segments integer * Número de segmentos de audio a muestrear: 10, 20 o 30
segment_sec number * Duración de cada segmento en segundos (5–60)
client_context.custom_instructions string No Instrucciones IA personalizadas para estilo de salida

Respuesta

Devuelve 202 Accepted con ID de tarea.

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

Obtener estado de tarea

GET /v1/video-descriptions/{job_id}

Consulte el estado de la tarea. Útil para monitorear el progreso si los webhooks no son adecuados.

Estados de tarea

queued

Tarea esperando procesamiento

resolving_source

Resolviendo acceso a video

probing

Analizando metadatos de video

extracting_audio

Extrayendo segmentos de audio

transcribing_audio

Transcribiendo audio a texto

extracting_frames

Extrayendo fotogramas de video

ai_request

IA generando descripciones

succeeded

Procesamiento completado

failed

Procesamiento fallido

Seguridad de webhooks

Todos los webhooks están firmados usando HMAC-SHA256. Verifique las firmas para garantizar autenticidad.

Encabezados de firma

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

Ejemplo de verificación (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)

Consejo: Obtenga su secreto webhook desde GET /v1/webhook-secret

Patrón Source Provider

Para videos privados, use el patrón Source Provider. Su endpoint actúa como intermediario de acceso, devolviendo URL pre-firmadas cuando nuestra API necesita recuperar el video.

Flujo

  1. 1 Envíe una tarea con configuración source.provider
  2. 2 Nuestra API llama a su endpoint con solicitud firmada
  3. 3 Verifique la firma y devuelva la URL pre-firmada
  4. 4 Nuestra API obtiene el video desde la URL pre-firmada

Seguridad: Sus videos permanecen privados. Solo accedemos a ellos mediante URL pre-firmadas temporales que usted controla.

Manejo de errores

La API devuelve códigos de estado HTTP estándar con mensajes de error detallados.

Status Meaning
400 Solicitud incorrecta - Parámetros inválidos
401 No autorizado - Clave API inválida
402 Pago requerido - Tokens insuficientes
404 No encontrado - El recurso no existe
429 Límite de tasa - Demasiadas solicitudes
500 Error interno - Problema del servidor

Facturación y tokens

El costo base por tarea exitosa es 1 token. La transcripción de audio es un complemento facturado por cada 10 segundos de audio muestreado. El costo final se informa en el campo webhook billing.token_cost.

Modo prepago

Compre paquetes de tokens por adelantado. Los tokens se reservan al crear la tarea y se capturan en caso de éxito.

Modo pospago

Pague al final del ciclo de facturación. Establezca límites mensuales opcionales para controlar el gasto.