|

n8n + Instagram: el problema de las URLs de imagen

Para publicar imágenes en Instagram con n8n y la Graph API de Meta, necesitás una URL pública, directa y con HTTPS que Meta pueda descargar sin redirecciones ni autenticación. Google Drive dejó de funcionar a principios de 2026 porque retorna tokens de auth en la URL, no un archivo descargable. Las alternativas que funcionan hoy son Amazon S3, Cloudinary, Imgur y el webhook público de n8n.

En 30 segundos

  • Meta Graph API requiere URLs de imagen públicas, directas, con HTTPS y sin redirecciones para publicar en Instagram.
  • Google Drive no funciona desde principios de 2026: sus URLs tienen tokens de autenticación que Meta no puede resolver.
  • El error más común es image_url required aunque la URL esté configurada, casi siempre por redirecciones o formato incorrecto.
  • Las alternativas que sí funcionan: Amazon S3, Cloudinary, Imgur (plan gratuito disponible), o el webhook público de tu servidor n8n.
  • El workflow de n8n para Instagram ya integra el nodo Facebook Graph API, pero el hosting de la imagen es responsabilidad tuya.

Meta es la empresa propietaria de Facebook, Instagram, WhatsApp y otras plataformas de redes sociales, fundada por Mark Zuckerberg en 2004. En 2021 cambió su nombre de Facebook Inc. a Meta.

Qué es n8n y cómo se integra con Instagram Graph API

n8n es una herramienta de automatización de workflows open-source que podés hostearse vos mismo o usar en la nube. Conecta servicios entre sí mediante nodos visuales y, entre otras cosas, permite publicar contenido en Instagram de forma automatizada usando la API oficial de Meta.

La integración funciona a través del nodo Facebook Graph API. El flujo básico es: creás un “media container” con la URL de tu imagen (endpoint POST /{ig-user-id}/media), esperás que Meta descargue y procese el archivo, y después publicás ese container (endpoint POST /{ig-user-id}/media_publish). Para esto necesitás el permiso instagram_content_publish habilitado en tu app de Meta, además de instagram_basic y un token de acceso de larga duración.

El punto clave, y donde la mayoría traba, es que Meta no recibe la imagen directamente. Lo que hace es descargarla desde la URL que vos le pasás. Si esa URL no es pública y directa, la descarga falla y el container queda en estado de error.

Requisitos técnicos de URLs de imagen para Meta Graph API

Según la documentación oficial de Meta, la URL de imagen tiene que cumplir todo esto al mismo tiempo:

  • HTTPS obligatorio. HTTP plano no se acepta.
  • Sin redirecciones. La URL tiene que responder 200 directo, sin pasar por 301 o 302.
  • Respuesta inmediata. Si el servidor tarda, Meta abandona la descarga.
  • Peso máximo: 8MB para fotos, 100MB para videos.
  • Formato JPEG. PNG puede funcionar en algunos casos pero JPEG es lo seguro.
  • Relación de aspecto entre 4:5 y 1.91:1. Una imagen cuadrada (1:1) queda dentro de ese rango.
  • Solo caracteres ASCII en la URL. Tildes, ñ o espacios rompen la request antes de llegar al servidor.
  • Header Content-Type correcto. El servidor tiene que devolver image/jpeg o el equivalente al formato que estés subiendo.

Cualquiera de esas condiciones que no se cumpla y la API te devuelve un error, a veces bastante críptico. El Content-Type incorrecto es uno de los que más cuesta detectar. Para más detalles técnicos, mirá solucionar problemas de hosting.

Google Drive ya no funciona: qué cambió en 2026

Ponele que tenés un workflow en n8n que descarga una imagen, la guarda en Google Drive y pasa la URL de “compartir” a la Graph API. Eso dejó de funcionar.

Según reportes del foro oficial de n8n, Meta endureció los requisitos de descarga de imágenes a principios de 2026. Google Drive, cuando compartís un archivo públicamente, no te da una URL directa al archivo. Lo que te da es una URL del tipo drive.google.com/file/d/ID/view que redirige a una página de previsualización, o drive.google.com/uc?export=download&id=ID que pasa por múltiples redirecciones y a veces incluye parámetros de autenticación.

Meta no sigue esas redirecciones. El error que aparece en el container es Media download has failed o directamente el container queda en estado ERROR con código 9007. ¿Hubo aviso previo de Meta? No mucho. Fue un cambio silencioso que rompió workflows que venían funcionando meses.

Opciones de hosting recomendadas para n8n + Instagram

Con Google Drive descartado, estas son las alternativas que la comunidad de n8n reporta como funcionales en 2026:

ServicioURL directaPlan gratuitoIntegración con n8nDesventajas
Amazon S3Sí (objeto público)No (Free Tier limitado)Nodo S3 nativoRequiere cuenta AWS, configuración de permisos de bucket
CloudinarySí (25 créditos/mes)Nodo HTTP RequestLímites del plan gratuito, CDN puede agregar latencia
ImgurHTTP Request a APITérminos de servicio limitan uso automatizado masivo
ImageKitSí (20GB transferencia)HTTP RequestMenos conocido, soporte limitado
Webhook público n8nSí (vos controlás)Sí (self-hosted)NativoSolo si tu n8n tiene IP pública, no escala bien
n8n instagram graph api diagrama explicativo

Para la mayoría de los casos con volumen bajo a moderado, Cloudinary es lo más práctico: tenés nodos de la comunidad, la URL que genera es directa, y el plan gratuito alcanza para decenas de posts por día. Para volumen alto o si ya usás AWS en tu stack, S3 con un bucket público es la opción más robusta.

Sobre hosting propio: si tu instancia de n8n vive en un VPS con IP pública (desde donweb.com o cualquier proveedor de cloud), podés servir las imágenes directamente desde ahí con un webhook, sin depender de un tercero.

Errores comunes al configurar URLs de imagen

“image_url required” aunque la URL esté configurada

Es el error más frecuente y el más confuso. La URL está en el campo correcto del nodo, el workflow corre sin errores visibles, pero Meta devuelve que falta la URL. Causas habituales: Complementá con crear imágenes con generadores IA.

  • La expresión de n8n que genera la URL tiene un error silencioso y devuelve undefined o cadena vacía.
  • La URL tiene caracteres no ASCII (tildes en el nombre del archivo, por ejemplo).
  • Se está pasando la URL en el campo equivocado del body.

Para debuggear: agregá un nodo “Set” antes del llamado a la API y logueá el valor exacto de la URL. Verificá en el execution log que el string sea lo que creés que es.

“Only photo or video can be accepted as media type”

Meta descargó algo pero no reconoció el formato. Dos causas: el archivo no es JPEG/PNG/MP4, o el servidor devuelve un Content-Type genérico como application/octet-stream en vez de image/jpeg. Si usás un webhook de n8n para servir la imagen, configurá el header explícitamente en el nodo de respuesta.

El container se crea pero queda en estado “IN_PROGRESS” indefinidamente

Esto pasa cuando Meta tarda en procesar la imagen o cuando falla silenciosamente. Implementá un loop de polling con el endpoint GET /{ig-container-id}?fields=status_code antes de llamar a media_publish. Esperá a que el status_code sea FINISHED, con un timeout de 60 segundos y reintentos cada 5.

Paso a paso: configurar hosting y publicar en Instagram

El flujo completo con Cloudinary como hosting y n8n:

Primero, subir la imagen. Usás un nodo HTTP Request con método POST al endpoint https://api.cloudinary.com/v1_1/{cloud_name}/image/upload. El body tiene file (la imagen en base64 o desde URL) y upload_preset con uno que tenga acceso público. La respuesta incluye el campo secure_url, que es la URL que necesitás.

Después, creás el container. Nodo HTTP Request, POST a https://graph.facebook.com/v22.0/{ig-user-id}/media con body: image_url (el secure_url de Cloudinary), caption (el texto del post) y access_token. La respuesta tiene el id del container. Tema relacionado: automatizar de forma segura.

Luego viene el polling. Loop con GET /{container-id}?fields=status_code&access_token=... hasta que status_code === "FINISHED".

Finalmente, publicás. POST a /{ig-user-id}/media_publish con creation_id (el id del container) y access_token. Según el workflow oficial de n8n para Instagram, este es el flujo recomendado también para Reels y carruseles, con variaciones en el endpoint del container.

Con S3 el flujo es igual, solo cambia el primer paso: usás el nodo AWS S3 para subir el archivo, setear el ACL a public-read y construir la URL del tipo https://{bucket}.s3.amazonaws.com/{key}.

Alternativas al hosting externo: webhook público de n8n

Si tu instancia de n8n está en un servidor con IP pública accesible desde internet, podés servir las imágenes vos mismo sin depender de ningún servicio externo.

El approach: guardás la imagen en el filesystem del servidor (por ejemplo en /tmp/ o en un directorio dedicado), creás un workflow secundario con un nodo Webhook que lea ese archivo y lo devuelva con el Content-Type correcto, y usás la URL de ese webhook como image_url para Meta.

Funciona bien para volúmenes bajos. El problema aparece cuando tenés varios posts encolados al mismo tiempo: si dos workflows intentan escribir y leer el mismo archivo simultáneamente, hay colisión. Podés mitigarlo con nombres de archivo únicos (UUID + timestamp), pero se complica cuando escala. Ya lo cubrimos antes en optimizar contenido de redes sociales.

Dicho esto, para uso personal o proyectos con un post por vez, es una solución que no agrega servicios externos ni costos.

Preguntas Frecuentes

¿Dónde puedo hospedar imágenes para publicar automáticamente en Instagram con n8n?

Las opciones más usadas en 2026 son Amazon S3 (con bucket público), Cloudinary (plan gratuito disponible), Imgur o el webhook público de tu propio servidor n8n. Cualquiera que entregue una URL HTTPS directa, sin redirecciones, con el Content-Type correcto, funciona. Google Drive y Dropbox no cumplen esos requisitos.

¿Por qué Google Drive ya no funciona con Meta Graph API para Instagram?

Meta endureció los requisitos de descarga a principios de 2026. Google Drive no devuelve URLs directas al archivo: pasa por redirecciones con parámetros de autenticación que Meta no puede seguir. El resultado es el error Media download has failed o container en estado ERROR con código 9007.

¿Por qué me aparece el error “image_url required” aunque la URL esté puesta?

Casi siempre es un problema con la expresión de n8n que genera la URL: retorna undefined o vacío por un error silencioso en el mapeo de datos. Logueá el valor exacto con un nodo Set antes del llamado a la API. También verificá que la URL no tenga caracteres no-ASCII como tildes en el nombre del archivo.

¿Cuáles son los requisitos técnicos de URL para Instagram Graph API?

HTTPS obligatorio, respuesta HTTP 200 directa (sin 301/302), peso máximo 8MB para fotos, formato JPEG recomendado, relación de aspecto entre 4:5 y 1.91:1, solo caracteres ASCII en la URL, y el servidor tiene que devolver el Content-Type correcto (image/jpeg o equivalente). Si alguno de esos puntos falla, la descarga de Meta falla.

¿Qué pasa si el container queda en estado IN_PROGRESS y nunca termina?

Implementá polling antes de llamar a media_publish. Consultá el endpoint GET /{ig-container-id}?fields=status_code cada 5 segundos hasta que el valor sea FINISHED o hasta un timeout de 60 segundos. Si llega a ERROR, leé el campo status para obtener el código de error específico de Meta.

Conclusión

El problema de URLs de imagen en n8n con Instagram Graph API tiene una causa clara: Meta requiere acceso directo al archivo, y la mayoría de los servicios de almacenamiento “para compartir” no lo dan. Google Drive fue durante mucho tiempo el workaround popular, pero desde principios de 2026 está roto definitivamente.

La solución más práctica hoy es Cloudinary con el plan gratuito (alcanza para la mayoría de los casos de uso) o S3 si ya tenés infraestructura AWS. Si preferís control total y tu servidor tiene IP pública, el webhook de n8n es una alternativa válida para proyectos personales. Lo que no hay que hacer es perder tiempo intentando que Google Drive funcione de nuevo, porque el cambio es del lado de Meta y no va a volver.

Fuentes

Similar Posts