Como usar a API do Vidiome para automatizar a geração de artigos a partir de vídeo
Tutorial técnico para desenvolvedores: use o endpoint POST /api/v1/articles do Vidiome para automatizar a geração de vídeo para artigo em grande escala. Exemplos Curl + Node.js incluídos.
A API REST pública do Vidiome permite que os desenvolvedores automatizem o pipeline completo do vídeo para o artigo de forma programática - sem necessidade de navegador, sem uploads manuais. Uma única solicitação POST /api/v1/articles retorna um artigo de blog estruturado e otimizado para SEO de qualquer URL do YouTube ou arquivo de vídeo.
Este tutorial cobre a especificação do endpoint, autenticação, exemplos de código em curl e Node.js, padrões de casos de uso para processamento em lote e integração CMS e um diagrama de fluxo de trabalho de automação.
Para quem é este tutorial
- Desenvolvedores de SaaS criando recursos de automação de conteúdo para clientes ou ferramentas internas
- Agências de conteúdo processando mais de 20 vídeos por semana e precisando eliminar o uso manual do Vidiome
- Equipes de plataforma integrando vídeo-artigo em um CMS existente ou fluxo de trabalho de conteúdo
- Startups building on top of Vidiome's capabilities as a content infrastructure layer
Se você é um criador individual e não um desenvolvedor, o aplicativo web Vidiome é o caminho mais rápido — este tutorial é especificamente para uso programático de API.
Vidiome
Turn your videos into SEO traffic machines
Gerar o meu primeiro artigoSem cartão de crédito · 120 créditos gratuitos
Pré-requisitos
- Uma conta Vidiome com pelo menos plano Starter (o acesso à API requer um plano pago ou de avaliação)
- Sua chave API do Vidiome (encontrada em Configurações da conta → Chaves API)
- Familiaridade básica com APIs HTTP REST e curl ou Node.js
O Vidiome oferece 120 créditos gratuitos na inscrição — você pode testar o fluxo de trabalho do aplicativo da web antes de se comprometer com a integração da API.
Visão geral do endpoint: POST /api/v1/articles
O endpoint de geração de artigos do Vidiome aceita uma fonte de vídeo e parâmetros de geração e, em seguida, retorna um objeto de artigo completo.
Solicitação
POSTAR https://vidiome.com/api/v1/articles
Tipo de conteúdo: application/json
Autorização: Portador YOUR_API_KEY
Corpo da solicitação
{
"fonte": {
"tipo": "youtube_url",
"url": "https://www.youtube.com/watch?v=XXXXXXXXXX"
},
"geração": {
"idioma": "pt",
"focus_keyword": "como converter vídeo do YouTube em postagem de blog",
"output_format": "remarcação"
}
}
objeto fonte
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
tipo |
corda | Sim | "youtube_url" ou "file_upload" |
url |
corda | Obrigatório se type = youtube_url |
URL completo do vídeo do YouTube |
id_arquivo |
corda | Obrigatório se type = file_upload" |
ID do arquivo de um upload anterior de /api/v1/files |
objeto geração
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
linguagem |
corda | Sim | Código ISO 639-1. Suportado: en, fr, es, pt, de, ru, hi, uk, id, tr |
focus_keyword |
corda | Não | Palavra-chave Target SEO – melhora o alinhamento H1 e meta |
formato_saída |
corda | Não | "markdown" (padrão) ou "html" |
Resposta
{
"id": "art_01HZXXX",
"status": "concluído",
"criado_em": "2026-05-15T10:23:41Z",
"processing_time_seconds": 187,
"créditos_usados": 12,
"artigo": {
"title": "Como converter um vídeo do YouTube em uma postagem de blog em 5 minutos",
"meta_description": "O Vidiome converte qualquer URL do YouTube em uma postagem de blog SEO estruturada em menos de 5 minutos. Tutorial passo a passo com transcrição Whisper com precisão de 95%+.",
"content": "# Como converter um vídeo do YouTube...\n\n## O que você precisa\n...",
"contagem_palavras": 1247,
"idioma": "pt",
"focus_keyword": "como converter vídeo do YouTube em postagem de blog"
},
"transcrição": {
"text": "Olá pessoal, hoje quero mostrar para vocês...",
"segmentos": [
{ "start": 0.0, "end": 4.2, "text": "Olá pessoal, hoje quero mostrar para vocês" },
...
]
}
}
Valores de status
| Estado | Significado |
|---|---|
queued |
Pedido aceito, processamento não iniciado |
processamento |
Transcrição e/ou geração do artigo em andamento |
concluído |
Artigo pronto no corpo da resposta |
falhou |
Erro de processamento — veja o campo error |
Para pesquisa assíncrona, use GET /api/v1/articles/{id} com o id retornado.
Exemplos de código
enrolar
curl -X POST https://vidiome.com/api/v1/articles\
-H "Tipo de conteúdo: aplicativo/json" \
-H "Autorização: Portador YOUR_API_KEY" \
-d '{
"fonte": {
"tipo": "youtube_url",
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
},
"geração": {
"idioma": "pt",
"focus_keyword": "estratégia de reaproveitamento de conteúdo",
"output_format": "remarcação"
}
}'
Enquete para conclusão:```bash
Substitua art_01HZXXX pelo id da resposta inicial
curl -H "Autorização: Portador YOUR_API_KEY"
https://vidiome.com/api/v1/articles/art_01HZXXX
### Node.js (busca)
```javascript
const VIDIOME_API_KEY=process.env.VIDIOME_API_KEY;
função assíncrona generateArticle(youtubeUrl, focusKeyword, idioma = 'en') {
// Etapa 1: Enviar solicitação de geração de artigo
resposta const = aguardar busca('https://vidiome.com/api/v1/articles', {
método: 'POST',
cabeçalhos: {
'Tipo de conteúdo': 'aplicativo/json',
'Autorização': `Portador ${VIDIOME_API_KEY}`,
},
corpo: JSON.stringify({
fonte: {
digite: 'youtube_url',
url: youtubeUrl,
},
geração: {
idioma,
focus_keyword: focusKeyword,
formato_de_saída: 'remarcação',
},
}),
});
const job = aguardar resposta.json();
if (!response.ok) {
throw new Error(`Erro da API do Vidiome: ${job.message}`);
}
// Passo 2: Enquete até a conclusão
retornar aguardar pollUntilComplete(job.id);
}
função assíncrona pollUntilComplete(articleId, maxAttempts = 30, intervalMs = 10000) {
for (deixe tentativa = 0; tentativa < maxAttempts; tentativa++) {
aguarde nova Promise(resolve => setTimeout(resolve, intervalMs));
const res = aguardar fetch(`https://vidiome.com/api/v1/articles/${articleId}`, {
cabeçalhos: { 'Autorização': `Bearer ${VIDIOME_API_KEY}` },
});
const artigo = aguarda res.json();
if (artigo.status === 'concluído') {
artigo de devolução;
}
if (artigo.status === 'falhou') {
throw new Error(`Falha na geração do artigo: ${article.error}`);
}
console.log(`[Vidiome] Status: ${article.status} (tentativa ${attempt + 1}/${maxAttempts})`);
}
throw new Error('Vidiome: tempo limite de votação excedido');
}
// Uso
const resultado = aguarda gerarArtigo(
'https://www.youtube.com/watch?v=XXXXXXXXXX',
'como redirecionar conteúdo de vídeo'
);
console.log(resultado.artigo.título);
console.log(`Contagem de palavras: ${result.article.word_count}`);
console.log(`Créditos usados: ${result.credits_used}`);
// Grava no arquivo, envia para o CMS, etc.
Diagrama de fluxo de trabalho de automação
Aqui está a arquitetura de automação completa para um pipeline típico de processamento em lote usando Vidiome:
┌──────────────────────────── ─────────────────────────────┐
│ CAMADA DE FONTE DE VÍDEO │
│ Lista de reprodução do YouTube / feed RSS / biblioteca de vídeos CMS │
└──────────────────────┬───── ─────────────────────────────┘
│ URLs de vídeo/referências de arquivo
▼
┌──────────────────────────── ─────────────────────────────┐
│ CAMADA DE ORQUESTRAÇÃO │
│ Cron job / gatilho de webhook / n8n / Make.com │
│ - Desduplicação (ignorar URLs já processados) │
│ - Limitação de taxa (respeite o orçamento de créditos da API) │
│ - Gerenciamento de filas │
└──────────────────────┬───── ─────────────────────────────┘
│ POST /api/v1/artigos
▼
┌──────────────────────────── ─────────────────────────────┐
│API VÍDIOME │
│ 1. Transcrição sussurrada (pedaços de 60 segundos, 95% + acc.) │
│ 2. Geração de artigos LLM (estrutura + SEO) │
│ 3. Retorna: título, meta, conteúdo (MD/HTML), transcrição │
└──────────────────────┬───── ─────────────────────────────┘
│ Objeto de artigo concluído
▼
┌──────────────────────────── ─────────────────────────────┐
│ CAMADA DE PÓS-PROCESSAMENTO │
│ - Fila de revisão humana (opcional, mas recomendado) │
│ - Injeção de link interno (adicionar links a postagens existentes)│
│ - Atribuição de imagem em destaque │
│ - Injeção de marcação de esquema (artigo JSON-LD) │
└──────────────────────┬───── ─────────────────────────────┘
│ Artigo pronto para publicação
▼
┌──────────────────────────── ─────────────────────────────┐
│ CMS / PLATAFORMA │
│ WordPress (API REST) / Ghost (API Admin) │
│ Webflow CMS / Contentful / Sanity / Banco de dados personalizado │
└──────────────────────────── ─────────────────────────────┘
Casos de uso
Processamento em lote de um canal do YouTube
Processe o catálogo anterior inteiro de um canal do YouTube de uma só vez:```javascript função assíncrona processYouTubeChannel(channelVideoUrls, options = {}) { const{ idioma = 'en', simultaneidade = 3, // máximo de solicitações paralelas do Vidiome delayMs = 2000, // atraso entre lotes (limitação de taxa) } = opções;
resultados const = [];
// Processa em lotes de simultaneidade
for (deixe i = 0; i <channelVideoUrls.length; i += simultaneidade) {
lote const = canalVideoUrls.slice (i, i + simultaneidade);
const batchResults = aguardar Promise.allSettled(
batch.map(url => generateArticle(url, '', idioma))
);
resultados.push(...batchResultados);
console.log(`Processado ${Math.min(i + simultaneidade, channelVideoUrls.length)}/${channelVideoUrls.length} vídeos`);
if (i + simultaneidade <channelVideoUrls.length) {
aguarde nova promessa(resolver => setTimeout(resolver, delayMs));
}
}
retornar resultados; }
Um canal com 100 vídeos processados em 3 solicitações simultâneas: aproximadamente 100 minutos no total (média de 3 minutos por vídeo × 100 ÷ 3 simultâneos).
### Integração CMS (exemplo WordPress)
Depois que o Vidiome retornar o artigo, envie-o diretamente para o WordPress por meio da API REST:
```javascript
função assíncrona publicarToWordPress(vidiomeArticle, wpConfig) {
const {siteUrl, nome de usuário, appPassword} = wpConfig;
credenciais const = Buffer.from(`${username}:${appPassword}`).toString('base64');
resposta const = aguardar fetch(`${siteUrl}/wp-json/wp/v2/posts`, {
método: 'POST',
cabeçalhos: {
'Tipo de conteúdo': 'aplicativo/json',
'Autorização': `${credenciais}` básico,
},
corpo: JSON.stringify({
título: vidiomeArticle.article.title,
content: vidiomeArticle.article.content, // formato HTML recomendado para WP
trecho: vidiomeArticle.article.meta_description,
status: 'draft', // Sempre faça o rascunho primeiro para revisão humana
}),
});
retornar aguardar resposta.json();
}
Lote multilíngue: um vídeo, 10 idiomas
Gere o mesmo artigo em todos os 10 idiomas suportados simultaneamente:
const SUPPORTED_LANGUAGES = ['en', 'fr', 'es', 'pt', 'de', 'ru', 'hi', 'uk', 'id', 'tr'];
função assíncrona generateMultilingual(youtubeUrl, focusKeywords = {}) {
solicitações const = SUPPORTED_LANGUAGES.map(lang =>
gerarArtigo(
URL do youtube,
focoPalavras-chave[lang] || focusKeywords['pt'] || '',
idioma
)
);
// Executa todas as 10 linguagens em paralelo
resultados const = aguardar Promise.allSettled (solicitações);
retornar resultados.reduce((acc, resultado, índice) => {
const lang = SUPPORTED_LANGUAGES[índice];
if (resultado.status === 'cumprido') {
acc[lang] = resultado.valor;
} senão {
console.error(`Falha em ${lang}:`, result.reason);
}
conta de retorno;
}, {});
}
Isso gera versões em 10 idiomas de um único vídeo em aproximadamente 5 a 8 minutos (processamento paralelo).
Limites de taxas e orçamento de crédito
| Plano | Limite de taxa API | Créditos/mês |
|---|---|---|
| Grátis (120 créditos) | 2 necessidades/min | 120 (uma vez) |
| Iniciante | 10 necessidades/min | Por plano |
| Pró | 30 necessidades/min | Por plano |
| Agência | 60 necessidades/min | Por plano |
Consumo de créditos: cada geração de artigo usa de 10 a 15 créditos, dependendo da duração do vídeo. Um vídeo de 10 minutos utiliza aproximadamente 10 créditos; um vídeo de 60 minutos usa aproximadamente 15 créditos.
Recomendação de orçamento para processamento em lote: estime ceil(video_duration_minutos / 4) + 10 créditos por vídeo como um orçamento conservador.
Tratamento de erros
A API Vidiome usa códigos de status HTTP padrão:
| Código | Significado | Ação |
|---|---|---|
200 |
Sucesso | Resposta do processo |
400 |
Solicitação inválida (URL inválido, idioma não suportado, etc.) | Corrigir parâmetros de solicitação |
401 |
Chave de API inválida ou ausente | Verifique o cabeçalho de autorização |
402 |
Créditos insuficientes | Recarregue a conta ou reduza o tamanho do lote |
429 |
Limite de taxa excedido | Implementar backoff exponencial |
500 |
Erro no servidor | Tentar novamente com espera exponencial (máximo de 3 tentativas) |
Perguntas frequentes
A API do Vidiome suporta upload de arquivos ou apenas URLs do YouTube?
A API do Vidiome oferece suporte a URLs do YouTube e uploads diretos de arquivos. Para uploads de arquivos, primeiro chame POST /api/v1/files com seu arquivo de vídeo (MP4, MOV ou WebM, até 2GB), receba um file_id e depois passe esse file_id para POST /api/v1/articles com "type": "file_upload". Isso é útil para processar vídeos não hospedados no YouTube – gravações de webinars, vídeos do Loom, conteúdo de treinamento interno e vídeos hospedados no Vimeo.### Como lidar com vídeos longos (mais de 60 minutos) por meio da API?
O Vidiome processa vídeos de até 4 horas por meio da API. Para vídeos com mais de 60 minutos, a resposta da API é assíncrona por padrão — você receberá um id de trabalho imediatamente e, em seguida, pesquisará GET /api/v1/articles/{id} a cada 15 a 30 segundos até que o status seja concluído. Um vídeo de 90 minutos normalmente é processado em 6 a 9 minutos. A arquitetura de fragmentação de áudio de 60 segundos do Vidiome significa que mesmo vídeos muito longos não atingem problemas de tempo limite.
Existe uma opção de webhook em vez de votação?
Sim. O Vidiome oferece suporte a retornos de chamada de webhook para conclusão de artigos. Adicione um campo "webhook_url" ao corpo da solicitação POST apontando para o seu endpoint, e o Vidiome enviará uma solicitação POST com o objeto de artigo completo quando o processamento for concluído - eliminando a necessidade de pesquisa. A carga útil do webhook é idêntica ao formato de resposta GET /api/v1/articles/{id}.
Próximas etapas
Vidiome
Turn your videos into SEO traffic machines
Gerar o meu primeiro artigoSem cartão de crédito · 120 créditos gratuitos