Usa la REST API di Clevera
Chiama Clevera dai tuoi script: URL di base, autenticazione con bearer-token, endpoint e i relativi permessi necessari, il flusso di preventivo-e-avvio per il lavoro a pagamento, idempotenza, formato degli errori e limiti di frequenza.
La REST API di Clevera consente ai tuoi script e servizi di eseguire ciò che un agente può fare tramite MCP: leggere la tua libreria, richiedere video e articoli, esportare video, lavorare su siti di documentazione e seguire i lavori. Questo articolo copre l'URL di base, l'autenticazione, il flusso di richiesta per il lavoro a pagamento, gli errori e i limiti di frequenza.
Nozioni di base
| URL di base | https://app.clevera.ai/api/v1 |
| Autenticazione | Authorization: Bearer <token> con un token API (inizia con clv_agent_) |
| Formato | JSON in entrata e in uscita. Invia Accept: application/json e, con un corpo, Content-Type: application/json. |
| Id | Id pubblici, come job_… per i lavori. Usa gli id restituiti dall'API. |
Verifica un token con GET /docs/me:
curl -H "Authorization: Bearer $CLEVERA_TOKEN" \
-H "Accept: application/json" \
https://app.clevera.ai/api/v1/docs/me
La risposta indica per conto di chi agisce il token: nome e scadenza del token, la persona e il suo ruolo attuale, l'area di lavoro, i siti inclusi nell'ambito e i permessi attualmente attivi (i permessi del token ridotti al ruolo attuale della persona). Chiamalo per primo quando una chiamata viene rifiutata.
Endpoint
Ogni endpoint richiede il permesso mostrato. Chiamarne uno senza di esso restituisce 403 forbidden_ability. Vedi Permessi dell'agente.
Libreria e materiali
| Metodo e percorso | Permesso | Cosa fa |
|---|---|---|
GET /create/types |
any | I tipi di video e clip social che puoi richiedere. |
GET /library |
library:read |
Video, registrazioni e articoli che il proprietario del token può vedere. |
GET /recordings |
library:read |
Solo registrazioni. |
GET /library/{item} |
library:read |
Un elemento. |
GET /library/{item}/transcript |
library:read |
La sua trascrizione. |
GET /library/{item}/article |
library:read |
Il suo articolo. |
GET /library/{item}/embed |
library:read |
Il suo codice di incorporamento. |
GET /materials |
library:read |
Immagini, video e PDF caricati. |
POST /materials, POST /materials/import, POST /materials/uploads, POST /materials/uploads/{upload_id}/complete |
materials:write |
Aggiungi un'immagine, un video o un PDF (direttamente, da un URL o come caricamento di grandi dimensioni). |
Video e articoli
| Metodo e percorso | Permesso | Cosa fa |
|---|---|---|
POST /videos/quotes |
videos:create |
Cita un video da una registrazione (type: how_to, product_demo, cleanup, styled_video), un articolo da una registrazione (article) o una traduzione (translation). |
POST /videos |
videos:create + credits:spend |
Crea il video citato (quote_id). |
POST /articles/from-recording |
videos:create + credits:spend |
Crea l'articolo citato. |
POST /videos/translations |
videos:create + credits:spend |
Crea la traduzione citata. |
POST /clips/quotes |
videos:create |
Cita una clip social (tipi da GET /create/types). |
POST /clips |
videos:create + credits:spend |
Crea la clip social citata. |
POST /videos/{video_id}/exports |
videos:export |
Esegui il rendering di un MP4: resolution 1080p (predefinito), 2k o 4k; sempre 60 fps. Gratuito. |
Lavori e crediti
| Metodo e percorso | Permesso | Cosa fa |
|---|---|---|
POST /quotes |
il permesso del lavoro | Un preventivo per qualsiasi tipo di lavoro. |
POST /jobs |
il permesso del lavoro (+ credits:spend quando a pagamento) |
Avvia un lavoro preventivato. |
GET /jobs |
jobs:read |
Elenca i lavori. |
GET /jobs/{job} |
jobs:read |
Stato e risultato di un lavoro. |
GET /jobs/{job}/wait |
jobs:read |
Attendi un cambiamento invece di eseguire il polling. |
GET /jobs/{job}/events |
jobs:read |
Eventi di avanzamento del lavoro. |
POST /jobs/{job}/cancel |
jobs:read |
Annulla un lavoro. Troppo tardi: "Questo lavoro non può più essere annullato." |
GET /credits |
credits:spend o jobs:read |
Saldo crediti dell'area di lavoro. |
Siti di documentazione
| Metodo e percorso | Permesso | Cosa fa |
|---|---|---|
GET /docs/sites, GET /docs/sites/{site}, GET /docs/sites/{site}/tree, GET /docs/sites/{site}/pages |
content:read |
Siti nell'ambito del token e le loro pagine. |
GET /docs/sites/{site}/search, GET /docs/pages/{page}, GET /docs/pages/{page}/revisions |
content:read |
Cerca e leggi pagine, bozze incluse. |
POST /docs/sites/{site}/articles, PATCH /docs/pages/{page}/article, POST /docs/pages/{page}/review |
articles:write |
Crea e modifica bozze di articoli, invia per la revisione. Gli articoli pubblicati richiedono anche site:publish. |
PATCH /docs/pages/{page}, DELETE /docs/pages/{page}, POST /docs/sites/{site}/sections, PATCH /docs/sections/{section} |
structure:write |
Sposta, rinomina, nascondi e rimuovi pagine; sezioni. |
GET/POST /docs/sites/{site}/site-pages, PUT /docs/site-pages/{page}/body |
content:read / site-pages:write |
Pagine home, contatti e legali. |
GET/POST /docs/sites/{site}/changelog, PATCH /docs/changelog/{entry} |
content:read / changelog:write |
Voci del registro delle modifiche come bozze. |
POST /docs/media, POST /docs/media/uploads |
media:write |
Carica immagini. |
POST /docs/sites/{site}/publish, POST /docs/pages/{page}/ready, POST /docs/changelog/{entry}/publish |
site:publish |
Pubblica ciò che vedono i lettori. |
GET /insights/sites/{site}, …/gaps, …/feedback |
insights:read |
Lacune di ricerca, domande senza risposta, feedback sulle pagine. |
PATCH /docs/sites/{site}/settings, …/appearance, PUT …/navigation, POST …/redirects |
site:configure |
Impostazioni del sito. |
POST /docs/sites |
sites:create |
Crea un sito di documentazione. |
Altro su agenti e siti di documentazione: Connetti agenti AI ai tuoi siti di documentazione.
Richiedi lavoro a pagamento
Il lavoro che costa crediti prevede sempre prima un preventivo, poi l'avvio:
- Preventivalo.
POST /videos/quotes(o/clips/quotes) con ciò che desideri. La risposta contiene unquote_ide l'intervallo di crediti. Un preventivo è valido per 15 minuti e può essere utilizzato una volta. - Facoltativamente, esegui una prova. Invia l'avvio con
"dry_run": trueper sapere se verrebbe avviato, se necessita di approvazione o se verrebbe bloccato. Non viene scritto nulla. - Avvialo.
POST /videosconquote_ide un'intestazioneIdempotency-Key. La risposta è202con un lavoro. - Seguilo.
GET /jobs/{job}/waitfinché lostatusdel lavoro non cambia, oppure ascolta i webhook.
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>"}'
Stati del lavoro:
| Stato | Significato |
|---|---|
queued |
Accettato, in procinto di essere eseguito. |
running |
In esecuzione. |
needs_input |
In attesa di una persona, solitamente un'approvazione su Richieste dell'agente. Il lavoro contiene un link e una scadenza. |
succeeded |
Completato. Il lavoro collega il nuovo video o articolo. |
failed |
Non riuscito; il lavoro ha un error_code. |
canceled |
Annullato, o la sua approvazione è stata negata. |
expired |
Nessuno lo ha approvato entro 24 ore. |
Se un avvio viene eseguito immediatamente o attende una persona dipende dai limiti di spesa del token e dalla sua impostazione Approva automaticamente sotto. Vedi Controlla la spesa e le approvazioni dell'agente.
Riprova e idempotenza
Invia un'intestazione Idempotency-Key (un UUID nuovo per ogni azione) a ogni creazione e avvio. Se la rete cade e riprovi con la stessa chiave e lo stesso corpo, riceverai la prima risposta invece di un secondo video. Le chiavi vengono memorizzate per 24 ore.
| Codice | Significato |
|---|---|
idempotency_key_reused |
La stessa chiave con un corpo diverso. Usa una nuova chiave per una nuova richiesta. |
idempotency_in_progress |
La prima richiesta con questa chiave è ancora in esecuzione. Attendi e riprova. |
idempotency_conflict |
"Questa chiave di idempotenza è stata utilizzata per una richiesta diversa." |
Errori
Ogni errore ha la stessa forma, con un messaggio che indica cosa fare dopo:
{
"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"
}
Includi il request_id quando contatti l'assistenza.
| HTTP | Codici | Causa tipica |
|---|---|---|
| 401 | unauthenticated, token_expired, token_revoked |
Nessun token, uno errato, o uno scaduto o revocato. |
| 402 | insufficient_credits |
L'area di lavoro non ha abbastanza crediti per il preventivo. |
| 403 | forbidden_ability, forbidden_role, forbidden_item, ip_not_allowed, live_content_needs_publish, site_paused, forbidden |
Permesso mancante, ruolo del proprietario, accesso alla raccolta o lista consentita IP. |
| 403 | plan_locked |
"L'API dell'agente non è nel piano di questa area di lavoro. È disponibile da Pro in su." |
| 404 | not_found, unknown_kind |
"Nessun … con quell'id nell'ambito di questo token. Elenca o cerca prima e usa un id restituito." |
| 409 | revision_conflict, quote_used, not_cancelable, idempotency_* |
Il contenuto è cambiato, il preventivo è stato utilizzato o un conflitto di riprova. |
| 410 | quote_expired |
"Questo preventivo è scaduto. Richiedi un nuovo preventivo." |
| 413 | unsupported_media |
Il file è troppo grande o non è di un tipo supportato. |
| 422 | validation_failed, invalid_input, quote_mismatch, limit_reached |
Un campo è errato; details lo nomina. |
| 429 | rate_limited, cap_exceeded, busy |
Troppe richieste, un limite di spesa o due avvii contemporaneamente. |
Ogni messaggio, con la soluzione: Correggi gli errori dell'agente e dell'API.
Limiti di frequenza
| Limite | Valore | Messaggio |
|---|---|---|
| Richieste per token | 300 al minuto | "Questo token ha superato la sua frequenza di richieste. Attendi e riprova." |
| Richieste per area di lavoro | 1.200 al minuto, tutti i token insieme | "Questa area di lavoro ha superato la sua frequenza di richieste dell'agente. Attendi e riprova." |
| Scritture per token | 60 al minuto | "Troppe scritture da questo token. Attendi e riprova." |
| Scritture per token al giorno | 2.000 | "Questo token ha raggiunto il suo limite giornaliero di scrittura. Riprova domani." |
| Pubblicazioni per token | 10 all'ora | "Questo token ha raggiunto il suo limite orario di pubblicazione. Riprova più tardi." |
| Avvii a pagamento | 20 all'ora per token, 100 al giorno per area di lavoro | rate_limited con retry_after |
| Caricamenti | 30 al minuto; 500 MB al giorno per token; 25 MB per file | "Troppi caricamenti da questo token. Attendi e riprova." / "Questo token ha raggiunto il suo volume giornaliero di caricamento. Riprova domani." |
| Chiamate senza un token valido | 60 al minuto per indirizzo IP | "Troppe richieste. Attendi e riprova." |
Una risposta 429 ha un'intestazione Retry-After e retry_after (secondi) nel corpo. Attendi quel tempo prima di riprovare. Letture, preventivi e controlli di stato non costano crediti.