POST https://api.getkanal.com/open-api/v1/messages/send
Chaque requête doit inclure votre clé API dans le header Authorization :
Authorization: Bearer VOTRE_CLE_API
Votre clé API est liée à un numéro WhatsApp Business. Tous les messages seront envoyés depuis ce numéro.
Le contact doit avoir envoyé un message dans les dernières 24 heures (fenêtre de conversation WhatsApp). Sans conversation active, utilisez l'endpoint /v1/templates pour envoyer un template approuvé.
{
"to": "33612345678",
"type": "text",
"text": {
"body": "Bonjour, voici votre projection !"
}
}
{
"to": "33612345678",
"type": "image",
"image": {
"link": "https://example.com/photo.jpg",
"caption": "Retrouvez ce produit ici 👉 https://example.com/produit"
}
}
{
"to": "33612345678",
"type": "video",
"video": {
"link": "https://example.com/video.mp4",
"caption": "Découvrez notre produit en vidéo"
}
}
{
"to": "33612345678",
"type": "audio",
"audio": {
"link": "https://example.com/audio.mp3"
}
}
{
"to": "33612345678",
"type": "document",
"document": {
"link": "https://example.com/facture.pdf"
}
}
Pour éviter les envois en double, ajoutez un header idempotency-key avec un identifiant unique :
idempotency-key: mon-id-unique-123
Si un message a déjà été envoyé avec cette clé, l'API retournera un 201 sans renvoyer le message.
Succès (200) :
{
"success": true,
"message": "Message sent successfully",
"message_id": 12345,
"contact_id": 678,
"phone_number": "33612345678"
}
Erreurs courantes :
Code
Raison
401 | Clé API manquante ou invalide |
400 | Champ requis manquant ( |
400 | Numéro de téléphone invalide |
400 | Contact opted-out |
400 | Pas de fenêtre de conversation active (24h) |
curl -X POST https://api.getkanal.com/open-api/v1/messages/send \
-H "Authorization: Bearer VOTRE_CLE_API" \
-H "Content-Type: application/json" \
-d '{
"to": "33612345678",
"type": "text",
"text": {
"body": "Bonjour, voici votre projection !"
}
}'
curl -X POST https://api.getkanal.com/open-api/v1/messages/send \
-H "Authorization: Bearer VOTRE_CLE_API" \
-H "Content-Type: application/json" \
-d '{
"to": "33612345678",
"type": "image",
"image": {
"link": "https://example.com/projection.jpg",
"caption": "Retrouvez ce produit ici 👉 https://example.com/produit"
}
}'
curl -X POST https://api.getkanal.com/open-api/v1/messages/send \
-H "Authorization: Bearer VOTRE_CLE_API" \
-H "Content-Type: application/json" \
-d '{
"to": "33612345678",
"type": "video",
"video": {
"link": "https://example.com/video.mp4",
"caption": "Découvrez notre produit en vidéo"
}
}'
curl -X POST https://api.getkanal.com/open-api/v1/messages/send \
-H "Authorization: Bearer VOTRE_CLE_API" \
-H "Content-Type: application/json" \
-d '{
"to": "33612345678",
"type": "audio",
"audio": {
"link": "https://example.com/audio.mp3"
}
}'
curl -X POST https://api.getkanal.com/open-api/v1/messages/send \
-H "Authorization: Bearer VOTRE_CLE_API" \
-H "Content-Type: application/json" \
-d '{
"to": "33612345678",
"type": "document",
"document": {
"link": "https://example.com/facture.pdf"
}
}'