Publication TikTok
Publiez des carrousels d'images et des vidéos sur un compte TikTok connecté à votre espace de travail. Le mode brouillon (MEDIA_UPLOAD) envoie le post dans la boîte de réception TikTok pour qu'un humain relise et publie. Plusieurs comptes TikTok connectés ? Précisez lequel avec channelId (voir ci-dessous).
Endpoints
/v1/publish/tiktok/photoScope requis : publish:tiktok
/v1/publish/tiktok/videoScope requis : publish:tiktok
/v1/publish/tiktok/status/:publishIdScope requis : publish:tiktok
Cibler un compte précis
Si votre espace a plusieurs comptes TikTok, ajoutez channelId pour choisir lequel publie. Sans lui, la publication part sur le compte TikTok le plus ancien connecté — presque jamais celui que vous visez, et les brouillons s'accumulent sur un compte que personne ne relève (voir spam_risk_too_many_pending_shares plus bas).
{
"channelId": "a3f27c9e-4b12-…", // le compte TikTok visé
"imageUrls": ["https://media.kreatoai.com/…"],
"title": "…",
"postMode": "MEDIA_UPLOAD"
}Le suivi de statut aussi. Un publishId appartient au compte qui l'a créé : passez le même channelId en query à /tiktok/status, sinon le statut est lu avec le mauvais compte et TikTok refuse.
GET /v1/publish/tiktok/status/{publishId}?channelId=a3f27c9e-4b12-…Récupérez l'identifiant d'un compte via GET /v2/accounts, ou copiez-le depuis le dashboard : Réglages → Canaux, bouton ID API sous chaque compte. Un seul compte TikTok connecté ? channelId est facultatif.
Publier un carrousel
curl https://api.kreatoai.com/v1/publish/tiktok/photo \
-H "x-api-key: sk-kre-v1-votre_cle" \
-H "Content-Type: application/json" \
-d '{
"imageUrls": ["https://media.kreatoai.com/…", "https://media.kreatoai.com/…"],
"title": "Mon titre (≤ 90 caractères)",
"description": "Légende complète (≤ 4000 caractères) #hashtags",
"postMode": "MEDIA_UPLOAD"
}'// Réponse 200
{
"success": true,
"publishId": "p_inbox_url~v2.766…",
"title": "Mon titre (≤ 90 caractères)",
"description": "Légende complète (≤ 4000 caractères) #hashtags"
}En brouillon carrousel, title et description sont pré-remplis dans TikTok et renvoyés en écho pour votre notification humaine.
Publier une vidéo
curl https://api.kreatoai.com/v1/publish/tiktok/video \
-H "x-api-key: sk-kre-v1-votre_cle" \
-H "Content-Type: application/json" \
-d '{
"videoUrl": "https://media.kreatoai.com/media-….mp4",
"title": "Relayé à votre workflow — non pré-rempli dans TikTok en brouillon",
"postMode": "MEDIA_UPLOAD"
}'// Réponse 200
{
"success": true,
"status": "PROCESSING_UPLOAD",
"publishId": "v_inbox_url~v2.123…",
"title": "Relayé à votre workflow — non pré-rempli dans TikTok en brouillon"
}Asymétrie TikTok à connaître : contrairement au carrousel, l'endpoint brouillon vidéo de TikTok n'accepte aucun titre ni légende — l'utilisateur les saisit dans l'app au moment de finaliser. Le title que vous envoyez est simplement renvoyé en écho pour votre notification (WhatsApp, Slack…). En DIRECT_POST, le titre (≤ 2200 caractères) est publié avec la vidéo, avec privacyLevel, disableComment, disableDuet, disableStitch optionnels. La vidéo doit venir de media.kreatoai.com — passez par POST /v1/media.
Brouillon vs publication directe
| postMode | Comportement | Titre / légende |
|---|---|---|
MEDIA_UPLOAD | Brouillon dans la boîte de réception TikTok — un humain finalise dans l’app. Confidentialité et interactions choisies à la publication. | Carrousel : pré-remplis · Vidéo : saisis dans l’app (écho API seulement) |
DIRECT_POST | Publication immédiate sur le profil. | Transmis à TikTok (photo : title ≤ 90 + description ≤ 4000, options privacyLevel/disableComment/autoAddMusic · vidéo : title ≤ 2200, options privacyLevel/disableComment/disableDuet/disableStitch) |
Suivre le statut
curl https://api.kreatoai.com/v1/publish/tiktok/status/p_inbox_url~v2.766… \
-H "x-api-key: sk-kre-v1-votre_cle"// Réponse 200
{ "status": "SEND_TO_USER_INBOX" }Interrogez toutes les 10 secondes, 2 minutes maximum (un brouillon arrive en général en 10-15 s ; une vidéo lourde peut prendre plus longtemps). Statuts terminaux :
Mieux : configurez un webhook et recevez le statut terminal automatiquement — plus besoin de poller.
| Statut | Signification |
|---|---|
SEND_TO_USER_INBOX | Succès du brouillon — notification reçue dans l’app TikTok |
PUBLISH_COMPLETE | Succès de la publication directe |
FAILED | Échec — voir failReason (photo_pull_failed, video_pull_failed, file_format_check_failed, spam_risk_too_many_posts, spam_risk_too_many_pending_shares…). Ne réessayez pas automatiquement. |
Contraintes TikTok
Carrousel : ≤ 35 images · title ≤ 90 · description ≤ 4000. Vidéo : title ≤ 2200 · codec H.264/AAC recommandé. Communs : ~6 publications/minute par compte · plafond quotidien de posts (spam_risk_too_many_posts) · plafond de brouillons non publiés en attente (spam_risk_too_many_pending_shares) — publiez ou supprimez-les dans l'app pour libérer le quota, sinon tout nouveau dépôt est refusé · URL média consommée dans l'heure · app TikTok ≥ 31.8 sur le téléphone pour recevoir les brouillons. Les médias doivent venir de media.kreatoai.com — passez par POST /v1/media.