Outils

· 11 min de lecture

Lire en anglais

Automatiser Instagram avec n8n : publier un post pas à pas

Publiez sur Instagram avec n8n : accès Meta, jeton, scénario en trois nœuds, carrousel, Reel, story et la limite de 100 publications par 24 heures.

Par Kreatoai

Automatiser Instagram avec n8n est possible, mais n8n ne parle pas à Instagram tout seul : il envoie des requêtes à l'API de Meta, et c'est Meta qui exige un compte professionnel, une application et un jeton d'accès. Voici le scénario complet pour publier un post, nœud par nœud, avec les accès à obtenir avant de commencer.

Dans ce guide :

  • ce que n8n fait, et ce qui reste de la responsabilité de Meta ;
  • les accès à obtenir, l'identifiant à créer et le jeton à renouveler ;
  • le scénario en trois nœuds, puis les variantes carrousel, Reel et story ;
  • les limites à connaître avant de laisser tourner le scénario.

Ce que n8n fait avec Instagram, et ce qu'il laisse à Meta

n8n est un outil de scénarios automatiques : vous reliez des blocs appelés nœuds (un déclencheur, puis des actions) et le scénario tourne sans vous. Pour Instagram, n8n transporte vos requêtes, mais ne remplace aucun accès Meta.

La documentation du nœud Facebook Graph API décrit un nœud générique : vous choisissez l'hôte, la méthode (GET, POST ou DELETE), la version de l'API, puis un « node » comme /<page-id>/feed et un « edge ». Cette page ne parle pas d'Instagram. Le nœud HTTP Request, lui, interroge n'importe quel service qui a une API REST, c'est-à-dire une porte technique ouverte aux logiciels.

Concrètement, vous avez donc deux façons de faire un « n8n Instagram » :

  • le nœud Facebook Graph API, quand vous vous connectez par Facebook ;
  • le nœud HTTP Request, utilisable dans tous les cas, et indispensable avec la connexion Instagram, comme on le voit plus loin.

Si vous cherchiez un nœud Instagram tout prêt avec un bouton « publier », ce n'est donc pas ce que la documentation de n8n décrit : on appelle les adresses de l'API de Meta. Le reste de ce guide donne ces adresses.

Les accès à obtenir avant de publier avec l'API Instagram

Trois choses sont nécessaires : un compte professionnel, une application Meta et un jeton d'accès. Dans l'ordre, ce sont les trois premières étapes du scénario, avant même d'ouvrir n8n.

Schéma en quatre étapes : un compte professionnel, une application Meta, l'accès avancé quand les comptes ne sont pas les vôtres, puis un jeton valable 60 jours.
L'accès avancé n'est nécessaire que pour servir des comptes que vous ne gérez pas ; pour le vôtre, l'accès standard suffit.

Pour le compte, la documentation Meta sur la publication de contenu exige un compte professionnel Instagram. Si la Page Facebook liée à ce compte demande une autorisation de publication (la Page Publishing Authorization), la publication reste bloquée tant que cette étape n'est pas terminée.

Pour l'application, Meta propose trois configurations. La connexion Instagram sert des comptes professionnels sans Page Facebook liée. La connexion Facebook exige la Page liée. La troisième, la connexion unifiée, est celle que Meta recommande pour les nouvelles intégrations. Les permissions changent selon le choix :

Connexion Jeton Permissions de publication
Instagram Login Jeton utilisateur Instagram instagram_business_basic, instagram_business_content_publish
Facebook Login Jeton de Page Facebook instagram_basic, instagram_content_publish, pages_read_engagement

Source du tableau : la page de publication de Meta.

Reste le niveau d'accès. Meta explique que l'accès standard est le niveau par défaut, pour les applications utilisées par des personnes qui y ont un rôle. Pour servir des comptes que vous ne gérez pas, par exemple ceux de clients, il faut l'accès avancé, qui passe par la revue d'application (App Review) et la vérification d'entreprise (Business Verification). Pour publier sur votre propre compte, le niveau standard suffit donc pour commencer. Pour le détail des revues et des quotas de chaque réseau, voyez publier automatiquement sur plusieurs réseaux : les vraies limites.

Créer l'identifiant Instagram dans n8n

Dans n8n, un identifiant (« credential » en anglais) range le jeton une fois pour toutes : il n'apparaît plus dans les nœuds ni dans l'export du scénario. Le bon type d'identifiant dépend de la connexion choisie plus haut.

Avec la connexion Facebook, la page d'aide sur les identifiants du nœud Facebook Graph API décrit deux méthodes : OAuth2, où vous saisissez l'identifiant client et le secret de votre application dans n8n, ou un jeton d'accès d'application, généré dans l'explorateur de l'API Graph et collé dans le champ Access Token. La même page précise qu'en mode développement, seules les personnes qui ont un rôle sur l'application (administrateur, développeur ou testeur) peuvent se connecter ou générer des jetons.

Avec la connexion Instagram, le nœud Facebook Graph API ne convient pas : il n'offre que les hôtes graph.facebook.com et graph-video.facebook.com, alors que Meta indique que la connexion Instagram utilise uniquement graph.instagram.com. On passe alors par un nœud HTTP Request. Les exemples de Meta envoient le jeton dans un en-tête Authorization: Bearer <jeton>, ce que n8n sait faire avec un identifiant de type Header Auth.

  1. Dans n8n, ouvrez Credentials, puis créez un identifiant Header Auth.
  2. Donnez-lui le nom Authorization et la valeur Bearer suivie de votre jeton.
  3. Dans chaque nœud HTTP Request du scénario, choisissez cet identifiant.

Le jeton demande de l'entretien. Meta précise qu'un jeton longue durée est valable 60 jours, qu'on obtient en échangeant un jeton court. Il se renouvelle par une requête GET vers https://graph.instagram.com/refresh_access_token avec grant_type=ig_refresh_token, à condition qu'il ait au moins 24 heures et ne soit pas expiré. Et un jeton qui n'a pas été renouvelé pendant 60 jours expire pour de bon. Prévoyez donc un petit second scénario, déclenché une fois par mois, qui renouvelle le jeton et met l'identifiant à jour.

Le scénario n8n pour publier un post Instagram, nœud par nœud

Le scénario tient en trois nœuds : un déclencheur, la création du conteneur, puis la publication. Instagram publie toujours en deux temps : on dépose d'abord le média dans un conteneur, puis on demande sa diffusion.

Schéma en trois étapes : un déclencheur Schedule lance le scénario, une requête crée le conteneur du média, une seconde requête publie ce conteneur sur Instagram.
Le conteneur renvoyé par la première requête est l'identifiant à passer, tel quel, à la seconde.
  1. Le déclencheur. Le nœud Schedule Trigger lance le scénario à l'heure voulue : toutes les heures, tous les jours à une heure fixe, ou selon une expression cron, par exemple 0 6 * * * pour 6 heures chaque matin. Il utilise le fuseau du scénario, sinon celui de l'instance n8n (par défaut America/New York en auto-hébergé), et le scénario doit être enregistré et publié pour tourner. Vous pouvez aussi partir d'un tableur ou d'un flux RSS, pour publier ce qu'un autre outil prépare.
  2. Le conteneur. Un nœud HTTP Request envoie un POST vers /<IG_ID>/media, avec dans un corps JSON l'adresse publique de l'image dans image_url (ou video_url pour une vidéo) et le texte dans caption. La réponse contient l'identifiant du conteneur. C'est ce que Meta décrit dans sa documentation.
  3. La publication. Un second nœud HTTP Request envoie un POST vers /<IG_ID>/media_publish, avec creation_id égal à l'identifiant du conteneur. La réponse contient l'identifiant du post publié.

Dans le corps JSON du deuxième nœud, l'expression {{ $json.id }} reprend l'identifiant renvoyé par le nœud précédent. Si vous préférez ne pas tout saisir à la main, l'option Import cURL du nœud HTTP Request charge une commande curl dans les champs : collez-y l'exemple de Meta, puis remplacez les valeurs. Les chiffres et les booléens sont importés comme du texte, donc passez en mode « Using JSON » pour les garder tels quels.

Pour une légende qui vient d'un nœud précédent (texte écrit par une IA, ligne d'un tableur), protégez-la avec JSON.stringify dans l'expression : sans cela, un retour à la ligne ou un guillemet casse le JSON et la requête échoue.

Carrousel, Reel et story : ce que change chaque format

Le scénario reste le même, seul le conteneur change. Pour un carrousel (n8n Instagram carousel), la documentation de Meta demande de créer d'abord un conteneur par image avec is_carousel_item à true, puis un conteneur parent avec media_type=CAROUSEL et children, une liste de 20 identifiants au plus. C'est ce conteneur parent que vous publiez avec media_publish.

Pour un Reel, c'est media_type=REELS avec une video_url. Pour une story, media_type=STORIES. Ces deux formats suivent le même principe : conteneur, puis publication. Dans un scénario de Reels automatisés avec n8n, une vidéo plus lourde peut mettre du temps à être traitée : le scénario doit donc lire le statut du conteneur avant de publier (voir la section sur les limites).

Format Valeur de media_type Média attendu
Photo non précisée image_url, en JPEG
Carrousel CAROUSEL jusqu'à 20 conteneurs dans children
Reel REELS video_url
Story STORIES image_url ou video_url

Source : la page de publication de Meta. Si votre question est de savoir comment une story se programme à la main, depuis Meta Business Suite, ce n'est pas le même chemin : n8n passe par l'API.

Publier aussi sur une Page Facebook avec n8n

Pour un post Facebook depuis n8n, le nœud Facebook Graph API est fait pour cela : son exemple de documentation vise /<page-id>/feed. Il suffit d'une méthode POST, de ce « node » et d'un message dans les champs de la requête.

Le même scénario peut donc finir par deux nœuds en parallèle : l'un publie sur Instagram, l'autre sur la Page Facebook, avec le même texte et la même image. Attention aux différences : Facebook publie sur une Page, jamais sur un profil personnel, et ses permissions ne sont pas celles d'Instagram. Les règles des Pages sont détaillées dans programmer une publication Facebook.

Pour programmer à l'avance côté Instagram, le plus simple reste le déclencheur de n8n : le scénario tourne à l'heure choisie et publie aussitôt. Si vous préférez les outils de Meta, les trois chemins possibles sont dans planifier une publication sur Instagram.

Les limites à lire avant de lancer le scénario

Cinq règles de Meta font échouer la plupart des scénarios : le plafond de publications, le format d'image, la durée de vie du conteneur, le statut à lire et le jeton.

Schéma en quatre cartes des limites de publication Instagram par API : 100 publications par 24 heures, JPEG uniquement, conteneur valable 24 heures, statut à lire avant de publier.
Le plafond se lit avec content_publishing_limit, le statut avec status_code : deux requêtes GET qui évitent d'échouer à l'aveugle.
  • Le plafond. Meta fixe le maximum à 100 publications par API sur une période glissante de 24 heures, un carrousel comptant pour une. La section du même document sur les carrousels parle pourtant de 50 publications par 24 heures : la page se contredit, alors comptez sur la plus basse si vous publiez beaucoup. Une requête GET sur /<IG_ID>/content_publishing_limit renvoie l'usage en cours.
  • Le format. Seul le JPEG est accepté pour les images : un PNG ou un WebP envoyé tel quel peut être refusé. Convertissez avant d'envoyer.
  • La durée de vie. Un conteneur qui n'est pas publié dans les 24 heures passe à l'état EXPIRED, d'après la même page. Créez-le et publiez-le dans le même scénario.
  • Le statut. Si media_publish ne renvoie pas d'identifiant, Meta demande de lire GET /<IG_CONTAINER_ID>?fields=status_code une fois par minute, pendant cinq minutes au plus. Les valeurs sont EXPIRED, ERROR, FINISHED, IN_PROGRESS et PUBLISHED. Dans n8n, un nœud Wait d'une minute suivi d'un test sur status_code fait ce travail.
  • Le jeton. Voir plus haut : 60 jours, à renouveler.

Le contenu doit en outre être une image ou une vidéo hébergée à une adresse publique, celle que vous donnez à image_url. Et pour que le scénario ne se contente pas d'échouer en silence, branchez un nœud d'alerte (courriel, messagerie) sur la sortie « erreur » de chaque nœud HTTP Request.

Une seule requête pour tous les réseaux

Ce scénario ne publie que sur Instagram. Chaque réseau supplémentaire (TikTok, YouTube, LinkedIn) ajoute son application, ses permissions et son jeton, comme pour TikTok.

Kreatoai évite ces étapes : il publie sur Instagram, les Pages Facebook, TikTok, les profils LinkedIn personnels et YouTube Shorts, tout de suite ou à l'heure choisie. Depuis n8n, une seule requête HTTP à son API publique publie sur plusieurs réseaux, sans application à créer ni revue à passer, avec une clé de reprise qui évite les doubles publications ; un agent IA de n8n peut aussi publier par le serveur MCP, avec le nœud MCP Client Tool. Dix publications sont offertes chaque mois, sans carte bancaire. Les réglages sont dans le guide n8n.

À retenir

  • n8n n'a pas de bouton « publier sur Instagram » : il appelle l'API de Meta avec le nœud HTTP Request, ou le nœud Facebook Graph API avec la connexion Facebook.
  • Il faut un compte Instagram professionnel, une application Meta et un jeton d'accès longue durée, valable 60 jours et à renouveler.
  • Le scénario tient en trois nœuds : un déclencheur, un POST vers /media qui crée le conteneur, puis un POST vers /media_publish.
  • Un carrousel, un Reel et une story suivent le même principe, avec CAROUSEL, REELS ou STORIES comme valeur de media_type.
  • Meta plafonne l'API à 100 publications par 24 heures glissantes, n'accepte que le JPEG pour les images et fait expirer un conteneur non publié au bout de 24 heures.
  • Pour publier sur plusieurs réseaux sans créer une application par réseau, une API unique appelée depuis le même nœud HTTP Request remplace tout le montage.

Questions fréquentes

Faut-il une Page Facebook pour publier sur Instagram avec n8n ?
Cela dépend de la connexion choisie. Avec Instagram Login, Meta indique que l'API sert des comptes professionnels sans Page Facebook liée, alors qu'avec Facebook Login la Page liée est obligatoire. Dans les deux cas, le compte Instagram doit être professionnel.
Que faire quand le jeton Instagram de mon scénario n8n expire ?
Un jeton longue durée vaut 60 jours et se renouvelle avant son expiration, à condition d'avoir au moins 24 heures. Un jeton qui n'a pas été renouvelé pendant 60 jours expire pour de bon : il faut alors refaire la connexion. Un second scénario n8n planifié chaque mois peut appeler le renouvellement à votre place.
Pourquoi ma publication reste-t-elle en cours de traitement ?
Après la création du conteneur, la publication peut ne pas répondre tout de suite. Meta demande alors de lire le statut du conteneur une fois par minute, pendant cinq minutes au plus : FINISHED veut dire prêt à publier, IN_PROGRESS veut dire encore en traitement, ERROR et EXPIRED veulent dire qu'il faut recommencer.
Comment faire partir un post Instagram à une heure précise avec n8n ?
Le nœud Schedule Trigger lance le scénario à l'heure d'un calendrier ou d'une expression cron, dans le fuseau du workflow. Le scénario doit être enregistré et publié, et n8n doit rester allumé : la publication part au moment où le scénario tourne.
Peut-on publier sur Instagram depuis n8n sans créer d'application Meta ?
Oui, en passant par une API qui détient déjà ces accès. Kreatoai publie sur Instagram, les Pages Facebook, TikTok, les profils LinkedIn personnels et YouTube Shorts : une seule requête de son API publique, appelée depuis un nœud HTTP Request de n8n, suffit, sans application à créer ni revue à passer.

Faites-le faire à votre place

Kreatoai publie et programme vos posts sur tous vos réseaux, depuis votre tableau de bord ou en le demandant à ChatGPT et à Claude, et son agent répond à vos messages privés. Dix publications offertes chaque mois, sans carte bancaire.

Essayer gratuitement