Saltar al contenido
Centro de ayuda de Clevera

Usa la API REST de Clevera

Llama a Clevera desde tus propios scripts: URL base, autenticación con token de portador (bearer-token), endpoints y los permisos que cada uno necesita, el flujo de cotizar y luego iniciar para trabajos de pago, idempotencia, formato de errores y límites de tasa.

Actualizado 9 min de lectura

La API REST de Clevera permite que tus propios scripts y servicios hagan lo que un agente puede hacer a través de MCP: leer tu biblioteca, solicitar videos y artículos, exportar videos, trabajar en sitios de documentación y seguir los trabajos. Este artículo cubre la URL base, la autenticación, el flujo de solicitud para trabajos de pago, los errores y los límites de tasa.

Conceptos básicos

URL base https://app.clevera.ai/api/v1
Autenticación Authorization: Bearer <token> con un token de API (comienza con clv_agent_)
Formato JSON de entrada y salida. Envía Accept: application/json y, con un cuerpo, Content-Type: application/json.
Ids Ids públicos, como job_… para trabajos. Usa los ids que devuelve la API.

Verifica un token con GET /docs/me:

Terminal
curl -H "Authorization: Bearer $CLEVERA_TOKEN" \
     -H "Accept: application/json" \
     https://app.clevera.ai/api/v1/docs/me

La respuesta indica quién actúa con el token: el nombre y la fecha de caducidad del token, la persona y su rol actual, el espacio de trabajo, los sitios incluidos en el alcance y los permisos que funcionan en este momento (los permisos del token recortados al rol actual de la persona). Llama a esto primero cuando se rechace una llamada.

Endpoints

Cada endpoint necesita el permiso mostrado. Llamar a uno sin él devuelve 403 forbidden_ability. Consulta Permisos del agente.

Biblioteca y materiales

Método y ruta Permiso Qué hace
GET /create/types any Los tipos de video y clip social que puedes solicitar.
GET /library library:read Videos, grabaciones y artículos que el propietario del token puede ver.
GET /recordings library:read Solo grabaciones.
GET /library/{item} library:read Un elemento.
GET /library/{item}/transcript library:read Su transcripción.
GET /library/{item}/article library:read Su artículo.
GET /library/{item}/embed library:read Su código de inserción.
GET /materials library:read Imágenes, videos y PDFs subidos.
POST /materials, POST /materials/import, POST /materials/uploads, POST /materials/uploads/{upload_id}/complete materials:write Añadir una imagen, video o PDF (directamente, desde una URL o como una subida grande).

Videos y artículos

Método y ruta Permiso Qué hace
POST /videos/quotes videos:create Cotizar un video a partir de una grabación (type: how_to, product_demo, cleanup, styled_video), un artículo a partir de una grabación (article) o una traducción (translation).
POST /videos videos:create + credits:spend Crear el video cotizado (quote_id).
POST /articles/from-recording videos:create + credits:spend Crear el artículo cotizado.
POST /videos/translations videos:create + credits:spend Crear la traducción cotizada.
POST /clips/quotes videos:create Cotizar un clip social (tipos de GET /create/types).
POST /clips videos:create + credits:spend Crear el clip social cotizado.
POST /videos/{video_id}/exports videos:export Renderizar un MP4: resolution 1080p (predeterminado), 2k o 4k; siempre a 60 fps. Gratis.

Trabajos y créditos

Método y ruta Permiso Qué hace
POST /quotes el permiso del trabajo Una cotización para cualquier tipo de trabajo.
POST /jobs el permiso del trabajo (+ credits:spend cuando es de pago) Iniciar un trabajo cotizado.
GET /jobs jobs:read Listar trabajos.
GET /jobs/{job} jobs:read Estado y resultado de un trabajo.
GET /jobs/{job}/wait jobs:read Esperar un cambio en lugar de consultar el estado.
GET /jobs/{job}/events jobs:read Eventos de progreso del trabajo.
POST /jobs/{job}/cancel jobs:read Cancelar un trabajo. Demasiado tarde: "Este trabajo ya no se puede cancelar".
GET /credits credits:spend o jobs:read Saldo de créditos del espacio de trabajo.

Sitios de documentación

Método y ruta Permiso Qué hace
GET /docs/sites, GET /docs/sites/{site}, GET /docs/sites/{site}/tree, GET /docs/sites/{site}/pages content:read Sitios en el alcance del token y sus páginas.
GET /docs/sites/{site}/search, GET /docs/pages/{page}, GET /docs/pages/{page}/revisions content:read Buscar y leer páginas, incluidos borradores.
POST /docs/sites/{site}/articles, PATCH /docs/pages/{page}/article, POST /docs/pages/{page}/review articles:write Crear y editar borradores de artículos, enviar para revisión. Los artículos publicados también necesitan site:publish.
PATCH /docs/pages/{page}, DELETE /docs/pages/{page}, POST /docs/sites/{site}/sections, PATCH /docs/sections/{section} structure:write Mover, renombrar, ocultar y eliminar páginas; secciones.
GET/POST /docs/sites/{site}/site-pages, PUT /docs/site-pages/{page}/body content:read / site-pages:write Páginas de inicio, contacto y legales.
GET/POST /docs/sites/{site}/changelog, PATCH /docs/changelog/{entry} content:read / changelog:write Entradas del registro de cambios como borradores.
POST /docs/media, POST /docs/media/uploads media:write Subir imágenes.
POST /docs/sites/{site}/publish, POST /docs/pages/{page}/ready, POST /docs/changelog/{entry}/publish site:publish Publicar lo que ven los lectores.
GET /insights/sites/{site}, …/gaps, …/feedback insights:read Buscar brechas, preguntas sin respuesta, comentarios de página.
PATCH /docs/sites/{site}/settings, …/appearance, PUT …/navigation, POST …/redirects site:configure Configuración del sitio.
POST /docs/sites sites:create Crear un sitio de documentación.

Más sobre agentes y sitios de documentación: Conectar agentes de IA a tus sitios de documentación.

El trabajo que cuesta créditos siempre requiere cotizar primero y luego iniciar:

  1. Cotízalo. POST /videos/quotes (o /clips/quotes) con lo que deseas. La respuesta tiene un quote_id y el rango de créditos. Una cotización es válida por 15 minutos y se puede usar una vez.
  2. Opcionalmente, haz una prueba. Envía el inicio con "dry_run": true para saber si comenzaría, si necesita aprobación o si está bloqueado. No se escribe nada.
  3. Inícialo. POST /videos con quote_id y un encabezado Idempotency-Key. La respuesta es 202 con un trabajo.
  4. Síguelo. GET /jobs/{job}/wait hasta que el status del trabajo cambie, o escucha los webhooks.
Quote, then start a how-to video
curl -X POST https://app.clevera.ai/api/v1/videos/quotes \
  -H "Authorization: Bearer $CLEVERA_TOKEN" -H "Content-Type: application/json" \
  -d '{"type": "how_to", "recording_id": "<recording id>", "language": "en-US"}'

curl -X POST https://app.clevera.ai/api/v1/videos \
  -H "Authorization: Bearer $CLEVERA_TOKEN" -H "Content-Type: application/json" \
  -H "Idempotency-Key: 3f6c1a2e-8d4b-4f7a-9c1e-2b5d7e9f0a13" \
  -d '{"quote_id": "<quote id>"}'

Estados del trabajo:

Estado Significado
queued Aceptado, a punto de ejecutarse.
running En ejecución.
needs_input Esperando a una persona, generalmente una aprobación en Solicitudes del agente. El trabajo incluye un enlace y una fecha de caducidad.
succeeded Hecho. El trabajo enlaza el nuevo video o artículo.
failed Falló; el trabajo tiene un error_code.
canceled Cancelado, o su aprobación fue denegada.
expired Nadie lo aprobó en 24 horas.

Si un inicio se ejecuta de inmediato o espera a una persona depende de los límites de gasto del token y su configuración de Aprobar automáticamente por debajo de. Consulta Controlar el gasto y las aprobaciones del agente.

Reintentos e idempotencia

Envía un encabezado Idempotency-Key (un UUID nuevo por acción) en cada creación e inicio. Si la red se cae y reintentas con la misma clave y cuerpo, obtienes la primera respuesta en lugar de un segundo video. Las claves se recuerdan durante 24 horas.

Código Significado
idempotency_key_reused La misma clave con un cuerpo diferente. Usa una clave nueva para una solicitud nueva.
idempotency_in_progress La primera solicitud con esta clave aún se está ejecutando. Espera y reintenta.
idempotency_conflict "Esta clave de idempotencia se usó para una solicitud diferente".

Errores

Cada error tiene la misma forma, con un mensaje que indica qué hacer a continuación:

{
  "error": {
    "code": "forbidden_ability",
    "message": "This token lacks the videos:create ability. Ask the workspace member who owns it for a token that has it.",
    "details": { "ability": "videos:create" }
  },
  "request_id": "req_example"
}

Incluye el request_id cuando contactes a soporte.

HTTP Códigos Causa típica
401 unauthenticated, token_expired, token_revoked Sin token, uno incorrecto, o uno que caducó o fue revocado.
402 insufficient_credits El espacio de trabajo no tiene suficientes créditos para la cotización.
403 forbidden_ability, forbidden_role, forbidden_item, ip_not_allowed, live_content_needs_publish, site_paused, forbidden Un permiso faltante, el rol del propietario, acceso a la colección o la lista blanca de IP.
403 plan_locked "La API del agente no está en el plan de este espacio de trabajo. Está en Pro y superior".
404 not_found, unknown_kind "No hay … con ese id en el alcance de este token. Lista o busca primero y usa un id devuelto".
409 revision_conflict, quote_used, not_cancelable, idempotency_* El contenido cambió, la cotización se usó o un conflicto de reintento.
410 quote_expired "Esta cotización ha caducado. Solicita una nueva cotización".
413 unsupported_media El archivo es demasiado grande o no es un tipo compatible.
422 validation_failed, invalid_input, quote_mismatch, limit_reached Un campo es incorrecto; details lo nombra.
429 rate_limited, cap_exceeded, busy Demasiadas solicitudes, un límite de gasto o dos inicios a la vez.

Cada mensaje, con la solución: Corregir errores del agente y de la API.

Límites de tasa

Límite Valor Mensaje
Solicitudes por token 300 por minuto "Este token ha superado su tasa de solicitudes. Espera y reintenta".
Solicitudes por espacio de trabajo 1,200 por minuto, todos los tokens juntos "Este espacio de trabajo ha superado su tasa de solicitudes de agente. Espera y reintenta".
Escrituras por token 60 por minuto "Demasiadas escrituras desde este token. Espera y reintenta".
Escrituras por token por día 2,000 "Este token alcanzó su límite diario de escritura. Inténtalo de nuevo mañana".
Publicaciones por token 10 por hora "Este token alcanzó su límite horario de publicación. Inténtalo de nuevo más tarde".
Inicios de pago 20 por hora por token, 100 al día por espacio de trabajo rate_limited con retry_after
Subidas 30 por minuto; 500 MB al día por token; 25 MB por archivo "Demasiadas subidas desde este token. Espera y reintenta" / "Este token alcanzó su volumen diario de subida. Inténtalo de nuevo mañana".
Llamadas sin un token válido 60 por minuto por dirección IP "Demasiadas solicitudes. Espera y reintenta".

Una respuesta 429 tiene un encabezado Retry-After y retry_after (segundos) en el cuerpo. Espera ese tiempo antes de reintentar. Las lecturas, cotizaciones y comprobaciones de estado no cuestan créditos.