De YouTube Data API uploadt video’s via videos.insert, en twee gedocumenteerde feiten bepalen of het haalbaar is voor jouw product. Video’s geüpload vanuit niet-geverifieerde API-projecten die na 28 juli 2020 zijn aangemaakt, zijn beperkt tot privémodus totdat het project een audit doorstaat. En videos.insert put uit een eigen quotabucket van 100 aanroepen per dag, los van de pool van 10.000 eenheden die de rest van de API deelt.
Lees die twee samen en het plaatje is duidelijk: zonder audit kun je niet publiekelijk publiceren, en zonder quotaverhoging kun je niet vaak publiceren.
Wat kan de YouTube Data API publiceren, en wat is de audit-poort?
videos.insert uploadt een videobestand en stelt de metadata in: titel, beschrijving, tags, categorie, en een privacyStatus van public, private of unlisted. De gedocumenteerde maximale bestandsgrootte is 256 GB, en de geaccepteerde MIME-types zijn video/* en application/octet-stream.
De poort is de audit. De documentatie van Google stelt dat video’s geüpload vanuit niet-geverifieerde API-projecten die na 28 juli 2020 zijn aangemaakt, beperkt zijn tot privémodus totdat het project een audit ondergaat. In de praktijk betekent dat: je integratie werkt end-to-end tijdens de ontwikkeling, produceert een echte video-ID, en de video is onzichtbaar voor iedereen behalve de kanaaleigenaar. Het doorstaan van de audit is wat de beperking opheft zodat privacyStatus: 'public' wordt gerespecteerd.
Let op: deze cijfers zijn geverifieerd tegen developers.google.com/youtube per september 2026. Platformen wijzigen dit zonder aankondiging.
| Vraag | Antwoord uit de documentatie |
|---|---|
| Upload-endpoint | POST https://www.googleapis.com/upload/youtube/v3/videos |
| Scopes | youtube.upload, youtube, youtubepartner of youtube.force-ssl |
| Max bestandsgrootte | 256 GB |
| MIME-types | video/*, application/octet-stream |
| Privacywaarden | public, private, unlisted |
| Niet-geverifieerde projecten | Uploads beperkt tot privé totdat het project is geaudit |
Wat is het authenticatiemodel, en hoe lang duurt de audit?
Standaard OAuth 2.0 met offline toegang. Je stuurt de kanaaleigenaar naar het toestemmingsscherm van Google waar https://www.googleapis.com/auth/youtube.upload wordt aangevraagd, wisselt de code om voor een toegangstoken en een refresh token, en ververst het toegangstoken zodra het verloopt.
Omdat de upload-scope een gevoelige scope is, doorloopt je project naast de YouTube API-audit ook de OAuth-verificatie van Google. Dit zijn twee aparte beoordelingen en mensen verwarren ze vaak: OAuth-verificatie regelt het toestemmingsscherm en hoeveel gebruikers het kunnen verlenen, de YouTube-audit regelt of je uploads iets anders dan privé kunnen zijn.
We konden geen gepubliceerde doorlooptijd voor de YouTube API-audit vinden in de officiële documentatie, dus die gaan we niet noemen. Ga uit van weken, geen dagen, en start de aanvraag voordat je hem nodig hebt.
Wat is de daadwerkelijke uploadvolgorde?
Uploads zijn resumable: je opent een uploadsessie en stuurt daarna de bytes naar de sessie-URI. De video wordt vervolgens asynchroon verwerkt aan de kant van YouTube nadat je aanvraag is afgerond.
- Open een resumable sessie.
POSTnaar het upload-endpoint met de videometadata als JSON enuploadType=resumable. De respons geeft een sessie-URI terug in deLocation-header. Merk op datuploadType=resumableen deLocation-sessie-URI onderdeel zijn van Google’s algemene resumable-uploadmechanica, en niet iets wat de YouTube-specifieke uploadpagina zelf documenteert; die toont alleen de Python-clientbibliotheek. - PUT de bytes naar die sessie-URI, in één aanvraag of in delen. Werken in delen laat je hervatten na een netwerkstoring in plaats van een groot bestand opnieuw te beginnen.
- Lees de video-ID uit de uiteindelijke respons. De upload is nu voltooid.
- Poll voor verwerking. YouTube transcodeert asynchroon. De video-ID bestaat voordat de video bekijkbaar is, en verwerking kan mislukken na een geslaagde upload.
# 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
De eigen uploadgids van Google is een Python-voorbeeld gebouwd rond MediaFileUpload met resumable=True en exponentiële backoff bij retries, en er staat expliciet dat het voorbeeldscript geen foutafhandeling doet. Neem dat serieus: het voorbeeld is een startpunt, geen productiesjabloon.
Let op: deze cijfers zijn geverifieerd tegen developers.google.com/youtube per september 2026. Platformen wijzigen dit zonder aankondiging.
Wat kost een upload aan quota?
Dit is het cijfer waar de meeste YouTube-integratieplannen op stranden, en het is de moeite waard om het precies te noemen.
| Methode | Quotakosten |
|---|---|
videos.insert | 1 eenheid, tegen een eigen bucket van 100 aanroepen per dag |
videos.list | 1 eenheid |
thumbnails.set | 50 eenheden |
videos.update | 50 eenheden |
De standaardtoewijzing is, in de bewoordingen van Google, “100 search.list-aanroepen, 100 videos.insert-aanroepen, en 10.000 eenheden per dag gezamenlijk voor alle andere endpoints.”
De bindende beperking op publiceren is dus een aantal, geen rekensom in eenheden: 100 uploads per project per dag. De pool van 10.000 eenheden staat daar los van en moet elke statuspoll, metadataleesactie en thumbnail-instelling rond die uploads dekken, wat in vergelijking ruim is. Quota reset om middernacht Pacific time. Een multi-tenant product dat meer dan een handvol kanalen bedient, heeft een quotaverhogingsaanvraag nodig, wat een eigen aanvraag bij Google is.
Oudere gidsen (en sommige nog live staande) stellen dat videos.insert 1.600 eenheden kost tegen de gedeelde pool van 10.000 eenheden, wat neerkwam op zes uploads per dag. Dat is niet meer wat de quotadocumentatie van Google zegt, en het is de moeite waard om elk budget dat je daarop hebt gebaseerd te controleren.
Let op: deze cijfers zijn geverifieerd tegen developers.google.com/youtube per september 2026. Platformen wijzigen dit zonder aankondiging.
Wat kost je echt drie weken
- Twee beoordelingen, niet één. OAuth-verificatie voor de gevoelige upload-scope, en de YouTube API-audit die de privé-uploadbeperking opheft. Geen van beide publiceert een doorlooptijd. Beide blokkeren de lancering.
- Quota, en het verzoek om die te verhogen. 100 uploads per project per dag is geen productiebudget zodra je voor meer dan een paar dozijn kanalen publiceert. Het verhogingsverzoek is een formulier, een onderbouwing en wachten.
- Transcoderen voordat je Google überhaupt bereikt. Willekeurige gebruikersvideo accepteren betekent container en codec normaliseren, een thumbnail genereren, en het bestand ergens bewaren waarvandaan je 256 GB kunt streamen zonder het in het geheugen te bufferen.
- Asynchrone fout na een geslaagde upload. Dit is degene die mensen verrast. Een 200 en een video-ID betekenen dat de bytes zijn aangekomen, niet dat de video live is. Verwerking kan daarna alsnog mislukken, en een afgewezen upload komt naar boven als een verwerkingsstatus, niet als een HTTP-fout. Je hebt een poller nodig, een
processing-poststatus, en een manier om een gebruiker te laten weten dat zijn video een uur na je geslaagde API-aanroep alsnog is mislukt.
Wil je dezelfde verticale video ook naar andere netwerken duwen, dan komt de vorm van dat werk aan bod in Instagram Reels cross-posten naar YouTube Shorts en tegelijk posten naar TikTok, Reels en Shorts. Elk van die platformen heeft zijn eigen audit, eigen quotamodel en eigen asynchrone faalmodus, en dat is precies het punt.
De korte versie
videos.insertuploadt naarhttps://www.googleapis.com/upload/youtube/v3/videos, max 256 GB, scopeyoutube.upload.- Niet-geverifieerde projecten aangemaakt na 28 juli 2020 kunnen alleen privévideo’s uploaden totdat het project is geaudit.
- De flow is: open een resumable sessie, PUT de bytes, en poll dan, want verwerking is asynchroon en kan mislukken na een geslaagde upload.
videos.insertkost 1 eenheid tegen een eigen bucket van 100 aanroepen per dag. Een aparte 10.000 eenheden per dag dekt al het andere.- Er is geen doorlooptijd voor de audit gepubliceerd. Start de beoordeling voordat je hem nodig hebt.
Dit één keer doen in plaats van per platform
Het YouTube-werk hierboven is echt, en niets ervan is overdraagbaar naar het volgende platform. Pinterest heeft een andere beoordeling, TikTok heeft zijn eigen Content Posting API-audit, en elk heeft een aparte mediapipeline. Die herhaling is wat onze API wegneemt: BulkPublish publiceert naar 15 platformen via één REST-endpoint, met OAuth, tokenvernieuwing, mediabehandeling en asynchrone statustracking aan onze kant afgehandeld. Poststatussen omvatten processing en partial precies omdat een 200 geen publicatie is.
De ontwikkelaarsdocumentatie vermeldt de endpoints, en de REST API-integratiepagina behandelt authenticatie en de postlevenscyclus. Heb je alleen inplannen nodig in plaats van een integratie, dan behandelt YouTube-video’s inplannen dat, en de gratis YouTube-tekenteller controleert titels en beschrijvingen tegen de limieten.