Como usar a API do Vidiome para automatizar a geração de artigos a partir de vídeo

    ·11 min de leitura·Por Vidiome Team
    Vidiome APIArticle AutomationDeveloper TutorialContent Automation

    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 artigo

    Sem 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 artigo

    Sem cartão de crédito · 120 créditos gratuitos