Publier sur les réseaux sociaux depuis Zapier
Un Zap peut publier sur Instagram, les Pages Facebook, TikTok, les profils LinkedIn et YouTube avec une seule requête à KreatoAI, qui publie partout où vous le demandez. Vous choisissez les réseaux, le texte, les images et l'heure ; KreatoAI s'occupe de chaque plateforme.
Le principe
Déclencheur (une ligne dans un tableur, un formulaire, un article publié…)
→ Code by Zapier (Run Python) : POST https://api.kreatoai.com/v1/posts
→ Webhooks by Zapier (Catch Hook), facultatif : le résultat, réseau par réseauAvant de commencer
Reliez vos réseaux à KreatoAI depuis Comptes connectés, puis créez une clé dans Réglages → Claude et API → Clés API. Elle commence par sk-kre-v1- et ne s'affiche qu'une fois. Toute personne qui peut modifier le Zap la verra : créez-en une pour Zapier seul, vous pourrez la révoquer sans rien casser ailleurs.
Côté Zapier, Webhooks by Zapier et API by Zapier ne sont pas proposés sur la formule gratuite. Côté KreatoAI, un espace sans formule publie trois fois gratuitement ; au-delà, l'API répond 402 subscription_required.
Publier avec Code by Zapier
C'est la méthode la plus sûre : le texte d'une publication contient des retours à la ligne, des guillemets et des émojis, et le code les transmet sans jamais casser la requête. Ajoutez une action Code by Zapier, événement Run Python. Dans Input Data, créez les champs texte (obligatoire), image, date et identifiant (facultatifs), mappés depuis votre déclencheur, puis collez ce code :
import requests
CLE = "sk-kre-v1-votre_cle" # une clé créée pour ce Zap seul
corps = {
"targets": ["instagram", "facebook"],
"content": input_data["texte"],
}
if input_data.get("image"):
corps["mediaUrls"] = [input_data["image"]]
if input_data.get("date"):
# ISO 8601 avec le fuseau, par exemple 2026-10-02T08:30:00+02:00
corps["scheduledAt"] = input_data["date"]
if input_data.get("identifiant"):
corps["idempotencyKey"] = "zapier-" + input_data["identifiant"]
reponse = requests.post(
"https://api.kreatoai.com/v1/posts",
headers={"x-api-key": CLE},
json=corps,
timeout=20,
)
if reponse.status_code >= 400:
raise Exception(f"KreatoAI a refusé la publication ({reponse.status_code}) : {reponse.text}")
output = reponse.json()La réponse devient la sortie de l'étape : id (l'identifiant de la publication), status (processing, ou scheduled si une date est donnée) et une ligne par réseau dans targets. Une publication programmée attend dans KreatoAI et part seule à l'heure dite, même si le Zap est éteint.
Les réseaux possibles sont facebook, instagram, tiktok, linkedin et youtube. Pour viser un compte précis parmi plusieurs du même réseau, remplacez son nom par {"platform": "facebook", "channelId": "…"}, avec l'identifiant lu dans GET /v1/accounts (voir Comptes connectés). identifiant protège des doubles publications : si Zapier rejoue l'étape, KreatoAI renvoie la publication déjà créée au lieu d'en créer une seconde.
Sans code : Webhooks by Zapier
Ajoutez une action Webhooks by Zapier, événement Custom Request : c'est le seul qui envoie les listes que demande KreatoAI (targets, mediaUrls).
| Champ de Zapier | Valeur |
|---|---|
| Method | POST |
| URL | https://api.kreatoai.com/v1/posts |
| Data | Le corps JSON ci-dessous |
| Headers | x-api-key : votre clé ; Content-Type : application/json |
{
"targets": ["facebook", "linkedin"],
"content": "Notre nouvelle offre est en ligne",
"idempotencyKey": "offre-octobre"
}Zapier envoie ce champ exactement comme il est écrit. Un texte mappé qui contient un retour à la ligne ou un guillemet casse le JSON, et KreatoAI répond 400. Gardez cette méthode pour des textes fixes ou d'une seule ligne, et passez au code pour le reste. API by Zapier (action API Request, en bêta chez Zapier) range la clé dans une connexion au lieu de l'écrire dans le Zap, avec la même règle pour le corps.
Joindre une image ou une vidéo
mediaUrls attend des adresses https publiques qui renvoient directement le fichier. Si votre fichier est ailleurs, envoyez d'abord son adresse à POST /v1/media avec le corps {"url": "https://…"} : la réponse contient une adresse https://media.kreatoai.com/… à mettre dans mediaUrls. 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 ; de deux à dix images forment un carrousel sur Instagram, TikTok et LinkedIn.
Savoir quand c'est parti
1. Créez un second Zap avec le déclencheur Webhooks by Zapier, événement Catch Hook, et copiez l'adresse affichée dans l'onglet de test. 2. Collez-la dans Réglages → Claude et API → Webhooks et envoyez un test, puis cliquez sur Test trigger dans Zapier. 3. Ajoutez un filtre sur type : publish.completed quand un réseau a publié, publish.failed quand il a refusé.
Chaque réseau envoie son propre message, avec data.platform, data.postUrl (le lien de la publication) ou data.failReason (voir Webhooks). L'adresse d'un Catch Hook est publique : avant d'agir sur un message, relisez la publication avec GET /v1/posts/{postId} et votre clé. Seule la réponse de l'API fait foi.
Quand la requête échoue
Avec le code ci-dessus, une réponse d'erreur arrête l'étape et s'affiche dans l'historique des Zaps (Zap History), avec le code et le message de KreatoAI.
| Réponse | Ce qu’il faut faire |
|---|---|
401 invalid_api_key | La clé est mal copiée ou révoquée : recréez-en une. |
400 invalid_targets | details dit quel réseau refuse et pourquoi : compte non relié, média manquant, texte trop long. |
402 subscription_required | Les trois publications offertes sont prises : il faut une formule. |
402 channel_limit_exceeded | Plus de comptes reliés que la formule n’en permet. |
429 rate_limit_exceeded | Plus de 30 requêtes par minute avec la même clé : attendez une minute. |
Tous les codes sont dans Erreurs. Les mêmes appels sont décrits pour Make et n8n.