Vous pouvez utiliser l’API Content Publishing afin de publier, sur vos comptes professionnels Instagram, des images, des vidéos ou des reels uniques (c’est-à-dire des publications avec un seul contenu multimédia) ou encore des publications contenant plusieurs images et vidéos (publications de type carrousel).
À partir du 1er juillet 2023, toutes les vidéos de fil uniques publiées via l’API Content Publishing Instagram seront partagées en tant que reels.
Toutes les requêtes doivent inclure le token d’accès de l’utilisateur·ice de l’application.
La publication est soumise à la combinaison des autorisations suivantes. La combinaison exacte dépend des points de terminaison que votre application utilise. Reportez-vous à nos références de point de terminaison pour connaître les autorisations requises.
Si elle doit être utilisée par des utilisateur·ices qui n’ont pas de rôle dans votre application ou dans une entreprise ayant revendiqué votre application, vous devez demander l’approbation pour chaque autorisation en passant par le Contrôle app avant que les utilisateur·ices qui ne disposent d’aucun rôle les accordent à votre application.
Comme nous effectuerons un cURL du contenu multimédia utilisé pour les tentatives de publication, celui-ci doit être hébergé sur un serveur public au moment de la tentative.
Les comptes professionnels Instagram connectés à une Page nécessitant une PPA (autorisation de publication de page) ne permettent pas la publication tant que cette autorisation n’a pas été obtenue.
Il est possible qu’un·e utilisateur·ice de l’application puisse exécuter des tâches sur une page qui ne nécessitait pas de PPA à l’origine, mais qui en nécessite une par la suite. Dans cette situation, l’utilisateur·ice de l’application ne peut pas publier de contenu sur son compte professionnel Instagram tant que la PPA n’a pas été obtenue. Étant donné que vous n’avez aucun moyen de déterminer si la page d’un·e utilisateur·ice de l’application nécessite une PPA, nous vous recommandons de conseiller aux utilisateur·ices d’émettre une demande d’autorisation en prévention.
Pour en savoir plus sur les limitations supplémentaires, consultez la référence de chaque point de terminaison.
Les comptes Instagram sont limités à 50 publications via l’API par période continue de 24 heures. Les carrousels comptent pour une seule publication. Cette limite s’applique au point de terminaison POST /{ig-user-id}/media_publish
lors des tentatives de publication d’un conteneur de contenu multimédia. Il est conseillé d’appliquer aussi le plafond de publication à votre application, surtout si elle autorise les utilisateur·ices à planifier des publications ultérieures.
Pour vérifier l’utilisation du plafond actuel d’un compte professionnel Instagram, interrogez le point de terminaison GET /{ig-user-id}/content_publishing_limit
.
L’API se compose des points de terminaison suivants. Pour connaître les conditions d’utilisation, consultez la documentation de référence sur chaque point de terminaison.
POST /{ig-user-id}/media
: importer un contenu multimédia et créer des conteneurs multimédias.POST /{ig-user-id}/media_publish
: publier un contenu multimédia à l’aide de conteneurs multimédias.GET /{ig-container-id}?fields=status_code
: vérifier l’éligibilité et l’état du conteneur multimédia pour la publication.GET /{ig-user-id}/content_publishing_limit
: vérifier le plafond de publication actuel pour l’utilisateur·ice de l’application.La publication d’une seule image, vidéo ou story ou d’un seul reel se fait en deux étapes :
POST /{ig-user-id}/media
pour créer un conteneur à partir d’une image ou d’une vidéo hébergée sur votre serveur public.POST /{ig-user-id}/media_publish
pour publier ce conteneur.Étape 1 sur 2 : création d’un conteneur
Disons que vous avez une image à l’adresse…
https://www.example.com/images/bronz-fonz.jpg
… que vous souhaitez publier avec le hashtag #BronzFonz comme légende. Envoyez une requête au point de terminaison 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
Cette requête renvoie un ID de conteneur pour l’image.
{ "id": "17889455560051444" // IG Container ID }
Étape 2 sur 2 : publication du conteneur
Utilisation du point de terminaison POST /{ig-user-id}/media_publish
pour publier l’ID de conteneur renvoyé à l’étape précédente.
POST https://graph.facebook.com/v21.0
/17841400008460056/media_publish ?creation_id=17889455560051444
{ "id": "17920238422030506" // IG Media ID }
Vous pouvez publier jusqu’à 10 images, vidéos ou un mélange des deux dans une seule publication (publication carrousel). La publication de carrousels est un processus en trois étapes :
POST /{ig-user-id}/media
pour créer des conteneurs d’éléments individuels pour chaque image et vidéo qui apparaîtra dans le carrousel.POST /{ig-user-id}/media
pour créer un seul conteneur pour carrousel pour les éléments.POST /{ig-user-id}/media_publish
pour publier le conteneur pour carrousel.Les publications carrousels sont comptabilisées comme une seule publication dans le plafond du compte.
Limites
Étape 1 sur 3 : création d’un conteneur d’éléments
Utilisez le point de terminaison POST /{ig-user-id}/media
afin de créer un conteneur d’éléments pour l’image ou la vidéo qui apparaîtra dans un carrousel. Les carrousels peuvent contenir jusqu’à 10 images ou vidéos ou un mélange des deux.
POST /{ig-user-id}/media
Les paramètres suivants sont obligatoires. Consultez la référence du point de terminaison POST /{ig-user-id}/media
pour découvrir les paramètres supplémentaires pris en charge.
is_carousel_item
: défini sur true
. Indique que l’image ou la vidéo apparaîtra dans un carrousel.image_url
: (images uniquement) chemin d’accès à l’image. Comme nous effectuerons un cURL de votre image avec l’URL transmise, elle doit se trouver sur un serveur public.media_type
: (vidéos uniquement) défini sur VIDEO
. Indique que le contenu multimédia est une vidéo.video_url
: (vidéos uniquement) chemin d’accès à la vidéo. Comme nous effectuerons un cURL de votre vidéo avec l’URL transmise, elle doit se trouver sur un serveur public.Si l’opération réussit, l’API renvoie un ID de conteneur d’éléments qui peut être utilisé pour la création du conteneur pour carrousel.
Répétez le processus pour chaque image ou vidéo que vous souhaitez voir apparaître dans le carrousel.
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" }
Étape 2 sur 3 : création d’un conteneur pour carrousel
Utilisez le point de terminaison POST /{ig-user-id}/media
pour créer un conteneur pour carrousel.
POST /{ig-user-id}/media
Les paramètres suivants sont obligatoires. Consultez la référence du point de terminaison POST /{ig-user-id}/media
pour découvrir les paramètres supplémentaires pris en charge.
media_type
: défini sur CAROUSEL
. Indique que le conteneur est destiné à un carrousel.children
: tableau contenant jusqu’à 10 ID de conteneur pour chaque image et vidéo que vous souhaitez voir apparaître dans le carrousel publié. Les carrousels peuvent contenir jusqu’à 10 images ou vidéos ou un mélange des deux.
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" }
Étape 3 sur 3 : publication d’un conteneur pour carrousel
Utilisez le point de terminaison POST /{ig-user-id}/media_publish
afin de publier un conteneur pour carrousel (une publication carrousel). Les comptes sont limités à 50 publications par fenêtre de 24 heures. La publication d’un carrousel compte comme une seule publication.
POST /{ig-user-id}/media_publish
Les paramètres suivants sont obligatoires.
creation_id
: ID du conteneur pour carrousel.Si l’opération est une réussite, l’API renverra un ID IG Media (contenu multimédia pour Instagram) pour l’album carrousel.
curl -i -X POST \
"https://graph.facebook.com/v21.0
/90010177253934/media_publish?creation_id=18000748627392977&access_token=EAAOc..."
{ "id": "90010778390276" }
Les reels sont de courtes vidéos pouvant apparaître dans l’onglet Reels de l’application Instagram s’ils respectent certains critères et sont sélectionnés par notre algorithme. Pour publier un reel, suivez les étapes permettant de publier une publication d’un seul contenu multimédia et insérez le paramètre media_type=REELS
dans le chemin de la vidéo à l’aide du paramètre video_url
.
Les reels ne sont pas un nouveau type de contenu multimédia, même si vous définissez media_type=REELS
lors de la publication d’un reel. Si vous publiez un reel, puis demandez son champ media_type
, la valeur renvoyée sera VIDEO
. Pour déterminer si une vidéo publiée a été désignée comme un reel, demandez son champ media_product_type
à la place.
Vous pouvez utiliser l’exemple de code publié sur GitHub (insta_reels_publishing_api_sample) pour apprendre à publier des reels sur Instagram.
Pour faciliter le travail des développeurs, Meta a publié l’intégralité des appels de l’API Graph pour les reels Instagram dans la plateforme de l’API Postman. Pour en savoir plus, consultez la page Collections Postman pour les Reels Facebook et Instagram.
Pour plus d’informations sur les reels, consultez la documentation sur les reels pour les équipes de développement.
Seuls les comptes business peuvent publier des stories avec l’API Content Publishing pour le moment.
Les stories sont des vidéos et des images publiées sous forme de stories Instagram sur Instagram. Pour publier une story, suivez les mêmes étapes que pour une publication contenant un seul contenu multimédia et insérez le paramètre media_type=STORIES
dans le chemin de l’image ou de la vidéo à l’aide du paramètre image_url
ou video_url
.
Remarque : les stories ne sont pas un nouveau type de contenu multimédia, même si vous définissez media_type=STORIES
lors de la publication d’une story. Si vous publiez un reel, puis demandez son champ media_type
, la valeur retournée sera IMAGE/VIDEO
. Pour déterminer si une image/vidéo publiée a été désignée comme une story, demandez son champ media_product_type
à la place.
Ce nouveau flux de publication de contenu sur Instagram permet d’importer des vidéos pour les media_types
de reels, de stories et de carrousels.
Les vidéos utilisées pour créer le contenu multimédia Instagram peuvent provenir du stockage local ou d’URL hébergées publiques. Ce protocole autorise la reprise d’une opération d’importation d’un fichier local après une coupure réseau ou toute autre erreur de transmission, afin de gagner du temps et d’économiser la bande passante en cas de panne réseau. Les spécifications du contenu multimédia restent les mêmes.
POST https://graph.facebook.com/{api-version}/{ig-user-id}/media
: initialiser les conteneurs de création vidéo en définissant upload_type=resumable.POST https://rupload.facebook.com/ig-api-upload/{api-version}/{ig-container-id}
: importer une vidéo à partir d’un fichier local ou d’une URL hébergée en toute confiance grâce au protocole d’importation avec reprise. POST https://graph.facebook.com/{api-version}/{ig-user-id}/media_publish
: publier un contenu multimédia à l’aide de conteneurs multimédias.GET /{ig-container-id}?fields=status_code
: vérifier l’éligibilité et l’état du conteneur multimédia pour la publication.user_tags=[{username:’ig_user_name’}]
est encodé au format user_tags=%5B%7Busername:ig_user_name%7D%5D
, avec [
converti en %5B
et {
converti en %7B
. Pour en savoir plus sur les conversions, consultez la norme d’encodage d’URL 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 plupart des appels de l’API Graph utilisent l’hôte graph.facebook.com
. Toutefois, lorsqu’il s’agit d’importer des vidéos pour des reels, les appels utilisent rupload.facebook.com
.
Les fichiers vidéo doivent provenir des sources suivantes :
Utilisez l’ig-container-id
reçu après un appel réussi pour une session d’importation avec reprise pour importer la vidéo.
rupload.facebook.com
.media_type
.ig-container-id
est l’ID renvoyé par un appel pour une session d’importation avec reprise. access-token
est le même que lors des précédentes étapes.offset
est le premier octet importé, généralement 0
.file_size
correspond à la taille de votre fichier en octets.Your_file_local_path
correspond au chemin de votre fichier local ; par exemple, si vous importez un fichier à partir du dossier Téléchargements sur macOS, le chemin est @Téléchargements/exemple.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\"}}" } }
Vous pouvez réutiliser les étapes 1 et 2 pour créer plusieurs ig-container-ids
avec le paramètre is_carousel_item
défini sur true
. Il ne reste plus qu’à créer un conteneur pour carrousel qui englobe tous les éléments du carrousel, qui peuvent mixer images et vidéos.
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}"
Pour les reels et les stories vidéo, l’{ig-container-id}
créé lors de l’étape 1 est utilisé pour publier la vidéo. Pour les conteneurs de carrousel, l’{ig-container-id}
créé lors de l’étape 3 est utilisé pour publier le conteneur de carrousel.
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
dispose d’un point de terminaison GET
pour lire le statut de l’importation. Le champ video_status
contient les détails du processus d’importation local.
uploading_phase
indique si le fichier a bien été importé et combien d’octets ont été transférés. processing_phase
contient les détails du statut du traitement vidéo une fois le fichier importé.// 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" } } }
Vous pouvez ajouter des utilisateur·ices de compte public Instagram dans une image, un carrousel et un reel en tant que collaborateur·ices. Ils et elles recevront alors une invitation à être un·e collaborateur·ice pour ce contenu multimédia précis. Pour identifier des utilisateur·ices sur une image, suivez les étapes relatives à la Publication d’un seul contenu multimédia ci-dessus, mais à l’étape de création du conteneur de contenu multimédia, incluez le paramètre des collaborateur·ices et un tableau de chaînes indiquant le nom des utilisateur·ices Instagram que vous souhaitez inviter en tant que collaborateur·ices sur le contenu multimédia.
POST graph.facebook.com/17841400008460056/media ?image_url=https://www.example.com/images/bronzed-fonzes.jpg &caption=#BronzedFonzes! &collaborators= [‘username1’,’username2’]
Vous pouvez utiliser l’API Pages Search . Assurez-vous d’inclure le champ de « lieu » dans votre requête pour rechercher les pages dont le nom correspond à une chaîne de recherche. Analysez ensuite les résultats pour identifier les pages créées pour un lieu physique précis. Si vous incluez l’ID d’une Page lors de la publication d’une image ou d’une vidéo, celle-ci sera identifiée à l’aide du lieu qui lui est associé.
Pour être éligible à l’identification, une Page doit avoir des données de localisation incluant la latitude et la longitude.
Vérifiez que la Page que vous souhaitez utiliser contient des données de latitude et de longitude dans la réponse. Si vous essayez de créer un conteneur à l’aide d’une Page qui ne contient pas de données de localisation, la tentative échoue et le code d’exception INSTAGRAM_PLATFORM_API__INVALID_LOCATION_ID
s’affiche.
Une fois que vous disposez de l’ID de la Page, attribuez-le au paramètre location_id
lorsque vous publiez un seul contenu multimédia ou des conteneurs d’éléments pour carrousel.
Vous pouvez publier à la fois des publications d’un seul contenu multimédia ou de carrousel dont les tags mentionnent des produits de Boutique Instagram. Pour en apprendre davantage, consultez le guide Identification de produits.
Vous pouvez identifier des utilisateur·ices Instagram publics sur une image pour qu’ils ou elles reçoivent une notification lorsqu’ils ou elles sont identifié·es.
Pour identifier des utilisateur·ices sur une image, suivez les étapes relatives à la Publication d’un seul contenu multimédia ci-dessus, mais à l’étape de création du conteneur de contenu multimédia, incluez le paramètre user_tags
et une série d’objets indiquant les utilisateur·ices Instagram sur l’image, ainsi que leurs coordonnées x/y sur l’image elle-même.
Remarque : l’identification des utilisateur·ices dans les vidéos incluses dans des carrousels n’est pas prise en charge.
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 } ]
Cela renvoie un ID de conteneur que vous publiez ensuite à l’aide du point de terminaison Publication de contenu multimédia d’utilisateur·ice Instagram.
user_tags
doit être une série d’objets au format JSON.username
, x
et y
) pour chaque utilisateur·ice.x
et y
doivent être des nombres float
calculés en partant de la partie supérieure gauche de l’image, dans une plage de 0.0
à 1.0
.Si vous parvenez à créer un conteneur pour une vidéo, mais que le point de terminaison POST /{ig-user-id}/media_publish
ne renvoie pas l’ID de contenu multimédia publié, vous pouvez obtenir l’état de publication du conteneur en interrogeant le point de terminaison GET /{ig-container-id}?fields=status_code
. Ce point de terminaison renverra l’un des éléments suivants :
EXPIRED
: le conteneur n’a pas été publié dans la limite de 24 heures et a expiré.ERROR
: l’exécution du processus de publication par le conteneur a échoué.FINISHED
: le conteneur et son objet multimédia sont prêts à être publiés.IN_PROGRESS
: le conteneur est en train d’exécuter le processus de publication.PUBLISHED
: l’objet multimédia du conteneur a été publié.Il est recommandé d’interroger l’état d’un conteneur une fois par minute pendant cinq minutes au maximum.
Reportez-vous à la référence des Codes d’erreur.