Cómo conectar n8n con una API de Python
n8n es excelente conectando servicios, pero a veces necesitas lógica que ningún nodo cubre: un cálculo, un scraping, un modelo propio. La solución limpia es exponer esa lógica como una pequeña API de Python y llamarla desde el workflow. Así se hace.
01Cuándo tiene sentido
No todo necesita Python. Tira de una API propia cuando: la transformación es demasiado compleja para el nodo Function, necesitas una librería de Python concreta (pandas, un modelo, un PDF parser), o quieres reutilizar la misma lógica desde varios workflows. Para un if sencillo, quédate en n8n.
02Monta una API mínima con FastAPI
FastAPI es la opción más rápida: pocas líneas y documentación automática. Un endpoint que recibe datos y devuelve un resultado:
# main.py
from fastapi import FastAPI, Header, HTTPException
from pydantic import BaseModel
app = FastAPI()
class Cliente(BaseModel):
nombre: str
email: str
@app.post("/procesar")
def procesar(data: Cliente, x_api_key: str = Header(None)):
if x_api_key != "TU_CLAVE_SECRETA":
raise HTTPException(401, "No autorizado")
# tu lógica aquí
return {"nombre": data.nombre.title(), "ok": True}
Levántala con uvicorn main:app --host 0.0.0.0 --port 8000 y despliégala donde puedas (un VPS, Render, Railway o similar). Apunta el dominio o IP — lo necesitarás en n8n.
03Llámala desde n8n con el nodo HTTP Request
En tu workflow, añade un nodo HTTP Request y configúralo así:
- Method:
POST - URL:
https://tu-api.com/procesar - Authentication / Headers: añade
x-api-keycon tu clave - Body Content Type:
JSON - Body: mapea los campos del paso anterior con expresiones, p. ej.
{{ $json.nombre }}
El JSON que envías debe coincidir con el modelo de la API:
{
"nombre": "{{ $json.nombre }}",
"email": "{{ $json.email }}"
}
La respuesta de Python vuelve a n8n como un item normal: puedes encadenar el resultado ({{ $json.nombre }}) a un nodo de Airtable, Slack o lo que necesites.
04Tres buenas prácticas que evitan dolores
- Protege siempre el endpoint con una API key (como arriba) o token. Una API abierta es una puerta abierta.
- Devuelve códigos HTTP correctos (200, 400, 401, 500). n8n puede ramificar según el código y reintentar solo cuando tiene sentido.
- Pon un timeout en el nodo HTTP Request. Si tu API tarda, mejor un fallo limpio que un workflow colgado.
Este patrón — n8n orquestando + Python haciendo el trabajo pesado — es justo el que uso para automatizar altas de clientes y volcados de datos. n8n decide el «cuándo»; Python resuelve el «cómo».
Y ya está: n8n se encarga de orquestar (cuándo, con qué datos, a dónde va el resultado) y Python hace el trabajo pesado. Esta separación mantiene tus workflows limpios y tu lógica reutilizable.
¿Tienes un proceso que repites a mano?
Te enseño en 30 minutos si se puede automatizar — y cuánto tiempo recuperarías.
Reservar consulta gratis →