DeepSeek Vision and Grok Imagine models are now live on CometAPI →
guide/Pesquisa CometAPI

Como conectar vários modelos de IA ao n8n com uma única chave da CometAPI

Crie um fluxo de trabalho low-code no n8n que encaminhe tarefas de planilhas para vários provedores de IA por meio de uma única chave CometAPI, consulte tarefas de vídeo e armazene todos os resultados.

CometAPI
AnnaEquipe de pesquisa de modelos e API de IA
Atualizado Aug 25, 2026 13 min de leitura
Como conectar vários modelos de IA ao n8n com uma única chave da CometAPI
Use este padrão

Faça a primeira chamada à API.

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_COMETAPI_KEY",
    base_url="https://api.cometapi.com/v1",
)

response = client.chat.completions.create(
    model="gpt-5-mini",
    messages=[{"role": "user", "content": "Build this workflow."}],
)

print(response.choices[0].message.content)

Como conectar vários modelos de IA ao n8n com uma única API?

Conectar modelos de IA provedor por provedor pode funcionar em um protótipo, mas se torna frágil conforme o uso cresce. Cada provedor traz credenciais, endpoints, formatos de requisição, limites de taxa, cobrança e estruturas de resposta separados. No n8n, isso frequentemente cria nós HTTP duplicados e ramificações específicas do provedor; assim, adicionar um modelo ou alterar um caminho de fallback significa editar várias partes do fluxo.

n8n e CometAPI resolvem camadas diferentes desse problema. O n8n controla quando um job roda, valida entradas, roteia tarefas síncronas e assíncronas, faz retentativas em falhas e armazena resultados. O CometAPI centraliza o acesso aos modelos por trás de uma única chave de API e uma única URL base. Juntos, mantêm as mudanças de provedor fora da camada de orquestração: você pode alternar um ID de modelo preservando a mesma fila, polling, armazenamento e lógica de monitoramento.

Essa combinação é especialmente útil para jobs mistos de imagem e vídeo vindos de planilhas ou ferramentas internas. O fluxo permanece visual e auditável no n8n, enquanto credenciais, disponibilidade de modelos e custos de uso ficam mais fáceis de gerenciar por meio de uma única camada de API.

A forma mais simples de integrar vários provedores de IA em um único app é separar orquestração do acesso a modelos. Deixe o n8n lidar com gatilhos, ramificações, retentativas e armazenamento, enquanto o CometAPI dá a cada ramificação uma única chave de API e uma única URL base. O ID do modelo passa a ser um campo em cada job, em vez de uma conta de provedor, SDK e configuração de cobrança separados.

Neste guia, você construirá um pipeline low-code funcional que lê jobs de imagem e vídeo do Google Sheets, envia-os para modelos da OpenAI e ByteDance via CometAPI, salva IDs de tarefas de vídeo assíncronas, faz polling até a conclusão e faz upsert do resultado final em uma Data Table do n8n.

O que você vai construir

O fluxo final segue este caminho:

Google Sheets Trigger → Normalizar Job → Switch por tipo de mídia → Requisição de imagem ou vídeo no CometAPI → Aguardar e fazer polling de tarefas de vídeo → Enviar upload ou referenciar o output → Upsert na Data Table.

Use estas colunas na planilha de origem:

job_id | media_type | model | prompt | size | seconds | status

Uma linha típica de imagem usa image, gpt-image-2 e 1024x1024. Uma linha de vídeo usa video, seedance-2-5, 1280x720 e uma duração de 4 a 30 segundos.

Antes de começar

Você precisa de uma instância do n8n, uma planilha do Google, uma chave de API do CometAPI e uma Data Table do n8n chamada ai_jobs. Crie estas colunas na Data Table: job_id, media_type, model, status, task_id, result_url, error e updated_at.

Para n8n self-hosted, adicione os seguintes valores ao ambiente usado pelo seu processo do n8n:

COMETAPI_BASE_URL=https://api.cometapi.com/v1COMETAPI_KEY=your_cometapi_key

Reinicie o n8n após alterar o ambiente. No n8n Cloud, ou quando você não quiser expor variáveis de ambiente em expressões de nós, crie uma credencial HTTP Header Auth chamada CometAPI Bearer. Defina o nome do header como Authorization e o valor como Bearer your_cometapi_key. Os exemplos abaixo usam essa credencial e a URL base compatível com OpenAI fixa https://api.cometapi.com/v1.

Use IDs de modelos atuais

JobProvedor e modeloRequisiçãoResultado
ImageOpenAI · gpt-image-2POST /v1/images/generationsImagem base64 síncrona
VideoByteDance · seedance-2-5POST /v1/videosTarefa assíncrona, depois polling

Ambos os IDs e capacidades estavam disponíveis na API de diretório de modelos ao vivo da CometAPI em 11 de agosto de 2026. O modelo de imagem suporta geração de texto-para-imagem. Seedance 2.5 suporta geração de texto-para-vídeo e imagem-para-vídeo, clipes de 4 a 30 segundos e os tamanhos documentados 480p e 720p.

Preços em 11 de agosto de 2026: a página do modelo GPT Image 2 lista US$ 4 por milhão de tokens de entrada e US$ 24 por milhão de tokens de saída. A página do modelo Seedance 2.5 lista US$ 0,103 por segundo em 480p e US$ 0,231 por segundo em 720p. Preços podem mudar, então use o diretório de modelos ao vivo ou a página do modelo como a fonte de verdade em tempo de execução.

A diferença arquitetural importante é que a geração de imagem pode ser tratada como uma operação request-response, enquanto a geração de vídeo deve ser tratada como um job com estado. Persistir o ID da tarefa de vídeo antes do polling evita que uma reinicialização da execução do n8n perca o job.

Construa o fluxo no n8n

1. Dispare novos jobs a partir do Google Sheets

Adicione um nó Google Sheets Trigger e escolha Row added or updated. Aponte para a worksheet que contém sua fila de jobs. Adicione um nó IF imediatamente após o gatilho e continue apenas quando status estiver vazio ou igual a queued. Isso evita que linhas concluídas sejam reenviadas quando a planilha mudar.

2. Normalize e valide cada linha

Adicione um nó Code chamado Normalize Job. Esse nó aplica padrões seguros, restringe o fluxo a IDs de modelos aprovados e produz os mesmos campos para ambas as ramificações.

const row = $json;​const allowedModels = {  image: new Set(['gpt-image-2']),  video: new Set(['seedance-2-5']),};​const mediaType = String(row.media_type || '').trim().toLowerCase();if (!allowedModels[mediaType]) {  throw new Error(`media_type must be image or video; received: ${row.media_type}`);}​const defaultModel = mediaType === 'image' ? 'gpt-image-2' : 'seedance-2-5';const model = String(row.model || defaultModel).trim();if (!allowedModels[mediaType].has(model)) {  throw new Error(`Model ${model} is not allowed for ${mediaType} jobs`);}​const prompt = String(row.prompt || '').trim();if (!prompt) throw new Error('prompt is required');​const seconds = mediaType === 'video' ? Number(row.seconds || 4) : null;if (mediaType === 'video' && (!Number.isInteger(seconds) || seconds < 4 || seconds > 30)) {  throw new Error('Seedance 2.5 seconds must be an integer from 4 to 30');}​return [{  json: {    job_id: String(row.job_id || $execution.id),    media_type: mediaType,    model,    prompt,    size: String(row.size || (mediaType === 'image' ? '1024x1024' : '1280x720')),    seconds,    status: 'processing',    updated_at: new Date().toISOString(),  },}];

Adicione um nó Switch após Normalize Job. Direcione image para a ramificação de imagem e video para a ramificação de vídeo.

3. Gere imagens através de um único endpoint

Adicione um nó HTTP Request chamado Create Image com estas configurações:

  • Method: POST
  • URL: https://api.cometapi.com/v1/images/generations
  • Authentication: a credencial Header Auth CometAPI Bearer
  • Body Content Type: JSON
{  "model": "={{ $('Normalize Job').item.json.model }}",  "prompt": "={{ $('Normalize Job').item.json.prompt }}",  "size": "={{ $('Normalize Job').item.json.size }}"}

GPT Image 2 retorna dados de imagem base64. Adicione um nó Code chamado Prepare Image File para transformar esses dados em um item binário do n8n:

const job = $('Normalize Job').item.json;const b64 = $json.data?.[0]?.b64_json;if (!b64) throw new Error('CometAPI returned no image data');​return [{  json: {    ...job,    status: 'completed',    task_id: '',    result_url: '',    error: '',    updated_at: new Date().toISOString(),  },  binary: {    media: {      data: b64,      mimeType: 'image/png',      fileName: `${job.job_id}.png`,    },  },}];

Conecte esse nó ao seu nó de armazenamento de objetos preferido, como S3 ou Google Drive. Armazene a URL do arquivo retornado em result_url, depois faça upsert da linha em ai_jobs. Mantenha payloads base64 grandes fora da Data Table.

4. Crie uma tarefa de vídeo assíncrona

Adicione um nó HTTP Request chamado Create Video:

  • Method: POST
  • URL: https://api.cometapi.com/v1/videos
  • Authentication: CometAPI Bearer
  • Body Content Type: Form-Data

Adicione quatro campos de formulário: model, prompt, seconds e size. Faça o mapeamento a partir de Normalize Job.

Em seguida, adicione um nó Code chamado Save Video Task:

const job = $('Normalize Job').item.json;const taskId = $json.id || $json.task_id;if (!taskId) throw new Error('Video task ID missing from create response');​return [{  json: {    ...job,    task_id: taskId,    status: $json.status || 'queued',    result_url: '',    error: '',    updated_at: new Date().toISOString(),  },}];

Faça upsert desse item em ai_jobs antes do polling. Salvar o ID da tarefa imediatamente significa que um reinício ou timeout não perde o job.

5. Aguarde, faça polling e armazene a URL do vídeo

Adicione um nó Wait configurado para 15 segundos. Depois adicione um nó HTTP Request chamado Get Video:

  • Method: GET
  • URL: =https://api.cometapi.com/v1/videos/{{ $json.task_id }}
  • Authentication: CometAPI Bearer

Após a requisição, use um nó Switch no campo status:

  • queued ou in_progress: retorne ao nó Wait.
  • completed: continue para Finalize Video.
  • failed ou error: escreva o erro em ai_jobs e pare.

Adicione este nó Code para a ramificação concluída:

const prior = $('Save Video Task').item.json;const resultUrl = $json.video_url || $json.url || $json.data?.video_url;if (!resultUrl) throw new Error('Completed video response has no video URL');​return [{  json: {    ...prior,    status: 'completed',    result_url: resultUrl,    error: '',    updated_at: new Date().toISOString(),  },}];

Faça upsert do item final em ai_jobs por job_id. URLs de vídeo do CometAPI podem ser assinadas e temporárias, então fluxos de produção devem baixar e re-hospedar o arquivo antes de salvar a URL permanente. Se o seu app puder receber requisições de entrada, substitua o polling por um webhook onde o modelo selecionado suportar callbacks.

Mapa completo de nós

O fluxo completo pode ser montado com os seguintes nós:

  1. Google Sheets Trigger — Row added or updated
  2. IF — Processar apenas linhas novas ou em fila
  3. Code — Normalize Job
  4. Switch — Imagem ou vídeo
  5. Ramificação de imagem: HTTP Request → Prepare Image File → Object Storage → Data Table Upsert
  6. Ramificação de vídeo: HTTP Request → Save Video Task → Data Table Upsert → Wait → HTTP Request → Status Switch
  7. Vídeo concluído: Finalize Video → Object Storage ou URL permanente → Data Table Upsert
  8. Vídeo com falha: Set Error → Data Table Upsert

Para uma ramificação de falha, use esta expressão em um nó Edit Fields:

{  "job_id": "={{ $('Save Video Task').item.json.job_id }}",  "status": "failed",  "task_id": "={{ $('Save Video Task').item.json.task_id }}",  "result_url": "",  "error": "={{ $json.error?.message || $json.message || 'Video generation failed' }}",  "updated_at": "={{ $now.toISO() }}"}

Teste o fluxo

Adicione estas duas linhas à planilha de origem:

img-001 | image | gpt-image-2 | A cinematic product photo of a glass robot on a dark desk | 1024x1024 | | queuedvid-001 | video | seedance-2-5 | A paper airplane flies through a sunlit studio, smooth tracking shot | 1280x720 | 4 | queued

A requisição de imagem deve retornar uma estrutura similar a:

{  "created": 1786400000,  "data": [    { "b64_json": "iVBORw0KGgoAAA..." }  ]}

A requisição de criação de vídeo deve retornar uma estrutura de tarefa similar a:

{  "id": "video_task_abc123",  "object": "video",  "status": "queued",  "progress": 0}

Após o polling, uma resposta concluída deve conter o mesmo ID de tarefa, status: completed e um video_url. Campos opcionais exatos podem variar por modelo, razão pela qual o código de normalização lê o status de tarefa estável e a URL de resultado em vez de copiar toda a resposta do provedor para o seu banco de dados.

Erros comuns e correções

ErroCorreção
401 UnauthorizedConfirme que o valor do Header Auth começa com Bearer e que a chave está ativa.
404 model or task not foundVerifique o diretório de modelos ao vivo e confirme que o ID de tarefa armazenado é usado no GET /v1/videos/{id}.
400 invalid size or secondsUse um tamanho compatível e mantenha a duração do Seedance 2.5 entre 4 e 30 segundos.
429 rate limitedReduza a concorrência no n8n e tente novamente com backoff exponencial e jitter.
Polling never endsPersista a contagem de tentativas e pare após um timeout definido; trate failed e error como terminais.
Image payload is too largeConverta base64 para binário, faça upload e armazene apenas a URL permanente.

Checklist de produção

  • Proteja credenciais. Mantenha a chave de API em credenciais do n8n ou variáveis de ambiente no servidor. Nunca a coloque na planilha nem a retorne para um navegador.
  • Faça cada job idempotente. Use job_id como a chave de upsert na Data Table. Antes de criar uma nova tarefa, pule linhas já marcadas como processing ou completed.
  • Controle polling e concorrência. Faça polling de jobs de vídeo a cada 10–20 segundos, limite o número de tentativas e limite execuções simultâneas. Faça backoff em respostas 429, 500 e 503 em vez de criar tarefas duplicadas.
  • Valide a política de modelos antes de cada requisição. Mantenha uma allowlist por tipo de mídia. Atualize a disponibilidade e os preços dos modelos a partir do diretório ao vivo em uma agenda, mas implemente mudanças de modelos por meio de revisão em vez de deixar usuários de planilha enviarem IDs arbitrários.
  • Acompanhe o custo por job. Armazene modelo, resolução, duração e campos de uso com cada resultado. Um job Seedance 2.5 de quatro segundos em 720p custa cerca de US$ 0,924 na taxa listada em 11 de agosto de 2026; os mesmos quatro segundos em 480p custam cerca de US$ 0,412. Faça cumprir a duração e a resolução máximas antes de enviar a requisição.
  • Re-hospede mídia gerada. Trate URLs assinadas do provedor como links de entrega, não armazenamento permanente. Baixe a mídia concluída, faça upload para seu bucket controlado e salve a URL durável mais o checksum.
  • Mantenha trilha de auditoria. Armazene o modelo de requisição, parâmetros sanitizados, ID de tarefa, transições de status, contagem de retentativas, tempo de resposta e local do ativo final. Não registre chaves de API nem prompts privados completos.

Por que esse padrão escala

O fluxo permanece simples porque cada novo provedor ou modelo é uma decisão de roteamento, não uma nova integração de conta. A planilha continua sendo a fila de jobs, o n8n continua sendo a camada de orquestração e o CometAPI continua sendo a camada única de acesso. Adicione um modelo estendendo a allowlist e a configuração da ramificação; o gatilho, a persistência de tarefas, o polling, o armazenamento e a lógica de monitoramento permanecem inalterados.

Essa é a resposta prática para integração de IA com múltiplos provedores: um endpoint e chave controlados, roteamento explícito de modelos, caminhos síncronos e assíncronos separados e um registro durável para cada job.

FAQs

O n8n pode chamar vários provedores de IA por uma única API?

Sim. Com uma camada de API unificada como o CometAPI, o n8n pode enviar requisições para diferentes modelos suportados enquanto mantém a credencial do provedor e a integração HTTP centralizadas.

Posso usar o CometAPI com o nó HTTP Request do n8n?

Sim. O nó HTTP Request pode enviar requisições para o endpoint do CometAPI com a autenticação requerida e os parâmetros específicos do modelo.

O n8n pode alternar automaticamente modelos de IA quando um falha?

Sim. Use uma ramificação IF/Switch após a requisição da API e direcione falhas re-tentáveis ou específicas de modelo para um modelo de fallback. O fallback deve suportar a mesma modalidade e capacidades necessárias.

Continuar aprendendo

Conecte este artigo à próxima decisão.

Ver todos os tópicos
Publicado em Aug 25, 2026
Última atualização Aug 25, 2026
0 visualizações
Revisado para maior clareza, atribuição de fontes e terminologia de API atual.

Pronto para reduzir os custos de desenvolvimento de IA em 20%?

Comece gratuitamente em minutos. Créditos de avaliação gratuita incluídos. Não é necessário cartão de crédito.

Leia Mais