L'API Messaging regroupe les endpoints qui envoient des messages WhatsApp, déclenchent des automatisations et lisent les informations de votre compte. Elle nécessite un abonnement actif : sans cela, chaque appel retourne 403 Team has no active subscription.
Ces endpoints ne prennent pas de store_id : votre clé API détermine le numéro WhatsApp d'envoi.
WhatsApp n'autorise les messages libres que dans une fenêtre de service ouverte de 24 heures, c'est-à-dire lorsque le contact vous a écrit dans les 24 dernières heures. Pour contacter quelqu'un en premier, vous devez obligatoirement passer par un template approuvé.
POST /api/v1/messages/sendLe format suit la logique de Meta : un champ type, puis un objet portant le nom de ce type.
to (requis) : le numéro du destinataire, indicatif pays inclus.
type (requis) : text, image, video, audio ou document.
text.body : requis pour le type texte.
<type>.link : requis pour tous les autres types. Le champ caption est optionnel et ne s'applique qu'aux images et vidéos.
curl -X POST https://api.getkanal.com/api/v1/messages/send \
-H "Authorization: Bearer VOTRE_CLE_API" \
-H "Content-Type: application/json" \
-d '{
"to": "33612345678",
"type": "text",
"text": { "body": "Bonjour depuis l API !" }
}'Pour un média :
{
"to": "33612345678",
"type": "image",
"image": {
"link": "https://example.com/photo.jpg",
"caption": "Légende optionnelle"
}
}L'erreur la plus fréquente sur cet endpoint est Cannot send free-form message: no active conversation window. Elle signifie que la fenêtre de 24 heures est fermée : utilisez un template. Les autres cas sont un numéro invalide, un contact désinscrit, ou un type de message mal renseigné.
POST /api/v1/templatesC'est la seule façon de contacter un client en premier. Cet endpoint fait l'objet d'un article dédié dans cette collection, avec le détail des paramètres et du format des variables.
GET /api/v1/get_templatesRetourne un tableau de vos templates au statut APPROVED pour le numéro rattaché à la clé. Aucun paramètre, seul l'en-tête Authorization est nécessaire.
[
{
"id": 1234,
"phone_number_id": 56,
"name": "order_confirmation",
"wa_status": "APPROVED",
"structure": "{ ...JSON: header/body/buttons... }",
"created_at": "2026-01-10T12:00:00.000000Z"
}
]Le champ id est le template_id à utiliser pour l'envoi. Le champ structure est une chaîne JSON décrivant le header, le corps et les boutons : les noms de variables qu'elle contient sont exactement les clés à passer dans l'objet variables lors de l'envoi.
POST /api/v1/automations/{webhook_id}Lance une automatisation dont le déclencheur est un nœud Incoming Webhook. Le webhook_id est l'UUID de ce nœud, visible dans l'éditeur d'automatisation. L'automatisation doit être active et appartenir au numéro de la clé.
phone_number (requis) : le numéro du contact.
variables (optionnel) : une carte clé/valeur injectée dans les variables de session de l'automatisation.
shopify_customer_id (optionnel) : doit être numérique, rattache le contact à un client Shopify.
curl -X POST https://api.getkanal.com/api/v1/automations/3f9c1a2b-4d5e-6789-abcd-ef0123456789 \
-H "Authorization: Bearer VOTRE_CLE_API" \
-H "Content-Type: application/json" \
-d '{
"phone_number": "+33612345678",
"variables": { "discount_code": "WELCOME10" }
}'200 avec le message Contact blocked by re-entry rule, et aucun flux ne se lance. Cet endpoint utilise un format d'erreur { "message": ... } et non { "error": ... }.POST /api/v1/meRetourne le numéro WhatsApp Business rattaché à la clé. Aucun corps de requête. C'est l'appel le plus rapide pour vérifier qu'une clé fonctionne et confirmer depuis quel numéro elle envoie.
{
"display_phone_number": "+33 6 12 34 56 78",
"verified_name": "My Shop"
}Les endpoints /messages/send et /templates acceptent un en-tête optionnel Idempotency-Key. Rejouer une requête avec la même clé ne renvoie pas le message : l'API retourne un 201 indiquant que le message a déjà été envoyé. Utilisez un UUID par message métier.
Ces endpoints sont limités à 60 requêtes par minute par clé API.