Puedes usar la API de publicación de contenido para publicar en las cuentas profesionales de Instagram imágenes, videos, reels individuales (es decir, publicaciones con un solo contenido multimedia) o publicaciones con varias imágenes, videos (publicaciones de secuencia).
A partir del 1 de julio de 2023, todos los videos de feed único publicados mediante la API de publicación de contenido de Instagram se compartirán como reels.
Todas las solicitudes deben incluir el token de acceso del usuario de la app.
Para la publicación, se usa una combinación de los siguientes permisos. La combinación exacta depende de los puntos de conexión que usa la app. Consulta nuestras referencias de puntos de conexión para determinar qué permisos requieren estos puntos de conexión.
Si los usuarios de la app no tendrán un rol en la app ni en una empresa que haya reclamado la app, debes solicitar la aprobación de cada permiso mediante el proceso de revisión de apps antes de que los usuarios de la app sin roles puedan otorgar dichos permisos en la app.
Aplicamos cURL al contenido multimedia usado en los intentos de publicación. Por este motivo, el contenido multimedia debe estar alojado en un servidor de acceso público al momento de intentar realizar la publicación.
Las cuentas profesionales de Instagram conectadas a una página que requieran autorización de publicación en páginas (PPA) no se pueden publicar hasta que se haya completado el proceso de PPA.
Es posible que un usuario de la app pueda realizar tareas en una página que inicialmente no requieran PPA, pero más adelante sí. En este caso, el usuario de la app no podrá publicar contenido en su cuenta profesional de Instagram hasta haber completado el proceso de PPA. Como no hay forma de determinar si la página de un usuario de la app requiere PPA, te recomendamos que hagas saber a los usuarios de tu app que es aconsejable que completen el proceso de PPA de manera preventiva.
Consulta la referencia de los puntos de conexión para obtener información sobre más limitaciones.
Las cuentas de Instagram pueden realizar un máximo de 50 publicaciones mediante la API en de un período rotatorio de 24 horas. Las secuencias cuentan como una única publicación. Este límite se aplica en el punto de conexión de POST /{ig-user-id}/media_publish
al intentar publicar un contenedor de contenido multimedia. Recomendamos que tu app también aplique la limitación de frecuencia de publicación, especialmente si permite a los usuarios programar publicaciones futuras.
Para conocer el uso de la limitación de frecuencia actual de una cuenta profesional de Instagram, haz una consulta al punto de conexión GET /{ig-user-id}/content_publishing_limit
.
La API tiene los siguientes puntos de conexión. Consulta los documentos de cada punto de conexión para hallar los requisitos de uso.
POST /{ig-user-id}/media
: se usa para subir contenido multimedia y crear contenedores de contenido multimedia.POST /{ig-user-id}/media_publish
: se usa para publicar contenido multimedia subido a través de los contenedores de contenido multimedia.GET /{ig-container-id}?fields=status_code
: se usa para revisar los requisitos y el estado de publicación del contenedor de contenido multimedia.GET /{ig-user-id}/content_publishing_limit
: se usa para revisar el uso actual de la limitación de frecuencia del usuario de la app.El proceso de publicación de una imagen, un video, una historia o un reel solos requiere dos pasos:
POST /{ig-user-id}/media
para crear un contenedor de una imagen o video alojados en tu servidor público.POST /{ig-user-id}/media_publish
para publicar ese contenedor.Paso 1 de 2: Crear contenedor
Supongamos que tienes una imagen en
https://www.example.com/images/bronz-fonz.jpg
que quieres publicar con el hashtag "#BronzFonz" como leyenda. Envía una solicitud al punto de conexión POST /{ig-user-id}/media
:
POST https://graph.facebook.com/v21.0
/17841400008460056/media
?image_url=https://www.example.com/images/bronz-fonz.jpg
&caption=#BronzFonz
Devuelve un identificador de contenedor de la imagen.
{ "id": "17889455560051444" // IG Container ID }
Paso 2 de 2: Publicar contenedor
Usa el punto de conexión POST /{ig-user-id}/media_publish
para publicar el identificador de contenedor que se devolvió en el paso anterior.
POST https://graph.facebook.com/v21.0
/17841400008460056/media_publish ?creation_id=17889455560051444
{ "id": "17920238422030506" // IG Media ID }
Puedes publicar un total de 10 imágenes, videos o una mezcla de estos dos elementos en una única publicación (una publicación por secuencia). Realizar publicaciones por secuencia es un proceso de tres pasos:
POST /{ig-user-id}/media
para crear contenedores de elementos individuales para las imágenes y los videos que aparecerán en la secuencia.POST /{ig-user-id}/media
para crear un único contenedor de secuencia para los elementos.POST /{ig-user-id}/media_publish
para publicar el contenedor de secuencia.Las publicaciones por secuencia cuentan como publicaciones únicas en relación con la limitación de frecuencia de la cuenta.
Limitaciones
Paso 1 de 3: Crear un contenedor de elementos
Usa el punto de conexión POST /{ig-user-id}/media
para crear contenedores de elementos de una imagen o video que aparecerán en una secuencia. Las secuencias pueden tener un total de 10 imágenes y videos, o bien una combinación de ambos.
POST /{ig-user-id}/media
Los siguientes parámetros son obligatorios. Consulta la referencia del punto de conexión POST /{ig-user-id}/media
para obtener información sobre otros parámetros admitidos.
is_carousel_item
: establecido en true
. Indica que la imagen o el video aparecerán en una secuencia.image_url
: (solo imágenes) La ruta a la imagen. Aplicaremos cURL a la URL pasada para acceder a la imagen, por lo que esta debe estar en un servidor público.media_type
: (solo videos) Establecido en VIDEO
. Indica que el contenido multimedia es un video.video_url
: (solo videos) Ruta al video. Aplicaremos cURL a la URL pasada para acceder al video, por lo que este debe estar en un servidor público.Si la operación es correcta, la API devolverá un identificador de contenedor de elementos que puede usarse cuando se crea el contenedor de secuencia.
Repite este proceso para todas las imágenes y todos los videos que deben aparecer en la secuencia.
curl -i -X POST \
"https://graph.facebook.com/v21.0
/90010177253934/media?image_url=https%3A%2F%2Fsol...&is_carousel_item=true&access_token=EAAOc..."
{ "id": "17899506308402767" }
Paso 2 de 3: Crear un contenedor de secuencia
Usa el punto de conexión POST /{ig-user-id}/media
para crear un contenedor de secuencia.
POST /{ig-user-id}/media
Los siguientes parámetros son obligatorios. Consulta la referencia del punto de conexión POST /{ig-user-id}/media
para obtener información sobre los parámetros adicionales admitidos.
media_type
: establecido en CAROUSEL
. Indica que el contenedor es para una secuencia.children
: una matriz de hasta 10 identificadores de contenedor de cada imagen y video, que se espera que aparezca en la secuencia publicada. Las secuencias pueden tener un total de 10 imágenes y videos, o bien una combinación de ambos.
curl -i -X POST \
"https://graph.facebook.com/v21.0
/90010177253934/media?caption=Fruit%20candies&media_type=CAROUSEL&children=17899506308402767%2C18193870522147812%2C17853844403701904&access_token=EAAOc..."
{ "id": "18000748627392977" }
Paso 3 de 3: Publicar el contenedor de secuencia
Usa el punto de conexión POST /{ig-user-id}/media_publish
para publicar el contenedor de secuencia (una publicación por secuencia). Las cuentas pueden realizar un máximo de 50 publicaciones en un período de 24 horas. Publicar una secuencia cuenta como una única publicación.
POST /{ig-user-id}/media_publish
Los siguientes parámetros son obligatorios.
creation_id
: el identificador del contenedor de secuencia.Si la operación se realiza correctamente, la API devolverá un identificador del álbum de secuencias de contenido de Instagram.
curl -i -X POST \
"https://graph.facebook.com/v21.0
/90010177253934/media_publish?creation_id=18000748627392977&access_token=EAAOc..."
{ "id": "90010778390276" }
Los reels son videos cortos que pueden aparecer en la pestaña Reels de la app de Instagram si cumplen con determinadas especificaciones y los selecciona nuestro algoritmo. Si quieres publicar un reel, sigue los pasos que se usan para realizar una publicación de contenido multimedia único e incluye el parámetro media_type=REELS
junto con la ruta del video y el parámetro video_url
.
Si bien configuras media_type=REELS
cuando publicas reels, estos no son un tipo de contenido multimedia. Si publicas un reel y luego solicitas el campo media_type
de este, se devuelve el valor VIDEO
. Para determinar si un video publicado se designó como reel, solicita el campo media_product_type
.
Puedes usar el código de ejemplo en GitHub (insta_reels_publishing_api_sample) para obtener información sobre cómo publicar reels en Instagram.
Para ofrecer mayor comodidad a los desarrolladores, Meta publicó el conjunto completo de las llamadas a la API Graph de Instagram Reels en la plataforma de la API de Postman. Para obtener más información, consulta Colecciones de Postman para Facebook Reels e Instagram Reels.
Para obtener más información sobre los reels, consulta la documentación de reels para desarrolladores.
Por el momento, solo las cuentas comerciales pueden publicar historias con la API de publicación de contenido.
Las historias son videos e imágenes que se publican como historias en Instagram. Si quieres publicar una historia, sigue los mismos pasos que se usan para realizar una publicación de contenido multimedia e incluye el parámetro media_type=STORIES
junto con la ruta de la imagen o el video con el parámetro image_url
o video_url
.
Nota: Ten en cuenta que, si bien configuras media_type=STORIES
cuando publicas historias, estas no son un nuevo tipo de contenido multimedia. Si publicas una historia y, luego, solicitas el campo media_type
de esta, se devolverá el valor como IMAGE/VIDEO
. Para determinar si una imagen o un video que se publicó se designó como historia, solicita el campo media_product_type
.
El protocolo de subida reanudable es un nuevo flujo para publicar contenido en Instagram, que admite subir videos en formato de reels, historias de video y elementos de secuencia de video media_types
.
Este nuevo protocolo admite la creación de contenido multimedia de Instagram a partir de videos locales y de videos con URL pública y hospedada. El protocolo te permite reanudar una operación de subida de archivos locales después de una interrupción de la red u otro fallo de transmisión, lo que ahorra tiempo y requiere menos ancho de banda en caso de que haya errores en la red. Conserva las mismas especificaciones de contenido multimedia.
POST https://graph.facebook.com/{api-version}/{ig-user-id}/media
: se usa para inicializar contenedores de creación de video mediante la configuración de upload_type=resumable.POST https://rupload.facebook.com/ig-api-upload/{api-version}/{ig-container-id}
: se usa para subir videos desde un archivo de video local o una URL alojada de forma más confiable mediante el protocolo de subida reanudable. POST https://graph.facebook.com/{api-version}/{ig-user-id}/media_publish
: se usa para publicar contenido multimedia subido a través de los contenedores de contenido multimedia.GET /{ig-container-id}?fields=status_code
: se usa para revisar los requisitos y el estado de publicación del contenedor de contenido multimedia.user_tags=[{username:’ig_user_name’}]
está codificado en user_tags=%5B%7Busername:ig_user_name%7D%5D
, donde [
está codificado en %5B
, y {
está codificado en %7B
. Para obtener más conversiones, consulta el estándar de codificación de URL de HTML.curl -X POST "https://graph.facebook.com/{api-version}/{ig-user-id}/media" \ -d "media_type=REELS" \ -d "upload_type=resumable" \ -d "caption={caption}"\ -d "collaborators={collaborators-username}" -d "cover_url={cover-url}" \ -d "audio_name={audio-name}" \ -d "user_tags={user-tags}" \ -d "location_id={location-id}" \ -d "thumb_offset={thumb-offset}" \ -H "Authorization: OAuth {access-token}"
curl -X POST "https://graph.facebook.com/{api-version}/{ig-user-id}/media" \ -d "media_type=STORIES" \ -d "upload_type=resumable" \ -H "Authorization: OAuth {access-token}"
curl -X POST "https://graph.facebook.com/{api-version}/{ig-user-id}/media" \ -d "media_type=VIDEO" \ -d "is_carousel_item=true" \ -d "upload_type=resumable" \ -H "Authorization: OAuth {access-token}"
{ "id": "{ig-container-id}", "uri": "https://rupload.facebook.com/ig-api-upload/{api-version}/{ig-container-id}" }
La mayoría de las llamadas a la API Graph usan el host graph.facebook.com
, pero las llamadas para subir videos en formato de reels usan rupload.facebook.com
.
En el caso de los archivos de videos subidos, se admiten los siguientes orígenes de archivos de video:
Con la identificación ig-container-id
devuelta de una llamada de sesión de subida reanudable, sube el video.
rupload.facebook.com
.media_type
comparten el mismo flujo para subir el video.ig-container-id
es la identificación devuelta de las llamadas de sesión de subida reanudable. access-token
es el mismo que se usó los pasos anteriores.offset
se configura en el primer byte por subir, en general, 0
.file_size
se configura en el tamaño del archivo en bytes.Your_file_local_path
se configura en la ruta de tu archivo local, por ejemplo, si se sube un archivo desde la carpeta Descargas en macOS, la ruta es @Descargas/ejemplo.mov.curl -X POST "https://rupload.facebook.com/ig-api-upload/{api-version}/{ig-container-id}" \ -H "Authorization: OAuth {access-token}" \ -H "offset: 0" \ -H "file_size: Your_file_size_in_bytes" \ --data-binary "@my_video_file.mp4"
curl -X POST "https://rupload.facebook.com/ig-api-upload/{api-version}/{ig-container-id}" \ -H "Authorization: OAuth {access-token}" \ -H "file_url: https://example_hosted_video.com"
// Success Response Message { "success":true, "message":"Upload successful." } // Failure Response Message { "debug_info":{ "retriable":false, "type":"ProcessingFailedError", "message":"{\"success\":false,\"error\":{\"message\":\"unauthorized user request\"}}" } }
Puedes reutilizar los pasos 1 y 2 para crear múltiples ig-container-ids
con el parámetro is_carousel_item
configurado en true
. Luego, crea un contenedor de secuencia para incluir todos los elementos de la secuencia. Estos últimos se pueden mezclar con imágenes y videos.
curl -X POST "https://graph.facebook.com/{api-version}/{ig-user-id}/media" \ -d "media_type=CAROUSEL" \ -d "caption={caption}"\ -d "collaborators={collaborator-usernames}" \ -d "location_id={location-id}" \ -d "product_tags={product-tags}" \ -d "children=[{ig-container-id},{ig-container-id}...]" \ -H "Authorization: OAuth {access-token}"
En el caso de los reels y las historias de video, el {ig-container-id}
creado en el paso 1 se usa para publicar el video. En el caso del contenedor de secuencia, el {ig-container-id}
creado en el paso 3 se usa para publicar el contenedor de secuencia.
curl -X POST "https://graph.facebook.com/{api-version}/{ig-user-id}/media_publish" \ -d "creation_id={ig-container-id}" \ -H "Authorization: OAuth {access-token}"
graph.facebook.com
proporciona un punto de conexión GET
para leer el estado de la subida; el campo video_status
contiene los detalles sobre el proceso de subida local.
uploading_phase
indica si el archivo se subió correctamente y la cantidad de bytes transferidos. processing_phase
contiene los detalles sobre el estado del procesamiento del video después de que se subió el archivo de video.// GET status from graph.facebook.com curl -X GET "https://graph.facebook.com/v19.0/{ig-container-id}?fields=id,status,status_code,video_status" \ -H "Authorization: OAuth {access-token}"
graph.facebook.com
// A successfully created ig container { "id": "{ig-container-id}", "status": "Published: Media has been successfully published.", "status_code": "PUBLISHED", "video_status": { "uploading_phase": { "status": "complete", "bytes_transferred": 37006904 }, "processing_phase": { "status": "complete" } } } // An interrupted ig container creation, from here you can resume your upload in step 2 with offset=50002. { "id": "{ig-container-id}", "status": "Published: Media has been successfully published.", "status_code": "PUBLISHED", "video_status": { "uploading_phase": { "status": "in_progress", "bytes_transferred": 50002 }, "processing_phase": { "status": "not_started" } } }
Puedes agregar usuarios públicos de Instagram como colaboradores a una imagen, una secuencia y un reel, y recibirán una invitación para ser colaboradores de ese contenido multimedia en particular. Para etiquetar usuarios en una imagen, sigue los pasos indicados en publicaciones solo de contenido multimedia, pero, cuando crees el contenedor de contenido multimedia, incluye el parámetro "collaborators" y una matriz de cadenas que indique los nombres de los usuarios de Instagram que quieres invitar a colaborar en el contenido multimedia.
POST graph.facebook.com/17841400008460056/media ?image_url=https://www.example.com/images/bronzed-fonzes.jpg &caption=#BronzedFonzes! &collaborators= [‘username1’,’username2’]
Puedes usar la API de búsqueda de páginas . Asegúrate de incluir el campo "location" en tu consulta para buscar páginas cuyos nombres coincidan con una cadena de búsqueda. Luego, analiza los resultados para identificar todas las páginas que se hayan creado para una ubicación física. Si incluyes un identificador de página cuando publicas una imagen o un video, este elemento se etiquetará con la ubicación asociada a esa página.
A fin de ser apta para el etiquetado, una página debe tener datos de ubicación de latitud y longitud.
Verifica que la página que deseas utilizar tenga los datos de latitud y longitud en la respuesta. Si intentas crear un contenedor con una página que no tiene datos de ubicación, se producirá un error con la excepción INSTAGRAM_PLATFORM_API__INVALID_LOCATION_ID
.
Una vez que tienes el identificador de la página, asígnalo al parámetro location_id
cuando publiques el contenido multimedia único o los contenedores de elementos de secuencia.
Puedes hacer publicaciones de un solo contenido multimedia o publicaciones en secuencia etiquetadas con productos de Comprar en Instagram. Consulta la guía Etiquetado de productos para descubrir cómo hacerlo.
Puedes etiquetar en una imagen a usuarios públicos de Instagram, quienes recibirán una notificación en la que se les indica que se los etiquetó.
Para etiquetar usuarios, sigue los pasos indicados en publicaciones solo de contenido multimedia, pero, cuando crees el contenedor de contenido multimedia, incluye el parámetro user_tags
y una matriz de objetos que indique a los usuarios de Instagram en la foto y sus coordenadas x/y dentro de la foto.
Nota: No se admiten las etiquetas de usuario en el contenido multimedia en video ni en las secuencias.
POST graph.facebook.com/17841400008460056/media ?image_url=https://www.example.com/images/bronzed-fonzes.jpg &caption=#BronzedFonzes! &user_tags= [ { username:'kevinhart4real', x: 0.5, y: 0.8 }, { username:'therock', x: 0.3, y: 0.2 } ]
Devuelve un identificador de contenedor que publicarás luego mediante el punto de conexión Publicación de contenido multimedia de los usuarios de IG.
user_tags
debe ser un conjunto de objetos en formato JSON.username
, x
e y
) para cada usuario.x
e y
deben ser números float
que se encuentren en un rango de 0.0
a 1.0
. El origen de coordenadas está en la parte superior izquierda de la imagen.Si puedes crear un contenedor para un video, pero el punto de conexión POST /{ig-user-id}/media_publish
no devuelve el identificador de contenido multimedia publicado, puedes conocer el estado de publicación del contenedor enviando una consulta al punto de conexión GET /{ig-container-id}?fields=status_code
. Este punto de conexión devolverá uno de los siguientes resultados:
EXPIRED
: el contenedor no se publicó en las últimas 24 horas y caducó.ERROR
: el contenedor no completó el proceso de publicación.FINISHED
: el contenedor y su objeto multimedia están listos para la publicación.IN_PROGRESS
: el contenedor todavía está atravesando el proceso de publicación.PUBLISHED
: el objeto multimedia del contenedor se publicó.Recomendamos hacer consultas del estado de un contenedor una vez por minuto, durante no más de cinco minutos.
Consulta la referencia Códigos de error.