Utiliser l'API REST de Clevera
Appelez Clevera depuis vos propres scripts : URL de base, authentification par jeton bearer, points de terminaison et les autorisations nécessaires pour chacun, le flux « devis puis démarrage » pour le travail payant, idempotence, format d'erreur et limites de débit.
L'API REST de Clevera permet à vos propres scripts et services d'effectuer les actions qu'un agent peut réaliser via MCP : lire votre bibliothèque, demander des vidéos et des articles, exporter des vidéos, travailler sur des sites de documentation et suivre les tâches. Cet article couvre l'URL de base, l'authentification, le flux de requête pour le travail payant, les erreurs et les limites de débit.
Bases
| URL de base | https://app.clevera.ai/api/v1 |
| Authentification | Authorization: Bearer <token> avec un jeton API (il commence par clv_agent_) |
| Format | JSON en entrée et en sortie. Envoyez Accept: application/json et, avec un corps de requête, Content-Type: application/json. |
| Identifiants | Identifiants publics, tels que job_… pour les tâches. Utilisez les identifiants renvoyés par l'API. |
Vérifiez un jeton avec GET /docs/me :
curl -H "Authorization: Bearer $CLEVERA_TOKEN" \
-H "Accept: application/json" \
https://app.clevera.ai/api/v1/docs/me
La réponse indique qui utilise le jeton : le nom et l'expiration du jeton, la personne et son rôle actuel, l'espace de travail, les sites concernés et les autorisations actives (les autorisations du jeton réduites au rôle actuel de la personne). Appelez-le en premier lorsqu'un appel est refusé.
Points de terminaison
Chaque point de terminaison nécessite l'autorisation indiquée. Appeler l'un d'eux sans autorisation renvoie 403 forbidden_ability. Voir Autorisations de l'agent.
Bibliothèque et matériaux
| Méthode et chemin | Autorisation | Action |
|---|---|---|
GET /create/types |
any | Les types de vidéo et de clip social que vous pouvez demander. |
GET /library |
library:read |
Vidéos, enregistrements et articles que le propriétaire du jeton peut voir. |
GET /recordings |
library:read |
Enregistrements uniquement. |
GET /library/{item} |
library:read |
Un élément. |
GET /library/{item}/transcript |
library:read |
Sa transcription. |
GET /library/{item}/article |
library:read |
Son article. |
GET /library/{item}/embed |
library:read |
Son code d'intégration. |
GET /materials |
library:read |
Images, vidéos et PDF téléchargés. |
POST /materials, POST /materials/import, POST /materials/uploads, POST /materials/uploads/{upload_id}/complete |
materials:write |
Ajouter une image, une vidéo ou un PDF (directement, depuis une URL ou en tant que téléchargement volumineux). |
Vidéos et articles
| Méthode et chemin | Autorisation | Action |
|---|---|---|
POST /videos/quotes |
videos:create |
Créer un devis pour une vidéo à partir d'un enregistrement (type : how_to, product_demo, cleanup, styled_video), un article à partir d'un enregistrement (article) ou une traduction (translation). |
POST /videos |
videos:create + credits:spend |
Créer la vidéo citée (quote_id). |
POST /articles/from-recording |
videos:create + credits:spend |
Créer l'article cité. |
POST /videos/translations |
videos:create + credits:spend |
Créer la traduction citée. |
POST /clips/quotes |
videos:create |
Créer un devis pour un clip social (types de GET /create/types). |
POST /clips |
videos:create + credits:spend |
Créer le clip social cité. |
POST /videos/{video_id}/exports |
videos:export |
Rendre un MP4 : resolution 1080p (par défaut), 2k ou 4k ; toujours 60 fps. Gratuit. |
Tâches et crédits
| Méthode et chemin | Autorisation | Action |
|---|---|---|
POST /quotes |
autorisation du travail | Un devis pour tout type de tâche. |
POST /jobs |
autorisation du travail (+ credits:spend si payant) |
Démarrer une tâche citée. |
GET /jobs |
jobs:read |
Lister les tâches. |
GET /jobs/{job} |
jobs:read |
Statut et résultat d'une tâche. |
GET /jobs/{job}/wait |
jobs:read |
Attendre un changement au lieu d'interroger. |
GET /jobs/{job}/events |
jobs:read |
Événements de progression de la tâche. |
POST /jobs/{job}/cancel |
jobs:read |
Annuler une tâche. Trop tard : « Cette tâche ne peut plus être annulée. » |
GET /credits |
credits:spend ou jobs:read |
Solde de crédits de l'espace de travail. |
Sites de documentation
| Méthode et chemin | Autorisation | Action |
|---|---|---|
GET /docs/sites, GET /docs/sites/{site}, GET /docs/sites/{site}/tree, GET /docs/sites/{site}/pages |
content:read |
Sites dans le périmètre du jeton et leurs pages. |
GET /docs/sites/{site}/search, GET /docs/pages/{page}, GET /docs/pages/{page}/revisions |
content:read |
Rechercher et lire des pages, brouillons inclus. |
POST /docs/sites/{site}/articles, PATCH /docs/pages/{page}/article, POST /docs/pages/{page}/review |
articles:write |
Créer et modifier des articles brouillons, soumettre pour révision. Les articles en ligne nécessitent aussi site:publish. |
PATCH /docs/pages/{page}, DELETE /docs/pages/{page}, POST /docs/sites/{site}/sections, PATCH /docs/sections/{section} |
structure:write |
Déplacer, renommer, masquer et supprimer des pages ; sections. |
GET/POST /docs/sites/{site}/site-pages, PUT /docs/site-pages/{page}/body |
content:read / site-pages:write |
Pages d'accueil, de contact et légales. |
GET/POST /docs/sites/{site}/changelog, PATCH /docs/changelog/{entry} |
content:read / changelog:write |
Entrées de journal des modifications en tant que brouillons. |
POST /docs/media, POST /docs/media/uploads |
media:write |
Télécharger des images. |
POST /docs/sites/{site}/publish, POST /docs/pages/{page}/ready, POST /docs/changelog/{entry}/publish |
site:publish |
Publier ce que les lecteurs voient. |
GET /insights/sites/{site}, …/gaps, …/feedback |
insights:read |
Rechercher les lacunes, questions sans réponse, retours sur les pages. |
PATCH /docs/sites/{site}/settings, …/appearance, PUT …/navigation, POST …/redirects |
site:configure |
Paramètres du site. |
POST /docs/sites |
sites:create |
Créer un site de documentation. |
Plus d'informations sur les agents et les sites de documentation : Connecter des agents IA à vos sites de documentation.
Demander un travail payant
Le travail qui coûte des crédits nécessite toujours un devis d'abord, puis un démarrage :
- Faire un devis.
POST /videos/quotes(ou/clips/quotes) avec ce que vous voulez. La réponse contient unquote_idet la fourchette de crédits. Un devis est valide pendant 15 minutes et peut être utilisé une fois. - Optionnellement, faire un test (dry-run). Envoyez le démarrage avec
"dry_run": truepour savoir s'il démarrerait, nécessiterait une approbation ou serait bloqué. Rien n'est écrit. - Démarrer.
POST /videosavecquote_idet un en-têteIdempotency-Key. La réponse est202avec une tâche. - Suivre.
GET /jobs/{job}/waitjusqu'à ce que lestatusde la tâche change, ou écoutez les webhooks.
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>"}'
Statuts des tâches :
| Statut | Signification |
|---|---|
queued |
Accepté, sur le point de s'exécuter. |
running |
En cours. |
needs_input |
En attente d'une personne, généralement une approbation sur Requêtes de l'agent. La tâche contient un lien et une date d'expiration. |
succeeded |
Terminé. La tâche renvoie vers la nouvelle vidéo ou le nouvel article. |
failed |
Échec ; la tâche contient une error_code. |
canceled |
Annulé, ou son approbation a été refusée. |
expired |
Personne ne l'a approuvé dans les 24 heures. |
Le fait qu'un démarrage s'exécute immédiatement ou attende une personne dépend des plafonds de dépenses du jeton et de son paramètre Approuver automatiquement ci-dessous. Voir Contrôler les dépenses et les approbations des agents.
Tentatives et idempotence
Envoyez un en-tête Idempotency-Key (un UUID unique par action) à chaque création et démarrage. Si le réseau tombe et que vous réessayez avec la même clé et le même corps, vous recevrez la première réponse au lieu d'une deuxième vidéo. Les clés sont conservées pendant 24 heures.
| Code | Signification |
|---|---|
idempotency_key_reused |
La même clé avec un corps différent. Utilisez une nouvelle clé pour une nouvelle requête. |
idempotency_in_progress |
La première requête avec cette clé est toujours en cours. Attendez et réessayez. |
idempotency_conflict |
« Cette clé d'idempotence a été utilisée pour une requête différente. » |
Erreurs
Chaque erreur a la même forme, avec un message indiquant quoi faire ensuite :
{
"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"
}
Incluez le request_id lorsque vous contactez le support.
| HTTP | Codes | Cause typique |
|---|---|---|
| 401 | unauthenticated, token_expired, token_revoked |
Pas de jeton, un jeton erroné, expiré ou révoqué. |
| 402 | insufficient_credits |
L'espace de travail n'a pas assez de crédits pour le devis. |
| 403 | forbidden_ability, forbidden_role, forbidden_item, ip_not_allowed, live_content_needs_publish, site_paused, forbidden |
Une autorisation manquante, le rôle du propriétaire, l'accès à la collection ou la liste blanche IP. |
| 403 | plan_locked |
« L'API agent n'est pas incluse dans le plan de cet espace de travail. Elle est disponible à partir du plan Pro. » |
| 404 | not_found, unknown_kind |
« Aucun … avec cet identifiant dans le périmètre de ce jeton. Listez ou recherchez d'abord et utilisez un identifiant renvoyé. » |
| 409 | revision_conflict, quote_used, not_cancelable, idempotency_* |
Le contenu a changé, le devis a été utilisé ou conflit de tentative. |
| 410 | quote_expired |
« Ce devis a expiré. Demandez un nouveau devis. » |
| 413 | unsupported_media |
Le fichier est trop volumineux ou n'est pas d'un type pris en charge. |
| 422 | validation_failed, invalid_input, quote_mismatch, limit_reached |
Un champ est erroné ; details le nomme. |
| 429 | rate_limited, cap_exceeded, busy |
Trop de requêtes, plafond de dépenses atteint ou deux démarrages simultanés. |
Chaque message, avec sa solution : Corriger les erreurs d'agent et d'API.
Limites de débit
| Limite | Valeur | Message |
|---|---|---|
| Requêtes par jeton | 300 par minute | « Ce jeton dépasse son taux de requête. Attendez et réessayez. » |
| Requêtes par espace de travail | 1 200 par minute, tous jetons confondus | « Cet espace de travail dépasse son taux de requête d'agent. Attendez et réessayez. » |
| Écritures par jeton | 60 par minute | « Trop d'écritures depuis ce jeton. Attendez et réessayez. » |
| Écritures par jeton par jour | 2 000 | « Ce jeton a atteint sa limite d'écriture quotidienne. Réessayez demain. » |
| Publications par jeton | 10 par heure | « Ce jeton a atteint sa limite de publication horaire. Réessayez plus tard. » |
| Démarrages payants | 20 par heure par jeton, 100 par jour par espace de travail | rate_limited avec retry_after |
| Téléchargements | 30 par minute ; 500 Mo par jour par jeton ; 25 Mo par fichier | « Trop de téléchargements depuis ce jeton. Attendez et réessayez. » / « Ce jeton a atteint son volume de téléchargement quotidien. Réessayez demain. » |
| Appels sans jeton valide | 60 par minute par adresse IP | « Trop de requêtes. Attendez et réessayez. » |
Une réponse 429 contient un en-tête Retry-After et retry_after (secondes) dans le corps. Attendez ce délai avant de réessayer. Les lectures, devis et vérifications de statut ne coûtent aucun crédit.