KKreatoAI/Documentation API

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

POST
/v1/publish/tiktok/photo

Scope requis : publish:tiktok

POST
/v1/publish/tiktok/video

Scope requis : publish:tiktok

GET
/v1/publish/tiktok/status/:publishId

Scope 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

postModeComportementTitre / légende
MEDIA_UPLOADBrouillon 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_POSTPublication 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.

StatutSignification
SEND_TO_USER_INBOXSuccès du brouillon — notification reçue dans l’app TikTok
PUBLISH_COMPLETESuccè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.