Contenido
Tutorial de Webhook en n8n: recibe datos externos y envía respuestas
Webhook permite que servicios externos «notifiquen» a n8n cuando ocurre un evento. Por ejemplo:
- Alguien envía un formulario del sitio web
- Una plataforma de pagos notifica que se ha realizado un pago
- Hay un nuevo Pull Request en GitHub
- Quieres activar un flujo de n8n desde un programa propio
El nodo Webhook de n8n genera una URL. Cualquier solicitud HTTP que se envíe a esa URL iniciará el flujo de trabajo.
Crear un Webhook
- Añade un flujo de trabajo y selecciona Webhook como primer nodo.
- Configura:
- HTTP Method: normalmente POST
- Path: la ruta de la URL, por ejemplo,
contact-form - Respond: cuándo responder (consulta la explicación más abajo)
Encima del nodo aparecerán dos URL:
| URL | Formato | Cuándo está activa |
|---|---|---|
| Test URL | https://tu-dominio/webhook-test/contact-form | Después de pulsar «Listen for test event», recibe una solicitud |
| Production URL | https://tu-dominio/webhook/contact-form | Después de publicar el flujo de trabajo |

El error más común es configurar un servicio externo con la Test URL y luego no recibir datos al publicar el flujo. Para usarlo en producción, cambia siempre a la Production URL.
Probar
- Pulsa Listen for test event.
- Envía una solicitud desde el terminal:
curl -X POST https://tu-dominio/webhook-test/contact-form \
-H "Content-Type: application/json" \
-d '{"name": "Juan Pérez", "email": "ming@example.com", "message": "Quiero consultar un presupuesto"}'
- En OUTPUT del nodo Webhook aparecerán los datos recibidos:
{
"headers": { "content-type": "application/json", "...": "..." },
"params": {},
"query": {},
"body": {
"name": "Juan Pérez",
"email": "ming@example.com",
"message": "Quiero consultar un presupuesto"
}
}
Los nodos posteriores pueden leer los datos recibidos con {{ $json.body.name }}. Los parámetros de la URL (como ?id=123) están en {{ $json.query.id }}.
Formas de responder
La opción Respond determina cuándo responde n8n y qué devuelve al cliente:
| Opción | Comportamiento |
|---|---|
| Immediately | Responde en cuanto recibe la solicitud y el flujo de trabajo continúa ejecutándose en segundo plano |
| When Last Node Finishes | Espera a que termine todo el flujo y devuelve los datos del último nodo |
| Using 'Respond to Webhook' Node | El nodo Respond to Webhook del flujo determina el contenido de la respuesta |
Si el cliente solo necesita saber que se recibió la solicitud (por ejemplo, una notificación de pago), elige Immediately. Para devolver el resultado del procesamiento (por ejemplo, crear una API), usa el nodo Respond to Webhook.
Crear una API sencilla con n8n
[Webhook GET /price] ─▶ [Google Sheets query] ─▶ [Respond to Webhook]

En el nodo Respond to Webhook puedes configurar:
- Respond With: JSON, texto, archivo binario o redirección
- Response Code: por ejemplo, 200 o 404
- Response Headers: por ejemplo, encabezados CORS
{ "product": "{{ $json.name }}", "price": {{ $json.price }} }
Parámetros de ruta
Path puede incluir variables:
orders/:orderId
Al llamar a /webhook/orders/A123, {{ $json.params.orderId }} tendrá el valor A123.
Autenticar las solicitudes
La Production URL es pública, así que cualquier persona que la conozca puede llamarla. Puedes protegerla de estas formas:
- Opción Authentication: Basic Auth, Header Auth o JWT Auth. Por ejemplo, configura el nombre
X-API-Keyen Header Auth; el cliente debe enviar el valor correcto. - Verificar firmas: muchos servicios (Stripe, GitHub, LINE, entre otros) incluyen una firma en el encabezado, que puedes verificar con un nodo Code.
- Lista de IP permitidas: configura IP(s) Whitelist en Options del Webhook.
- Usa una cadena aleatoria difícil de adivinar en la ruta.
Recibir archivos
Cuando se carga un archivo desde un formulario (multipart/form-data), aparece en los datos binarios y puedes conectarlo directamente a nodos como Google Drive o Extract from File.
Permitir que los servicios externos accedan a tu n8n
Los servicios externos deben poder acceder a n8n a través de la red:
- Despliegue en producción: usa un servidor con dominio y HTTPS, y configura correctamente la variable de entorno de la URL de Webhook. De lo contrario, la URL que muestra n8n será
http://localhost:5678/.... Consulta Alojamiento propio. - Pruebas locales: puedes usar herramientas como Cloudflare Tunnel o ngrok para exponer temporalmente el puerto 5678 a Internet.
Problemas frecuentes
404: The requested webhook is not registered
- Si usas Test URL: no has pulsado Listen for test event antes, o ya se recibió una solicitud.
- Si usas Production URL: el flujo de trabajo no está publicado.
- El método HTTP no coincide (configuraste POST, pero llamas con GET).
El body recibido está vacío
Comprueba que el cliente envíe el encabezado Content-Type: application/json.
El servicio externo agota el tiempo de espera
Has seleccionado When Last Node Finishes y el flujo tarda demasiado. Cambia a Immediately o acorta el flujo.
Actualizado 12 de octubre de 2026