L'API WhatsApp de Maxu Connect

Votre logiciel envoie et reçoit des WhatsApp au nom de vos clients (une école, une boutique, une clinique), chacun avec son propre numéro, sans démarche de votre côté chez Meta : Maxu Connect est fournisseur de technologie (Tech Provider) de la plateforme WhatsApp Business. Vous déclarez un client, vous lui envoyez un lien, il branche son numéro en cinq minutes, vous envoyez.

Développeur : 15 000 F par mois, 10 entreprises branchées comprises, 1 000 F par entreprise en plus ; 14 jours d'essai gratuit . Créer mon compte développeur J'ai déjà un compte

1. Les bases

2. Déclarer un client et brancher son numéro

# Déclarer (ou mettre à jour) le client « ecole-42 »
curl -X PUT https://connect.maxuconnect.com/api/v1/clients/ecole-42 \
  -H "Authorization: Bearer mc_votre_cle" -H "Content-Type: application/json" \
  -d '{"nom":"Groupe Scolaire Teranga","contact_nom":"Mme Diop","contact_telephone":"+221771234567"}'

# Le lien à lui envoyer : il y branche son numéro WhatsApp Business (fenêtre officielle de Meta)
curl -X POST https://connect.maxuconnect.com/api/v1/clients/ecole-42/invitation -H "Authorization: Bearer mc_votre_cle"
# → {"lien":"https://…/connecter/…","expire_le":"…"}   (valable 7 jours, une fois)

# Son état : « whatsapp » reste vide tant que le numéro n'est pas branché
curl https://connect.maxuconnect.com/api/v1/clients/ecole-42 -H "Authorization: Bearer mc_votre_cle"

Le numéro doit être un numéro professionnel : en se branchant, il quitte l'application WhatsApp habituelle (ou WhatsApp Business) ; c'est votre logiciel qui parle. Quand le branchement est fait, vous recevez le retour client.connecte (voir 6).

3. Les modèles de messages

Pour écrire en premier à quelqu'un, WhatsApp exige un modèle validé par Meta sur le numéro du client. Vous les déclarez une fois par client ; la validation prend en général moins d'une heure. Règles de Meta : nom en minuscules (lettres, chiffres, _), un exemple par variable {{1}}, pas de variable au tout début ni à la toute fin, catégorie UTILITY pour un message utile au client (une facture, un rendez-vous), MARKETING pour une offre.

curl -X POST https://connect.maxuconnect.com/api/v1/clients/ecole-42/modeles \
  -H "Authorization: Bearer mc_votre_cle" -H "Content-Type: application/json" \
  -d '{"modeles":[{"nom":"facture_disponible","categorie":"UTILITY",
       "corps":"Bonjour {{1}}, la facture de {{2}} ({{3}}) est disponible. Répondez à ce message pour toute question.",
       "exemples":["Mme Diop","Awa","45 000 F"]}]}'
# → {"ajoutes":1,"deja":0,"soumis":1,"refus":{},"modeles":[…]}

# Leur statut (BROUILLON, PENDING, APPROVED, REJECTED)
curl https://connect.maxuconnect.com/api/v1/clients/ecole-42/modeles -H "Authorization: Bearer mc_votre_cle"

4. Envoyer

# Un modèle validé, avec ses valeurs dans l'ordre
curl -X POST https://connect.maxuconnect.com/api/v1/messages \
  -H "Authorization: Bearer mc_votre_cle" -H "Content-Type: application/json" \
  -d '{"client":"ecole-42","telephone":"+221771234567","modele":"facture_disponible",
       "parametres":["Mme Diop","Awa","45 000 F"],"reference":"facture-2026-0042"}'
# → 202 {"message":{"id":"…","statut":"en_attente",…}}   puis envoye, remis, lu par les retours

# Une réponse libre (texte, boutons, menu, document, lien) : seulement dans les 24 h qui suivent un message reçu de ce numéro
curl -X POST https://connect.maxuconnect.com/api/v1/reponses \
  -H "Authorization: Bearer mc_votre_cle" -H "Content-Type: application/json" \
  -d '{"client":"ecole-42","telephone":"+221771234567","type":"boutons",
       "texte":"Confirmez-vous le rendez-vous de lundi 10 h ?","choix":[{"id":"oui","titre":"Oui"},{"id":"non","titre":"Non"}]}'

Types de réponses libres : texte {texte} · boutons {texte, choix: [{id, titre ≤ 20}] ≤ 3, pied?} · menu {texte, bouton ≤ 20, lignes: [{id, titre ≤ 24, description? ≤ 72}] ≤ 10, pied?} · document {lien https, nom?, legende?} · lien {texte, bouton, url https, pied?}. Le statut d'un message : GET /messages/{id}. Marquer un message reçu comme lu : POST /messages/{id}/lu.

5. Formulaires WhatsApp

POST /clients/{référence}/formulaires {nom, json} publie un formulaire WhatsApp (« Flow ») sur le numéro du client ; un modèle peut l'ouvrir d'un bouton, les réponses vous reviennent dans un message.recu (formulaire, photos par identifiant de média à télécharger par GET /medias/{id}?client=…). Détail sur demande : c'est la partie la plus technique, nous vous accompagnons.

6. Recevoir : les retours vers votre logiciel

Dans votre espace développeur, donnez une adresse de retour (https). Nous y envoyons un POST JSON pour chaque événement, signé avec votre secret :

Vérifiez la signature avant de traiter : l'en-tête X-Connect-Signature vaut sha256= + HMAC-SHA256 du corps brut avec votre secret. Répondez 200 vite (traitez ensuite) ; sinon nous réessayons.

// PHP
$corps = file_get_contents('php://input');
$attendu = 'sha256='.hash_hmac('sha256', $corps, $secret);
if (! hash_equals($attendu, $_SERVER['HTTP_X_CONNECT_SIGNATURE'] ?? '')) { http_response_code(401); exit; }
$evenement = json_decode($corps, true);   // $evenement['type'], $evenement['client'], $evenement['message']…

// Node.js (Express, avec express.raw({type: 'application/json'}))
const attendu = 'sha256=' + crypto.createHmac('sha256', secret).update(req.body).digest('hex');
if (!crypto.timingSafeEqual(Buffer.from(attendu), Buffer.from(req.get('X-Connect-Signature') || ''))) return res.sendStatus(401);

7. Votre consommation et vos plafonds

GET /consommation?mois=2026-11 rend, pour votre logiciel : entreprises déclarées et branchées, messages envoyés par catégorie, réponses libres, échecs, messages reçus, et le détail par client. Votre espace développeur montre la même chose. Chaque logiciel a un plafond d'entreprises branchées et de messages par jour (ils protègent la note de qualité des numéros) ; au-delà, la réponse 422 porte plafond : écrivez-nous pour les relever.

8. Ce qu'il faut savoir sur WhatsApp

Besoin d'aide ?

WhatsApp +221 78 782 75 62 · [email protected]. Nous répondons en français, et nous pouvons relire votre intégration.