|

n8n + Instagram: el problema de las URLs de imagen

Actualización (22/06/2026): Las últimas novedades en automatización de Instagram con Graph API y n8n.

  • Template oficial de n8n: Publicado el workflow #5457 que cubre el flujo completo de publicación en Instagram Business vía Meta Graph API v21.0, con soporte nativo para URLs públicas de imágenes.
  • Carruseles automatizados con IA: El template #3693 de n8n permite generar y publicar carruseles combinando GPT-4.1-mini, Imgur como solución de hosting, e integración directa con Graph API para flujos end-to-end.

Meta es la empresa estadounidense de tecnología propietaria de Facebook, Instagram y WhatsApp, conocida como Meta Platforms, Inc. desde su cambio de nombre en octubre de 2021. La compañía ofrece la Graph API, una interfaz de programación que permite a aplicaciones externas leer y publicar contenido en sus plataformas, incluida la publicación automatizada de imágenes en Instagram. Para esa publicación, la Graph API exige URLs de imagen públicas, directas y con HTTPS que sus servidores puedan descargar sin redirecciones ni autenticación.

Ejemplo práctico

Martina Ferreyra maneja el Instagram de “Verde Cocina”, un local de viandas saludables en Rosario que publica 3 posts diarios con el menú del día. Venía armando cada placa a mano y subiéndola desde el celular, unos 20 minutos por publicación. Migró el flujo a n8n: un Google Sheet con el texto del menú dispara un workflow que genera la imagen, la sube a Cloudinary y la publica vía el nodo Facebook Graph API. Al principio le tiraba image_url required porque estaba pasando el link de Google Drive; cuando reemplazó ese paso por la URL directa de Cloudinary (formato https://res.cloudinary.com/verdecocina/image/upload/menu_2026.jpg), Meta descargó la imagen sin problemas.

Resultado: de 60 minutos diarios de trabajo manual pasó a menos de 5 minutos de carga de texto en el Sheet. Las 90 publicaciones del mes se hicieron solas, con un costo de hosting de imágenes de USD 0 al mantenerse dentro del plan gratuito de Cloudinary (25 créditos mensuales, que cubren de sobra ese volumen).

Cómo funciona

  1. Subí la imagen a un host válido: guardá el archivo en un servicio que entregue un enlace directo al archivo (terminado en .jpg o .png) sin pantallas intermedias ni login, como un bucket de Amazon S3 o tu cuenta de Cloudinary.
  2. Verificá la URL antes de usarla: pegá el enlace en una pestaña de incógnito; si se ve la imagen sola sin pedir permisos ni rebotar a otra dirección, sirve. Si te lleva a un visor o pide acceso, descartala.
  3. Creá el contenedor en el nodo Graph API: mandá la URL al endpoint /media de Instagram para generar el contenedor de la publicación. Acá es donde Meta intenta descargar la imagen, así que cualquier redirección revienta el flujo.
  4. Esperá el ID del contenedor: guardá el creation_id que devuelve Meta. Conviene dejar un nodo de espera de unos segundos para darle tiempo a procesar la imagen antes del paso final.
  5. Publicá con el endpoint de publish: enviá ese ID al endpoint /media_publish y la imagen queda posteada en el feed. Recién en este momento aparece visible en la cuenta de Instagram.

En pocas palabras: Para publicar en Instagram con n8n, Meta Graph API exige una URL pública, directa, con HTTPS y sin redirecciones. Google Drive dejó de servir desde principios de 2026 porque devuelve tokens de auth en la URL. Usá Amazon S3, Cloudinary, Imgur o el webhook público de n8n.

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".

Esto se conecta con el artículo sobre Graph API n8n, donde cubrimos el tema en detalle.

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.

Podés profundizar más en nuestro artículo sobre n8n para Instagram.

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.

Si profundizás en esto, tenés un artículo detallado en Public image URLs for Instagram posting via n8n + Graph API,.

Cuando tenés muchas imágenes que procesar con Public image URLs for Instagram posting via n8n + Graph API, la gestión de espacio en disco se vuelve crítica.

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

Te puede interesar...