Como criar seu primeiro webhook no n8n que funciona de verdade (com teste e o erro mais comum)

Um webhook no n8n é a porta de entrada que deixa um sistema externo avisar o seu fluxo na hora que algo acontece, sem ficar consultando toda hora. Neste tutorial tu monta o primeiro webhook funcionando de ponta a ponta: adiciona o nó Webhook (POST, path /, sem auth por padrão), entende as duas URLs (Test /webhook-test/ e Production /webhook/), escuta o evento de teste por 120 segundos, mapeia o payload na tela, define o modo de resposta e ativa o workflow. E ainda mata o 404 mais comum: ‘The requested webhook is not registered’
Bora?
O webhook é a porta de entrada de quase toda automação séria no n8n
Sem ele, teu fluxo fica cego esperando alguém apertar um botão
Com ele, o sistema de fora avisa o teu workflow na hora exata que a coisa acontece
O problema é que a maioria trava logo no começo: ou toma um 404 misterioso, ou clica em testar e não volta nada na tela, aí desiste achando que webhook é bicho de sete cabeças
Não é! 🙂 Aqui tu sai com um webhook no n8n funcionando de ponta a ponta: payload chegando, teste retornando dado de verdade, e o erro clássico já resolvido antes de te pegar
O que você precisa antes de começar
Nada de PC da Nasa aqui, só o básico organizado
- Uma instância do n8n rodando e acessível (Cloud ou self-hosted, tanto faz pra este tutorial)
- Alguma forma de disparar a requisição pra testar: pode ser o próprio navegador, o Postman ou um
curlno terminal - Noção mínima de método HTTP, principalmente
GETePOST, que é o que a maioria dos webhooks usa na prática
Se tu já sabe abrir o editor de workflow e arrastar um node, tá pronto pra seguir 😀
Passo a passo: montando seu primeiro webhook no n8n
Formação Agentes de IA
Domine a criação de Agentes de IA e Venda para Empresas
- 402 aulas
- 32 projetos
- 38h 19min
A ideia é sempre a mesma: montar o fluxo começando pelo gatilho, testar com a URL de teste e só depois publicar
Bora montar?
- Adiciona o nó Webhook e entende o padrão
Cria um workflow novo e adiciona o node Webhook como gatilho
Assim que ele entra, já vem com uma configuração padrão: método POST, caminho raiz (/) e sem autenticação
Guarda isso, porque cada um desses três vira um ponto de erro mais pra frente
O erro comum deste passo: achar que o node já está pronto pra receber de qualquer serviço. Ele está no padrão POST, então se o teu sistema dispara em GET, não vai bater
- Escolhe o método HTTP conforme o serviço externo
No parâmetro de método tu tem GET, POST ou Both
A regra é simples: o método aqui tem que ser o MESMO que o sistema lá de fora vai usar pra te chamar. Se não sabe qual é, olha a documentação de quem dispara
Na dúvida entre um ou outro que aparecem alternados, o Both aceita os dois
O erro comum deste passo: URL certa, mas verbo errado. Se o sistema dispara pra URL correta com o método diferente do configurado, o webhook simplesmente não executa, e tu fica olhando pra tela sem entender o silêncio
- Entende as duas URLs (Test x Production)
O nó Webhook gera DUAS URLs pra cada node, mostradas no topo do painel: uma Test URL e uma Production URL
A diferença entre elas é só um trecho do caminho:
- Teste usa
/webhook-test/ - Produção usa
/webhook/
O path final (a parte que tu define) é idêntico nas duas
A de teste serve pra depurar dentro do editor, a de produção é a que vai pro mundo real
O erro comum deste passo: copiar a URL de teste e sair colando ela no sistema de produção. São contextos diferentes, e a de teste só responde na janela de escuta (já já explico)
- Clica em ‘Listen for test event’ e envia o payload
Pra testar, clica no botão Listen for test event
Isso registra o webhook e deixa ele escutando por 120 segundos. Dentro dessa janela, tu dispara a requisição pela Test URL
Um jeito rápido de mandar um POST de teste com curl:
curl -X POST \
'https://SEU-N8N/webhook-test/meu-path' \
-H 'Content-Type: application/json' \
-d '{"nome":"Matheus","evento":"teste"}'
Se o teu método for GET, tem um truque massa: como o navegador acessa página em GET, dá pra clicar em Execute Workflow, colar a Test URL na barra do navegador e a própria requisição da página já dispara o webhook. Testa sem depender de sistema terceiro nenhum 😀
O erro comum deste passo: demorar demais. A janela de 120 segundos expira, tu manda a requisição depois e não chega nada. Se der ruim, clica de novo em Listen for test event e refaz
- Vê os dados recebidos na UI pra mapear os campos
Assim que a requisição chega, a Test URL exibe o payload recebido ali na interface do editor
E olha, chega bastante coisa: host, cookies, o modo de execução (teste ou produção) e os dados de verdade, que podem vir em query, params ou body
Não precisa carregar tudo pra frente. Arrasta só os campos que tu vai usar de fato no resto do workflow
O erro comum deste passo: usar a Production URL esperando ver o dado aqui. A URL de produção NÃO mostra o payload no editor, só a de teste faz isso. Pra depurar e mapear campo, é sempre a Test URL
- Define o modo de resposta
O Webhook tem três modos de resposta:
- Immediately: responde na hora com
200e a mensagemWorkflow got started - When Last Node Finishes: espera o fluxo rodar e retorna a saída do último node
- Using Respond to Webhook node: a resposta é montada por um node específico, o
Respond to Webhook
Escolhe conforme quem chama precisa de resposta. Se o sistema só precisa saber que recebeu, Immediately resolve. Se precisa de um retorno tratado, os outros dois entram
O erro comum deste passo: colocar um node Respond to Webhook no fluxo mas deixar o modo em Immediately. Nesse modo ele devolve o 200 na hora e o Respond to Webhook downstream NUNCA executa. Pra esse node funcionar, o modo tem que ser Using Respond to Webhook node
- Ativa o workflow no toggle Active
Pra valer, no mundo real, é a Production URL que roda
E ela só responde com o workflow ativo. Liga o toggle Active no canto superior direito do editor e pronto: a URL de produção passa a aceitar chamada
curl -X POST \
'https://SEU-N8N/webhook/meu-path' \
-H 'Content-Type: application/json' \
-d '{"nome":"Matheus","evento":"producao"}'
O erro comum deste passo: esquecer de ativar. Workflow desligado + Production URL = o 404 mais famoso do n8n, que a gente ataca agora
O erro mais comum: 404 ‘webhook is not registered’
Se tu chamou a URL e recebeu isto, se liga:
404 - The requested webhook is not registered
Esse é o campeão de dor de cabeça, e quase sempre a causa é uma dessas duas:
- Production URL com workflow inativo: tu está usando a URL de produção mas o toggle Active está desligado
- Test URL com a janela expirada: tu está na URL de teste, mas passaram os 120 segundos e a escuta já fechou
A solução casa direto com a causa:
- Se é produção, ativa o workflow pelo toggle Active no canto superior direito. A própria mensagem de erro no n8n dá essa dica
- Se é teste, clica de novo em Listen for test event e dispara a requisição dentro da janela
Pra prevenir, a regra de ouro é: URL certa pra cada contexto. Teste enquanto tu monta e depura, produção quando for pra valer e com o workflow ligado
E tem a armadilha que já citei lá em cima, que também gera confusão: o node Respond to Webhook que não roda. Se o modo de resposta estiver em Immediately, o 200 sai na hora e esse node é ignorado. Troca pro modo Using Respond to Webhook node e ele volta a funcionar
Se mesmo assim o erro insistir, vale investigar outras causas do erro de webhook no n8n, porque nem todo 404 é só toggle desligado
O que aprendi montando webhooks no n8n na prática
Com o fluxo já rodando, vale voltar um passo e entender o PORQUÊ do webhook existir
Pensa numa API: o TEU sistema fica lá, consultando um sistema terceiro toda hora pra saber se algo já ficou pronto. Isso gasta recurso do servidor com verificação repetida, que às vezes nem retorna nada de novo
Já o webhook inverte a lógica: quem avisa é o sistema terceiro. Quando a informação fica pronta, ELE chama o teu workflow. Um fluxo bem mais linear e econômico
No vídeo abaixo eu mostro essa diferença na prática, o sistema que fica perguntando toda hora contra o que só reage quando é avisado. Sem ficar no "chegou? chegou? chegou?" o tempo todo
Do que eu vivi montando isso, três coisas confundem MUITO no começo:
Primeiro, a confusão entre Test URL e Production URL. Parece detalhe, mas trocar uma pela outra é metade dos 404 que aparecem
Segundo, a janela de 120 segundos que expira. Tu clica em escutar, vai fazer outra coisa, volta, dispara e não chega nada. Não é bug, é a escuta que fechou
Terceiro, mapear os campos pela UI. Quando o webhook executa, chega uma estrutura bem completa (host, cookies, modo de execução, e os dados em query, params ou body). O segredo é arrastar só o que interessa pra frente, em vez de carregar tudo
E tem um detalhe de segurança que eu bato na tecla: quando tu publica com a Production URL, QUALQUER pessoa pode mandar informação pra ela
Por isso vale configurar autenticação como uma barreira, filtrando requisição errada antes de chegar no teu fluxo. Se tu roda o n8n em VPS, dá pra ir além e proteger o n8n com Cloudflare na frente, com SSL e WAF
Uma coisa importante: normalmente NÃO é tu que decide como o dado chega (se por query, path ou body). Quem define isso é o sistema que tu está integrando, via documentação dele. Tu só configura o n8n pra receber igual
Para que serve um webhook no n8n na prática
Teoria é legal, mas onde isso vira automação de verdade? 😀
- Receber dados de um formulário: alguém preenche um form, o serviço dispara pro teu webhook e o fluxo já começa a tratar a resposta
- Integrar com ferramenta que dispara eventos: pagamento aprovado, ticket aberto, mensagem recebida. A ferramenta avisa por webhook e tu reage na hora
- Iniciar um fluxo a partir de um serviço externo: em vez do teu n8n ficar consultando toda hora, o serviço de fora é quem puxa o gatilho quando tem novidade
O fio comum de tudo isso é o mesmo: tu precisa receber uma informação sem saber QUANDO ela vai chegar. É exatamente pra isso que o webhook existe
Conclusão
Com o webhook ativo e testado, o mais difícil já passou 🙂
Recapitulando o caminho: adiciona o node Webhook, escolhe o método certo, testa sempre pela Test URL dentro dos 120 segundos, mapeia o payload pela tela, define o modo de resposta e SÓ então ativa o workflow pra liberar a Production URL
O próximo passo natural é encadear os nodes seguintes pra tratar o payload que chegou e devolver uma resposta caprichada
E não esquece do combo que evita a maior parte da dor de cabeça: workflow ativo no toggle + URL de produção quando for pra valer
Monta o teu, faz o teste e me conta como foi… até o próximo post!
Perguntas frequentes
O n8n para de receber dados depois de um tempo quando estou testando?
Sim, quando tu clica em ‘Listen for test event’, a janela de escuta dura exatamente 120 segundos. Depois disso a Test URL para de responder e tu precisa clicar de novo pra abrir a próxima janela. É suficiente pra qualquer teste rápido, só não vai buscar café no meio haha 😀
Por que o nó Respond to Webhook não executa mesmo estando conectado no fluxo?
O motivo quase sempre é o modo de resposta configurado no nó Webhook. Se ele está em ‘Immediately’, o 200 vai na hora e o fluxo para por aí: o Respond to Webhook nunca chega a rodar. Pra ele funcionar, o modo tem que ser exatamente ‘Using Respond to Webhook node’, lá no painel do nó 🙂
Meu sistema dispara com GET mas o webhook no n8n não responde: o que verificar primeiro?
Verifica o método configurado no painel do nó Webhook, porque o padrão é POST. Se o sistema lá de fora usa GET e tu deixou como estava, o webhook simplesmente ignora a chamada sem dar erro visível. Troca pra GET ou pra Both (que aceita os dois) e testa de novo
Qual URL eu entrego pro sistema externo depois de montar o webhook no n8n?
A Production URL, sempre: é a que tem /webhook/ no caminho. A Test URL (com /webhook-test/) é só pra depurar dentro do editor e não é feita pra receber chamada de sistema externo em produção. Só lembra de ativar o workflow pelo toggle Active antes, senão ela devolve 404
Como ver os campos que chegaram no webhook antes de montar o restante do fluxo?
É exatamente pra isso que a Test URL existe: assim que o payload bate, o editor mostra tudo ali na tela, headers, query params, body e o que mais vier. Tu mapeia os campos que precisa antes de arrastar o próximo node, sem chute. A Production URL não faz isso, só a de teste exibe o payload no editor
Formações
Formação Claude Code
Domine Claude Code do absoluto zero até o avançado
- 120 aulas
- 4 projetos
- 9h 45min
Blog | Mais populares

Guia completo do Grok 4: Tudo sobre funcionalidades, versões e preços
Descubra neste guia completo do Grok 4 tudo o que você precisa saber para escolher, contratar e aproveitar o máximo dessa IA inovadora! Confira funcionalidades, […]

Como criar slides no NotebookLM e aposentar o PowerPoint
Aprenda a criar apresentações incríveis com o NotebookLM: slides e infográficos automáticos em poucos minutos – e aposente o PowerPoint de vez! Criar apresentações visuais […]

Planos: n8n preço para 2026 | Qual vale a pena?
O n8n possui um modelo de preço e planos flexível, baseado em execuções mensais de workflows, independentemente da complexidade. O plano Starter custa cerca de […]
