Publication de contenu

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.

Conditions requises

Tokens d’accès

Toutes les requêtes doivent inclure le token d’accès de l’utilisateur·ice de l’application.

Autorisations

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.

Serveur public

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.

Autorisation de publication de page

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.

Limites

  • Le format JPEG est le seul format d’image pris en charge. Les formats d’image JPEG étendus comme MPO et JPS ne sont pas pris en charge.
  • Les tags d’achat ne sont pas pris en charge.
  • Les tags de contenu de marque ne sont pas pris en charge.
  • Les filtres ne sont pas pris en charge.
  • La publication sur Instagram TV n’est pas prise en charge.

Pour en savoir plus sur les limitations supplémentaires, consultez la référence de chaque point de terminaison.

Plafond

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.

Points de terminaison

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.

Publication d’un seul contenu multimédia

La publication d’une seule image, vidéo ou story ou d’un seul reel se fait en deux étapes :

  1. Utilisation du point de terminaison 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.
  2. Utilisation du point de terminaison 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 :

Exemple de requête

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.

Exemple de réponse

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

Exemple de requête

POST https://graph.facebook.com/v21.0/17841400008460056/media_publish ?creation_id=17889455560051444

Exemple de réponse

{
  "id": "17920238422030506" // IG Media ID
}

Publications au format carrousel

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 :

  1. Utilisez le point de terminaison 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.
  2. Utilisez à nouveau le point de terminaison POST /{ig-user-id}/media pour créer un seul conteneur pour carrousel pour les éléments.
  3. Utilisez le point de terminaison 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

  • Les carrousels ne peuvent pas être boostés.
  • Les carrousels sont limités à 10 images ou vidéos ou à un mélange des deux.
  • Les images carrousel sont toutes recadrées en fonction de la première image du carrousel, le format par défaut étant 1:1.

É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

Paramètres

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.

Exemple de requête

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

Exemple de réponse

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

Paramètres

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.

Exemple de requête

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

Exemple de réponse

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

Paramètres

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.

Exemple de requête

curl -i -X POST \

"https://graph.facebook.com/v21.0/90010177253934/media_publish?creation_id=18000748627392977&access_token=EAAOc..."

Exemple de réponse

{
  "id": "90010778390276"
}

Publications de reels

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.

Publications de stories

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.

Protocole d’importation avec reprise

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.

Points de terminaison

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

Conseils pour l’encodage d’URL HTML

  • Certains paramètres sont pris en charge au format liste/dict.
  • Certains caractères doivent être encodés dans un format capable d’être transmis par Internet. Par exemple : 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.

Étape 1 : initialiser une session d’importation pour les vidéos de reels, stories ou carrousels

Exemple de requête pour les reels

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

Exemple de requête pour les stories vidéo

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

Exemple de requête pour les carrousels vidéo

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

Exemple de réponse

{
   "id": "{ig-container-id}",
   "uri": "https://rupload.facebook.com/ig-api-upload/{api-version}/{ig-container-id}"
}

Étape 2 : télécharger la vidéo en utilisant le protocole d’importation avec reprise

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 :

  • Fichier stocké sur votre ordinateur
  • Fichier hébergé sur un serveur public, par exemple un CDN

Exemple de requête d’importation d’un fichier vidéo local

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.

  • Vérifiez que l’hôte est rupload.facebook.com.
  • La procédure d’importation de la vidéo est la même pour tous les types de contenus multimédias 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"

Exemple de requête d’importation d’une vidéo hébergée sur un serveur public

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"

Exemple de réponse

// 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\"}}"
  }
}

Étape 3 : (carrousel uniquement) créer un conteneur pour carrousel

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

Étape 4 : publier les contenus multimédias

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

Étape 5 : obtenir le statut contenu multimédia

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.

  • Le champ uploading_phase indique si le fichier a bien été importé et combien d’octets ont été transférés.
  • Le champ 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}"

Exemple de réponse du point de terminaison 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"
    }
  }
}

Tags de collaborateur·ice

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.

Exemple de requête

POST graph.facebook.com/17841400008460056/media
?image_url=https://www.example.com/images/bronzed-fonzes.jpg
&caption=#BronzedFonzes!
&collaborators= [‘username1’,’username2’]

Remarques

  • La valeur des collaborateur·ices doit être un tableau de chaînes.
  • Vous ne pouvez identifier que les utilisateur·ices disposant d’un compte Instagram public.
  • Vous ne pouvez pas ajouter plus de trois collaborateur·ices à un contenu multimédia.
  • Vous ne pouvez pas ajouter de collaborateur·ices à une Story.

Tags de lieu

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

Limites

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.

Tags de produits

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.

Tags d’utilisateur·ice

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.

Exemple de requête

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.

Remarques

  • La valeur de user_tags doit être une série d’objets au format JSON.
  • Vous ne pouvez identifier que les utilisateur·ices disposant d’un compte Instagram public.
  • L’objet doit contenir les trois propriétés (username, x et y) pour chaque utilisateur·ice.
  • Les valeurs 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.

Résolution des problèmes

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.

Erreurs

Reportez-vous à la référence des Codes d’erreur.