De TikTok Content Posting API publiceert video- en foto-content namens een creator, via een init-aanroep, een upload of URL-ophaling, en een statuspoll. Het belangrijkste feit voordat je begint: totdat jouw client TikToks audit doorstaat, is alles wat je post beperkt tot privé zichtbaarheid. Je kunt de hele integratie bouwen en testen en nog steeds geen enkele publieke post kunnen maken.
Wat kan de Content Posting API publiceren, en wat is geblokkeerd?
De API omvat direct posten van video- en foto-content, plus een concept-route die content naar de inbox van de creator stuurt zodat die het kan afmaken. De endpoints zijn POST /v2/post/publish/video/init/ voor video, POST /v2/post/publish/content/init/ voor foto’s, en POST /v2/post/publish/status/fetch/ om het resultaat te controleren. Er is ook POST /v2/post/publish/creator_info/query/, die je geacht wordt eerst aan te roepen om te leren wat het account van de creator toestaat.
De blokkade is de audit. TikToks eigen bewoordingen: “All content posted by unaudited clients will be restricted to private viewing mode.” De documentatie is even direct op de referentiepagina voor direct posten, waar niet-geaudite clients “can only post to a private account”, waarbij de poging wordt geblokkeerd bij /publish/video/init/.
| Aandachtspunt | Wat de documentatie zegt |
|---|---|
| Vereiste scope | video.publish, goedgekeurd voor jouw app en geautoriseerd door de gebruiker |
| Niet-geaudite apps | Content beperkt tot privé zichtbaarheidsmodus |
| Privacyniveaus | PUBLIC_TO_EVERYONE, MUTUAL_FOLLOW_FRIENDS, FOLLOWER_OF_CREATOR, SELF_ONLY |
| Mediabron | FILE_UPLOAD of PULL_FROM_URL |
| URL-ophaling | Vereist verificatie van eigendom van het URL-prefix of domein |
SELF_ONLY is de waarde waarmee je tijdens de ontwikkeling zult leven. Het is ook de moeite waard om te weten dat de reeks privacyniveaus die een bepaalde creator kan gebruiken niet vaststaat: je bevraagt creator_info en gebruikt wat daaruit komt, in plaats van PUBLIC_TO_EVERYONE te hardcoderen en te hopen.
Let op: de cijfers hier zijn geverifieerd aan de hand van TikToks documentatie voor de Content Posting API, per september 2026. Platformen wijzigen deze zonder aankondiging.
Hoe werkt authenticatie, en hoe lang duurt de audit?
Standaard OAuth om een user access token te verkrijgen met video.publish. Twee goedkeuringen stapelen op elkaar: jouw app moet de scope krijgen, en de individuele creator moet het autoriseren op het moment van verbinden. Geen van beide alleen is voldoende.
De audit staat er weer los van. Die vindt plaats nadat je een werkende integratie hebt, omdat TikTok verwacht dat je de flow hebt getest voordat je hem aanvraagt. TikTok vermeldt geen reviewduur in de documentatie van de Content Posting API, dus behandel de tijdlijn als ongepubliceerd en onbekend. Plan je lanceerdatum rond een goedkeuring die je niet zelf in de hand hebt.
Wat is de volgorde van publicatieaanroepen?
POST /v2/post/publish/creator_info/query/om de toegestane privacyniveaus en interactie-instellingen van de creator te controleren.POST /v2/post/publish/video/init/metpost_info(titel,privacy_level, de uitschakelvlaggen,video_cover_timestamp_ms, de schakelaars voor commerciële content) ensource_info.- Als
sourceFILE_UPLOADis,PUTde bytes naar deupload_urldie init teruggeeft, in stukken die overeenkomen met dechunk_sizeentotal_chunk_countdie je hebt opgegeven. AlssourcePULL_FROM_URLis, haalt TikTok het in plaats daarvan op van je geverifieerde domein. POST /v2/post/publish/status/fetch/met depublish_idvan init, en poll.- Behandel
PUBLISH_COMPLETEals succes enFAILEDals eindstatus. Niets daarvoor is een gepubliceerde post.
# 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~..." }'
De gedocumenteerde statuswaarden zijn PROCESSING_UPLOAD (bestandsupload-pad), PROCESSING_DOWNLOAD (URL-ophaalpad), SEND_TO_USER_INBOX (concept overhandigd aan de creator), PUBLISH_COMPLETE en FAILED.
Wat zijn de rate limits?
Twee cijfers staan expliciet in de referentiedocumentatie, beide per user access token:
- Direct post init: 6 requests per minuut.
- Status fetch: 30 requests per minuut.
Zes inits per minuut per gebruiker is ruim voor een planner en krap voor een bulkimport. Dertig statusfetches per minuut klinkt als veel totdat je honderden posts in behandeling hebt die dezelfde poller delen; op dat moment heb je backoff per token nodig in plaats van een globale lus.
We konden geen gedocumenteerd dagelijks postquotum per gebruiker, een maximale videobestandsgrootte of een maximale duur bevestigen vanuit de pagina’s van de Content Posting API die we lazen. De creator info-response is de bedoelde bron voor het maximum aan videoduur per account, dus lees dat uit in plaats van een getal te hardcoderen.
Let op: de cijfers hier zijn geverifieerd aan de hand van TikToks documentatie voor de Content Posting API, per september 2026. Platformen wijzigen deze zonder aankondiging.
Wat kost je daadwerkelijk drie weken?
De audit. Dit is de grote, en het verschilt op een specifieke manier van Instagram- of LinkedIn-review: je kunt code shippen, accounts verbinden en publiceren, en toch is elke post onzichtbaar. Niets in je logs zal er verkeerd uitzien. Laat geen stakeholder een succesvolle PUBLISH_COMPLETE in staging zien en concluderen dat de functie klaar is.
Domeinverificatie voor PULL_FROM_URL. TikTok je media laten ophalen is veel eenvoudiger dan chunked uploads, maar het vereist bewijs dat je het URL-prefix bezit. Als je media op een bucket met een gegenereerde hostnaam staat, ga je een aangepast domein aan je opslag toevoegen voordat je het makkelijke pad kunt gebruiken.
Tokenvernieuwing. TikTok access tokens worden vernieuwd met een refresh token, en een verlopen verbinding betekent dat de creator opnieuw moet verbinden. Zoals bij elk platform is het werk niet de vernieuwingsaanroep, maar de toestandsmachine en de melding wanneer vernieuwing mislukt.
Asynchrone foutafhandeling. Init die een publish_id teruggeeft, is geen publicatie. Een succesvolle upload ook niet. Alleen PUBLISH_COMPLETE is dat, en FAILED kan minuten later binnenkomen om redenen zoals niet-ondersteunde codering. Sla de publish_id op, houd een processing-status bij, en verzoen. Onze gids voor social media inplannen via API behandelt het toestandsmodel dat hiervoor nodig is.
Als je ook de captions schrijft, vertelt de TikTok tekenteller je waar de titel wordt afgekapt.
De korte versie
- Init, upload of ophalen, dan status pollen.
PUBLISH_COMPLETEis het enige succes. - Niet-geaudite clients kunnen alleen privé posten. Audit is vereist voor publieke posts.
- De scope
video.publishheeft goedkeuring voor je app nodig en toestemming van de creator. - 6 init-requests per minuut en 30 statusfetches per minuut, per user token.
- Review- en auditduren worden niet gepubliceerd door TikTok.
Publiceren naar TikTok zonder de audit zelf te dragen
Eén manier om de opzetkosten te omzeilen, is publiceren via een API die de audit al heeft doorstaan. BulkPublish dekt TikTok samen met 14 andere platformen via één REST API, dus de init, de upload, het pollen en de retry liggen aan onze kant en jouw aanroep is een enkel create-post request met een channel-ID. Dezelfde aanroep richt zich op Instagram Reels en YouTube Shorts als je cross-post. Endpoints staan gedocumenteerd op /developers/, en het overzicht van de REST-integratie staat op /integrations/rest-api/.