Guide de téléversement de l’API YouTube Data pour les développeurs (2026)

Guide de téléversement de l’API YouTube Data pour les développeurs (2026)

Comment fonctionne videos.insert, pourquoi les projets non vérifiés ne peuvent téléverser que des vidéos privées, la séquence de téléversement reprenable, et ce que coûte un videos.insert en quota.

L’API YouTube Data téléverse des vidéos via videos.insert, et deux faits documentés déterminent si elle est viable pour votre produit. Les vidéos téléversées depuis des projets API non vérifiés créés après le 28 juillet 2020 sont restreintes au mode privé jusqu’à ce que le projet passe un audit. Et videos.insert puise dans son propre quota de 100 appels par jour, distinct du pool de 10 000 unités partagé par le reste de l’API.

Lues ensemble, ces deux informations dressent un tableau clair : sans audit, vous ne pouvez pas publier publiquement, et sans augmentation de quota, vous ne pouvez pas publier souvent.

Que peut publier l’API YouTube Data, et qu’est-ce que le verrou d’audit ?

videos.insert téléverse un fichier vidéo et définit ses métadonnées : titre, description, tags, catégorie, et un privacyStatus de public, private ou unlisted. La taille de fichier maximale documentée est de 256 Go, et les types MIME acceptés sont video/* et application/octet-stream.

Le verrou, c’est l’audit. La documentation de Google indique que les vidéos téléversées depuis des projets API non vérifiés créés après le 28 juillet 2020 sont restreintes au mode privé jusqu’à ce que le projet passe un audit. En pratique, cela signifie que votre intégration fonctionne de bout en bout pendant le développement, produit un vrai identifiant vidéo, et que la vidéo est invisible à tout le monde sauf au propriétaire de la chaîne. Réussir l’audit est ce qui lève la restriction pour que privacyStatus: 'public' soit respecté.

Remarque : les informations ici ont été vérifiées par rapport à developers.google.com/youtube en date de septembre 2026. Les plateformes modifient ces informations sans préavis.

QuestionRéponse selon la documentation
Point de terminaison de téléversementPOST https://www.googleapis.com/upload/youtube/v3/videos
Scopesyoutube.upload, youtube, youtubepartner ou youtube.force-ssl
Taille de fichier maximale256 Go
Types MIMEvideo/*, application/octet-stream
Valeurs de confidentialitépublic, private, unlisted
Projets non vérifiésTéléversements restreints au mode privé jusqu’à audit du projet

Quel est le modèle d’authentification, et combien de temps dure l’audit ?

OAuth 2.0 standard avec accès hors ligne. Vous redirigez le propriétaire de la chaîne vers l’écran de consentement de Google en demandant https://www.googleapis.com/auth/youtube.upload, échangez le code contre un jeton d’accès et un jeton de rafraîchissement, et rafraîchissez le jeton d’accès à mesure qu’il expire.

Comme le scope de téléversement est un scope sensible, votre projet passe aussi par la vérification OAuth de Google en plus de l’audit de l’API YouTube. Ce sont deux examens distincts que l’on confond souvent : la vérification OAuth régit l’écran de consentement et le nombre d’utilisateurs pouvant l’accorder, l’audit YouTube régit si vos téléversements peuvent être autre chose que privés.

Nous n’avons trouvé aucun délai de traitement publié pour l’audit de l’API YouTube dans la documentation officielle, nous n’allons donc pas en indiquer un. Supposez qu’il se compte en semaines, pas en jours, et lancez-le avant d’en avoir besoin.

Quelle est la séquence de téléversement réelle ?

Les téléversements sont reprenables : vous ouvrez une session de téléversement, puis envoyez les octets vers l’URI de session. La vidéo est ensuite traitée de façon asynchrone du côté de YouTube après la fin de votre requête.

  1. Ouvrir une session reprenable. POST vers le point de terminaison de téléversement avec les métadonnées vidéo en JSON et uploadType=resumable. La réponse renvoie une URI de session dans l’en-tête Location. Notez que uploadType=resumable et l’URI de session Location relèvent de la mécanique générale de téléversement reprenable de Google plutôt que de quelque chose que documente la page de téléversement spécifique à YouTube, qui ne montre que la bibliothèque cliente Python.
  2. Envoyer les octets en PUT vers cette URI de session, en une seule requête ou par fragments. Le fragmentage permet de reprendre après une panne réseau au lieu de redémarrer un gros fichier depuis le début.
  3. Lire l’identifiant vidéo dans la réponse finale. Le téléversement est maintenant terminé.
  4. Interroger le statut de traitement. YouTube transcode de façon asynchrone. L’identifiant vidéo existe avant que la vidéo soit visionnable, et le traitement peut échouer après un téléversement réussi.
# 1. open the resumable session
curl -X POST \
  "https://www.googleapis.com/upload/youtube/v3/videos?uploadType=resumable&part=snippet,status" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "X-Upload-Content-Type: video/mp4" \
  -d '{"snippet":{"title":"Release notes","categoryId":"28"},
       "status":{"privacyStatus":"private"}}' -D -

# 2. PUT the bytes to the Location URI returned above
curl -X PUT "$SESSION_URI" \
  -H "Content-Type: video/mp4" --data-binary @video.mp4

# 3. then poll videos.list for processing status using the returned video id

Le propre guide de téléversement de Google est un exemple Python construit autour de MediaFileUpload avec resumable=True et un backoff exponentiel sur les nouvelles tentatives, et il indique clairement que le script d’exemple ne fait aucune gestion d’erreurs. Prenez cela au pied de la lettre : l’exemple est un point de départ, pas un modèle pour la production.

Remarque : les informations ici ont été vérifiées par rapport à developers.google.com/youtube en date de septembre 2026. Les plateformes modifient ces informations sans préavis.

Que coûte un téléversement en quota ?

C’est le chiffre qui met fin à la plupart des plans d’intégration YouTube, et il vaut la peine de le préciser exactement.

MéthodeCoût en quota
videos.insert1 unité, sur un pool dédié de 100 appels par jour
videos.list1 unité
thumbnails.set50 unités
videos.update50 unités

L’allocation par défaut, selon les termes de Google, est de « 100 appels search.list, 100 appels videos.insert, et 10 000 unités par jour combinées pour tous les autres points de terminaison ».

La contrainte déterminante sur la publication est donc un décompte, pas de l’arithmétique d’unités : 100 téléversements par projet par jour. Le pool de 10 000 unités est distinct et doit couvrir chaque interrogation de statut, lecture de métadonnées et définition de miniature autour de ces téléversements, ce qui est généreux en comparaison. Le quota se réinitialise à minuit heure du Pacifique. Un produit multi-locataire desservant plus d’une poignée de chaînes a besoin d’une demande d’augmentation de quota, qui est une démarche distincte auprès de Google.

D’anciens guides (et certains encore en ligne) indiquent que videos.insert coûte 1 600 unités sur le pool partagé de 10 000 unités, ce qui revenait à six téléversements par jour. Ce n’est plus ce que dit la documentation actuelle de Google sur les quotas, et il vaut la peine de vérifier tout budget construit sur cette base.

Remarque : les informations ici ont été vérifiées par rapport à developers.google.com/youtube en date de septembre 2026. Les plateformes modifient ces informations sans préavis.

Ce qui vous coûtera réellement trois semaines

  • Deux examens, pas un. La vérification OAuth pour le scope de téléversement sensible, et l’audit de l’API YouTube qui lève la restriction de téléversement privé. Aucun des deux ne publie de délai. Les deux bloquent le lancement.
  • Le quota, et la demande pour l’augmenter. 100 téléversements par projet par jour n’est pas un budget de production dès que vous publiez pour plus de quelques dizaines de chaînes. La demande d’augmentation est un formulaire, une justification et une attente.
  • Le transcodage avant même d’atteindre Google. Accepter une vidéo utilisateur arbitraire signifie normaliser le conteneur et le codec, générer une miniature, et conserver le fichier quelque part d’où vous pouvez diffuser 256 Go sans le mettre en mémoire tampon.
  • L’échec asynchrone après un téléversement réussi. C’est celui qui surprend le plus. Un 200 et un identifiant vidéo signifient que les octets sont arrivés, pas que la vidéo est en ligne. Le traitement peut échouer ensuite, et un téléversement rejeté se manifeste comme un statut de traitement, pas comme une erreur HTTP. Il vous faut un système d’interrogation, un état de publication processing, et un moyen de dire à un utilisateur que sa vidéo a échoué une heure après le succès de votre appel API.

Si vous prévoyez aussi de pousser la même vidéo verticale vers d’autres réseaux, la forme de ce travail est couverte dans republier des Reels Instagram vers YouTube Shorts et publier sur TikTok, Reels et Shorts en même temps. Chacune de ces plateformes a son propre audit, son propre modèle de quota et son propre mode d’échec asynchrone, ce qui est précisément le sujet.

En résumé

  • videos.insert téléverse vers https://www.googleapis.com/upload/youtube/v3/videos, 256 Go maximum, scope youtube.upload.
  • Les projets non vérifiés créés après le 28 juillet 2020 ne peuvent téléverser que des vidéos privées jusqu’à l’audit du projet.
  • Le flux est : ouvrir une session reprenable, envoyer les octets en PUT, puis interroger le statut, car le traitement est asynchrone et peut échouer après le succès du téléversement.
  • videos.insert coûte 1 unité sur un pool dédié de 100 appels par jour. 10 000 unités distinctes par jour couvrent tout le reste.
  • Aucun délai d’audit n’est publié. Lancez l’examen avant d’en avoir besoin.

Le faire une fois plutôt qu’une fois par plateforme

Le travail YouTube décrit ci-dessus est réel, et rien de tout cela ne se transpose à la plateforme suivante. Pinterest a un examen différent, TikTok a son propre audit de Content Posting API, et chacune a un pipeline média distinct. Cette répétition est ce que notre API élimine : BulkPublish publie sur 15 plateformes via un seul point de terminaison REST, avec l’OAuth, le rafraîchissement de jeton, la gestion des médias et le suivi de statut asynchrone gérés de notre côté. Les états de publication incluent processing et partial précisément parce qu’un 200 n’est pas une publication.

La documentation développeur liste les points de terminaison, et la page d’intégration de l’API REST couvre l’authentification et le cycle de vie des publications. Si vous n’avez besoin que de programmation plutôt que d’une intégration, comment programmer des vidéos YouTube couvre cela, et le compteur de caractères YouTube gratuit vérifie les titres et descriptions par rapport aux limites.

À lire aussi