POST/api/v1/generate/video-studio

Vídeo do Studio

Bearer tokenescopo generate:video

Gera um vídeo de produto pelo Marketing Studio (avatar/influencer promovendo um produto em vários formatos: UGC, tutorial, unboxing, provador virtual, hyper motion e mais). Responde 202 Accepted com um taskId; acompanhe por polling em GET /api/v1/tasks/:id (o resultUrl traz o mp4 quando completed).

Escopo necessário: generate:video.

Pré-requisitos

  1. Produto — crie em POST /api/v1/studio/products e use o id como productId.
  2. Catálogo — leia GET /api/v1/studio/catalog para os mode (slug), hookId e settingId (ids) válidos e suas políticas.
  3. Avatar (opcional) — crie em POST /api/v1/studio/avatars se o modo permitir/exigir.

Body

CampoTipoObrigatórioValores / restrições
modestringsimslug de um modo do catálogo (ex.: ugc, ugc_how_to, product_showcase)
productIdstringsimid de um produto criado no Studio
resolutionstringsim480p ou 720p
userPromptstringnãoRoteiro/falas do vídeo (máx. 2000). Respeitado verbatim. Ignorado em modos com speechPolicy: "forbidden".
hookIdstringnãoid de um gancho do catálogo (abertura que prende o scroll)
settingIdstringnãoid de um cenário do catálogo (ambiente)
avatarIdstringnãoid de um avatar criado no Studio (conforme avatarPolicy do modo)
aspectRatiostringnãoauto, 21:9, 16:9, 4:3, 1:1, 3:4 ou 9:16
durationSecnumbernãoInteiro de 4 a 15

O custo é por resolução (veja costsByResolution no catálogo) e é debitado na criação da task. O modelo de vídeo real é resolvido pelo engine e não é exposto.

Exemplo de request

cURL
curl -X POST https://avatrix.io/api/v1/generate/video-studio \
  -H "Authorization: Bearer av_xxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 9f1c-studio-001" \
  -d '{
    "mode": "ugc",
    "productId": "prod_abc123",
    "resolution": "720p",
    "userPrompt": "Gente, esse produto salvou minha rotina — olha isso!",
    "hookId": "clx_hook_product_hit",
    "settingId": "clx_setting_bedroom",
    "aspectRatio": "9:16",
    "durationSec": 15
  }'

Resposta — 202

JSON
{ "success": true, "data": { "taskId": "...", "status": "queued", "variationGroup": "..." } }

Acompanhe em GET /api/v1/tasks/:id: a task evolui até completed (com resultUrl = mp4) ou failed. Ver Ciclo de vida da task.

Idempotência

Envie o header Idempotency-Key (opcional, máx. 128 chars). Requisições repetidas com a mesma chave (24h) retornam a resposta original sem novo débito. Ver Idempotência.

Erros relevantes

CódigoHTTPQuando
VALIDATION_ERROR400campos inválidos (mode/productId/resolution, etc)
INSUFFICIENT_CREDITS402saldo insuficiente
FORBIDDEN403Studio indisponível no plano, ou token sem generate:video
RATE_LIMITED / MAX_CONCURRENT_TASKS429rate limit ou 20 tasks simultâneas
GENERATION_FAILED502produto/avatar inexistente, modo inválido ou falha do engine
PROVIDER_UNAVAILABLE503engine do Studio indisponível
FEATURE_DISABLED503Marketing Studio indisponível

Ver Códigos de erro e Escopos.