Die Clevera REST API verwenden
Rufe Clevera aus deinen eigenen Skripten auf: Basis-URL, Bearer-Token-Authentifizierung, Endpunkte und die jeweils erforderlichen Berechtigungen, der Ablauf „Angebot einholen, dann starten“ für kostenpflichtige Arbeiten, Idempotenz, Fehlerformat und Ratenbegrenzungen.
Mit der REST API von Clevera können deine eigenen Skripte und Dienste das tun, was ein Agent über MCP erledigen kann: deine Bibliothek lesen, Videos und Artikel anfordern, Videos exportieren, an Dokumentationsseiten arbeiten und Jobs verfolgen. Dieser Artikel behandelt die Basis-URL, die Authentifizierung, den Anforderungsablauf für kostenpflichtige Arbeiten, Fehler und Ratenbegrenzungen.
Grundlagen
| Basis-URL | https://app.clevera.ai/api/v1 |
| Authentifizierung | Authorization: Bearer <token> mit einem API-Token (es beginnt mit clv_agent_) |
| Format | JSON als Ein- und Ausgabe. Sende Accept: application/json und bei einem Body Content-Type: application/json. |
| Ids | Öffentliche Ids, wie job_… für Jobs. Verwende die Ids, die die API zurückgibt. |
Überprüfe ein Token mit GET /docs/me:
curl -H "Authorization: Bearer $CLEVERA_TOKEN" \
-H "Accept: application/json" \
https://app.clevera.ai/api/v1/docs/me
Die Antwort gibt an, wer das Token verwendet: der Name und das Ablaufdatum des Tokens, die Person und ihre aktuelle Rolle, der Arbeitsbereich, die betroffenen Seiten und die Berechtigungen, die aktuell funktionieren (die Berechtigungen des Tokens, gekürzt auf die aktuelle Rolle der Person). Rufe dies zuerst auf, wenn ein Aufruf verweigert wird.
Endpunkte
Jeder Endpunkt benötigt die angezeigte Berechtigung. Der Aufruf ohne diese Berechtigung gibt 403 forbidden_ability zurück. Siehe Agenten-Berechtigungen.
Bibliothek und Materialien
| Methode und Pfad | Berechtigung | Funktion |
|---|---|---|
GET /create/types |
any | Die Video- und Social-Clip-Typen, die du anfordern kannst. |
GET /library |
library:read |
Videos, Aufnahmen und Artikel, die der Token-Inhaber sehen kann. |
GET /recordings |
library:read |
Nur Aufnahmen. |
GET /library/{item} |
library:read |
Ein Element. |
GET /library/{item}/transcript |
library:read |
Dessen Transkript. |
GET /library/{item}/article |
library:read |
Dessen Artikel. |
GET /library/{item}/embed |
library:read |
Dessen Einbettungscode. |
GET /materials |
library:read |
Hochgeladene Bilder, Videos und PDFs. |
POST /materials, POST /materials/import, POST /materials/uploads, POST /materials/uploads/{upload_id}/complete |
materials:write |
Ein Bild, Video oder PDF hinzufügen (direkt, über eine URL oder als großer Upload). |
Videos und Artikel
| Methode und Pfad | Berechtigung | Funktion |
|---|---|---|
POST /videos/quotes |
videos:create |
Ein Video aus einer Aufnahme (type: how_to, product_demo, cleanup, styled_video), einen Artikel aus einer Aufnahme (article) oder eine Übersetzung (translation) anbieten. |
POST /videos |
videos:create + credits:spend |
Das angebotene Video erstellen (quote_id). |
POST /articles/from-recording |
videos:create + credits:spend |
Den angebotenen Artikel erstellen. |
POST /videos/translations |
videos:create + credits:spend |
Die angebotene Übersetzung erstellen. |
POST /clips/quotes |
videos:create |
Einen Social Clip anbieten (Typen aus GET /create/types). |
POST /clips |
videos:create + credits:spend |
Den angebotenen Social Clip erstellen. |
POST /videos/{video_id}/exports |
videos:export |
Ein MP4 rendern: resolution 1080p (Standard), 2k oder 4k; immer 60 fps. Kostenlos. |
Jobs und Credits
| Methode und Pfad | Berechtigung | Funktion |
|---|---|---|
POST /quotes |
Berechtigung der Arbeit | Ein Angebot für jede Art von Job. |
POST /jobs |
Berechtigung der Arbeit (+ credits:spend bei Bezahlung) |
Einen angebotenen Job starten. |
GET /jobs |
jobs:read |
Jobs auflisten. |
GET /jobs/{job} |
jobs:read |
Status und Ergebnis eines Jobs. |
GET /jobs/{job}/wait |
jobs:read |
Auf eine Änderung warten, anstatt abzufragen. |
GET /jobs/{job}/events |
jobs:read |
Die Fortschrittsereignisse des Jobs. |
POST /jobs/{job}/cancel |
jobs:read |
Einen Job abbrechen. Zu spät: „Dieser Job kann nicht mehr abgebrochen werden.“ |
GET /credits |
credits:spend oder jobs:read |
Das Credit-Guthaben des Arbeitsbereichs. |
Dokumentationsseiten
| Methode und Pfad | Berechtigung | Funktion |
|---|---|---|
GET /docs/sites, GET /docs/sites/{site}, GET /docs/sites/{site}/tree, GET /docs/sites/{site}/pages |
content:read |
Seiten im Bereich des Tokens und deren Unterseiten. |
GET /docs/sites/{site}/search, GET /docs/pages/{page}, GET /docs/pages/{page}/revisions |
content:read |
Seiten suchen und lesen, Entwürfe inbegriffen. |
POST /docs/sites/{site}/articles, PATCH /docs/pages/{page}/article, POST /docs/pages/{page}/review |
articles:write |
Artikelentwürfe erstellen und bearbeiten, zur Überprüfung einreichen. Live-Artikel benötigen auch site:publish. |
PATCH /docs/pages/{page}, DELETE /docs/pages/{page}, POST /docs/sites/{site}/sections, PATCH /docs/sections/{section} |
structure:write |
Seiten verschieben, umbenennen, ausblenden und entfernen; Abschnitte. |
GET/POST /docs/sites/{site}/site-pages, PUT /docs/site-pages/{page}/body |
content:read / site-pages:write |
Start-, Kontakt- und rechtliche Seiten. |
GET/POST /docs/sites/{site}/changelog, PATCH /docs/changelog/{entry} |
content:read / changelog:write |
Changelog-Einträge als Entwürfe. |
POST /docs/media, POST /docs/media/uploads |
media:write |
Bilder hochladen. |
POST /docs/sites/{site}/publish, POST /docs/pages/{page}/ready, POST /docs/changelog/{entry}/publish |
site:publish |
Veröffentlichen, was Leser sehen. |
GET /insights/sites/{site}, …/gaps, …/feedback |
insights:read |
Lücken, unbeantwortete Fragen, Seiten-Feedback suchen. |
PATCH /docs/sites/{site}/settings, …/appearance, PUT …/navigation, POST …/redirects |
site:configure |
Seiteneinstellungen. |
POST /docs/sites |
sites:create |
Eine Dokumentationsseite erstellen. |
Mehr zu Agenten und Dokumentationsseiten: KI-Agenten mit deinen Dokumentationsseiten verbinden.
Kostenpflichtige Arbeit anfordern
Arbeiten, die Credits kosten, erfordern immer zuerst ein Angebot und dann den Start:
- Angebot einholen.
POST /videos/quotes(oder/clips/quotes) mit dem, was du möchtest. Die Antwort enthält einequote_idund den Credit-Bereich. Ein Angebot ist 15 Minuten gültig und kann einmal verwendet werden. - Optional: Testlauf. Sende den Start mit
"dry_run": true, um zu erfahren, ob er starten würde, eine Genehmigung benötigt oder blockiert wird. Es wird nichts geschrieben. - Starten.
POST /videosmitquote_idund einemIdempotency-Key-Header. Die Antwort ist202mit einem Job. - Verfolgen.
GET /jobs/{job}/wait, bis sich derstatusdes Jobs ändert, oder achte auf 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>"}'
Job-Status:
| Status | Bedeutung |
|---|---|
queued |
Akzeptiert, wird gleich ausgeführt. |
running |
In Bearbeitung. |
needs_input |
Wartet auf eine Person, normalerweise eine Genehmigung unter Agentenanfragen. Der Job enthält einen Link und ein Ablaufdatum. |
succeeded |
Erledigt. Der Job verlinkt das neue Video oder den neuen Artikel. |
failed |
Fehlgeschlagen; der Job hat einen error_code. |
canceled |
Abgebrochen oder die Genehmigung wurde verweigert. |
expired |
Niemand hat es innerhalb von 24 Stunden genehmigt. |
Ob ein Start sofort ausgeführt wird oder auf eine Person wartet, hängt von den Ausgabenlimits des Tokens und seiner Einstellung Automatisch genehmigen unter ab. Siehe Ausgaben und Genehmigungen für Agenten steuern.
Wiederholungen und Idempotenz
Sende bei jedem Erstellen und Starten einen Idempotency-Key-Header (eine neue UUID pro Aktion). Wenn die Netzwerkverbindung abbricht und du es mit demselben Schlüssel und Body erneut versuchst, erhältst du die erste Antwort zurück, anstatt ein zweites Video zu erstellen. Schlüssel werden 24 Stunden lang gespeichert.
| Code | Bedeutung |
|---|---|
idempotency_key_reused |
Derselbe Schlüssel mit einem anderen Body. Verwende einen neuen Schlüssel für eine neue Anfrage. |
idempotency_in_progress |
Die erste Anfrage mit diesem Schlüssel läuft noch. Warte und versuche es erneut. |
idempotency_conflict |
„Dieser Idempotenz-Schlüssel wurde für eine andere Anfrage verwendet.“ |
Fehler
Jeder Fehler hat das gleiche Format, mit einer Nachricht, die besagt, was als Nächstes zu tun ist:
{
"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"
}
Gib die request_id an, wenn du den Support kontaktierst.
| HTTP | Codes | Typische Ursache |
|---|---|---|
| 401 | unauthenticated, token_expired, token_revoked |
Kein Token, ein falsches, abgelaufenes oder widerrufenes Token. |
| 402 | insufficient_credits |
Der Arbeitsbereich hat nicht genügend Credits für das Angebot. |
| 403 | forbidden_ability, forbidden_role, forbidden_item, ip_not_allowed, live_content_needs_publish, site_paused, forbidden |
Eine fehlende Berechtigung, die Rolle des Inhabers, Zugriff auf die Sammlung oder die IP-Zulassungsliste. |
| 403 | plan_locked |
„Die Agenten-API ist nicht im Plan dieses Arbeitsbereichs enthalten. Sie ist ab Pro verfügbar.“ |
| 404 | not_found, unknown_kind |
„Kein … mit dieser Id im Bereich dieses Tokens. Zuerst auflisten oder suchen und eine zurückgegebene Id verwenden.“ |
| 409 | revision_conflict, quote_used, not_cancelable, idempotency_* |
Der Inhalt hat sich geändert, das Angebot wurde verwendet oder ein Wiederholungskonflikt. |
| 410 | quote_expired |
„Dieses Angebot ist abgelaufen. Fordere ein neues Angebot an.“ |
| 413 | unsupported_media |
Die Datei ist zu groß oder kein unterstützter Typ. |
| 422 | validation_failed, invalid_input, quote_mismatch, limit_reached |
Ein Feld ist falsch; details benennt es. |
| 429 | rate_limited, cap_exceeded, busy |
Zu viele Anfragen, ein Ausgabenlimit oder zwei Starts gleichzeitig. |
Jede Nachricht mit der Lösung: Agenten- und API-Fehler beheben.
Ratenbegrenzungen
| Limit | Wert | Nachricht |
|---|---|---|
| Anfragen pro Token | 300 pro Minute | „Dieses Token hat seine Anfragerate überschritten. Warte und versuche es erneut.“ |
| Anfragen pro Arbeitsbereich | 1.200 pro Minute, alle Token zusammen | „Dieser Arbeitsbereich hat seine Agenten-Anfragerate überschritten. Warte und versuche es erneut.“ |
| Schreibvorgänge pro Token | 60 pro Minute | „Zu viele Schreibvorgänge von diesem Token. Warte und versuche es erneut.“ |
| Schreibvorgänge pro Token pro Tag | 2.000 | „Dieses Token hat sein tägliches Schreiblimit erreicht. Versuche es morgen erneut.“ |
| Veröffentlichungen pro Token | 10 pro Stunde | „Dieses Token hat sein stündliches Veröffentlichungslimit erreicht. Versuche es später erneut.“ |
| Kostenpflichtige Starts | 20 pro Stunde pro Token, 100 pro Tag pro Arbeitsbereich | rate_limited mit retry_after |
| Uploads | 30 pro Minute; 500 MB pro Tag pro Token; 25 MB pro Datei | „Zu viele Uploads von diesem Token. Warte und versuche es erneut.“ / „Dieses Token hat sein tägliches Upload-Volumen erreicht. Versuche es morgen erneut.“ |
| Aufrufe ohne gültiges Token | 60 pro Minute pro IP-Adresse | „Zu viele Anfragen. Warte und versuche es erneut.“ |
Eine 429-Antwort enthält einen Retry-After-Header und retry_after (Sekunden) im Body. Warte so lange, bevor du es erneut versuchst. Lesezugriffe, Angebote und Statusprüfungen kosten keine Credits.