使用 Clevera REST API
透過您自己的指令碼呼叫 Clevera:包含基礎 URL、Bearer Token 驗證、端點及其所需的權限、付費工作的「報價後啟動」流程、冪等性、錯誤格式與速率限制。
Clevera 的 REST API 讓您的指令碼與服務能執行代理人透過 MCP 所能做的事:讀取您的媒體庫、請求影片與文章、匯出影片、處理文件網站以及追蹤工作狀態。本文涵蓋基礎 URL、驗證、付費工作的請求流程、錯誤與速率限制。
基礎知識
| 基礎 URL | https://app.clevera.ai/api/v1 |
| 驗證 | Authorization: Bearer <token> 使用 API Token (以 clv_agent_ 開頭) |
| 格式 | JSON 輸入與輸出。傳送 Accept: application/json,若包含主體則傳送 Content-Type: application/json。 |
| ID | 公開 ID,例如工作使用的 job_…。請使用 API 回傳的 ID。 |
使用 GET /docs/me 檢查 Token:
curl -H "Authorization: Bearer $CLEVERA_TOKEN" \
-H "Accept: application/json" \
https://app.clevera.ai/api/v1/docs/me
回應會說明該 Token 的身分:Token 名稱與過期時間、使用者及其目前角色、工作區、範圍內的網站,以及目前有效的權限(Token 權限會縮減為該使用者的目前角色權限)。當呼叫被拒絕時,請先呼叫此端點。
端點
每個端點都需要顯示的權限。若在沒有權限的情況下呼叫,將會回傳 403 forbidden_ability。請參閱 代理人權限。
媒體庫與素材
| 方法與路徑 | 權限 | 功能 |
|---|---|---|
GET /create/types |
任何 | 您可以請求的影片與社群短片類型。 |
GET /library |
library:read |
Token 持有者可見的影片、錄影與文章。 |
GET /recordings |
library:read |
僅限錄影。 |
GET /library/{item} |
library:read |
單一項目。 |
GET /library/{item}/transcript |
library:read |
其逐字稿。 |
GET /library/{item}/article |
library:read |
其文章。 |
GET /library/{item}/embed |
library:read |
其嵌入程式碼。 |
GET /materials |
library:read |
已上傳的圖片、影片與 PDF。 |
POST /materials, POST /materials/import, POST /materials/uploads, POST /materials/uploads/{upload_id}/complete |
materials:write |
新增圖片、影片或 PDF(直接新增、從 URL 新增或作為大型檔案上傳)。 |
影片與文章
| 方法與路徑 | 權限 | 功能 |
|---|---|---|
POST /videos/quotes |
videos:create |
從錄影引用影片(type:how_to、product_demo、cleanup、styled_video)、從錄影引用文章(article)或引用翻譯(translation)。 |
POST /videos |
videos:create + credits:spend |
製作引用的影片(quote_id)。 |
POST /articles/from-recording |
videos:create + credits:spend |
製作引用的文章。 |
POST /videos/translations |
videos:create + credits:spend |
製作引用的翻譯。 |
POST /clips/quotes |
videos:create |
引用社群短片(類型來自 GET /create/types)。 |
POST /clips |
videos:create + credits:spend |
製作引用的社群短片。 |
POST /videos/{video_id}/exports |
videos:export |
渲染 MP4:resolution 1080p(預設)、2k 或 4k;固定為 60 fps。免費。 |
工作與點數
| 方法與路徑 | 權限 | 功能 |
|---|---|---|
POST /quotes |
該工作的權限 | 任何工作類型的報價。 |
POST /jobs |
該工作的權限(付費時需 + credits:spend) |
啟動已報價的工作。 |
GET /jobs |
jobs:read |
列出工作。 |
GET /jobs/{job} |
jobs:read |
單一工作的狀態與結果。 |
GET /jobs/{job}/wait |
jobs:read |
等待變更,而非輪詢。 |
GET /jobs/{job}/events |
jobs:read |
工作的進度事件。 |
POST /jobs/{job}/cancel |
jobs:read |
取消工作。若太晚執行:「此工作已無法取消。」 |
GET /credits |
credits:spend 或 jobs:read |
工作區的點數餘額。 |
文件網站
| 方法與路徑 | 權限 | 功能 |
|---|---|---|
GET /docs/sites, GET /docs/sites/{site}, GET /docs/sites/{site}/tree, GET /docs/sites/{site}/pages |
content:read |
Token 範圍內的網站及其頁面。 |
GET /docs/sites/{site}/search, GET /docs/pages/{page}, GET /docs/pages/{page}/revisions |
content:read |
搜尋並閱讀頁面(包含草稿)。 |
POST /docs/sites/{site}/articles, PATCH /docs/pages/{page}/article, POST /docs/pages/{page}/review |
articles:write |
建立並編輯草稿文章,提交審核。發布文章也需要 site:publish。 |
PATCH /docs/pages/{page}, DELETE /docs/pages/{page}, POST /docs/sites/{site}/sections, PATCH /docs/sections/{section} |
structure:write |
移動、重新命名、隱藏與移除頁面;區段。 |
GET/POST /docs/sites/{site}/site-pages, PUT /docs/site-pages/{page}/body |
content:read / site-pages:write |
首頁、聯絡頁面與法律頁面。 |
GET/POST /docs/sites/{site}/changelog, PATCH /docs/changelog/{entry} |
content:read / changelog:write |
更新日誌條目(草稿)。 |
POST /docs/media, POST /docs/media/uploads |
media:write |
上傳圖片。 |
POST /docs/sites/{site}/publish, POST /docs/pages/{page}/ready, POST /docs/changelog/{entry}/publish |
site:publish |
發布讀者可見的內容。 |
GET /insights/sites/{site}, …/gaps, …/feedback |
insights:read |
搜尋缺漏、未回答的問題、頁面回饋。 |
PATCH /docs/sites/{site}/settings, …/appearance, PUT …/navigation, POST …/redirects |
site:configure |
網站設定。 |
POST /docs/sites |
sites:create |
建立文件網站。 |
關於代理人與文件網站的更多資訊:將 AI 代理人連接到您的文件網站。
請求付費工作
需要消耗點數的工作一律採取「先報價,後啟動」流程:
- 報價。
POST /videos/quotes(或/clips/quotes)並說明您的需求。回應會包含quote_id與點數範圍。報價有效期為 15 分鐘,且僅能使用一次。 - 選擇性執行乾跑 (Dry-run)。 傳送啟動請求並附帶
"dry_run": true,以了解該工作是否會啟動、需要核准或被封鎖。此過程不會寫入任何資料。 - 啟動。
POST /videos並附帶quote_id與Idempotency-Key標頭。回應為202並包含工作 ID。 - 追蹤。
GET /jobs/{job}/wait直到工作的status變更,或監聽 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>"}'
工作狀態:
| 狀態 | 含義 |
|---|---|
queued |
已接受,即將執行。 |
running |
執行中。 |
needs_input |
等待人員處理,通常是在 代理人請求 中等待核准。該工作包含連結與過期時間。 |
succeeded |
已完成。該工作會連結至新的影片或文章。 |
failed |
失敗;該工作包含 error_code。 |
canceled |
已取消,或核准被拒絕。 |
expired |
24 小時內無人核准。 |
啟動後是立即執行還是等待人員處理,取決於 Token 的消費上限及其 自動核准下方內容 設定。請參閱 控制代理人消費與核准。
重試與冪等性
在每次建立與啟動請求時,請傳送 Idempotency-Key 標頭(每個動作使用一個新的 UUID)。如果網路中斷,您可以使用相同的金鑰與主體重試,系統會回傳第一次的結果,而不會產生第二部影片。金鑰會保留 24 小時。
| 代碼 | 含義 |
|---|---|
idempotency_key_reused |
使用相同金鑰但主體不同。請為新請求使用新金鑰。 |
idempotency_in_progress |
使用此金鑰的第一個請求仍在執行中。請稍候並重試。 |
idempotency_conflict |
「此冪等性金鑰已用於其他請求。」 |
錯誤
每個錯誤的格式皆相同,並附帶說明後續處理方式的訊息:
{
"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"
}
聯絡支援團隊時,請提供 request_id。
| HTTP | 代碼 | 常見原因 |
|---|---|---|
| 401 | unauthenticated, token_expired, token_revoked |
無 Token、Token 錯誤、已過期或已撤銷。 |
| 402 | insufficient_credits |
工作區點數不足以支付報價。 |
| 403 | forbidden_ability, forbidden_role, forbidden_item, ip_not_allowed, live_content_needs_publish, site_paused, forbidden |
缺少權限、擁有者角色、集合存取權或 IP 白名單問題。 |
| 403 | plan_locked |
「代理人 API 不在該工作區的方案中。此功能僅適用於 Pro 及以上方案。」 |
| 404 | not_found, unknown_kind |
「Token 範圍內無此 ID 的項目。請先列出或搜尋,並使用回傳的 ID。」 |
| 409 | revision_conflict, quote_used, not_cancelable, idempotency_* |
內容已變更、報價已使用或重試衝突。 |
| 410 | quote_expired |
「此報價已過期。請重新請求報價。」 |
| 413 | unsupported_media |
檔案過大或類型不支援。 |
| 422 | validation_failed, invalid_input, quote_mismatch, limit_reached |
欄位錯誤;details 會標示該欄位。 |
| 429 | rate_limited, cap_exceeded, busy |
請求過多、達到消費上限或同時啟動兩次。 |
每個訊息及其修正方式:修正代理人與 API 錯誤。
速率限制
| 限制 | 數值 | 訊息 |
|---|---|---|
| 每個 Token 的請求數 | 每分鐘 300 次 | 「此 Token 已超過請求速率。請稍候並重試。」 |
| 每個工作區的請求數 | 每分鐘 1,200 次(所有 Token 合計) | 「此工作區已超過代理人請求速率。請稍候並重試。」 |
| 每個 Token 的寫入數 | 每分鐘 60 次 | 「此 Token 寫入次數過多。請稍候並重試。」 |
| 每個 Token 每日寫入數 | 2,000 次 | 「此 Token 已達每日寫入限制。請明天再試。」 |
| 每個 Token 的發布數 | 每小時 10 次 | 「此 Token 已達每小時發布限制。請稍後再試。」 |
| 付費啟動 | 每個 Token 每小時 20 次,每個工作區每日 100 次 | rate_limited 附帶 retry_after |
| 上傳 | 每分鐘 30 次;每個 Token 每日 500 MB;每個檔案 25 MB | 「此 Token 上傳次數過多。請稍候並重試。」 / 「此 Token 已達每日上傳容量。請明天再試。」 |
| 無效 Token 的呼叫 | 每個 IP 位址每分鐘 60 次 | 「請求過多。請稍候並重試。」 |
429 回應會包含 Retry-After 標頭,主體中包含 retry_after(秒)。請等待該時間後再重試。讀取、報價與狀態檢查不消耗點數。