Combien coûte un message WhatsApp (template, réponse libre, message reçu) et comment le calculer

Un template coûte des crédits selon sa catégorie (lisez GET /v1/pricing) et Meta vous facture en plus sur votre compte Meta ; une réponse libre ou interactive dans les 24 h coûte 1 crédit pour 4 messages par défaut, sans jamais bloquer.

Combien coûte un message WhatsApp (template, réponse libre, message reçu) et comment le calculer

Astuce
Un template coûte des crédits selon sa catégorie (lisez GET /v1/pricing) et Meta vous facture en plus sur votre compte Meta ; une réponse libre ou interactive dans les 24 h coûte 1 crédit pour 4 messages par défaut, sans jamais bloquer.

Scénario

Vous voulez chiffrer un envoi avant de lancer une campagne, ou comprendre pourquoi votre solde baisse. Il y a deux factures distinctes : la vôtre chez Geskap, en crédits, et celle de Meta, sur votre propre compte Meta. Ne cherchez pas un prix unique.

Ce que coûte chaque type de message

MessageFrais Geskap (crédits)Facture Meta
Template (POST /v1/messages)Un montant fixe par catégorie : utility, authentication, marketingOui, directement sur votre compte Meta
Réponse libre (/v1/messages/reply) ou interactive (/v1/messages/interactive), dans les 24 h1 crédit pour N messages (N = 4 par défaut, réglé par compte)Depuis le 1er octobre 2026, au-delà de 1 000 messages de service par mois et par numéro
Message reçuInclus dans un quota mensuel, puis 1 crédit par tranche de messages reçus (voir plus bas)Voir la grille Meta
Créer ou lister un template, GET /v1/ping, lire le soldeAucun débit—

Un tiret (—) signifie que cette API ne facture rien et n'affiche rien : la facture Meta éventuelle se lit dans votre compte Meta.

Lire les montants, ne pas les écrire en dur

Les montants sont des réglages que l'administrateur peut changer. Lisez-les :

curl

curl -X GET "https://wa-api.geskap.com/v1/pricing" \
  -H "Authorization: Bearer $GESKAP_API_KEY"

Node.js

const res = await fetch("https://wa-api.geskap.com/v1/pricing", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.GESKAP_API_KEY}`,
  },
});
console.log(res.status, await res.json());

PHP

$ch = curl_init("https://wa-api.geskap.com/v1/pricing");
curl_setopt_array($ch, [
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer " . getenv("GESKAP_API_KEY"),
  ],
]);
$res = curl_exec($ch);
echo curl_getinfo($ch, CURLINFO_HTTP_CODE), " ", $res;

Python

import os, requests

res = requests.request(
    "GET",
    "https://wa-api.geskap.com/v1/pricing",
    headers={"Authorization": f"Bearer {os.environ['GESKAP_API_KEY']}"},
    timeout=15,
)
print(res.status_code, res.json())

La réponse donne, par catégorie, platform_fee_credits et platform_fee_xaf. Les frais Meta ne sont jamais dans cette réponse : ils sont facturés par Meta, selon la grille officielle de Meta.

Calculer un envoi

Campagne de 500 templates utility
  frais Geskap = 500 × platform_fee_credits(utility)      (lu dans GET /v1/pricing)
  frais Meta   = selon la grille Meta, sur votre compte Meta

Conversation de 40 réponses libres dans les 24 h
  frais Geskap = 40 ÷ 4 = 10 crédits (si N = 4)

Suivez le solde réel : chaque envoi de template renvoie credits_charged et credits_remaining, et l'en-tête X-Credits-Remaining. GET /v1/balance donne credit_balance, low_balance_threshold et low_balance.

Quand un envoi échoue

Messages reçus

Recevoir ne bloque jamais, même sans crédit. Un quota mensuel de messages reçus est inclus ; au-delà, la facturation se fait par tranche, sans jamais refuser un message. La valeur de départ du quota est de 1 000 messages par mois, à raison de 1 crédit pour 20 messages ensuite, mais ces deux valeurs sont réglables : en cas de gros volume entrant, demandez la grille en vigueur au support.

Attention
Piège : une réponse dans les 24 h, déjà facturée à tarif réduit par Geskap, peut aussi devenir payante chez Meta au-delà de 1 000 par mois et par numéro depuis le 1er octobre 2026. Cette facture arrive sur votre compte Meta, pas dans vos crédits Geskap.
Attention
Piège : un statut failed reçu après l'envoi (via message.status) n'est pas remboursé automatiquement par le code actuel : seul le refus immédiat de Meta (502) l'est. Gardez la trace de vos envois (voir Statut de livraison).
Attention
Piège : une catégorie marketing n'est pas forcément ouverte à votre clé : l'envoi répond 403 « Catégorie MARKETING non activée pour cette clé » tant qu'elle n'est pas activée sur le compte.

Pour les crédits bas et la recharge automatique, voir Crédits bas et recharge automatique. Pour tester sans dépenser, voir Tester sans payer.

Preuve — vérifié dans le code de l'API : public_api.py, api_send.py, api_credits.py.