kreatoai/Documentation API

Publier sur les réseaux sociaux depuis n8n

Un workflow n8n peut publier et programmer sur Instagram, les Pages Facebook, TikTok, les profils LinkedIn et YouTube avec une seule requête à Kreatoai. Vous n'avez ni application à créer chez chaque réseau, ni revue à passer, ni jeton à renouveler : Kreatoai s'en charge pour les comptes que vous avez reliés.

Deux façons de brancher n8n

Un nœud HTTP Request vers POST /v1/posts : votre workflow décide de tout, et chaque exécution publie exactement ce qu'il a préparé. C'est la bonne méthode pour une file de publications, un tableur ou un flux RSS.

Le serveur MCP, relié au nœud AI Agent : l'agent choisit lui-même de lister vos comptes, de publier ou de programmer, à partir d'une consigne écrite en français. Voir plus bas.

Déclencheur (Schedule, Google Sheets, RSS, Webhook…)
  → préparation du texte et des images (IA, modèle, tableur)
  → HTTP Request : POST https://api.kreatoai.com/v1/posts
  → Webhook (second workflow, facultatif) : le résultat, réseau par réseau

Avant de commencer

Reliez vos réseaux depuis Comptes connectés et créez une clé dans Réglages → Claude et API → Clés API. Un espace sans formule publie dix fois par mois gratuitement ; au-delà, l'API répond 402 subscription_required.

La clé dans n8n

Créez un identifiant de type Header Auth : nom x-api-key, valeur votre clé sk-kre-v1-…. Dans chaque nœud HTTP Request, choisissez Authentication : Generic Credential Type, puis Header Auth et cet identifiant. La clé ne figure alors dans aucun nœud ni dans l'export du workflow.

Publier avec HTTP Request

Réglage du nœudValeur
MethodPOST
URLhttps://api.kreatoai.com/v1/posts
AuthenticationGeneric Credential Type → Header Auth
Send Bodyactivé, Body Content Type : JSON, Specify Body : Using JSON
{
  "targets": ["instagram", "facebook", "linkedin"],
  "content": {{ JSON.stringify($json.texte) }},
  "mediaUrls": [{{ JSON.stringify($json.image) }}],
  "idempotencyKey": {{ JSON.stringify('n8n-' + $json.id) }}
}

La réponse arrive aussitôt (202) : id identifie la publication, targets donne une ligne par réseau. Ajoutez scheduledAt pour programmer, au format ISO 8601 avec le fuseau : {{ JSON.stringify($now.plus({ hours: 2 }).toISO()) }} vise dans deux heures. La publication attend alors dans Kreatoai et part seule, même si n8n est arrêté.

Les réseaux possibles sont facebook, instagram, tiktok, linkedin et youtube. Pour un compte précis parmi plusieurs, une cible devient { "platform": "facebook", "channelId": "…" }, identifiant lu dans GET /v1/accounts (voir Comptes connectés). idempotencyKey empêche une double publication quand n8n relance une exécution : Kreatoai renvoie la publication déjà créée. Tous les champs sont décrits dans Publication multi-réseaux.

Un texte venu d'un nœud précédent

Une légende contient presque toujours des retours à la ligne et des guillemets. Écrite telle quelle dans le JSON ("{{ $json.texte }}"), elle casse le corps et Kreatoai répond 400. JSON.stringify ajoute les guillemets et protège chaque caractère : c'est pourquoi l'exemple ci-dessus n'en met pas autour de l'expression.

Images et vidéos

mediaUrls attend des adresses https publiques qui renvoient directement le fichier. Pour un fichier produit dans n8n ou rangé ailleurs, passez d'abord par POST /v1/media avec le même identifiant : {"url": "https://…"} pour une adresse, ou {"base64": "…"} pour un fichier binaire (nœud Extract From File, opération Move File to Base64 String). Gardez le champ url de la réponse, une adresse https://media.kreatoai.com/…. Une image peut peser 20 Mo, une vidéo 128 Mo (voir Médias).

Instagram et TikTok exigent au moins un média, YouTube une vidéo, Bluesky une vidéo MP4 seule ou 4 images au plus, et Google Business une image au plus, sans vidéo. De deux à dix images forment un carrousel sur Instagram, TikTok et LinkedIn ; Facebook ne prend que la première.

Savoir quand c'est parti

Créez un second workflow qui commence par un nœud Webhook (méthode POST), et donnez son adresse de production dans Réglages → Claude et API → Webhooks. Chaque réseau envoie son propre message : publish.completed avec data.postUrl, ou publish.failed avec data.failReason. Pour vérifier la signature, activez l'option Raw Body du nœud et suivez Webhooks.

Sans webhook, un nœud Wait d'une minute suivi de GET /v1/posts/{{ $json.id }} donne l'état de chaque réseau. Ne relancez jamais un échec marqué failType: "permanent" : le média ou le compte est à corriger d'abord.

Un agent IA dans n8n

Reliez le nœud MCP Client Tool à votre nœud AI Agent, avec l'adresse https://api.kreatoai.com/mcp/social dans Endpoint, HTTP Streamable dans Server Transport et Bearer Auth dans Authentication, avec votre clé comme jeton. L'agent reçoit les outils list_accounts, create_post, update_post, cancel_post, upload_media et les autres, avec les mêmes règles que l'API. Détails dans Serveur MCP.

Recette : carrousel TikTok en brouillon

Pour qu'un humain relise avant de publier, déposez le carrousel dans les brouillons TikTok du compte : la personne le retrouve dans sa boîte de réception TikTok, titre et légende déjà remplis, et publie en deux gestes. La route dédiée sépare le titre (90 caractères) de la légende :

POST https://api.kreatoai.com/v1/publish/tiktok/photo
{
  "imageUrls": ["https://media.kreatoai.com/…", "https://media.kreatoai.com/…"],
  "title": {{ JSON.stringify($json.titre) }},
  "description": {{ JSON.stringify($json.legende) }},
  "postMode": "MEDIA_UPLOAD"
}

Gardez le publishId de la réponse. Le webhook publish.inbox_delivered arrive quand le brouillon est livré ; sans webhook, interrogez GET /v1/publish/tiktok/status/{{ $json.publishId }} toutes les dix secondes jusqu'à SEND_TO_USER_INBOX ou FAILED. Une vidéo passe par POST /v1/publish/tiktok/video avec videoUrl ; en brouillon, TikTok ne reprend pas son titre, à transmettre autrement. Tout est dans Publication TikTok.

Les mêmes appels sont décrits pour Make et Zapier.