API WaziBot
Envoyez des messages WhatsApp et vérifiez des numéros par code (OTP) depuis votre code, sur l'API officielle de Meta. Réservée aux plans Pro et Agence.
Spécification OpenAPI : /api/openapi.json (importable dans Swagger UI, Postman, Insomnia).
Authentification
Générez un token depuis votre tableau de bord, page API (plans Pro et Agence). Le token est affiché une seule fois : conservez-le côté serveur, jamais dans un navigateur ou une app mobile. Passez-le en en-tête sur chaque requête :
- URL de base
- https://wazibot.com/api/v1
- Format
- JSON en requête et en réponse
- Numéro d'envoi
- Celui rattaché au token
- Numéros (champ to)
- Format international sans le +, ex. 221771234567
Limites et quotas
- Débit API : les requêtes sont limitées par minute et par token. Un dépassement renvoie 429.
- Quota d'envoi : chaque envoi de production compte dans votre quota journalier. Quota atteint, plafond horaire ou contact bloqué renvoient 429.
- Fenêtre de 24h : le texte libre et les médias ne sont autorisés que si le contact vous a écrit dans les dernières 24h. En dehors, passez par un template approuvé (réponse 422 window_closed sinon).
- OTP : nombre d'envois par numéro et par jour, et nombre de tentatives de vérification par code, tous deux plafonnés.
Codes de réponse
| 200 | Succès (vérification OTP notamment). |
| 201 | Message ou code accepté et transmis. |
| 401 | Token absent, invalide ou révoqué. |
| 403 | Plan sans accès API (Pro ou Agence requis). |
| 422 | Données invalides, template introuvable, ou fenêtre 24h fermée. |
| 429 | Débit, quota ou plafond atteint. |
| 502 | Envoi refusé par WhatsApp (paramètre de template invalide, etc.). |
Les erreurs renvoient un objet {"error": "slug", "message": "..."} ; le champ error est stable et sûr à tester en code.
Endpoints
Envoi d'un message texte libre. Nécessite une fenêtre de 24h ouverte.
Paramètres
| to | string | requis | Numéro destinataire, format international sans +. |
| body | string | requis | Contenu du message (4096 caractères max). |
Exemple
Réponses
- 201 Accepté : {"id","to","status":"sent"}.
- 422 window_closed : fenêtre 24h fermée, utilisez un template.
- 429 Quota ou plafond d'envoi atteint.
Envoi d'un template approuvé. Autorisé hors fenêtre 24h.
Paramètres
| to | string | requis | Numéro destinataire. |
| template | string | requis | Nom court du template approuvé pour votre organisation. |
| language | string | optionnel | Code langue, par défaut celui du template (ex. fr). |
| components | array | optionnel | Variables du template au format Meta (body, buttons...). |
Exemple
Réponses
- 201 Accepté : {"id","to","status":"sent"}.
- 422 template_not_found : template inconnu ou non approuvé.
- 502 whatsapp_api_error : rejet Meta (variable manquante, etc.).
Envoi d'une image par URL. Fenêtre de 24h requise.
Paramètres
| to | string | requis | Numéro destinataire. |
| link | string | requis | URL publique de l'image. |
| caption | string | optionnel | Légende (1024 caractères max). |
Exemple
Réponses
- 201 Accepté.
- 422 window_closed hors fenêtre 24h.
Envoi d'un document par URL. Fenêtre de 24h requise.
Paramètres
| to | string | requis | Numéro destinataire. |
| link | string | requis | URL publique du document. |
| filename | string | optionnel | Nom de fichier affiché. |
| caption | string | optionnel | Légende. |
Exemple
Réponses
- 201 Accepté.
- 422 window_closed hors fenêtre 24h.
Envoi d'un code de vérification (OTP). WaziBot génère le code, l'envoie depuis votre numéro via votre template d'authentification approuvé, et gère l'expiration. Vous ne stockez aucun code.
Paramètres
| to | string | requis | Numéro WhatsApp à vérifier. |
| template | string | optionnel | Nom du template d'authentification, par défaut otp_verification. |
| language | string | optionnel | Code langue, par défaut celui du template. |
Exemple
Réponses
- 201 Envoyé : {"to","status":"sent","expires_in"} (durée en secondes).
- 422 template_not_found : template d'authentification absent ou non approuvé.
- 429 otp_rate_limited : trop de codes demandés pour ce numéro aujourd'hui.
- 502 whatsapp_api_error : rejet Meta.
Vérification du code saisi par l'utilisateur. Le code est consommé au premier succès.
Paramètres
| to | string | requis | Numéro vérifié précédemment. |
| code | string | requis | Code reçu par l'utilisateur. |
Exemple
Réponses
- 200 Vérifié : {"to","verified":true}.
- 422 invalid_or_expired : code faux, expiré ou déjà utilisé ({"verified":false}).
- 429 too_many_attempts : trop de tentatives pour ce code.
État de votre numéro : statut, quality rating, tier de messagerie et plan.
Réponses
- 200 Objet d'état du numéro.
Configuration de l'URL de réception des messages entrants (signés HMAC).
Paramètres
| url | string | requis | URL HTTPS de réception. |
| secret | string | optionnel | Secret partagé pour la signature. |
Exemple
Réponses
- 200 URL enregistrée.
Vérifier un numéro par OTP
Le parcours en deux appels, la logique du code reste chez WaziBot :
- Votre application appelle POST /otp/send avec le numéro. L'utilisateur reçoit le code sur WhatsApp.
- Votre application appelle POST /otp/verify avec le code saisi. La réponse indique s'il est valide.
Prérequis : un template d'authentification approuvé par Meta sur votre numéro (fourni par l'équipe WaziBot). Le code expire au bout de la durée renvoyée dans expires_in, et il est invalidé après un nombre limité de tentatives.