Menggunakan REST API Clevera
Panggil Clevera dari skrip kamu sendiri: base URL, autentikasi bearer-token, endpoint dan izin yang diperlukan masing-masing, alur penawaran-lalu-mulai untuk pekerjaan berbayar, idempotensi, format kesalahan, dan batas kecepatan.
REST API Clevera memungkinkan skrip dan layanan kamu melakukan apa yang dapat dilakukan agen melalui MCP: membaca pustaka kamu, meminta video dan artikel, mengekspor video, mengerjakan situs dokumentasi, dan mengikuti pekerjaan. Artikel ini membahas base URL, autentikasi, alur permintaan untuk pekerjaan berbayar, kesalahan, dan batas kecepatan.
Dasar-dasar
| Base URL | https://app.clevera.ai/api/v1 |
| Autentikasi | Authorization: Bearer <token> dengan token API (dimulai dengan clv_agent_) |
| Format | JSON masuk dan keluar. Kirim Accept: application/json dan, dengan body, Content-Type: application/json. |
| Id | Id publik, seperti job_… untuk pekerjaan. Gunakan id yang dikembalikan API. |
Periksa token dengan GET /docs/me:
curl -H "Authorization: Bearer $CLEVERA_TOKEN" \
-H "Accept: application/json" \
https://app.clevera.ai/api/v1/docs/me
Jawaban tersebut menyatakan siapa yang ditindaklanjuti oleh token: nama dan masa berlaku token, orang tersebut dan perannya saat ini, ruang kerja, situs dalam cakupan, dan izin yang berfungsi saat ini (izin token yang disesuaikan dengan peran orang tersebut saat ini). Panggil ini terlebih dahulu saat panggilan ditolak.
Endpoint
Setiap endpoint memerlukan izin yang ditampilkan. Memanggil salah satu tanpa izin tersebut akan mengembalikan 403 forbidden_ability. Lihat Izin agen.
Pustaka dan materi
| Metode dan path | Izin | Apa fungsinya |
|---|---|---|
GET /create/types |
any | Jenis video dan klip sosial yang dapat kamu minta. |
GET /library |
library:read |
Video, rekaman, dan artikel yang dapat dilihat oleh pemilik token. |
GET /recordings |
library:read |
Hanya rekaman. |
GET /library/{item} |
library:read |
Satu item. |
GET /library/{item}/transcript |
library:read |
Transkripnya. |
GET /library/{item}/article |
library:read |
Artikelnya. |
GET /library/{item}/embed |
library:read |
Kode sematnya. |
GET /materials |
library:read |
Gambar, video, dan PDF yang diunggah. |
POST /materials, POST /materials/import, POST /materials/uploads, POST /materials/uploads/{upload_id}/complete |
materials:write |
Menambahkan gambar, video, atau PDF (secara langsung, dari URL, atau sebagai unggahan besar). |
Video dan artikel
| Metode dan path | Izin | Apa fungsinya |
|---|---|---|
POST /videos/quotes |
videos:create |
Menawarkan video dari rekaman (type: how_to, product_demo, cleanup, styled_video), artikel dari rekaman (article), atau terjemahan (translation). |
POST /videos |
videos:create + credits:spend |
Membuat video yang ditawarkan (quote_id). |
POST /articles/from-recording |
videos:create + credits:spend |
Membuat artikel yang ditawarkan. |
POST /videos/translations |
videos:create + credits:spend |
Membuat terjemahan yang ditawarkan. |
POST /clips/quotes |
videos:create |
Menawarkan klip sosial (jenis dari GET /create/types). |
POST /clips |
videos:create + credits:spend |
Membuat klip sosial yang ditawarkan. |
POST /videos/{video_id}/exports |
videos:export |
Merender MP4: resolution 1080p (default), 2k, atau 4k; selalu 60 fps. Gratis. |
Pekerjaan dan kredit
| Metode dan path | Izin | Apa fungsinya |
|---|---|---|
POST /quotes |
izin pekerjaan | Penawaran untuk jenis pekerjaan apa pun. |
POST /jobs |
izin pekerjaan (+ credits:spend saat berbayar) |
Memulai pekerjaan yang ditawarkan. |
GET /jobs |
jobs:read |
Mencantumkan pekerjaan. |
GET /jobs/{job} |
jobs:read |
Status dan hasil satu pekerjaan. |
GET /jobs/{job}/wait |
jobs:read |
Menunggu perubahan alih-alih melakukan polling. |
GET /jobs/{job}/events |
jobs:read |
Peristiwa kemajuan pekerjaan. |
POST /jobs/{job}/cancel |
jobs:read |
Membatalkan pekerjaan. Terlambat: "Pekerjaan ini tidak dapat dibatalkan lagi." |
GET /credits |
credits:spend atau jobs:read |
Saldo kredit ruang kerja. |
Situs dokumentasi
| Metode dan path | Izin | Apa fungsinya |
|---|---|---|
GET /docs/sites, GET /docs/sites/{site}, GET /docs/sites/{site}/tree, GET /docs/sites/{site}/pages |
content:read |
Situs dalam cakupan token dan halamannya. |
GET /docs/sites/{site}/search, GET /docs/pages/{page}, GET /docs/pages/{page}/revisions |
content:read |
Mencari dan membaca halaman, termasuk draf. |
POST /docs/sites/{site}/articles, PATCH /docs/pages/{page}/article, POST /docs/pages/{page}/review |
articles:write |
Membuat dan mengedit draf artikel, mengirimkan untuk ditinjau. Artikel langsung juga memerlukan site:publish. |
PATCH /docs/pages/{page}, DELETE /docs/pages/{page}, POST /docs/sites/{site}/sections, PATCH /docs/sections/{section} |
structure:write |
Memindahkan, mengganti nama, menyembunyikan, dan menghapus halaman; bagian. |
GET/POST /docs/sites/{site}/site-pages, PUT /docs/site-pages/{page}/body |
content:read / site-pages:write |
Halaman beranda, kontak, dan hukum. |
GET/POST /docs/sites/{site}/changelog, PATCH /docs/changelog/{entry} |
content:read / changelog:write |
Entri log perubahan sebagai draf. |
POST /docs/media, POST /docs/media/uploads |
media:write |
Mengunggah gambar. |
POST /docs/sites/{site}/publish, POST /docs/pages/{page}/ready, POST /docs/changelog/{entry}/publish |
site:publish |
Menerbitkan apa yang dilihat pembaca. |
GET /insights/sites/{site}, …/gaps, …/feedback |
insights:read |
Mencari celah, pertanyaan yang belum terjawab, umpan balik halaman. |
PATCH /docs/sites/{site}/settings, …/appearance, PUT …/navigation, POST …/redirects |
site:configure |
Pengaturan situs. |
POST /docs/sites |
sites:create |
Membuat situs dokumentasi. |
Selengkapnya tentang agen dan situs dokumentasi: Hubungkan agen AI ke situs dokumentasi kamu.
Meminta pekerjaan berbayar
Pekerjaan yang memerlukan kredit selalu melalui penawaran terlebih dahulu, kemudian mulai:
- Tawarkan.
POST /videos/quotes(atau/clips/quotes) dengan apa yang kamu inginkan. Jawaban tersebut memilikiquote_iddan rentang kredit. Penawaran berlaku selama 15 menit dan dapat digunakan sekali. - Secara opsional lakukan uji coba. Kirim mulai dengan
"dry_run": trueuntuk mengetahui apakah pekerjaan tersebut akan dimulai, memerlukan persetujuan, atau diblokir. Tidak ada yang ditulis. - Mulai.
POST /videosdenganquote_iddan headerIdempotency-Key. Jawabannya adalah202dengan sebuah pekerjaan. - Ikuti.
GET /jobs/{job}/waitsampaistatuspekerjaan berubah, atau dengarkan 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>"}'
Status pekerjaan:
| Status | Arti |
|---|---|
queued |
Diterima, akan segera berjalan. |
running |
Sedang berlangsung. |
needs_input |
Menunggu seseorang, biasanya persetujuan pada Permintaan agen. Pekerjaan tersebut membawa tautan dan masa berlaku. |
succeeded |
Selesai. Pekerjaan tersebut menautkan video atau artikel baru. |
failed |
Gagal; pekerjaan memiliki error_code. |
canceled |
Dibatalkan, atau persetujuannya ditolak. |
expired |
Tidak ada yang menyetujuinya dalam 24 jam. |
Apakah suatu pekerjaan dimulai secara langsung atau menunggu seseorang bergantung pada batas pengeluaran token dan pengaturan Setujui secara otomatis di bawah miliknya. Lihat Kontrol pengeluaran dan persetujuan agen.
Percobaan ulang dan idempotensi
Kirim header Idempotency-Key (UUID baru per tindakan) pada setiap pembuatan dan mulai. Jika jaringan terputus dan kamu mencoba lagi dengan kunci dan body yang sama, kamu akan mendapatkan jawaban pertama kembali alih-alih video kedua. Kunci diingat selama 24 jam.
| Kode | Arti |
|---|---|
idempotency_key_reused |
Kunci yang sama dengan body yang berbeda. Gunakan kunci baru untuk permintaan baru. |
idempotency_in_progress |
Permintaan pertama dengan kunci ini masih berjalan. Tunggu dan coba lagi. |
idempotency_conflict |
"Kunci idempotensi ini digunakan untuk permintaan yang berbeda." |
Kesalahan
Setiap kesalahan memiliki bentuk yang sama, dengan pesan yang menyatakan apa yang harus dilakukan selanjutnya:
{
"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"
}
Sertakan request_id saat kamu menghubungi dukungan.
| HTTP | Kode | Penyebab umum |
|---|---|---|
| 401 | unauthenticated, token_expired, token_revoked |
Tidak ada token, token salah, atau token yang kedaluwarsa atau dicabut. |
| 402 | insufficient_credits |
Ruang kerja tidak memiliki cukup kredit untuk penawaran. |
| 403 | forbidden_ability, forbidden_role, forbidden_item, ip_not_allowed, live_content_needs_publish, site_paused, forbidden |
Izin yang hilang, peran pemilik, akses koleksi, atau daftar izin IP. |
| 403 | plan_locked |
"API agen tidak ada dalam paket ruang kerja ini. API ini ada pada Pro ke atas." |
| 404 | not_found, unknown_kind |
"Tidak ada … dengan id tersebut dalam cakupan token ini. Daftar atau cari terlebih dahulu dan gunakan id yang dikembalikan." |
| 409 | revision_conflict, quote_used, not_cancelable, idempotency_* |
Konten berubah, penawaran digunakan, atau bentrokan percobaan ulang. |
| 410 | quote_expired |
"Penawaran ini telah kedaluwarsa. Minta penawaran baru." |
| 413 | unsupported_media |
File terlalu besar atau bukan jenis yang didukung. |
| 422 | validation_failed, invalid_input, quote_mismatch, limit_reached |
Bidang salah; details menamainya. |
| 429 | rate_limited, cap_exceeded, busy |
Terlalu banyak permintaan, batas pengeluaran, atau dua mulai sekaligus. |
Setiap pesan, dengan perbaikannya: Perbaiki kesalahan agen dan API.
Batas kecepatan
| Batas | Nilai | Pesan |
|---|---|---|
| Permintaan per token | 300 per menit | "Token ini melebihi tingkat permintaannya. Tunggu dan coba lagi." |
| Permintaan per ruang kerja | 1.200 per menit, semua token bersama-sama | "Ruang kerja ini melebihi tingkat permintaan agennya. Tunggu dan coba lagi." |
| Penulisan per token | 60 per menit | "Terlalu banyak penulisan dari token ini. Tunggu dan coba lagi." |
| Penulisan per token per hari | 2.000 | "Token ini mencapai batas penulisan hariannya. Coba lagi besok." |
| Penerbitan per token | 10 per jam | "Token ini mencapai batas penerbitan per jamnya. Coba lagi nanti." |
| Mulai berbayar | 20 per jam per token, 100 per hari per ruang kerja | rate_limited dengan retry_after |
| Unggahan | 30 per menit; 500 MB per hari per token; 25 MB per file | "Terlalu banyak unggahan dari token ini. Tunggu dan coba lagi." / "Token ini mencapai volume unggahan hariannya. Coba lagi besok." |
| Panggilan tanpa token valid | 60 per menit per alamat IP | "Terlalu banyak permintaan. Tunggu dan coba lagi." |
Jawaban 429 memiliki header Retry-After dan retry_after (detik) di dalam body. Tunggu selama itu sebelum mencoba lagi. Pembacaan, penawaran, dan pemeriksaan status tidak memakan kredit.