n8n HTTP Request Node: Conéctate a cualquier REST API 2026

El nodo HTTP Request es posiblemente el nodo más potente en n8n. Te permite conectarte a cualquier REST API existente, no solo a los servicios con nodos dedicados. Si el servicio tiene una API HTTP (y todos la tienen), puedes integrarlo con n8n usando este nodo.

En esta guía profundizamos en cada aspecto: métodos, encabezados, estrategias de autenticación, manejo de paginación, gestión de errores y ejemplos del mundo real con las APIs de OpenAI, Stripe y GitHub.

⚡ Omite la configuración

Describe tu integración de API en lenguaje sencillo en Scriflow y obtén un JSON de flujo de trabajo de n8n completo con el nodo HTTP Request preconfigurado.

Descripción General del Nodo HTTP Request

El nodo HTTP Request se encuentra en la sección Core de la biblioteca de nodos de n8n. Maneja todos los verbos HTTP estándar y admite prácticamente todos los esquemas de autenticación utilizados por las APIs modernas.

GET
method
Recupera datos. Seguro e idempotente. Úselo para lecturas, búsquedas y listado de recursos.
POST
method
Crea recursos o activa acciones. Úselo para crear registros, enviar mensajes, completar tareas de IA.
PUT / PATCH
method
Actualiza los recursos existentes. PUT reemplaza el objeto completo; PATCH actualiza campos específicos.
DELETE
method
Elimina un recurso por ID. Normalmente devuelve 204 Sin contenido si tiene éxito.

Configuración Básica del Nodo

Cada nodo HTTP Request necesita como mínimo un Método y una URL. Aquí te mostramos cómo configurar una solicitud GET básica:

Method: GET URL: https://api.github.com/repos/n8n-io/n8n // URL dinámica usando expresiones URL: https://api.github.com/repos/{{ $json.owner }}/{{ $json.repo }}

Configuración de Encabezados

La mayoría de las APIs requieren encabezados específicos. Puedes agregarlos en la sección Headers del nodo. Los encabezados comunes incluyen:

// Encabezados comunes Content-Type: application/json Accept: application/json X-API-Version: 2026-01-01 // Encabezado dinámico usando expresión X-Request-ID: {{ $execution.id }}-{{ $itemIndex }}

Enviando un Cuerpo de Solicitud

Para las solicitudes POST/PUT/PATCH, configura el cuerpo en la sección Body. Establece Content Type a JSON y proporciona la carga útil:

Method: POST URL: https://api.example.com/users Body Content Type: JSON Body: { "name": "{{ $json.fullName }}", "email": "{{ $json.email }}", "role": "user", "metadata": { "source": "n8n-automation", "created_at": "{{ $now.toISO() }}" } }

Métodos de Autenticación

Aquí es donde la mayoría de los flujos de trabajo viven o mueren. El nodo HTTP Request admite todos los patrones de autenticación principales:

Método de AutenticaciónEncabezado EnviadoMejor Para
API Key (Header)X-API-Key: your_keyHerramientas internas, muchas APIs SaaS
API Key (Query Param)?api_key=your_keyAPIs heredadas, APIs de mapas
Bearer TokenAuthorization: Bearer tokenJWTs, la mayoría de las APIs REST modernas
Basic AuthAuthorization: Basic base64(u:p)GitHub PAT, Jira, servicios más antiguos
OAuth2Authorization: Bearer access_tokenGoogle, Salesforce, HubSpot
Digest AuthWWW-Authenticate handshakeSistemas empresariales heredados

Autenticación con Clave API

La opción más sencilla. Selecciona Predefined Credential TypeHTTP Header Auth o usa Generic Auth para inyectar la clave manualmente:

// Usando el enfoque de Credencial Genérica Authentication: Generic Credential Type Credential Type: HTTP Header Auth Name: X-API-Key Value: sk-your-api-key-here

Autenticación con Token Bearer

Authentication: Generic Credential Type Credential Type: HTTP Header Auth Name: Authorization Value: Bearer {{ $credentials.myApiToken }}

Autenticación OAuth2

Para OAuth2, crea primero una credencial dedicada en la sección Credentials de n8n. El nodo actualizará automáticamente los tokens antes de que caduquen, una gran ventaja sobre la gestión manual de tokens.

💡 Consejo de credenciales

Siempre almacena las claves API como credenciales de n8n, nunca las codifiques directamente en los parámetros del nodo. Las credenciales se cifran en reposo y se pueden compartir entre flujos de trabajo sin exponer el valor sin procesar.

Manejo de Respuestas JSON

De forma predeterminada, n8n analiza automáticamente las respuestas JSON. Los datos de la respuesta están disponibles en el siguiente nodo como $json. Para objetos anidados, usa la notación de puntos en las expresiones:

// Ejemplo de respuesta de API { "user": { "id": "usr_123", "profile": { "name": "Alice", "plan": "pro" } } } // Acceso en el siguiente nodo: {{ $json.user.id }} // "usr_123" {{ $json.user.profile.name }} // "Alice" {{ $json.user.profile.plan }} // "pro"

Trabajando con Arrays en las Respuestas

Cuando una API devuelve un array de elementos, habilita Split Into Items en la configuración de salida del nodo. Esto convierte el array en elementos individuales de n8n, lo que permite que los nodos posteriores procesen cada uno de forma independiente:

// La API devuelve un array: { "items": [{ "id": 1 }, { "id": 2 }] } // En la configuración del nodo: Split Into Items: Enabled Field Containing Array: items // Resultado: 2 elementos separados que fluyen al siguiente nodo

Paginación con Dividir en Lotes

Las APIs a menudo devuelven resultados paginados. n8n maneja esto elegantemente usando un patrón de bucle con Split In Batches:

Patrón de Paginación Basado en Cursor

  1. Establece un valor inicial de page o cursor usando un nodo Set.
  2. Realiza la solicitud HTTP con el parámetro de página actual.
  3. Usa un nodo IF para verificar si next_cursor existe en la respuesta.
  4. Si es así, actualiza el cursor con un nodo Set y vuelve al paso 2.
  5. Si no, continúa con el procesamiento posterior.
// Parámetro de consulta para la paginación URL: https://api.example.com/contacts Query Params: limit: 100 cursor: {{ $('Set Cursor').item.json.cursor ?? '' }} // El nodo IF verifica la página siguiente {{ $json.next_cursor }} is not empty
📌 Nota sobre los límites de velocidad

Al paginar a través de grandes conjuntos de datos, agrega un nodo Wait (por ejemplo, 500 ms) entre las solicitudes para evitar alcanzar los límites de velocidad. La mayoría de las APIs limitan a 100–1000 solicitudes/minuto.

Manejo de Errores

De forma predeterminada, si una API devuelve un código de estado 4xx o 5xx, n8n lanza un error y detiene el flujo de trabajo. Tienes dos estrategias para manejar esto con elegancia:

Estrategia 1: Continuar en Caso de Error

En la configuración del nodo, habilita Continue on Error. El nodo genera los detalles del error como un elemento normal, lo que te permite enrutar los errores de manera diferente:

// Cuando Continue on Error está habilitado, accede a los datos de error: {{ $json.error }} // mensaje de error {{ $json.statusCode }} // código de estado HTTP (por ejemplo, 404, 429) {{ $json.cause }} // causa detallada del error // Usa el nodo IF para verificar si hay errores: {{ $json.error }} is not empty

Estrategia 2: Reintentar en Caso de Fallo

Habilita Retry on Fail para reintentar automáticamente las solicitudes fallidas. Configura el número máximo de reintentos (2–3) y espera entre reintentos (1000 ms+). Esto es ideal para manejar errores transitorios 429 (Límite de velocidad alcanzado) o 503 (Servicio no disponible).

Usando Expresiones en la URL y el Cuerpo

Las expresiones hacen que el nodo HTTP Request sea dinámico. Aquí están los patrones más útiles:

// Construye la URL a partir de los datos del nodo anterior URL: https://api.stripe.com/v1/customers/{{ $json.customerId }}/invoices // Campo de cuerpo condicional Body: { "amount": {{ $json.amount * 100 }}, "currency": "{{ $json.currency?.toLowerCase() ?? 'usd' }}", "description": "{{ $json.description || 'n8n automated charge' }}" } // Usa variables de entorno (establecidas en la configuración de n8n) URL: {{ $env.API_BASE_URL }}/v2/users

Ejemplos de API del Mundo Real

Ejemplo 1: Finalizaciones de Chat de OpenAI

Method: POST URL: https://api.openai.com/v1/chat/completions Authentication: Bearer Token (tu clave API de OpenAI) Body: { "model": "gpt-4o", "messages": [ { "role": "user", "content": "{{ $json.userMessage }}" } ], "max_tokens": 500 } // Accede a la respuesta: {{ $json.choices[0].message.content }}

Ejemplo 2: Crear Cliente de Stripe

Method: POST URL: https://api.stripe.com/v1/customers Authentication: Basic Auth (clave API como nombre de usuario, contraseña vacía) Body Content Type: Form-Urlencoded Body: email={{ $json.email }} name={{ $json.name }} metadata[source]=n8n // Stripe devuelve el objeto del cliente: {{ $json.id }} // "cus_XXXXXXXXX"

Ejemplo 3: Crear Incidencia en GitHub

Method: POST URL: https://api.github.com/repos/{{ $json.owner }}/{{ $json.repo }}/issues Authentication: Bearer Token (Token de Acceso Personal de GitHub) Headers: Accept: application/vnd.github+json X-GitHub-Api-Version: 2022-11-28 Body: { "title": "{{ $json.issueTitle }}", "body": "{{ $json.issueBody }}", "labels": ["bug", "automated"] }

Consejos para la Depuración

  • Usa el botón de ejecución de prueba: Ejecuta el nodo individualmente para inspeccionar la solicitud y la respuesta sin procesar sin activar todo el flujo de trabajo.
  • Verifica el panel de entrada: Verifica que las expresiones se resuelvan a los valores correctos antes de que se active la solicitud.
  • Habilita "Respuesta Completa": En la configuración del nodo, habilita esta opción para acceder a los códigos de estado, los encabezados y el cuerpo completo, lo cual es crucial para depurar errores 4xx.
  • Registra en un nodo de Código: Agrega temporalmente un nodo de Código después de la solicitud HTTP a console.log($input.all()) e inspecciona la salida sin procesar.
  • Prueba con una API Mock: Usa servicios como httpbin.org para probar el formato de tu solicitud antes de acceder a la API real.

Preguntas Frecuentes

¿Cuál es la diferencia entre el nodo HTTP Request y los nodos de integración dedicados?
Los nodos dedicados (por ejemplo, Slack, HubSpot) están preconstruidos con autenticación y operaciones comunes. El nodo HTTP Request es universal: funciona con cualquier API, pero requiere configuración manual. Usa nodos dedicados cuando existan; recurre a HTTP Request para APIs personalizadas o más nuevas.
¿Cómo manejo las APIs que requieren mTLS o certificados de cliente?
El nodo HTTP Request admite la configuración de certificados SSL en Advanced Settings → TLS. Puedes proporcionar un certificado de cliente y una clave privada para la autenticación TLS mutua.
¿Puedo enviar cargas de archivos (multipart/form-data)?
Sí. Establece Body Content Type a Multipart Form Data. Puedes adjuntar datos binarios de nodos anteriores (por ejemplo, después de descargar un archivo) usando la expresión {{ $binary.data }}.
¿Cómo puedo generar automáticamente un flujo de trabajo HTTP Request para cualquier API?
Ve a Scriflow, describe la integración de API que necesitas (por ejemplo, "Llama a la API de OpenAI para resumir los correos electrónicos entrantes y guarda los resultados en Airtable") y obtén un JSON de n8n completo listo para importar.