使用 Clevera REST API
通过你自己的脚本调用 Clevera:基础 URL、Bearer 令牌身份验证、端点及其所需的权限、付费工作的“先报价后启动”流程、幂等性、错误格式以及速率限制。
更新于 阅读需 5 分钟
Clevera 的 REST API 让你的脚本和服务能够执行智能体通过 MCP 所能完成的操作:读取你的库、请求视频和文章、导出视频、处理文档站点以及跟踪任务。本文涵盖了基础 URL、身份验证、付费工作的请求流程、错误以及速率限制。
基础知识
| 基础 URL | https://app.clevera.ai/api/v1 |
| 身份验证 | Authorization: Bearer <token> 使用 API 令牌(以 clv_agent_ 开头) |
| 格式 | JSON 输入和输出。发送 Accept: application/json,若包含正文,则发送 Content-Type: application/json。 |
| ID | 公共 ID,例如任务的 job_…。请使用 API 返回的 ID。 |
使用 GET /docs/me 检查令牌:
Terminal
curl -H "Authorization: Bearer $CLEVERA_TOKEN" \
-H "Accept: application/json" \
https://app.clevera.ai/api/v1/docs/me
响应会说明该令牌代表谁执行操作:令牌的名称和有效期、人员及其当前角色、工作区、作用域内的站点以及当前生效的权限(令牌权限会根据人员的当前角色进行裁剪)。当调用被拒绝时,请首先调用此接口。
端点
每个端点都需要所示的权限。在没有权限的情况下调用会返回 403 forbidden_ability。请参阅 智能体权限。
库与素材
| 方法与路径 | 权限 | 功能 |
|---|---|---|
GET /create/types |
任意 | 你可以请求的视频和社交剪辑类型。 |
GET /library |
library:read |
令牌所有者可见的视频、录制内容和文章。 |
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 |
令牌作用域内的站点及其页面。 |
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": true的启动请求,以了解它是否会启动、是否需要批准或被阻止。不会写入任何内容。 - 启动。 使用
POST /videos、quote_id和Idempotency-Key标头进行启动。响应为202,包含一个任务。 - 跟踪。 轮询
GET /jobs/{job}/wait直到任务的status发生变化,或者监听 Webhook。
Quote, then start a how-to video
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 小时内无人批准。 |
启动是立即运行还是等待人员处理,取决于令牌的支出上限及其 在下方自动批准 设置。请参阅 控制智能体支出和批准。
重试与幂等性
在每次创建和启动时发送 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 |
无令牌、令牌错误、令牌已过期或已被撤销。 |
| 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 |
“在此令牌的作用域内没有该 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 错误。
速率限制
| 限制 | 数值 | 消息 |
|---|---|---|
| 每个令牌的请求数 | 每分钟 300 次 | “此令牌的请求频率过高。请等待并重试。” |
| 每个工作区的请求数 | 每分钟 1,200 次(所有令牌总计) | “此工作区的智能体请求频率过高。请等待并重试。” |
| 每个令牌的写入数 | 每分钟 60 次 | “此令牌写入过多。请等待并重试。” |
| 每个令牌每天的写入数 | 2,000 次 | “此令牌已达到每日写入限制。请明天再试。” |
| 每个令牌的发布数 | 每小时 10 次 | “此令牌已达到每小时发布限制。请稍后再试。” |
| 付费启动 | 每个令牌每小时 20 次,每个工作区每天 100 次 | rate_limited 带有 retry_after |
| 上传 | 每分钟 30 次;每个令牌每天 500 MB;每个文件 25 MB | “此令牌上传过多。请等待并重试。” / “此令牌已达到每日上传容量。请明天再试。” |
| 无有效令牌的调用 | 每个 IP 地址每分钟 60 次 | “请求过多。请等待并重试。” |
429 响应包含 Retry-After 标头,正文中包含 retry_after(秒)。请等待相应时间后再重试。读取、报价和状态检查不消耗额度。