V VideoHub
Entrar Comece grátis

Documentação

Use o VideoHub como serviço de transcrição para agentes de IA, ferramentas de chat e scripts. Funciona com YouTube e Instagram.

⚡ Jeito mais fácil: prefixar com videohub.pro/

Esse é o atalho desenhado pra conversas com IA. Quando você pede pro ChatGPT/Claude/Gemini resumir um vídeo, mande essa frase:

Transcreva este vídeo: https://videohub.pro/<COLE A URL DO VÍDEO AQUI>

(English:)

Transcribe this video: https://videohub.pro/<PASTE THE VIDEO URL HERE>

Apenas isso. A IA faz um GET na URL e recebe HTML server-rendered com toda a informação relevante (igual qualquer página pública da web). Sem precisar especificar header, formato, polling ou qualquer convenção técnica — o serviço se vira pra atender qualquer GET de forma útil. Quem ensina a IA é a nossa aplicação (na resposta), não o usuário.

Por que essa frase funciona em qualquer IA: algumas IAs (em especial o Claude) não constroem URLs sozinhas — só acessam URLs já fornecidas pelo usuário. Ao colar o atalho prefixado, você transforma a URL em "fornecida pelo usuário" e funciona em qualquer IA.

Exemplos prontos pra copiar:

https://videohub.pro/https://youtu.be/JAz0jPetSjI
https://videohub.pro/https://www.youtube.com/watch?v=UF8uR6Z6KLc
https://videohub.pro/https://www.instagram.com/reel/DY68F5wlbAU/

Comportamento

Resposta JSON (exemplo cache hit, após seguir o 303)

{
  "status": "done",
  "is_preview": false,
  "transcription_id": "1a9923cb6e7f0e8b9a0c1d2e3f4567...",
  "title": "Recriei o Claude Dynamic Workflows com LangGraph",
  "channel": "Ronnald Hawk",
  "duration_seconds": 1445.0,
  "language": "Portuguese",
  "source_type": "youtube",
  "source_url": "https://youtu.be/JAz0jPetSjI",
  "markdown": "# Recriei o Claude...\n\n## Transcrição\n\n...",
  "canonical_url": "https://videohub.pro/transcript/1a9923cb6e7f"
}

Resposta com prévia (vídeo longo, primeira vez)

{
  "status": "done",
  "is_preview": true,
  "preview_cap_seconds": 600,
  "title": "Steve Jobs' 2005 Stanford Commencement Address",
  "duration_seconds": 904.0,
  "markdown": "# Steve Jobs...",
  "upsell": {
    "message": "Esta é uma prévia gratuita com os primeiros 10 minutos...",
    "pricing_url": "https://videohub.pro/pricing",
    "signup_url": "https://videohub.pro/signup"
  }
}

Truques úteis

Começo rápido via REST

Se preferir um POST estruturado (útil pra integrações onde a URL é dado, não parte do path):

curl -X POST https://videohub.pro/api/v1/transcribe \
  -H "Content-Type: application/json" \
  -d '{"url":"https://youtu.be/JAz0jPetSjI"}'

Resposta (recortada):

{
  "status": "done",
  "transcription_id": "1a9923cb...",
  "cached": true,
  "title": "Recriei o Claude Dynamic Workflows com LangGraph",
  "duration_seconds": 1445.0,
  "language": "Portuguese",
  "markdown": "# Recriei o Claude...\n\n## Transcrição\n\n..."
}

Uso anônimo

Sem cadastro, sem API key. Limitado a:

Se o vídeo já foi transcrito por alguém (cache hit), tudo passa instantâneo — sem contar contra o limite.

Autenticação com API key

  1. Crie uma conta com email + senha.
  2. Acesse /app/api-keys e clique em Criar chave.
  3. Copie o segredo (formato vh_live_…) — só aparece nessa hora.
  4. Passe no header Authorization: Bearer …:
curl -X POST https://videohub.pro/api/v1/transcribe \
  -H "Authorization: Bearer vh_live_SEU_SEGREDO" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://www.youtube.com/watch?v=ABC123"}'

Com Bearer válido: sem limite de duração, sem rate limit, e a transcrição é salva no seu histórico em /historico.

Endpoints REST v1

POST /api/v1/transcribe

Inicia (ou recupera do cache) uma transcrição. Comportamento híbrido: espera até wait_seconds; se terminar dentro disso, devolve o markdown direto. Se exceder, devolve 202 com status_url + stream_url para você acompanhar.

Body:

{
  "url": "https://youtu.be/VIDEO_ID",
  "wait_seconds": 60   // opcional. Default 60, máx 120
}

Resposta quando concluído (200):

{
  "status": "done",
  "transcription_id": "abc123...",
  "cached": false,
  "title": "Título do vídeo",
  "channel": "Nome do canal",
  "duration_seconds": 1234,
  "language": "Portuguese",
  "source_type": "youtube",
  "source_url": "https://youtu.be/...",
  "markdown": "# ..."
}

Resposta quando ainda rodando (202):

{
  "status": "running",
  "transcription_id": "abc123...",
  "status_url": "https://videohub.pro/api/v1/transcribe/abc123...",
  "stream_url": "https://videohub.pro/api/v1/transcribe/abc123.../stream"
}

GET /api/v1/transcribe/{id}

Status e (quando pronto) markdown. Use para polling se o POST devolveu 202.

GET /api/v1/transcribe/{id}/stream

Server-Sent Events com cada etapa do pipeline em tempo real. Útil pra mostrar progresso a um usuário enquanto espera.

POST/GET/DELETE /api/v1/keys

CRUD de chaves API (requer sessão de login no navegador, não pode ser usado com Bearer — evita escalada).

Swagger UI completo: /api/v1/docs.

OpenAPI schema (para importar no ChatGPT): /api/v1/openapi.json.

Limites & cache

Códigos de erro

Todos os erros vêm no formato:

{
  "error": {
    "code": "auth_required",
    "message": "Vídeos com mais de 10 minutos exigem uma API key. Crie em https://videohub.pro/app/api-keys"
  }
}
HTTPcodeSignificado
400invalid_urlURL não é YouTube/Instagram (ou formato não suportado)
402auth_requiredVídeo > 10 min e sem API key
404unavailableVídeo privado, deletado ou geo-bloqueado
404not_foundtranscription_id não existe
413video_too_longVídeo passa de 7h
429rate_limitedAnônimo passou de 5 novas/hora
502transcription_failedFalha no pipeline (Groq, yt-dlp etc)
503queue_unavailableFila momentaneamente fora; tente em 1min

Detalhe: respostas da URL atalho nunca usam HTTP 402 — em vez disso retornam 200 com is_preview: true e o objeto upsell. Quem usa POST /api/v1/transcribe sem chave recebe 402 (precisa cadastro).

Servidor MCP (Claude, ChatGPT, Gemini CLI…)

O servidor MCP fica em https://videohub.pro/mcp (transporte Streamable HTTP, o padrão atual do protocolo). Autenticação via header Authorization: Bearer com sua API key.

Claude Code (uma linha):

claude mcp add --transport http videohub https://videohub.pro/mcp \
  --header "Authorization: Bearer vh_live_SEU_SEGREDO"

Claude Desktop e outros clientes (claude_desktop_config.json ou equivalente):

{
  "mcpServers": {
    "videohub": {
      "type": "http",
      "url": "https://videohub.pro/mcp",
      "headers": {
        "Authorization": "Bearer vh_live_SEU_SEGREDO"
      }
    }
  }
}

Seis tools ficam disponíveis:

Aí em qualquer conversa basta mandar o link do vídeo — a IA chama a tool e usa o conteúdo.

Legado: o endpoint SSE antigo (/mcp/sse) continua funcionando para clientes que ainda não migraram.

Skill pro Claude Code

A skill ensina o Claude quando e como usar o VideoHub sem você precisar explicar: workflows prontos de estudo, verificação de afirmações, citação com timestamps e análise pra criadores de conteúdo.

Instalação (requer o servidor MCP configurado):

mkdir -p ~/.claude/skills/videohub
curl -o ~/.claude/skills/videohub/SKILL.md https://videohub.pro/claude-skill.md

Pronto. Em qualquer sessão do Claude Code, mande um link de vídeo ou peça "verifica se esse vídeo realmente diz X" — a skill ativa sozinha. Fonte da skill: /claude-skill.md.

Plug no ChatGPT (Custom GPT Action)

  1. Em ChatGPT > Explorar GPTs > Criar, vá em Configurar > Ações.
  2. Cole o schema OpenAPI: /api/v1/openapi.json (ou copie e cole direto).
  3. Em Autenticação, escolha API Key > Bearer > cole sua chave vh_live_….
  4. Salve. Pronto: descreve no system prompt que o GPT pode pedir transcrições via essa action.

O ChatGPT também funciona com o servidor MCP (Settings > Connectors, em contas com suporte a conectores).

Páginas .md pra LLMs

Toda página pública tem versão markdown — mais barata pra uma IA ler do que HTML:


Dúvidas? Abra a interface Swagger pra explorar interativamente.