Pular para o conteúdo principal

Receba notificações de projetos

Configure um receptor, verifique notificações e teste seu fluxo quando um projeto mudar.

As integrações estão disponíveis nas assinaturas Max. O processamento de vídeos usa seus minutos e limites de plano atuais.

Prepare seu receptor

Webhooks enviam HTTP quando um vídeo está pronto para revisão, a exportação termina, falha ou o projeto é cancelado. As integrações estão disponíveis nas assinaturas Max.

É necessária uma URL HTTPS pública que aceite POST, apenas na porta 443. Localhost e redes privadas não recebem diretamente. Não há redirecionamentos; para teste local, use túnel HTTPS público.

Troque https://receiver.example/captionbolt pela URL real.

Adicione um endpoint

  1. Abra Configurações → Integrações.
  2. Informe URL HTTPS de destino e escolha eventos.
  3. Selecione Adicionar Webhook.
  4. Guarde o segredo de assinatura; é exibido uma única vez.

Esse segredo verifica notificações e é diferente de uma chave API.

Também pode criar por REST. Configure CAPTIONBOLT_API_KEY com webhooks:manage conforme o guia API:

curl --fail-with-body https://api.captionbolt.com/v1/webhooks \
  -H "Authorization: Bearer $CAPTIONBOLT_API_KEY" \
  -H 'Content-Type: application/json' \
  --data '{"url":"https://receiver.example/captionbolt","events":["project.completed","project.failed"]}'

A resposta traz id e secret. Guarde o segredo com segurança no ambiente do receptor.

Escolha eventos

| Evento | Significado | | --- | --- | | project.ready | Processamento completo; pode revisar ou exportar | | project.completed | Exportação concluída e resultados disponíveis; padrão | | project.failed | Processamento ou exportação falhou; padrão | | project.cancelled | Projeto cancelado |

Eventos cobrem projetos de vídeo elegíveis criados pelo site, REST ou MCP. Novo endpoint recebe eventos futuros, sem repetir mudanças anteriores. Excluem Transcripts independentes e projetos excluídos ou fora do acesso.

project.ready não significa exportado nem revisado por uma pessoa.

{
  "id": "event-uuid",
  "type": "project.completed",
  "createdAt": "2026-09-27T12:00:00.000Z",
  "data": {
    "projectId": "project-uuid",
    "status": "completed",
    "stage": "export",
    "resultUrl": "https://api.captionbolt.com/v1/projects/project-uuid/result"
  }
}

Eventos trazem metadados, não vídeo ou legendas. data.resultUrl é REST autenticado. Use chave com projects:read para obter links novos; baixe arquivos sem enviar a chave. Veja downloads.

Verifique as solicitações

CaptionBolt usa Standard Webhooks. Verifique a assinatura com o corpo bruto exato antes de interpretar ou agir. Cabeçalhos: webhook-id, webhook-timestamp, webhook-signature.

Exemplo de receptor Node.js

Este receptor verifica assinaturas e registra ID e tipo para teste. O exemplo usa Node.js 24; outro idioma de programação também serve. Instale o verificador JavaScript no seu projeto receptor:

npm install standardwebhooks
read -r -s -p 'CaptionBolt signing secret: ' CAPTIONBOLT_WEBHOOK_SECRET
export CAPTIONBOLT_WEBHOOK_SECRET
printf '\n'

Salve como receiver.mjs:

import { createServer } from "node:http";
import { Webhook } from "standardwebhooks";

const secret = process.env.CAPTIONBOLT_WEBHOOK_SECRET;
if (!secret) throw new Error("Set CAPTIONBOLT_WEBHOOK_SECRET.");
const verifier = new Webhook(secret);

createServer(async (request, response) => {
  if (request.method !== "POST" || request.url !== "/captionbolt") {
    response.writeHead(404).end();
    return;
  }
  let event;
  try {
    const chunks = [];
    let size = 0;
    for await (const chunk of request) {
      size += chunk.length;
      if (size > 65536) {
        response.writeHead(413).end();
        return;
      }
      chunks.push(chunk);
    }
    const rawBody = Buffer.concat(chunks).toString("utf8");
    event = verifier.verify(rawBody, {
      "webhook-id": request.headers["webhook-id"],
      "webhook-timestamp": request.headers["webhook-timestamp"],
      "webhook-signature": request.headers["webhook-signature"],
    });
  } catch {
    response.writeHead(400).end("Invalid webhook");
    return;
  }
  console.log("Verified event:", event.id, event.type);
  response.writeHead(204).end();
}).listen(3000, "127.0.0.1");

Execute node receiver.mjs e exponha /captionbolt por HTTPS ou túnel público. O CaptionBolt precisa da URL HTTPS pública, não do endereço local.

O verificador confere assinatura e timestamp; mantenha o relógio correto. Não interprete e serialize novamente JSON antes da verificação, nem registre segredo ou corpo completo.

Em produção, substitua logs por recebimento persistente: deduplique por id, salve evento ou tarefa antes do 2xx e processe assincronamente. Falha de persistência deve retornar erro para permitir nova tentativa. O exemplo só testa recebimento; não fornece fila persistente ou downloads.

Envie um teste

  1. Inicie o receptor e configure o segredo.
  2. Abra o endpoint em Configurações → Integrações e selecione Enviar teste.
  3. Confira Histórico de entregas.
  4. Confirme um webhook.test verificado nos logs.

Só um teste pode estar ativo por endpoint. Aguarde terminar e mais 60 segundos antes de outro. Novas tentativas manuais também têm intervalo mínimo; siga o tempo retornado.

Trate webhook.test separadamente: não representa vídeo concluído. Use evento real futuro para testar resultados.

Se falhar, confira URL, segredo, corpo bruto e resposta. Confirme em 15 segundos. Resposta não 2xx, erro de conexão ou ausência de confirmação provoca novas tentativas.

Gerencie novas tentativas e segredos

Notificações podem repetir ou chegar fora de ordem. Deduplique por ID e consulte o estado atual quando necessário.

São três tentativas automáticas: inicial, cerca de um minuto após a primeira falha e cinco minutos após a segunda. Depois, a entrega automática para. Corrija o receptor e selecione Reenviar; mantém o ID e inicia outras três tentativas. O histórico dura 30 dias.

Use Rotacionar segredo, guarde o segredo novo e atualize o receptor. O anterior vale 24 horas; ambas as assinaturas acompanham entregas nesse período. Outra rotação fica bloqueada até acabar a sobreposição.

Desativar interrompe entregas pendentes; uma requisição em andamento pode terminar. Excluir remove também o histórico. Excluir o projeto ou encerrar seu acesso interrompe notificações pendentes. Webhooks não ampliam os 14 dias; obtenha e salve resultados antes.

Usamos cookies para lembrar preferências, medir o desempenho do site e melhorar o CaptionBolt.