Utilisez cette API pour envoyer des messages WhatsApp via l'API WhatsApp Business (WABA). Vous pouvez envoyer des messages modèles, des messages libres, des médias (image, vidéo, audio, document, sticker), des localisations, des contacts et des messages interactifs. Les réactions sont envoyées via le point de terminaison des événements.
Pour utiliser ce point de terminaison, votre clé API doit avoir le scope waba activé. Vous avez également besoin d'un numéro d'expéditeur WhatsApp Business enregistré.
Envoyer un message
Envoyez un message WhatsApp à un destinataire. Vous pouvez envoyer des messages modèles, des messages libres, des médias (image, vidéo, audio, document, sticker), des localisations, des contacts et des messages interactifs (boutons, listes).
Paramètres obligatoires
- Name
from- Type
- string
- Description
Votre numéro d'expéditeur WhatsApp Business enregistré au format international (ex.
4915112345678).
- Name
to- Type
- string
- Description
Numéro de téléphone du destinataire au format international (ex.
4917612345678).
Paramètres de message modèle
- Name
type- Type
- string
- Description
Définissez
templatepour envoyer un message modèle WhatsApp pré-approuvé.
- Name
template- Type
- string
- Description
Le nom du modèle WhatsApp approuvé (ex.
hello_world).
- Name
language- Type
- string
- Description
Code de langue du modèle (ex.
de,en,fr).
- Name
components- Type
- object
- Optional
- Optional
- Description
Valeurs des paramètres du modèle. Contient des tableaux optionnels pour
header,bodyetbuttons. Les valeurs sont positionnelles et remplacent{{1}},{{2}}, etc. dans le modèle.
componentsobjectParamètres des composants du modèle
components- Name
header- Type
- array
- Optional
- Optional
- Description
Valeurs pour les espaces réservés de l'en-tête. Pour les en-têtes texte, fournissez des chaînes. Pour les en-têtes image, fournissez une URL.
- Name
body- Type
- array
- Optional
- Optional
- Description
Valeurs pour les espaces réservés du corps. Chaque entrée remplace la variable
{{n}}correspondante.
- Name
buttons- Type
- array
- Optional
- Optional
- Description
Valeurs des paramètres de boutons. Chaque entrée est un objet avec
type,sub_typeetparameters.
Paramètres de message libre
- Name
type- Type
- string
- Description
Définissez
textou omettez. Le texte du message est envoyé dans une fenêtre de conversation de 24 heures.
- Name
text- Type
- string
- Description
Le texte du message. Ne peut être envoyé que dans une fenêtre de conversation active de 24 heures.
Paramètres de message image
- Name
type- Type
- string
- Description
Définissez
image.
- Name
url- Type
- string
- Description
URL publique du fichier image (JPEG, PNG).
- Name
caption- Type
- string
- Optional
- Optional
- Description
Légende optionnelle pour l'image.
Paramètres de message vidéo
- Name
type- Type
- string
- Description
Définissez
video.
- Name
url- Type
- string
- Description
URL publique du fichier vidéo (MP4, 3GPP).
- Name
caption- Type
- string
- Optional
- Optional
- Description
Légende optionnelle pour la vidéo.
Paramètres de message audio
- Name
type- Type
- string
- Description
Définissez
audio.
- Name
url- Type
- string
- Description
URL publique du fichier audio (MP3, OGG, AMR, AAC).
Paramètres de message document
- Name
type- Type
- string
- Description
Définissez
document.
- Name
url- Type
- string
- Description
URL publique du fichier document (PDF, DOC, etc.).
- Name
filename- Type
- string
- Description
Le nom de fichier affiché au destinataire.
- Name
caption- Type
- string
- Optional
- Optional
- Description
Légende optionnelle pour le document.
Paramètres de message sticker
- Name
type- Type
- string
- Description
Définissez
sticker.
- Name
url- Type
- string
- Description
URL publique du fichier sticker (WebP). Stickers statiques : 512x512px, max 100Ko. Stickers animés : 512x512px, max 500Ko.
Paramètres de message localisation
- Name
type- Type
- string
- Description
Définissez
location.
- Name
latitude- Type
- number
- Description
Latitude de la localisation.
- Name
longitude- Type
- number
- Description
Longitude de la localisation.
- Name
name- Type
- string
- Optional
- Optional
- Description
Nom de la localisation.
- Name
address- Type
- string
- Optional
- Optional
- Description
Adresse de la localisation.
Paramètres de message contacts
- Name
type- Type
- string
- Description
Définissez
contacts.
- Name
contacts- Type
- array
- Description
Tableau d'objets contact. Chaque contact doit avoir un objet
name(avecfirst_nameetlast_nameoptionnel) et un tableauphones(chacun avecphoneettypeoptionnel :cell,main,iphone,home,work).
Paramètres de message interactif boutons
- Name
type- Type
- string
- Description
Définissez
interactive.
- Name
interactive_type- Type
- string
- Description
Définissez
button.
- Name
body- Type
- string
- Description
Texte du corps affiché à l'utilisateur.
- Name
buttons- Type
- array
- Description
Tableau de 2-3 objets bouton, chacun avec
id(identifiant unique) ettitle(texte d'affichage, max 20 caractères).
- Name
header- Type
- string
- Optional
- Optional
- Description
Texte d'en-tête optionnel.
- Name
footer- Type
- string
- Optional
- Optional
- Description
Texte de pied de page optionnel.
Paramètres de message interactif liste
- Name
type- Type
- string
- Description
Définissez
interactive.
- Name
interactive_type- Type
- string
- Description
Définissez
list.
- Name
body- Type
- string
- Description
Texte du corps affiché à l'utilisateur.
- Name
button_text- Type
- string
- Description
Texte affiché sur le bouton de liste.
- Name
sections- Type
- array
- Description
Tableau d'objets section, chacun avec
titleetrows(tableau d'objets ligne avecid,titleetdescriptionoptionnelle).
- Name
header- Type
- string
- Optional
- Optional
- Description
Texte d'en-tête optionnel.
- Name
footer- Type
- string
- Optional
- Optional
- Description
Texte de pied de page optionnel.
Paramètres optionnels
- Name
delay- Type
- timestamp
- Optional
- Optional
- Description
Date/heure pour l'envoi programmé. Format :
AAAA-MM-JJ hh:mm:ssou horodatage Unix.
- Name
ttl- Type
- integer
- Optional
- Optional
- Description
Spécifie la durée de validité du message en minutes. La valeur par défaut est 2880, soit 48 heures.
- Name
label- Type
- string
- Optional
- Optional
- Description
Libellé personnalisé pour les statistiques. Max. 100 caractères, caractères autorisés : a-z, A-Z, 0-9, .-_@.
- Name
performance_tracking- Type
- boolean
- Optional
- Optional
- Description
Activer le suivi des clics et des performances pour les URL trouvées dans le texte du message. Cela active également le raccourcisseur d'URL.
- Name
foreign_id- Type
- string
- Optional
- Optional
- Description
Votre propre ID pour ce message. Retourné dans les callbacks de rapports de statut. Max. 64 caractères, caractères autorisés : a-z, A-Z, 0-9, .-_@.
Message modèle
curl -X POST https://gateway.seven.io/api/waba/messages \
-H "X-Api-Key: VOTRE_CLE_API" \
-H "Content-Type: application/json" \
-d '{
"from": "4915112345678",
"to": "4917612345678",
"type": "template",
"template": "hello_world",
"language": "de"
}'
Réponse
{
"success": "100",
"total_price": 0.0735,
"balance": 123.45,
"debug": "false",
"sms_type": "WA",
"messages": [
{
"id": "12345678",
"sender": "4915112345678",
"recipient": "4917612345678",
"text": "{\"type\":\"template\",\"template\":\"hello_world\",\"language\":\"de\",\"rendered\":{\"body\":\"Hallo Welt!\"}}",
"encoding": "gsm",
"label": null,
"parts": 1,
"udh": null,
"is_binary": false,
"price": 0.0735,
"channel": "WA",
"success": true,
"error": null,
"error_text": null
}
]
}
Modèle avec paramètres
curl -X POST https://gateway.seven.io/api/waba/messages \
-H "X-Api-Key: VOTRE_CLE_API" \
-H "Content-Type: application/json" \
-d '{
"from": "4915112345678",
"to": "4917612345678",
"type": "template",
"template": "order_confirmation",
"language": "de",
"components": {
"body": ["Max Mustermann", "ORD-12345"],
"buttons": [
{
"type": "button",
"sub_type": "url",
"parameters": [{"type": "text", "text": "ORD-12345"}]
}
]
}
}'
Message libre
curl -X POST https://gateway.seven.io/api/waba/messages \
-H "X-Api-Key: VOTRE_CLE_API" \
-H "Content-Type: application/json" \
-d '{
"from": "4915112345678",
"to": "4917612345678",
"text": "Merci pour votre message, nous nous en occupons !"
}'
Message image
curl -X POST https://gateway.seven.io/api/waba/messages \
-H "X-Api-Key: VOTRE_CLE_API" \
-H "Content-Type: application/json" \
-d '{
"from": "4915112345678",
"to": "4917612345678",
"type": "image",
"url": "https://example.com/photo.jpg",
"caption": "Regardez cette image !"
}'
Message vidéo
curl -X POST https://gateway.seven.io/api/waba/messages \
-H "X-Api-Key: VOTRE_CLE_API" \
-H "Content-Type: application/json" \
-d '{
"from": "4915112345678",
"to": "4917612345678",
"type": "video",
"url": "https://example.com/video.mp4",
"caption": "Regardez cette vidéo"
}'
Message audio
curl -X POST https://gateway.seven.io/api/waba/messages \
-H "X-Api-Key: VOTRE_CLE_API" \
-H "Content-Type: application/json" \
-d '{
"from": "4915112345678",
"to": "4917612345678",
"type": "audio",
"url": "https://example.com/audio.mp3"
}'
Message document
curl -X POST https://gateway.seven.io/api/waba/messages \
-H "X-Api-Key: VOTRE_CLE_API" \
-H "Content-Type: application/json" \
-d '{
"from": "4915112345678",
"to": "4917612345678",
"type": "document",
"url": "https://example.com/facture.pdf",
"filename": "facture.pdf",
"caption": "Votre facture"
}'
Message sticker
curl -X POST https://gateway.seven.io/api/waba/messages \
-H "X-Api-Key: VOTRE_CLE_API" \
-H "Content-Type: application/json" \
-d '{
"from": "4915112345678",
"to": "4917612345678",
"type": "sticker",
"url": "https://example.com/sticker.webp"
}'
Message localisation
curl -X POST https://gateway.seven.io/api/waba/messages \
-H "X-Api-Key: VOTRE_CLE_API" \
-H "Content-Type: application/json" \
-d '{
"from": "4915112345678",
"to": "4917612345678",
"type": "location",
"latitude": 48.8566,
"longitude": 2.3522,
"name": "Tour Eiffel",
"address": "5 Avenue Anatole France, 75007 Paris"
}'
Message contacts
curl -X POST https://gateway.seven.io/api/waba/messages \
-H "X-Api-Key: VOTRE_CLE_API" \
-H "Content-Type: application/json" \
-d '{
"from": "4915112345678",
"to": "4917612345678",
"type": "contacts",
"contacts": [
{
"name": {
"first_name": "Jean",
"last_name": "Dupont"
},
"phones": [
{
"phone": "+33123456789"
}
]
}
]
}'
Message interactif boutons
curl -X POST https://gateway.seven.io/api/waba/messages \
-H "X-Api-Key: VOTRE_CLE_API" \
-H "Content-Type: application/json" \
-d '{
"from": "4915112345678",
"to": "4917612345678",
"type": "interactive",
"interactive_type": "button",
"header": "Support",
"body": "Comment pouvons-nous vous aider ?",
"footer": "Appuyez sur un bouton",
"buttons": [
{"id": "btn_sales", "title": "Ventes"},
{"id": "btn_support", "title": "Support"},
{"id": "btn_other", "title": "Autre"}
]
}'
Message interactif liste
curl -X POST https://gateway.seven.io/api/waba/messages \
-H "X-Api-Key: VOTRE_CLE_API" \
-H "Content-Type: application/json" \
-d '{
"from": "4915112345678",
"to": "4917612345678",
"type": "interactive",
"interactive_type": "list",
"header": "Nos Produits",
"body": "Parcourez nos catégories :",
"footer": "Sélectionnez une option",
"button_text": "Voir les options",
"sections": [
{
"title": "Électronique",
"rows": [
{"id": "smartphones", "title": "Smartphones", "description": "Derniers modèles"},
{"id": "ordinateurs", "title": "Ordinateurs", "description": "Business & Gaming"}
]
}
]
}'
Composants de modèle
La structure components prend en charge trois tableaux optionnels : header, body et buttons. Les valeurs sont positionnelles et remplacent {{1}}, {{2}}, etc. dans le modèle.
Paramètres d'en-tête
- En-tête texte : Fournissez des valeurs de chaîne pour les espaces réservés
- En-tête image : Fournissez une URL vers l'image
Paramètres du corps
Fournissez des valeurs de chaîne qui remplacent {{1}}, {{2}}, etc. dans le corps du modèle.
Paramètres de bouton
Pour les boutons URL avec des suffixes dynamiques, fournissez un tableau d'objets bouton :
- Name
type- Type
- string
- Description
Toujours
button.
- Name
sub_type- Type
- string
- Description
Le type de bouton, ex.
url.
- Name
parameters- Type
- array
- Description
Tableau d'objets paramètres avec les propriétés
typeettext.
En-tête + Corps + Boutons
{
"from": "4915112345678",
"to": "4917612345678",
"type": "template",
"template": "appointment_reminder",
"language": "fr",
"components": {
"header": ["Confirmation de rendez-vous"],
"body": ["Max Mustermann", "15/02/2026", "14h00", "Dr. Schmidt"],
"buttons": [
{
"type": "button",
"sub_type": "url",
"parameters": [{"type": "text", "text": "abc123"}]
}
]
}
}
En-tête image + Corps
{
"from": "4915112345678",
"to": "4917612345678",
"type": "template",
"template": "product_available",
"language": "fr",
"components": {
"header": ["https://example.com/product.jpg"],
"body": ["Premium Widget"]
}
}
Supprimer un message
Supprimez un message WhatsApp programmé avant son envoi.
- Name
id- Type
- string
- Description
L'ID du message à supprimer. Transmis en paramètre de chemin URL.
Les messages déjà envoyés ne peuvent pas être supprimés. WhatsApp ne prend pas en charge la révocation de messages.
Requête
curl -X DELETE https://gateway.seven.io/api/waba/messages/12345678 \
-H "X-Api-Key: VOTRE_CLE_API"
Réponse (succès)
{
"success": true
}
Réponse (déjà envoyé)
{
"error_code": 400,
"error_message": "Message already sent. WhatsApp does not support message revocation."
}
Réponse (non trouvé)
{
"code": 404,
"message": "Page not found",
"errors": []
}
Envoyer un événement
Envoyez des événements de conversation tels que des accusés de lecture, des indicateurs de saisie ou des réactions à un contact WhatsApp.
Les événements ne peuvent être envoyés que pour les messages des 7 derniers jours. Les conversations plus anciennes ne sont plus éligibles à la livraison d'événements.
Au moins un des paramètres to ou msg_id doit être fourni pour identifier la conversation ou le message cible.
Paramètres d'événement lecture/saisie
- Name
from- Type
- string
- Description
Votre numéro d'expéditeur WhatsApp Business enregistré.
- Name
to- Type
- string
- Optional
- Optional
- Description
Numéro de téléphone du destinataire au format international. Au moins
tooumsg_iddoit être fourni.
- Name
event- Type
- string
- Description
Le type d'événement. Valeurs disponibles :
read,is_typing.
- Name
msg_id- Type
- string
- Optional
- Optional
- Description
ID de message explicite à marquer comme lu. Au moins
tooumsg_iddoit être fourni.
Paramètres d'événement réaction
- Name
event- Type
- string
- Description
Définissez
reaction.
- Name
msg_id- Type
- string
- Description
L'ID du message WhatsApp auquel réagir.
- Name
emoji- Type
- string
- Description
L'emoji à utiliser comme réaction (ex.
👍). Envoyez une chaîne vide pour supprimer la réaction.
Accusé de lecture
curl -X POST https://gateway.seven.io/api/waba/events \
-H "X-Api-Key: VOTRE_CLE_API" \
-H "Content-Type: application/json" \
-d '{
"from": "4915112345678",
"to": "4917612345678",
"event": "read"
}'
Indicateur de saisie
curl -X POST https://gateway.seven.io/api/waba/events \
-H "X-Api-Key: VOTRE_CLE_API" \
-H "Content-Type: application/json" \
-d '{
"from": "4915112345678",
"to": "4917612345678",
"event": "is_typing"
}'
Réaction
curl -X POST https://gateway.seven.io/api/waba/events \
-H "X-Api-Key: VOTRE_CLE_API" \
-H "Content-Type: application/json" \
-d '{
"event": "reaction",
"msg_id": "123456789",
"emoji": "👍"
}'
Réponse
{
"success": true
}
Réponse d'erreur
{
"success": false,
"error_code": 400,
"error_message": "Invalid WhatsApp sender number"
}
Réponses d'erreur
- Name
100- Description
Le message a été accepté par la passerelle et est en cours d'envoi.
- Name
7002001- Description
Pas de conversation active. Les messages libres ne peuvent être envoyés que dans une fenêtre de conversation active de 24 heures. Utilisez un message modèle pour initier une conversation.
- Name
400- Description
Requête invalide. Peut indiquer un numéro d'expéditeur invalide, un numéro de destinataire invalide ou d'autres erreurs de validation.
- Name
404- Description
Message non trouvé. L'ID de message spécifié n'existe pas ou n'appartient pas à votre compte.
- Name
900- Description
L'authentification a échoué. Veuillez vérifier la clé API utilisée dans Authentification.
- Name
902- Description
La clé API n'a pas les droits d'accès à ce point de terminaison. Assurez-vous que le scope
wabaest activé.