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
- Cache hit (alguém já transcreveu esse vídeo): a URL atalho responde 303 See Other redirecionando para a URL canônica curta —
https://videohub.pro/transcript/<id>. Browser e agentes que seguem redirect (cURL com-L, httpx, requests, Claude/ChatGPT) acabam na página renderizada com a transcrição completa em HTML. - Vídeo novo (cache miss): a URL atalho responde 200 com a página "Transcrição em andamento". O HTML traz server-rendered: título, canal, duração, estágio atual, estimativa e o link permanente da transcrição. Bots leem direto do HTML; browser ganha barra de progresso animada via JS.
- Opt-in pra JSON:
?format=jsonouAccept: application/json— útil pra integrações programáticas. Inclui campocanonical_urle bloco_metaauto-descritivo. - Vídeos > 10 min sem chave geram uma prévia com os primeiros 10 min +
upsell.messagepra assinatura. - JSON sem follow-redirect e ainda em andamento →
202 Acceptedcomstatus_urlestream_urlpra polling.
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
- Use
curl -Lpara seguir o redirect 303 quando o vídeo já está pronto. - Você pode acessar diretamente a URL canônica curta também:
https://videohub.pro/transcript/<short_id>— funciona em browsers e em ferramentas tipo Claude Desktop. - Forçar formato:
?format=jsonou?format=html(preservados durante o redirect). - Aumentar o tempo de espera síncrono no JSON:
?wait=120(máx 120s). - Teste rápido no terminal:
curl -sL https://videohub.pro/https://youtu.be/JAz0jPetSjI | jq.
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:
- Vídeos com no máximo 10 minutos que ainda não foram transcritos.
- 5 transcrições novas por hora por IP. Cache hits são ilimitados.
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
- Crie uma conta com email + senha.
- Acesse /app/api-keys e clique em Criar chave.
- Copie o segredo (formato
vh_live_…) — só aparece nessa hora. - 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
- Cache global: a primeira pessoa a transcrever um vídeo paga o custo; daí em diante todas as próximas pedidas (suas ou de outros usuários) retornam instantâneo.
- URL atalho anônima (
videohub.pro/<url>): vídeo ≤ 10 min vem completo; vídeo > 10 min vem como prévia (primeiros 10 min) com CTA pra assinatura. - POST /api/v1/transcribe anônimo: vídeo ≤ 10 min processa; > 10 min retorna 402 (use API key). 5 vídeos novos/IP/hora, cache hits sem limite.
- Com API key: sem limite de duração, sem rate limit, sem prévia, histórico salvo na sua conta.
- Duração máxima absoluta: 7 horas por vídeo (limite técnico).
- O resultado da API key é privado — só você vê no histórico. Mas a transcrição em si entra no cache global (apenas o conteúdo público; ninguém vê quem transcreveu primeiro).
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"
}
}
| HTTP | code | Significado |
|---|---|---|
| 400 | invalid_url | URL não é YouTube/Instagram (ou formato não suportado) |
| 402 | auth_required | Vídeo > 10 min e sem API key |
| 404 | unavailable | Vídeo privado, deletado ou geo-bloqueado |
| 404 | not_found | transcription_id não existe |
| 413 | video_too_long | Vídeo passa de 7h |
| 429 | rate_limited | Anônimo passou de 5 novas/hora |
| 502 | transcription_failed | Falha no pipeline (Groq, yt-dlp etc) |
| 503 | queue_unavailable | Fila 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:
transcribe_video(url, wait_seconds=60, include_frames=false)— transcreve (cache global: hits são instantâneos)get_transcription(transcription_id, include_frames=false)— status/conteúdolist_my_transcriptions(limit=20)— seu históricosearch_transcript(transcription_id, query)— busca dentro da transcrição, retorna trechos com timestampget_frames(transcription_id, timestamps|count)— retorna as imagens dos frames (a IA literalmente vê o vídeo)get_comments(transcription_id)— top comentários do vídeo
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)
- Em ChatGPT > Explorar GPTs > Criar, vá em Configurar > Ações.
- Cole o schema OpenAPI: /api/v1/openapi.json (ou copie e cole direto).
- Em Autenticação, escolha API Key > Bearer > cole sua chave
vh_live_…. - 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:
/llms.txt— índice do site pra agentes/docs.md— esta documentação/skill.md— guia "como usar o VideoHub" pra assistentes/transcript/<id>.ai.md— relatório AI-ready de qualquer transcrição (timestamps + URLs dos frames)
Dúvidas? Abra a interface Swagger pra explorar interativamente.