Por qué automatizar publicaciones de Instagram por API
Si alguna vez has publicado a mano desde la app de Instagram, ya conoces el proceso: abrir la app, elegir un archivo, escribir el texto, añadir hashtags, etiquetar a gente, elegir una portada y, por fin, pulsar publicar. Ahora multiplica eso por cinco publicaciones al día en varias cuentas de clientes.
La página de la plataforma Instagram explica qué admite Upload-Post en Instagram en concreto. En resumen: puedes publicar Reels, fotos sueltas, carruseles (publicaciones con varias imágenes) y Stories a través de un único endpoint de la API de redes sociales. Sin revisión de app de Facebook, sin renovar tokens y sin la complejidad de la Graph API.
Upload-Post permite hasta 50 publicaciones de Instagram por cuenta en 24 horas móviles, más que suficiente para la mayoría de los casos. Si además necesitas publicar en otras plataformas a la vez, mira cómo publicar en todas las plataformas a la vez.
Publicar un Reel de Instagram por API
Los Reels son el formato principal de Instagram. Para publicar un vídeo como Reel, envía una petición POST al endpoint de subida con media_type en REELS. También puedes controlar cómo aparece el Reel en el feed con share_mode.
curl -X POST https://api.upload-post.com/api/upload \
-H "Authorization: Apikey tu-clave-api-aquí" \
-F "[email protected]" \
-F "user=mybrand" \
-F "title=Behind the scenes of our new product launch" \
-F "platform[]=instagram" \
-F "media_type=REELS" \
-F "share_mode=FEED_AND_REELS" \
-F "audio_name=Original Audio" \
-F "cover_url=https://example.com/cover.jpg" Esto es lo que hace cada parámetro específico de Instagram:
media_type=REELSindica a Instagram que lo trate como un Reel y no como un vídeo normal del feed.share_mode=FEED_AND_REELSpublica tanto en la pestaña de Reels como en el feed principal. UsaREELS_ONLYpara dejarlo fuera de la cuadrícula del feed.audio_namedefine el nombre de la pista de audio que ven los espectadores en el Reel.cover_urlindica una imagen de portada personalizada. Sin ella, Instagram elige un fotograma del vídeo.
Una subida correcta devuelve el ID del trabajo y el estado de la plataforma:
{
"success": true,
"job_id": "job_reel_abc123",
"platforms": {
"instagram": {
"status": "processing",
"user": "mybrand"
}
}
}
También puedes usar share_to_feed=true o share_to_feed=false en lugar de share_mode. Los dos hacen lo mismo. Usa thumb_offset para elegir un fotograma concreto del vídeo como miniatura (valor en milisegundos).
Publicar fotos y carruseles
Para fotos sueltas o publicaciones en carrusel (varias imágenes), usa el endpoint /api/upload_photos. Sube varios archivos con el parámetro photos[] y se crea un carrusel automáticamente.
curl -X POST https://api.upload-post.com/api/upload_photos \
-H "Authorization: Apikey tu-clave-api-aquí" \
-F "photos[][email protected]" \
-F "photos[][email protected]" \
-F "photos[][email protected]" \
-F "user=mybrand" \
-F "title=Our top 3 product picks this month" \
-F "platform[]=instagram" \
-F "instagram_first_comment=#productpicks #trending #shopnow"
Cuando envías más de un archivo en photos[], Instagram crea una publicación en carrusel. La gente desliza las imágenes en el orden en que las subiste. Un solo archivo crea una publicación de foto normal. Instagram admite hasta 10 imágenes por carrusel.
Puedes usar instagram_title para poner un texto solo para Instagram cuando publicas el mismo contenido en varias plataformas a la vez. Es útil cuando el texto de Instagram necesita hashtags o menciones distintos de los que usas en otras redes.
Publicar automáticamente un primer comentario
El parámetro instagram_first_comment añade automáticamente un comentario a tu publicación justo después de publicarse. Es una de las estrategias más habituales en Instagram: dejar el texto limpio y llevar todos los hashtags al primer comentario.
curl -X POST https://api.upload-post.com/api/upload \
-H "Authorization: Apikey tu-clave-api-aquí" \
-F "[email protected]" \
-F "user=mybrand" \
-F "title=Quick tutorial: how to use our app" \
-F "platform[]=instagram" \
-F "media_type=REELS" \
-F "instagram_first_comment=#tutorial #howto #apptips #tech #productdemo" ¿Por qué usar un primer comentario en lugar de poner los hashtags en el texto? El algoritmo de Instagram trata los hashtags del primer comentario igual que los del texto a efectos de visibilidad, pero la publicación queda más limpia. Muchas marcas y creadores lo prefieren porque la publicación se centra en el mensaje y no en un muro de hashtags.
Usar colaboradores y etiquetas de usuarios
Las publicaciones en colaboración de Instagram permiten que dos cuentas sean coautoras de un mismo contenido. La publicación aparece en ambos perfiles y la interacción (me gusta, comentarios, veces compartido) se comparte. Usa el parámetro collaborators para invitar a colaboradores.
curl -X POST https://api.upload-post.com/api/upload \
-H "Authorization: Apikey tu-clave-api-aquí" \
-F "[email protected]" \
-F "user=mybrand" \
-F "title=Excited to announce our partnership with @partneraccount" \
-F "platform[]=instagram" \
-F "media_type=REELS" \
-F "collaborators=partneraccount,otheraccount" \
-F "user_tags=partneraccount,photographer_jane" \
-F "location_id=123456789" collaboratorsacepta una lista de nombres de usuario de Instagram separados por comas. Los usuarios invitados reciben una notificación para aceptar la colaboración.user_tagsetiqueta usuarios en la propia publicación, igual que cuando etiquetas a alguien en una foto desde la app.location_idañade una ubicación a la publicación. Puedes encontrar los ID de ubicación con la búsqueda de ubicaciones de Instagram o con la API de Facebook Places.
Programar publicaciones en Instagram
Añade scheduled_date a cualquier petición de subida para publicar más adelante. La fecha va en formato ISO-8601 y, si quieres, puedes indicar un timezone.
curl -X POST https://api.upload-post.com/api/upload \
-H "Authorization: Apikey tu-clave-api-aquí" \
-F "[email protected]" \
-F "user=mybrand" \
-F "title=Good morning! New content dropping today." \
-F "platform[]=instagram" \
-F "media_type=REELS" \
-F "scheduled_date=2025-09-15T09:00:00Z" \
-F "timezone=America/New_York"
También puedes usar add_to_queue=true en lugar de una fecha concreta. La cola elige el siguiente hueco libre según el calendario que tengas configurado, algo ideal para subir contenido en lote sin elegir horas a mano. Consulta la guía completa de programación para configurar la cola, editar publicaciones programadas y gestionar tu calendario de contenidos.
Automatizar con Python
El SDK oficial de Python facilita escribir scripts de automatización. Instálalo con pip install upload-post y usa UploadPostClient para trabajar con la API. Para una guía completa, consulta la guía de automatización con Python.
Aquí tienes un script completo que publica un Reel, sube un carrusel de fotos y programa contenido para toda la semana:
from upload_post import UploadPostClient
from datetime import datetime, timedelta
client = UploadPostClient(api_key="your-api-key-here")
# 1. Post a Reel immediately
reel_response = client.upload_video(
video_path="/path/to/reel.mp4",
title="Nueva guía del producto",
user="mybrand",
platforms=["instagram"],
media_type="REELS",
share_mode="FEED_AND_REELS",
instagram_first_comment="#newproduct #walkthrough #tech"
)
print(f"Reel subido: {reel_response['job_id']}")
# 2. Post a carousel of photos
carousel_response = client.upload_photos(
photo_paths=[
"/path/to/photo1.jpg",
"/path/to/photo2.jpg",
"/path/to/photo3.jpg"
],
title="Tres ángulos, un producto.",
user="mybrand",
platforms=["instagram"],
collaborators="partneraccount"
)
print(f"Carrusel cargado: {carousel_response['job_id']}")
# 3. Schedule Reels for the next 7 days
videos = [
"monday.mp4", "tuesday.mp4", "wednesday.mp4",
"thursday.mp4", "friday.mp4", "saturday.mp4", "sunday.mp4"
]
for i, video in enumerate(videos):
publish_date = (datetime.now() + timedelta(days=i + 1)).replace(
hour=10, minute=0, second=0, microsecond=0
)
response = client.upload_video(
video_path=f"/path/to/{video}",
title=f"Day {i + 1} of our launch week series",
user="mybrand",
platforms=["instagram"],
media_type="REELS",
scheduled_date=publish_date.isoformat(),
timezone="Europe/Madrid"
)
print(f"Scheduled {video} for {publish_date}: {response['job_id']}")
Este script programa un Reel al día a las 10:00, hora de Madrid, durante una semana entera. Ajusta hour, timezone y las rutas de los archivos a tu flujo de trabajo. Para subidas masivas, puedes leer las rutas de los vídeos desde una carpeta o un archivo CSV y recorrerlas de la misma forma.
Automatización sin código: n8n y Make.com
Si prefieres flujos visuales a escribir código, tanto n8n como Make.com funcionan directamente con Upload-Post.
n8n
n8n es una herramienta de automatización de flujos de código abierto. Puedes usar el nodo HTTP Request para llamar a la API de Upload-Post. Tenemos una plantilla de n8n para Reels de Instagram lista para usar que lee vídeos de Google Drive, toma los textos de una hoja de Google Sheets y los publica como Reels automáticamente. Echa un vistazo a todas las plantillas de n8n para ver más configuraciones.
Make.com
Make.com (antes Integromat) funciona con escenarios. Añade un módulo HTTP, configúralo con el endpoint de Upload-Post y tu API key, y conéctalo a cualquier disparador: una fila nueva en Google Sheets, un archivo nuevo en Dropbox, un temporizador, etc. El resultado es el mismo que escribiendo código, pero con una interfaz de arrastrar y soltar.
Las dos herramientas admiten los parámetros de programación (scheduled_date, add_to_queue), así que puedes montar un calendario de contenidos de Instagram completo sin abrir una terminal.
Requisitos de contenido de Instagram
Upload-Post adapta tu contenido automáticamente cuando es posible (con la API de FFmpeg integrada), pero conviene saber qué espera Instagram para optimizar la calidad.
| Formato | Especificación | Detalles |
|---|---|---|
| Vídeo (Reels) | Tamaño máximo de archivo | 1 GB |
| Formatos | MP4, MOV | |
| Relación de aspecto | 9:16 recomendado, 1:1 y 4:5 admitidos | |
| Duración | De 3 segundos a 15 minutos | |
| Resolución | 1080x1920 recomendada | |
| Foto | Tamaño máximo de archivo | 8 MB |
| Formatos | JPEG, PNG | |
| Relación de aspecto | 1:1, 4:5, 1,91:1 | |
| Dimensiones máximas | 1440x1440 (cuadrada), 1080x1350 (vertical) | |
| Carrusel | Máximo de imágenes | 10 por publicación |
| Contenido mixto | Se pueden combinar fotos y vídeos |
Preguntas frecuentes
¿Cómo automatizo las publicaciones de Instagram?
Conecta tu cuenta de Instagram Business o Creator a Upload-Post y envía una petición POST al endpoint /api/upload con platform[]=instagram. Puedes publicar Reels (media_type=REELS), carruseles y fotos sueltas, programar con scheduled_date, publicar Stories (media_type=STORIES) y añadir un primer comentario automático, todo con una sola llamada a la API, sin revisión de app de Meta ni configurar la Graph API. Los ejemplos en cURL y Python de arriba muestran exactamente cómo.
¿Hay una API de Instagram para publicar Reels y fotos automáticamente?
Sí. Upload-Post expone la Content Publishing API oficial de Instagram a través de un único endpoint. Envía platform[]=instagram con tu vídeo o tus fotos y la API se encarga de crear el contenedor, consultar el estado y publicar Reels, carruseles y fotos del feed. Es la misma API oficial que usan otras herramientas de programación autorizadas, no un bot ni automatización del navegador.
¿Funciona con cuentas personales de Instagram?
No. La API de Instagram solo admite cuentas Business y Creator. Ninguna API oficial da acceso a las cuentas personales. La buena noticia es que pasar a una cuenta Business o Creator es gratis y se hace en unos 30 segundos desde los ajustes de la app de Instagram. Upload-Post se conecta con el inicio de sesión de Instagram (Instagram Login), así que no hace falta vincular una página de Facebook.
¿Puedo publicar Stories de Instagram por API?
Sí. Envía media_type=STORIES con platform[]=instagram en el endpoint de vídeo (/api/upload) o en el de fotos (/api/upload_photos). Las Stories ignoran el texto de la publicación y no admiten etiqueta de ubicación, y funcionan mejor en vertical 9:16.
¿Las publicaciones automáticas pueden provocar un shadowban en mi cuenta?
Upload-Post publica a través de la Content Publishing API oficial de Instagram, la misma vía que usan otros programadores autorizados, así que tus publicaciones no se marcan como automatización como pasa con los bots de navegador. Lo que Instagram enseña a la gente sigue dependiendo del contenido en sí. Además, Upload-Post limita cada cuenta a 50 publicaciones en 24 horas móviles para mantenerse muy por dentro de los límites de publicación de Instagram. Si ahora usas una herramienta como Hootsuite o Later, Upload-Post es una alternativa pensada para desarrolladores que usa el mismo acceso oficial.
¿Hay un plan gratuito?
Sí. Todas las cuentas de Upload-Post incluyen 10 subidas gratis al mes sin tarjeta de crédito. Es suficiente para probar la API, validar tu flujo de trabajo y comprobar que todo funciona antes de pasar a un plan de pago. Consulta el calendario de fechas clave para redes sociales para planificar tus primeras publicaciones en torno a los próximos eventos, o divide un banner en piezas con la herramienta para dividir una imagen para el feed de Instagram y prográmalas en orden.