API Content Posting di TikTok: guida per sviluppatori

API Content Posting di TikTok: guida per sviluppatori

Cosa può pubblicare la Content Posting API di TikTok, perché le app non verificate possono pubblicare solo in privato, la sequenza init e poll, e i limiti di frequenza documentati.

La Content Posting API di TikTok pubblica contenuti video e foto per conto di un creator, tramite una chiamata init, un upload o un prelievo da URL, e un polling dello stato. Il fatto più importante prima di iniziare: finché il tuo client non supera la verifica di TikTok, tutto ciò che pubblichi è limitato alla visualizzazione privata. Puoi costruire e testare l’intera integrazione e non riuscire comunque a fare un solo post pubblico.

Cosa può pubblicare la Content Posting API, e cosa è bloccato?

L’API copre la pubblicazione diretta di contenuti video e foto, più un percorso bozza che invia il contenuto alla casella del creator perché lo completi. Gli endpoint sono POST /v2/post/publish/video/init/ per i video, POST /v2/post/publish/content/init/ per le foto, e POST /v2/post/publish/status/fetch/ per verificare il risultato. C’è anche POST /v2/post/publish/creator_info/query/, che ci si aspetta chiami prima per sapere cosa consente l’account del creator.

Il blocco è la verifica. Le parole stesse di TikTok: “Tutti i contenuti pubblicati da client non verificati saranno limitati alla modalità di visualizzazione privata.” La documentazione è altrettanto diretta nella pagina di riferimento del direct-post, dove i client non verificati “possono pubblicare solo su un account privato”, con il tentativo bloccato a /publish/video/init/.

AspettoCosa dice la documentazione
Scope richiestovideo.publish, approvato per la tua app e autorizzato dall’utente
App non verificateContenuto limitato alla modalità di visualizzazione privata
Livelli di privacyPUBLIC_TO_EVERYONE, MUTUAL_FOLLOW_FRIENDS, FOLLOWER_OF_CREATOR, SELF_ONLY
Fonte del mediaFILE_UPLOAD o PULL_FROM_URL
Prelievo da URLRichiede la verifica della proprietà del prefisso URL o del dominio

SELF_ONLY è il valore con cui convivrai durante lo sviluppo. Vale anche la pena notare che l’insieme dei livelli di privacy che un determinato creator può usare non è fisso: interroghi creator_info e usi ciò che torna, invece di codificare PUBLIC_TO_EVERYONE e sperare.

Nota: i dati qui riportati sono stati verificati rispetto alla documentazione della Content Posting API di TikTok, aggiornata a settembre 2026. Le piattaforme cambiano questi dati senza preavviso.

Come funziona l’autenticazione, e quanto dura la verifica?

OAuth standard per ottenere un token di accesso utente che porta video.publish. Due approvazioni si sommano l’una all’altra: la tua app deve avere lo scope concesso, e il singolo creator deve autorizzarlo al momento della connessione. Nessuna delle due da sola basta.

La verifica è di nuovo separata. Avviene dopo che hai un’integrazione funzionante, perché TikTok si aspetta che tu abbia testato il flusso prima di richiederla. TikTok non indica una durata di revisione nella documentazione della Content Posting API, quindi considera la tempistica come non pubblicata e sconosciuta. Pianifica la data di lancio intorno a un’approvazione che non controlli.

Qual è la sequenza di chiamate per pubblicare?

  1. POST /v2/post/publish/creator_info/query/ per verificare i livelli di privacy consentiti e le impostazioni di interazione del creator.
  2. POST /v2/post/publish/video/init/ con post_info (titolo, privacy_level, i flag di disattivazione, video_cover_timestamp_ms, gli switch sul contenuto commerciale) e source_info.
  3. Se source è FILE_UPLOAD, fai PUT dei byte all’upload_url restituito da init, a blocchi corrispondenti al chunk_size e al total_chunk_count dichiarati. Se source è PULL_FROM_URL, TikTok lo recupera invece dal tuo dominio verificato.
  4. POST /v2/post/publish/status/fetch/ con il publish_id da init, ed esegui il polling.
  5. Considera PUBLISH_COMPLETE come successo e FAILED come terminale. Nulla prima di questo è un post pubblicato.
# 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~..." }'

I valori di stato documentati sono PROCESSING_UPLOAD (percorso file upload), PROCESSING_DOWNLOAD (percorso prelievo da URL), SEND_TO_USER_INBOX (bozza consegnata al creator), PUBLISH_COMPLETE e FAILED.

Quali sono i limiti di frequenza?

Due numeri sono indicati chiaramente nella documentazione di riferimento, entrambi per token di accesso utente:

  • Init direct post: 6 richieste al minuto.
  • Status fetch: 30 richieste al minuto.

Sei init al minuto per utente sono generosi per uno scheduler e stretti per un’importazione massiva. Trenta status fetch al minuto sembrano molti finché non hai centinaia di post in corso che condividono un poller, momento in cui serve un backoff per token invece di un ciclo globale.

Non siamo riusciti a confermare una quota di pubblicazione giornaliera per utente documentata, una dimensione massima del file video o una durata massima dalle pagine della Content Posting API che abbiamo letto. La risposta di creator info è la fonte prevista per il tetto di durata video per account, quindi leggila invece di codificare un numero.

Nota: i dati qui riportati sono stati verificati rispetto alla documentazione della Content Posting API di TikTok, aggiornata a settembre 2026. Le piattaforme cambiano questi dati senza preavviso.

Cosa ti costerà davvero tre settimane?

La verifica. È la parte grossa, ed è diversa dalla revisione di Instagram o LinkedIn in un modo specifico: puoi rilasciare codice, connettere account e pubblicare, e avere comunque ogni post invisibile. Nulla nei tuoi log sembrerà sbagliato. Non lasciare che uno stakeholder veda un PUBLISH_COMPLETE riuscito in staging e concluda che la funzione è pronta.

Verifica del dominio per PULL_FROM_URL. Lasciare che TikTok recuperi il tuo media è molto più semplice degli upload a blocchi, ma richiede di dimostrare di possedere il prefisso URL. Se il tuo media risiede su un bucket con un hostname generato, dovrai aggiungere un dominio personalizzato al tuo storage prima di poter usare il percorso facile.

Rinnovo del token. I token di accesso di TikTok si rinnovano con un token di refresh, e una connessione scaduta significa che il creator deve riconnettersi. Come per ogni piattaforma, il lavoro non è la chiamata di rinnovo, è la macchina a stati e la notifica quando il rinnovo fallisce.

Gestione dei fallimenti asincroni. Un init che restituisce un publish_id non è una pubblicazione. Nemmeno un upload riuscito lo è. Solo PUBLISH_COMPLETE lo è, e FAILED può arrivare minuti dopo per ragioni come una codifica non supportata. Salva il publish_id, mantieni uno stato processing e riconcilia. La nostra guida all’API di programmazione dei social media copre il modello di stato necessario.

Se stai anche scrivendo le didascalie, il contatore di caratteri TikTok ti dirà dove il titolo viene tagliato.

La versione breve

  • Init, upload o prelievo, poi polling dello stato. PUBLISH_COMPLETE è l’unico successo.
  • I client non verificati possono pubblicare solo in privato. La verifica è richiesta per i post pubblici.
  • Lo scope video.publish richiede l’approvazione per la tua app e il consenso del creator.
  • 6 richieste init al minuto e 30 status fetch al minuto, per token utente.
  • Le durate di revisione e verifica non sono pubblicate da TikTok.

Pubblicare su TikTok senza gestire tu la verifica

Un modo per aggirare il costo della configurazione è pubblicare tramite un’API che è già passata attraverso la verifica. BulkPublish copre TikTok insieme ad altre 14 piattaforme tramite un’unica API REST, quindi l’init, l’upload, il polling e il retry sono a carico nostro e la tua chiamata è una singola richiesta di creazione post con un ID canale. La stessa chiamata raggiunge anche Instagram Reels e YouTube Shorts se stai facendo cross-posting. Gli endpoint sono documentati su /developers/, e la panoramica dell’integrazione REST è su /integrations/rest-api/.

Correlati