Aller au contenu principal
API publique · v1

Référence développeur

Envoyez des messages WhatsApp et gérez vos contacts par API REST. Facturation à la consommation, sans abonnement — pensée pour les intégrations et le gros volume.

BASEhttps://api.whakup.com/v1

Introduction

L'API Whakup est une API REST : requêtes et réponses en JSON, dates au format ISO 8601. Toutes les données sont scopées au workspace de la clé utilisée.

  • Base : https://api.whakup.com/v1
  • En-tête Content-Type: application/json pour les requêtes avec corps.
  • Facturation à la consommation, agrégée par mois.

Authentification

Chaque requête porte une clé d'API du workspace (préfixe wk_), au choix dans l'un des deux en-têtes :

# Recommandé
Authorization: Bearer wk_votre_cle

# Alternative
X-Api-Key: wk_votre_cle

Création

Tableau de bord → Réglages → Clés API (offre Business).

Affichée une fois

La clé en clair n’apparaît qu’à la création — conservez-la.

Révocable

Révocation immédiate depuis le tableau de bord.

Sécurité

Seul le hash SHA-256 est stocké côté serveur.

Requête sans clé valide → 401 Unauthorized. Ne jamais exposer une clé côté navigateur.

Limites & quotas

LimitePortéeValeurDépassement
Débit APIpar clé1 200 / minrate_limited
Débit d’envoipar numéro80 / secondethroughput_exceeded
Quota marketingpar numéro / jourlimite Metamarketing_quota_reached
Quota mensuelpar offreinclus dans l’offrequota_reached

Le débit d'envoi (80/s) est partagé avec l'envoi de campagnes depuis l'app. Les réponses429 incluent un en-tête Retry-After (secondes) : respectez-le (back-off).

Erreurs

Forme : { "error": "message", "code": "machine_code" }

HTTPcodeSignification
400—Requête invalide (champ requis manquant).
401—Clé API invalide ou manquante.
402feature_lockedAccès API non inclus dans l’offre.
402quota_reachedQuota mensuel de messages atteint.
429rate_limitedTrop de requêtes pour cette clé.
429throughput_exceededDébit maximal du numéro atteint.
429marketing_quota_reachedQuota marketing quotidien atteint.
502—Échec côté fournisseur (non envoyé).

Vérifier la clé

GET/ping

Renvoie le workspace associé à la clé. Idéal pour tester l'authentification.

curl https://api.whakup.com/v1/ping \
  -H "Authorization: Bearer wk_votre_cle"

Réponse 200

{ "workspace": { "id": "018f…", "name": "Ma Boutique" } }

Lister les contacts

GET/contacts
ChampTypeRequisNotes
limitentier—défaut 50, max 100
offsetentier—pagination (défaut 0)
curl "https://api.whakup.com/v1/contacts?limit=20&offset=0" \
  -H "Authorization: Bearer wk_votre_cle"

Réponse 200

{
  "data": [
    {
      "id": "018f…",
      "displayName": "Jean Dupont",
      "phone": "+2250700000000",
      "email": "jean.dupont@example.com",
      "createdAt": "2026-09-09T14:30:00+00:00"
    }
  ],
  "total": 5032
}

Créer un contact

POST/contacts
ChampTypeRequisNotes
displayNamestring✓nom affiché
phonestring—format international (+225…)
emailstring—
curl -X POST https://api.whakup.com/v1/contacts \
  -H "Authorization: Bearer wk_votre_cle" \
  -H "Content-Type: application/json" \
  -d '{ "displayName": "Jean Dupont", "phone": "+2250700000000" }'

Réponse 201

{
  "id": "018f…",
  "displayName": "Jean Dupont",
  "phone": "+2250700000000",
  "email": null,
  "createdAt": "2026-09-09T14:30:00+00:00"
}

Envoyer un message WhatsApp

POST/messages

Envoi immédiat sur le canal WhatsApp du workspace. Facturé au message (voir Tarifs).

ChampTypeRequisNotes
tostring✓numéro destinataire (international)
bodystring✓contenu du message
categorystring—marketing | utility | authentication | service — défaut utility

La catégoriedoit refléter la nature réelle du message (règles Meta) : elle détermine les frais Meta et l'application du quota marketing.

curl -X POST https://api.whakup.com/v1/messages \
  -H "Authorization: Bearer wk_votre_cle" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "+2250700000000",
    "body": "Votre commande est prête !",
    "category": "utility"
  }'

Réponse 201

{
  "id": "wamid.HBg…",
  "status": "sent",
  "to": "+2250700000000",
  "category": "utility",
  "cost": { "whakup": 0.0088, "meta": 0.0248, "total": 0.0336 }
}

Prérequis : un canal WhatsApp configuré (sinon 400). Voir la table des erreurs pour 402 / 429 / 502.

Lister les templates

GET/templates
ChampTypeRequisNotes
limitentier—défaut 25, max 100
offsetentier—pagination (défaut 0)
statusstring—draft | pending | approved | rejected (filtre)
curl "https://api.whakup.com/v1/templates?status=approved" \
  -H "Authorization: Bearer wk_votre_cle"

Réponse 200

{
  "data": [
    {
      "id": "018f…",
      "name": "confirmation_commande",
      "language": "fr",
      "category": "utility",
      "status": "approved",
      "body": "Bonjour {{1}}, votre commande est confirmée.",
      "variables": ["1"]
    }
  ],
  "total": 12
}

Créer un template

POST/templates

Crée un template (reste en draft jusqu'à soumission à Meta).

ChampTypeRequisNotes
namestring✓minuscules, chiffres, underscores
languagestring✓ex. fr, en_US
categorystring✓marketing | utility | authentication
bodystring✓≤ 1024 caractères, variables {{1}}
headerobjet—{ type: text|image|video|document, text?, mediaUrl? }
footerstring—≤ 60 caractères
buttonstableau—quick_reply | url | phone_number
samplesobjet—valeurs d’exemple des variables
curl -X POST https://api.whakup.com/v1/templates \
  -H "Authorization: Bearer wk_votre_cle" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "confirmation_commande",
    "language": "fr",
    "category": "utility",
    "body": "Bonjour {{1}}, votre commande est confirmée.",
    "samples": { "1": "Jean" }
  }'

Réponse 201

{
  "id": "018f…",
  "name": "confirmation_commande",
  "language": "fr",
  "category": "utility",
  "status": "draft",
  "variables": ["1"]
}

Nécessite l'accès API (402 feature_locked sinon). Nom déjà pris dans la langue → 409.

Soumettre à Meta

POST/templates/{id}/submit

Envoie le template en revue Meta (→ pending). Un canal WhatsApp connecté est requis.

curl -X POST https://api.whakup.com/v1/templates/018f…/submit \
  -H "Authorization: Bearer wk_votre_cle"

Erreurs : 409 no_channel_connected (aucun canal),422 (non conforme aux règles Meta),502 (refus Meta).

Supprimer un template

DELETE/templates/{id}
curl -X DELETE https://api.whakup.com/v1/templates/018f… \
  -H "Authorization: Bearer wk_votre_cle"

Réponse 204 (aucun contenu). Introuvable → 404.

Tarifs (à l'usage)

Coût par message = frais Whakup fixes + frais Meta selon la catégorie (€, indicatifs).

CatégorieWhakupMetaTotal
marketing0,0088 €0,0712 €0,0800 €
utility0,0088 €0,0248 €0,0336 €
authentication0,0088 €0,0248 €0,0336 €
service0,0088 €0,0000 €0,0088 €

Consommation du mois en cours visible dans le tableau de bord (facturation).

Bonnes pratiques

  • Stockez la clé côté serveur (variable d'environnement) ; jamais dans le navigateur.
  • Gérez les 429 avec l'en-tête Retry-After (back-off exponentiel).
  • Renseignez la bonne category — impact tarifaire et conformité Meta.
  • Pour de gros volumes, lissez les envois sous 80 msg/s par numéro.

Prêt à intégrer ?

Créez une clé API depuis votre tableau de bord et envoyez votre premier message.

Ouvrir le tableau de bord