Tutorial de la API de Instagram para publicar: publicar con la Graph API

Tutorial de la API de Instagram para publicar: publicar con la Graph API

Cómo publicar en Instagram mediante la API: el flujo de contenedor en dos pasos, los requisitos de cuenta, el límite diario de 100 publicaciones y qué es lo que realmente cuesta tiempo.

Publicar en Instagram mediante la API es una llamada en dos pasos: crea un contenedor multimedia con POST /<IG_ID>/media, y luego publícalo con POST /<IG_ID>/media_publish. Las partes difíciles no son las llamadas. Son los requisitos de cuenta, la revisión de la app de Meta, y el hecho de que una respuesta 200 en el paso del contenedor no significa que ya haya algo publicado.

Esto está escrito para un desarrollador que está decidiendo si construir esto internamente.

¿Qué puede publicar realmente la API de Instagram?

La documentación de publicación de contenido de Meta enumera cuatro valores de media_type para los contenedores: VIDEO, REELS, STORIES y CAROUSEL. Una imagen individual sencilla es el valor por defecto cuando pasas image_url sin media_type.

FormatoCompatibleNotas de la documentación
Imagen individualJPEG, pasada como image_url pública
Vídeo / Reelsmedia_type=REELS con video_url
Historiasmedia_type=STORIES
CarruselHasta 10 imágenes, vídeos o una mezcla

Dos cosas sorprenden a la gente. Primero, las Historias se pueden publicar, pero cuando vuelves a leer una historia publicada, media_type devuelve IMAGE o VIDEO, así que tienes que solicitar media_product_type para saber qué es realmente. Segundo, las imágenes de un carrusel se recortan todas para coincidir con la primera imagen, por defecto en 1:1, así que tus decisiones de recorte ya están tomadas por ti.

El hueco que más importa no es un formato. Es la cuenta. Publicar requiere una cuenta profesional de Instagram (Empresa o Creador) conectada a una Página de Facebook, con instagram_basic, instagram_content_publish y pages_read_engagement concedidos. No se puede publicar en absoluto mediante la API en una cuenta personal de Instagram, haga lo que haga tu código. Si tus usuarios son creadores con cuentas personales, la integración está muerta antes de que escribas una línea.

Nota: Estas cifras se verificaron con la documentación de publicación de contenido de la plataforma de Instagram de Meta a fecha de septiembre de 2026. Las plataformas cambian esto sin previo aviso.

¿Cómo funciona la autenticación, y cuánto dura la revisión de la app?

Obtienes un token de acceso de usuario mediante el inicio de sesión de Facebook, y luego intercambias en el servidor el token de corta duración por uno de larga duración mediante GET oauth/access_token con grant_type=fb_exchange_token. Meta documenta que el token de usuario de larga duración dura unos 60 días. La renovación automática que describe Meta se aplica a los tokens gestionados por el SDK, así que si intercambias los tokens tú mismo necesitas tu propia ruta de renovación o reautenticación antes del día 60.

Se requiere revisión de la app para los permisos de publicación antes de que nadie fuera de los roles de tu propia app pueda usar la integración. Meta no publica un plazo de revisión garantizado en esta documentación para desarrolladores, así que trata la duración como desconocida y planifica al menos una ronda de rechazo. Las grabaciones de pantalla forman parte del envío, lo que significa que necesitas una demo funcional antes de obtener la aprobación, en una app que todavía no puede servir a usuarios reales.

¿Cuál es la secuencia de llamadas de publicación?

  1. Sube tu contenido multimedia a algún lugar públicamente accesible. Meta lo obtiene por URL, así que una URL firmada que caduque en 60 segundos fallará.
  2. POST /<IG_ID>/media con image_url o video_url, caption, y media_type si no es una imagen sencilla. Recibes de vuelta un ID de contenedor.
  3. Consulta GET /<IG_CONTAINER_ID>?fields=status_code hasta que muestre FINISHED. Meta recomienda consultar una vez por minuto durante no más de cinco minutos.
  4. POST /<IG_ID>/media_publish con creation_id fijado al ID del contenedor.
  5. Guarda el ID de contenido devuelto. Ese, y no el ID del contenedor, es la publicación publicada.
# 1. create the container
curl -X POST "https://graph.facebook.com/v23.0/$IG_ID/media" \
  -d "image_url=https://example.com/photo.jpg" \
  -d "caption=Ship it." \
  -d "access_token=$TOKEN"
# -> {"id":"17889455560051444"}

# 2. poll until FINISHED
curl "https://graph.facebook.com/v23.0/17889455560051444?fields=status_code&access_token=$TOKEN"

# 3. publish
curl -X POST "https://graph.facebook.com/v23.0/$IG_ID/media_publish" \
  -d "creation_id=17889455560051444" -d "access_token=$TOKEN"

El status_code del contenedor puede ser IN_PROGRESS, FINISHED, ERROR, EXPIRED o PUBLISHED. EXPIRED significa que el contenedor no se publicó dentro de las 24 horas. Para un carrusel, creas un contenedor por elemento con is_carousel_item=true, y luego un contenedor padre con media_type=CAROUSEL y una lista children separada por comas.

¿Cuáles son los límites de velocidad?

El límite de publicación documentado es directo: las cuentas de Instagram se limitan a 100 publicaciones publicadas por API dentro de un periodo móvil de 24 horas, y un carrusel cuenta como una sola publicación. Puedes leer el uso actual en GET /<IG_ID>/content_publishing_limit en lugar de adivinar, que es lo que deberías hacer antes de una ejecución masiva.

Eso es una ventana móvil, no un día natural. Si agotas 100 publicaciones a las 15:00, no obtienes una nueva asignación a medianoche. Cualquier cola que construyas necesita modelar la ventana, no un contador diario.

Nota: Estas cifras se verificaron con la documentación de publicación de contenido de la plataforma de Instagram de Meta a fecha de septiembre de 2026. Las plataformas cambian esto sin previo aviso.

¿Qué es lo que realmente te va a costar tres semanas?

No las dos llamadas de la API. Estas cuatro cosas:

La revisión de la app. No puedes lanzar hasta que Meta apruebe instagram_content_publish, y no puedes hacer una demo limpia hasta que hayas construido la cosa. Presupuesta para un reenvío.

La renovación de tokens. Los tokens de larga duración de sesenta días implican un trabajo en segundo plano, un estado de fallo en tu interfaz para “esta cuenta necesita reconectarse”, y un correo al usuario antes de que el token caduque, no después. Si te saltas esto, cada integración deja de funcionar en silencio dos meses después del lanzamiento.

El alojamiento de contenido multimedia y las restricciones de formato. Meta extrae el contenido multimedia desde tu URL. Eso implica alojamiento público, tipos de contenido correctos y transcodificación a lo que Instagram acepta. Las imágenes individuales son JPEG. El vídeo necesita sobrevivir al propio paso de procesamiento de Instagram, que ocurre después de que tu llamada devuelva respuesta.

El manejo de fallos asíncronos. Un 200 en la llamada del contenedor significa que Meta aceptó un trabajo. La publicación aún puede fallar durante el procesamiento, y solo te enteras consultando status_code y viendo ERROR. Si tu modelo de datos solo tiene “publicado” y “fallido”, reportarás éxito para publicaciones que nunca aparecieron. Modela un estado processing y una comprobación terminal real, como se cubre en nuestra guía de la API de programación de redes sociales.

Y luego multiplica. Reels e Historias tienen sus propias particularidades, y si además quieres TikTok o LinkedIn, vuelves a empezar con un modelo de autenticación distinto, un flujo de subida distinto y un proceso de revisión distinto.

La versión corta

  • Dos llamadas: crear contenedor, luego media_publish. Consulta status_code entre medias.
  • Requiere una cuenta profesional de Instagram vinculada a una Página de Facebook.
  • 100 publicaciones publicadas por API cada 24 horas móviles; comprueba content_publishing_limit.
  • Los tokens de larga duración duran unos 60 días. Construye la renovación antes del lanzamiento.
  • La revisión de la app es obligatoria y su duración no está publicada en la documentación.

Si estás redactando pies de foto mientras construyes esto, el contador de caracteres de Instagram gratuito muestra dónde cae el truncamiento.

Hacer esto una vez en lugar de una vez por plataforma

La alternativa a escribir esto por cada red es una única API que ya guarda los tokens, los contenedores, las consultas y los reintentos. BulkPublish publica en 15 plataformas mediante una única API REST y un SDK, así que una publicación de Instagram y una de LinkedIn son la misma llamada con un ID de canal distinto. La renovación de tokens, el límite de ventana móvil y la comprobación de estado asíncrona se gestionan de nuestro lado, y una publicación que falla en una plataforma se reporta como partial en lugar de un falso éxito. La referencia está en /es/developers/ y la página de integración REST está en /es/integrations/rest-api/.

Relacionado