Use a API REST da Clevera
Chame a Clevera a partir de seus próprios scripts: URL base, autenticação por bearer-token, endpoints e a permissão que cada um exige, o fluxo de cotação antes de iniciar para trabalhos pagos, idempotência, formato de erro e limites de taxa.
A API REST da Clevera permite que seus próprios scripts e serviços façam o que um agente pode fazer via MCP: ler sua biblioteca, solicitar vídeos e artigos, exportar vídeos, trabalhar em sites de documentação e acompanhar os trabalhos. Este artigo aborda a URL base, autenticação, o fluxo de solicitação para trabalhos pagos, erros e limites de taxa.
Noções básicas
| URL base | https://app.clevera.ai/api/v1 |
| Autenticação | Authorization: Bearer <token> com um token de API (ele começa com clv_agent_) |
| Formato | JSON de entrada e saída. Envie Accept: application/json e, com um corpo, Content-Type: application/json. |
| Ids | Ids públicos, como job_… para trabalhos. Use os ids que a API retorna. |
Verifique um token com GET /docs/me:
curl -H "Authorization: Bearer $CLEVERA_TOKEN" \
-H "Accept: application/json" \
https://app.clevera.ai/api/v1/docs/me
A resposta diz em nome de quem o token atua: o nome e a validade do token, a pessoa e seu cargo atual, o workspace, os sites no escopo e as permissões que funcionam no momento (as permissões do token reduzidas ao cargo atual da pessoa). Chame-o primeiro quando uma chamada for recusada.
Endpoints
Cada endpoint precisa da permissão mostrada. Chamar um sem ela retorna 403 forbidden_ability. Veja Permissões do agente.
Biblioteca e materiais
| Método e caminho | Permissão | O que faz |
|---|---|---|
GET /create/types |
qualquer | Os tipos de vídeo e clipe social que você pode solicitar. |
GET /library |
library:read |
Vídeos, gravações e artigos que o proprietário do token pode ver. |
GET /recordings |
library:read |
Apenas gravações. |
GET /library/{item} |
library:read |
Um item. |
GET /library/{item}/transcript |
library:read |
Sua transcrição. |
GET /library/{item}/article |
library:read |
Seu artigo. |
GET /library/{item}/embed |
library:read |
Seu código de incorporação. |
GET /materials |
library:read |
Imagens, vídeos e PDFs enviados. |
POST /materials, POST /materials/import, POST /materials/uploads, POST /materials/uploads/{upload_id}/complete |
materials:write |
Adicionar uma imagem, vídeo ou PDF (diretamente, de uma URL ou como um upload grande). |
Vídeos e artigos
| Método e caminho | Permissão | O que faz |
|---|---|---|
POST /videos/quotes |
videos:create |
Cotar um vídeo a partir de uma gravação (type: how_to, product_demo, cleanup, styled_video), um artigo a partir de uma gravação (article) ou uma tradução (translation). |
POST /videos |
videos:create + credits:spend |
Criar o vídeo cotado (quote_id). |
POST /articles/from-recording |
videos:create + credits:spend |
Criar o artigo cotado. |
POST /videos/translations |
videos:create + credits:spend |
Criar a tradução cotada. |
POST /clips/quotes |
videos:create |
Cotar um clipe social (tipos de GET /create/types). |
POST /clips |
videos:create + credits:spend |
Criar o clipe social cotado. |
POST /videos/{video_id}/exports |
videos:export |
Renderizar um MP4: resolution 1080p (padrão), 2k ou 4k; sempre 60 fps. Gratuito. |
Trabalhos e créditos
| Método e caminho | Permissão | O que faz |
|---|---|---|
POST /quotes |
a permissão do trabalho | Uma cotação para qualquer tipo de trabalho. |
POST /jobs |
a permissão do trabalho (+ credits:spend quando pago) |
Iniciar um trabalho cotado. |
GET /jobs |
jobs:read |
Listar trabalhos. |
GET /jobs/{job} |
jobs:read |
Status e resultado de um trabalho. |
GET /jobs/{job}/wait |
jobs:read |
Aguardar uma alteração em vez de consultar. |
GET /jobs/{job}/events |
jobs:read |
Eventos de progresso do trabalho. |
POST /jobs/{job}/cancel |
jobs:read |
Cancelar um trabalho. Tarde demais: "Este trabalho não pode mais ser cancelado." |
GET /credits |
credits:spend ou jobs:read |
Saldo de créditos do workspace. |
Sites de documentação
| Método e caminho | Permissão | O que faz |
|---|---|---|
GET /docs/sites, GET /docs/sites/{site}, GET /docs/sites/{site}/tree, GET /docs/sites/{site}/pages |
content:read |
Sites no escopo do token e suas páginas. |
GET /docs/sites/{site}/search, GET /docs/pages/{page}, GET /docs/pages/{page}/revisions |
content:read |
Pesquisar e ler páginas, rascunhos incluídos. |
POST /docs/sites/{site}/articles, PATCH /docs/pages/{page}/article, POST /docs/pages/{page}/review |
articles:write |
Criar e editar rascunhos de artigos, enviar para revisão. Artigos publicados também precisam de site:publish. |
PATCH /docs/pages/{page}, DELETE /docs/pages/{page}, POST /docs/sites/{site}/sections, PATCH /docs/sections/{section} |
structure:write |
Mover, renomear, ocultar e remover páginas; seções. |
GET/POST /docs/sites/{site}/site-pages, PUT /docs/site-pages/{page}/body |
content:read / site-pages:write |
Páginas inicial, de contato e legal. |
GET/POST /docs/sites/{site}/changelog, PATCH /docs/changelog/{entry} |
content:read / changelog:write |
Entradas de changelog como rascunhos. |
POST /docs/media, POST /docs/media/uploads |
media:write |
Fazer upload de imagens. |
POST /docs/sites/{site}/publish, POST /docs/pages/{page}/ready, POST /docs/changelog/{entry}/publish |
site:publish |
Publicar o que os leitores veem. |
GET /insights/sites/{site}, …/gaps, …/feedback |
insights:read |
Pesquisar lacunas, perguntas sem resposta, feedback de página. |
PATCH /docs/sites/{site}/settings, …/appearance, PUT …/navigation, POST …/redirects |
site:configure |
Configurações do site. |
POST /docs/sites |
sites:create |
Criar um site de documentação. |
Mais sobre agentes e sites de documentação: Conectar agentes de IA aos seus sites de documentação.
Solicitar trabalho pago
Trabalhos que custam créditos sempre passam pela cotação primeiro, depois iniciam:
- Cote.
POST /videos/quotes(ou/clips/quotes) com o que você deseja. A resposta tem umquote_ide o intervalo de crédito. Uma cotação é válida por 15 minutos e pode ser usada uma vez. - Opcionalmente, faça um teste. Envie o início com
"dry_run": truepara saber se ele iniciaria, precisaria de aprovação ou seria bloqueado. Nada é gravado. - Inicie.
POST /videoscomquote_ide um cabeçalhoIdempotency-Key. A resposta é202com um trabalho. - Acompanhe.
GET /jobs/{job}/waitaté que ostatusdo trabalho mude, ou ouça 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>"}'
Status dos trabalhos:
| Status | Significado |
|---|---|
queued |
Aceito, prestes a executar. |
running |
Em execução. |
needs_input |
Aguardando uma pessoa, geralmente uma aprovação em Solicitações do agente. O trabalho contém um link e uma validade. |
succeeded |
Concluído. O trabalho vincula o novo vídeo ou artigo. |
failed |
Falhou; o trabalho tem um error_code. |
canceled |
Cancelado, ou sua aprovação foi negada. |
expired |
Ninguém aprovou dentro de 24 horas. |
Se um início é executado imediatamente ou aguarda uma pessoa depende dos limites de gastos do token e da sua configuração Aprovar automaticamente abaixo. Veja Controlar gastos e aprovações do agente.
Novas tentativas e idempotência
Envie um cabeçalho Idempotency-Key (um UUID novo por ação) em cada criação e início. Se a rede cair e você tentar novamente com a mesma chave e corpo, você recebe a primeira resposta de volta em vez de um segundo vídeo. As chaves são lembradas por 24 horas.
| Código | Significado |
|---|---|
idempotency_key_reused |
A mesma chave com um corpo diferente. Use uma nova chave para uma nova solicitação. |
idempotency_in_progress |
A primeira solicitação com esta chave ainda está em execução. Aguarde e tente novamente. |
idempotency_conflict |
"Esta chave de idempotência foi usada para uma solicitação diferente." |
Erros
Todo erro tem o mesmo formato, com uma mensagem que diz o que fazer a seguir:
{
"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"
}
Inclua o request_id ao entrar em contato com o suporte.
| HTTP | Códigos | Causa típica |
|---|---|---|
| 401 | unauthenticated, token_expired, token_revoked |
Sem token, um incorreto, ou um que expirou ou foi revogado. |
| 402 | insufficient_credits |
O workspace não tem créditos suficientes para a cotação. |
| 403 | forbidden_ability, forbidden_role, forbidden_item, ip_not_allowed, live_content_needs_publish, site_paused, forbidden |
Uma permissão ausente, o cargo do proprietário, acesso à coleção ou a lista de permissão de IP. |
| 403 | plan_locked |
"A API do agente não está no plano deste workspace. Ela está no Pro e superior." |
| 404 | not_found, unknown_kind |
"Nenhum … com esse id no escopo deste token. Liste ou pesquise primeiro e use um id retornado." |
| 409 | revision_conflict, quote_used, not_cancelable, idempotency_* |
O conteúdo mudou, a cotação foi usada ou um conflito de nova tentativa. |
| 410 | quote_expired |
"Esta cotação expirou. Peça uma nova cotação." |
| 413 | unsupported_media |
O arquivo é muito grande ou não é um tipo suportado. |
| 422 | validation_failed, invalid_input, quote_mismatch, limit_reached |
Um campo está incorreto; details o nomeia. |
| 429 | rate_limited, cap_exceeded, busy |
Muitas solicitações, um limite de gastos ou dois inícios ao mesmo tempo. |
Cada mensagem, com a correção: Corrigir erros do agente e da API.
Limites de taxa
| Limite | Valor | Mensagem |
|---|---|---|
| Solicitações por token | 300 por minuto | "Este token excedeu sua taxa de solicitação. Aguarde e tente novamente." |
| Solicitações por workspace | 1.200 por minuto, todos os tokens juntos | "Este workspace excedeu sua taxa de solicitação de agente. Aguarde e tente novamente." |
| Gravações por token | 60 por minuto | "Muitas gravações deste token. Aguarde e tente novamente." |
| Gravações por token por dia | 2.000 | "Este token atingiu seu limite diário de gravação. Tente novamente amanhã." |
| Publicações por token | 10 por hora | "Este token atingiu seu limite horário de publicação. Tente novamente mais tarde." |
| Inícios pagos | 20 por hora por token, 100 por dia por workspace | rate_limited com retry_after |
| Uploads | 30 por minuto; 500 MB por dia por token; 25 MB por arquivo | "Muitos uploads deste token. Aguarde e tente novamente." / "Este token atingiu seu volume diário de upload. Tente novamente amanhã." |
| Chamadas sem um token válido | 60 por minuto por endereço IP | "Muitas solicitações. Aguarde e tente novamente." |
Uma resposta 429 tem um cabeçalho Retry-After e retry_after (segundos) no corpo. Aguarde esse tempo antes de tentar novamente. Leituras, cotações e verificações de status não custam créditos.