API Content Posting de TikTok : guide pour développeurs

API Content Posting de TikTok : guide pour développeurs

Ce que l’API Content Posting de TikTok peut publier, pourquoi les applications non auditées ne peuvent publier qu’en privé, la séquence init et poll, et les limites de débit documentées.

L’API Content Posting de TikTok publie du contenu vidéo et photo au nom d’un créateur, via un appel init, un téléversement ou une récupération d’URL, et une interrogation de statut. Le fait le plus important avant de commencer : tant que votre client n’a pas passé l’audit de TikTok, tout ce que vous publiez est limité à un affichage privé. Vous pouvez construire et tester toute l’intégration sans pouvoir faire une seule publication publique.

Que peut publier l’API Content Posting, et qu’est-ce qui est bloqué ?

L’API couvre la publication directe de contenu vidéo et photo, plus un parcours brouillon qui envoie le contenu dans la boîte de réception du créateur pour qu’il le finalise. Les points de terminaison sont POST /v2/post/publish/video/init/ pour la vidéo, POST /v2/post/publish/content/init/ pour les photos, et POST /v2/post/publish/status/fetch/ pour vérifier le résultat. Il existe aussi POST /v2/post/publish/creator_info/query/, que vous êtes censé appeler d’abord pour savoir ce que permet le compte du créateur.

Le point de blocage, c’est l’audit. Les propres termes de TikTok : « Tout contenu publié par des clients non audités sera limité à un mode d’affichage privé. » La documentation est tout aussi directe sur la page de référence de la publication directe, où les clients non audités « ne peuvent publier que sur un compte privé », la tentative étant bloquée à /publish/video/init/.

PointCe que dit la documentation
Portée requisevideo.publish, approuvée pour votre application et autorisée par l’utilisateur
Applications non auditéesContenu limité au mode d’affichage privé
Niveaux de confidentialitéPUBLIC_TO_EVERYONE, MUTUAL_FOLLOW_FRIENDS, FOLLOWER_OF_CREATOR, SELF_ONLY
Source du médiaFILE_UPLOAD ou PULL_FROM_URL
Récupération par URLNécessite de vérifier la propriété du préfixe d’URL ou du domaine

SELF_ONLY est la valeur avec laquelle vous vivrez pendant le développement. Il convient aussi de noter que l’ensemble des niveaux de confidentialité qu’un créateur donné peut utiliser n’est pas fixe : vous interrogez creator_info et utilisez ce qui en ressort, plutôt que de coder en dur PUBLIC_TO_EVERYONE en espérant que ça passe.

Remarque : les chiffres de cet article ont été vérifiés par rapport à la documentation de l’API Content Posting de TikTok en septembre 2026. Les plateformes modifient ces éléments sans préavis.

Comment fonctionne l’authentification, et combien de temps dure l’audit ?

OAuth standard pour obtenir un jeton d’accès utilisateur portant video.publish. Deux approbations s’empilent l’une sur l’autre : votre application doit se voir accorder la portée, et le créateur individuel doit l’autoriser au moment de la connexion. Aucune des deux seules ne suffit.

L’audit est encore une étape distincte. Il intervient après que vous disposez d’une intégration fonctionnelle, car TikTok s’attend à ce que vous ayez testé le flux avant de le demander. TikTok n’indique pas de durée de revue dans la documentation de l’API Content Posting, donc traitez ce délai comme non publié et inconnu. Planifiez votre date de lancement autour d’une approbation que vous ne contrôlez pas.

Quelle est la séquence d’appels de publication ?

  1. POST /v2/post/publish/creator_info/query/ pour vérifier les niveaux de confidentialité autorisés du créateur et ses paramètres d’interaction.
  2. POST /v2/post/publish/video/init/ avec post_info (titre, privacy_level, les indicateurs de désactivation, video_cover_timestamp_ms, les bascules de contenu commercial) et source_info.
  3. Si source vaut FILE_UPLOAD, envoyez les octets par PUT vers l’upload_url renvoyée par init, en blocs correspondant au chunk_size et au total_chunk_count que vous avez déclarés. Si source vaut PULL_FROM_URL, TikTok récupère le fichier depuis votre domaine vérifié à la place.
  4. POST /v2/post/publish/status/fetch/ avec le publish_id obtenu à l’init, et interrogez régulièrement.
  5. Considérez PUBLISH_COMPLETE comme un succès et FAILED comme un état terminal. Rien avant cela n’est une publication publiée.
# 1. init a direct post
curl -X POST "https://open.tiktokapis.com/v2/post/publish/video/init/" \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{
    "post_info": { "title": "Ship it.", "privacy_level": "SELF_ONLY" },
    "source_info": { "source": "PULL_FROM_URL",
                     "video_url": "https://verified.example.com/clip.mp4" }
  }'
# -> { "data": { "publish_id": "v_pub_url~..." } }

# 2. poll
curl -X POST "https://open.tiktokapis.com/v2/post/publish/status/fetch/" \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{ "publish_id": "v_pub_url~..." }'

Les valeurs de statut documentées sont PROCESSING_UPLOAD (parcours de téléversement de fichier), PROCESSING_DOWNLOAD (parcours de récupération par URL), SEND_TO_USER_INBOX (brouillon remis au créateur), PUBLISH_COMPLETE et FAILED.

Quelles sont les limites de débit ?

Deux chiffres sont énoncés clairement dans la documentation de référence, tous deux par jeton d’accès utilisateur :

  • Init de publication directe : 6 requêtes par minute.
  • Interrogation de statut : 30 requêtes par minute.

Six inits par minute par utilisateur est généreux pour un outil de programmation et serré pour un import en masse. Trente interrogations de statut par minute semble amplement suffisant jusqu’à ce que vous ayez des centaines de publications en cours de traitement partageant un même mécanisme d’interrogation, à quel moment vous avez besoin d’un recul progressif par jeton plutôt que d’une boucle globale.

Nous n’avons pas pu confirmer de quota quotidien de publication documenté par utilisateur, de taille de fichier vidéo maximale ni de durée maximale à partir des pages de l’API Content Posting que nous avons consultées. La réponse creator info est la source prévue pour le plafond de durée vidéo par compte, donc lisez-la plutôt que de coder un chiffre en dur.

Remarque : les chiffres de cet article ont été vérifiés par rapport à la documentation de l’API Content Posting de TikTok en septembre 2026. Les plateformes modifient ces éléments sans préavis.

Qu’est-ce qui vous coûtera vraiment trois semaines ?

L’audit. C’est le gros morceau, et il diffère de la revue Instagram ou LinkedIn d’une façon précise : vous pouvez livrer du code, connecter des comptes et publier, tout en ayant chaque publication invisible. Rien dans vos journaux ne semblera anormal. Ne laissez pas une partie prenante voir un PUBLISH_COMPLETE réussi en préproduction et en conclure que la fonctionnalité est terminée.

La vérification de domaine pour PULL_FROM_URL. Laisser TikTok récupérer votre média est bien plus simple que des téléversements par blocs, mais cela exige de prouver que vous possédez le préfixe d’URL. Si votre média se trouve sur un espace de stockage avec un nom d’hôte généré, vous devrez ajouter un domaine personnalisé à votre stockage avant de pouvoir utiliser ce chemin simple.

Le renouvellement de jeton. Les jetons d’accès TikTok se renouvellent avec un jeton de rafraîchissement, et une connexion expirée signifie que le créateur doit se reconnecter. Comme pour chaque plateforme, le travail n’est pas l’appel de renouvellement en lui-même, c’est la machine à états et la notification en cas d’échec du renouvellement.

La gestion des échecs asynchrones. Un init qui renvoie un publish_id n’est pas une publication. Un téléversement réussi non plus. Seul PUBLISH_COMPLETE l’est, et FAILED peut survenir plusieurs minutes plus tard pour des raisons comme un encodage non pris en charge. Stockez le publish_id, conservez un état processing, et réconciliez. Notre guide de l’API de programmation pour les réseaux sociaux couvre le modèle d’états nécessaire.

Si vous rédigez aussi les légendes, le compteur de caractères TikTok vous dira où le titre est coupé.

En bref

  • Init, téléversement ou récupération, puis interrogation de statut. PUBLISH_COMPLETE est le seul succès.
  • Les clients non audités ne peuvent publier qu’en privé. L’audit est requis pour les publications publiques.
  • La portée video.publish nécessite l’approbation pour votre application et le consentement du créateur.
  • 6 requêtes d’init par minute et 30 interrogations de statut par minute, par jeton utilisateur.
  • Les durées de revue et d’audit ne sont pas publiées par TikTok.

Publier sur TikTok sans porter le coût de l’audit

Un moyen de contourner ce coût de mise en place est de publier via une API qui a déjà passé cette étape. BulkPublish couvre TikTok aux côtés de 14 autres plateformes via une seule API REST, donc l’init, le téléversement, l’interrogation et la nouvelle tentative sont pris en charge de notre côté, et votre appel se résume à une seule requête de création de publication avec un identifiant de canal. Le même appel cible Instagram Reels et YouTube Shorts si vous republiez en parallèle. Les points de terminaison sont documentés sur /fr/developers/, et la présentation de l’intégration REST se trouve sur /fr/integrations/rest-api/.

À lire aussi