Référence · API de réseaux sociaux pour les développeurs

Token d'accès Instagram et consorts : longue durée, refresh, et pourquoi ils expirent

Par Antoine Blanco··8 min de lecture

Ton token d'accès Instagram expire parce que Meta l'émet pour 60 jours et ne le prolonge que si tu le demandes. Facebook, LinkedIn, TikTok, X et YouTube ont chacun leur propre horloge et leur propre appel de rafraîchissement. Voici les vraies durées de vie, relevées dans la documentation de chaque plateforme le 12 octobre 2026, avec la requête de rafraîchissement pour chacune.

Ce qu'est vraiment un token d'accès Instagram

Il n'existe pas un token Instagram unique. Il y a deux parcours, et ils n'expirent pas de la même façon.

Avec Instagram API with Instagram Login, ton app envoie l'utilisateur sur Instagram, récupère un code d'autorisation et l'échange. La documentation de Meta sur le business login fixe les règles : le code d'autorisation est valable une heure et à usage unique, tu l'envoies en POST à https://api.instagram.com/oauth/access_token avec grant_type=authorization_code, et tu obtiens un token de courte durée. Ce token de courte durée, ce n'est pas lui que tu stockes. Tu l'échanges côté serveur :

curl -s -G https://graph.instagram.com/access_token \
  -d grant_type=ig_exchange_token \
  -d client_secret=$IG_APP_SECRET \
  -d access_token=$SHORT_LIVED_TOKEN

La réponse contient expires_in: 5183944, soit 60 jours moins quelques minutes. C'est ton token longue durée.

Avec Instagram API with Facebook Login, le compte est lié à une Page Facebook et tu travailles avec un token d'accès de Page à la place. Mêmes endpoints de publication, token différent, règles d'expiration différentes. Choisis un seul parcours par app.

Token d'accès longue durée sur Instagram : l'horloge des 60 jours et la règle des 24 heures

Un token Instagram longue durée n'est pas permanent. Il est renouvelable, ce qui n'est pas la même promesse. Tu le renouvelles avec un seul GET :

curl -s -G https://graph.instagram.com/refresh_access_token \
  -d grant_type=ig_refresh_token \
  -d access_token=$LONG_LIVED_TOKEN

Trois conditions s'appliquent, et toutes trois viennent de la même page Meta :

  1. Le token doit avoir au moins 24 heures. Le rafraîchir juste après l'échange échoue.
  2. Le token ne doit pas être déjà expiré. Meta est explicite : un token qui passe 60 jours sans rafraîchissement « ne peut plus être rafraîchi ».
  3. L'utilisateur doit toujours avoir accordé instagram_business_basic.

La condition 2, c'est là que les comptes meurent. Pas de délai de grâce, pas d'appel de récupération. Une fois les 60 jours écoulés, le seul retour possible, c'est le flow de login complet, ce qui veut dire que l'humain doit cliquer à nouveau. Le job de refresh n'est donc pas un bonus, c'est ce qui garde l'intégration en vie. Je le fais tourner à un rythme de quelques jours, pas de quelques semaines : un passage quotidien qui rafraîchit tout ce qui a plus de 30 jours te laisse 30 jours de marge pour un cron cassé, un déploiement raté ou des vacances.

Token d'accès de page Facebook : celui qui se comporte différemment

Un token de Page Facebook est dérivé, pas émis directement. Tu connectes l'admin, tu obtiens un token utilisateur, et tu appelles la Graph API pour obtenir le token de Page. Le guide des tokens d'accès de Meta donne le côté utilisateur en chiffres clairs : les tokens utilisateur de courte durée « durent généralement environ une à deux heures », les tokens utilisateur de longue durée « durent environ 60 jours », et les apps avec un accès Standard à la Marketing API ou les tokens System User obtiennent des tokens qui « n'expirent pas en fonction du temps ».

Pour le token de Page lui-même, ce même guide n'indique aucune durée de vie. Il dit qu'un token de Page est « propre à chaque combinaison Page, admin et app » et te renvoie vers l'Access Token Tool et la documentation sur l'expiration. Donc ne code pas une hypothèse en dur. Lis expires_at dans le debugger pour ta propre app et stocke-le : le comportement dépend du token dont tu l'as dérivé. L'affirmation répétée selon laquelle les tokens de Page n'expirent jamais ne vaut que pour certaines dérivations, et Meta déconseille de dépendre d'une durée de vie publiée.

Durée de vie des tokens sur six plateformes

Tous les chiffres ci-dessous viennent de la documentation développeur de chaque plateforme, lue le 12 octobre 2026. Quand une page ne publie aucun chiffre, la cellule le dit au lieu de deviner.

Plateforme Durée de vie du token d'accès Identifiant de rafraîchissement Endpoint de rafraîchissement Le piège
Instagram (Instagram Login) 60 jours Le token lui-même graph.instagram.com/refresh_access_token Doit avoir 24 h, mort à 60 jours
Facebook (utilisateur) 1 à 2 heures, puis environ 60 jours Échange avec le secret de l'app graph.facebook.com/oauth/access_token Durée de vie du token de Page non publiée
LinkedIn 60 jours Refresh token, 365 jours linkedin.com/oauth/v2/accessToken Le rafraîchissement programmatique est réservé aux partenaires MDP approuvés
TikTok 24 heures Refresh token, 365 jours open.tiktokapis.com/v2/oauth/token/ Un nouveau refresh_token peut revenir, tu dois le stocker
X Non publié sur la page des tokens Refresh token, nécessite offline.access api.x.com/2/oauth2/token Sans scope offline.access, aucun refresh, jamais
YouTube (Google) 1 heure Refresh token, sans expiration fixe oauth2.googleapis.com/token Meurt après 6 mois sans usage, 7 jours si ton app est en Testing

Deux lignes méritent plus qu'une cellule.

La page de LinkedIn sur les refresh tokens indique que le refresh programmatique est disponible « pour tous les partenaires approuvés du Marketing Developer Platform (MDP) ». Si ton app n'en fait pas partie, tu obtiens un token d'accès de 60 jours et pas de refresh token, et le membre doit réautoriser à la main. L'horloge du refresh token lui-même ne repart pas non plus à zéro : l'exemple de LinkedIn le montre, 365 jours au jour 1, 306 au jour 59, plus que 5 au jour 360. Un refresh te donne un nouveau token d'accès, jamais une année de plus.

La page OAuth 2.0 de Google liste les cas où un refresh token cesse de fonctionner, et celui qui piège les petits projets, c'est le statut de publication : une app externe encore en Testing reçoit des refresh tokens « qui expirent au bout de 7 jours ». Il y a aussi un plafond de 100 refresh tokens par compte Google et par client ID, et créer le 101e invalide silencieusement le plus ancien. Si tu génères un token à chaque exécution au lieu d'en réutiliser un, tu vas tomber dessus.

Rafraîchir un token d'accès sur une API sociale : la méthode qui marche

Les appels diffèrent, la logique reste la même. Quatre règles valent pour les six plateformes.

Stocke la date d'expiration, pas seulement le token. Une ligne avec access_token, refresh_token, expires_at et refresh_expires_at permet à un seul cron job de poser une seule question : qu'est-ce qui expire dans les 7 prochains jours ? Sans expires_at, tu en es réduit à attendre un 401.

Rafraîchis tôt et à intervalles fixes. Le rafraîchissement au 401 échoue sur la seule plateforme où il ne peut pas marcher : Instagram, où un token expiré est irrécupérable. L'âge minimum de 24 heures imposé par Instagram signifie aussi que tu ne peux pas rafraîchir à la demande à n'importe quel moment.

Enregistre toujours ce qui revient. La réponse de refresh de TikTok peut renvoyer un nouveau refresh_token avec un nouveau refresh_expires_in, et la doc de gestion des tokens de TikTok dit d'utiliser la nouvelle valeur si elle a changé. Une intégration qui rejoue sans cesse le refresh token d'origine marche, jusqu'au jour où elle ne marche plus.

Traite la reconnexion comme une fonctionnalité produit, pas comme un cas d'erreur. Les tokens sont révoqués quand l'utilisateur change son mot de passe alors que des scopes Gmail y sont attachés, retire ton app, ou quitte l'entreprise dont il administrait la Page. La question n'est pas de savoir si tu peux l'éviter, c'est à quelle vitesse le propriétaire du compte l'apprend. La documentation de X sur les tokens rappelle que tout se joue dès l'autorisation : sans offline.access dans les scopes d'origine, aucun refresh token n'est jamais émis, et la seule solution est un nouvel écran de consentement.

Ce que je fais à la place

J'ai arrêté d'écrire cette couche. PlugKit connecte les comptes en un seul appel, GET /connect/{platform}?profileId=…, renvoie une authUrl que tu ouvres, et stocke et rafraîchit les tokens lui-même. La documentation sur les profils et les comptes précise bien que les réponses de compte exposent platform, username, status et profileId, et jamais le token d'accès, et c'est tout l'intérêt : il n'y a aucun token dans ma base de données qui puisse fuiter ou que j'oublie de renouveler.

Ce qui compte plus que le rafraîchissement, c'est le signal d'échec. La liste des webhooks de PlugKit inclut account.disconnected, qui se déclenche quand un compte est déconnecté ou que son token cesse de fonctionner. C'est l'événement dont tu as vraiment besoin, parce que toutes les architectures ci-dessus finissent de la même façon : un humain doit cliquer de temps en temps, et ton job, c'est de le lui demander le jour même plutôt que trois semaines plus tard, quand les posts se sont arrêtés sans bruit.

Là où PlugKit n'est pas la réponse : si tu gères un seul compte sur une seule plateforme, le job de rafraîchissement ci-dessus fait 40 lignes et tu n'as pas besoin de nous. Si tu as besoin d'une plateforme qu'on ne supporte pas, tu écris le flow OAuth de toute façon. Et les coûts refacturés sont bien réels : les appels à l'API X sont facturés au prix coûtant, $0.005 par lecture et $0.015 par publication, en plus du forfait.

Pour ce qui repose sur ces tokens, lis le guide 2026 des API de réseaux sociaux et le guide de la Graph API Instagram. Le tableau des rate limits est l'autre moitié du problème. Si c'est un agent qui publie, MCP ou API REST pour ton agent est la décision à prendre avant celle-ci.

PlugKit coûte 49 $ par mois pour 5 comptes connectés, résiliable à tout moment, ou 97 $ pour 30. L'essai est gratuit pendant 7 jours, sans carte, avec un compte connecté, et le compteur démarre quand tu connectes ce compte.

FAQ

Pourquoi mon token d'accès Instagram n'arrête pas d'expirer ?

Parce qu'un token Instagram longue durée dure 60 jours et qu'il est renouvelable, pas permanent. Tu dois appeler refresh_access_token avec grant_type=ig_refresh_token avant la fin de ces 60 jours. Le token doit aussi avoir au moins 24 heures pour être rafraîchi, et une fois expiré, la documentation de Meta indique qu'il ne peut plus être rafraîchi : l'utilisateur doit alors se reconnecter.

Combien de temps dure un token d'accès longue durée sur Instagram ?

60 jours. La réponse de l'échange renvoie expires_in: 5183944 secondes, et chaque refresh réussi te redonne 60 jours à partir de ce moment.

Est-ce qu'un token d'accès de page Facebook expire ?

Le guide des tokens d'accès Facebook Login de Meta ne publie aucune durée de vie pour les tokens de Page. Il confirme 1 à 2 heures pour les tokens utilisateur de courte durée et environ 60 jours pour ceux de longue durée, et te dit de vérifier les tokens de Page et d'app dans l'Access Token Tool. Lis expires_at pour ta propre app au lieu de faire confiance à un article de blog, y compris celui-ci.

Est-ce que je peux rafraîchir un token sur toutes les API sociales ?

Non. TikTok, LinkedIn, Google et X utilisent tous des refresh tokens, mais LinkedIn réserve le refresh programmatique aux partenaires approuvés du Marketing Developer Platform, et X ne délivre un refresh token que si l'autorisation initiale a demandé le scope offline.access. Quand le refresh n'est pas disponible, la seule voie est une nouvelle autorisation par le propriétaire du compte.

Que deviennent les posts programmés quand un token meurt ?

Ils échouent au moment de la publication, généralement avec un 401 renvoyé par la plateforme, et sur la plupart des stacks, rien ne prévient l'utilisateur. Abonne-toi à un événement de déconnexion et alerte le propriétaire du compte le jour même. PlugKit envoie account.disconnected quand un compte est déconnecté ou que son token cesse de fonctionner.

AB
Antoine BlancoFondateur de PlugKit. Gère ses propres comptes Instagram, YouTube et X via l'API et le serveur MCP décrits ici.

Un plug pour chaque plateforme que ton agent touche

49 $ par mois pour 5 comptes connectés, résiliable à tout moment. Toutes les fonctionnalités dans tous les forfaits.

Récupère ta clé API →
Français ▾