RÉFÉRENCE API

Facturation

Zendou fonctionne par crédits prépayés : 1 crédit = 1 email accepté par l'API. Pas d'abonnement, pas de carte bancaire internationale - la recharge se fait en Orange Money ou MTN MoMo.

1 crédit = 1 email

Chaque email accepté par POST /v1/emails (statut queued) débite un crédit au moment de l’acceptation de la requête - pas à la livraison. Un email bloqué par la liste de suppression (statut suppressed) n’est jamais facturé. Votre solde est simplement la somme de tous les mouvements de crédits de votre compte : recharges approuvées et crédits offerts, moins envois facturés.

Packs disponibles

PackCréditsPrixAchetable
Découverte1 000Offert à la confirmation de l’emailNon
Starter15 00050 000 GNFOui
Growth30 00090 000 GNFOui

Prix indicatifs, susceptibles d’évoluer. Le catalogue à jour est disponible via GET /v1/billing/packs.

Les crédits n'expirent pas

Un crédit acheté ou offert reste valable jusqu’à ce qu’il soit consommé par un envoi - aucune date de péremption, aucun crédit perdu en fin de mois. Un compte qui a encore des crédits achetés n’est jamais anonymisé pour inactivité ; sans crédits achetés, la règle décrite dans la politique de confidentialité s’applique.

Lire son solde par l’API

GET /v1/billing/balance accepte une clé API (Authorization: Bearer zd_live_...) en plus de la session du tableau de bord : une application peut donc surveiller elle-même son solde. Toute clé active du compte suffit. Une clé inconnue ou révoquée donne une réponse 401, un compte suspendu une réponse 403.

curl
curl https://api.zendou.app/v1/billing/balance \
  -H "Authorization: Bearer zd_live_votre_cle"
200 OK
{
  "balance": 14250,
  "totalPurchased": 15000,
  "totalGifted": 1000,
  "totalConsumed": 1750
}

Alerte de solde bas

Zendou envoie un email au titulaire du compte lorsque le solde passe sous 10 % du solde atteint juste après le dernier crédit positif (recharge, crédit offert ou bonus), avec un minimum de 50 crédits. L’alerte part une seule fois par passage sous ce seuil, et se réarme au crédit suivant. À zéro crédit, les envois sont refusés : réponse 402 pour l’API, refus aussi côté relais SMTP.

Recharger par Orange Money ou MTN MoMo

Zendou n’a pas d’accès automatisé aux API Orange Money et MTN MoMo : la recharge se fait en trois temps.

  1. 1

    Effectuez le transfert

    Depuis votre application Orange Money ou MTN MoMo, transférez le montant du pack choisi vers le numéro Zendou indiqué sur l’écran de recharge du tableau de bord. Conservez la référence de transaction fournie par l’opérateur (SMS de confirmation).

  2. 2

    Déclarez la recharge

    Renseignez le pack, la méthode, votre numéro et la référence de transaction. La demande est créée avec le statut PENDING.

  3. 3

    Un administrateur valide la demande

    Après rapprochement avec le transfert reçu, la demande passe à APPROVED et les crédits sont ajoutés à votre solde - ou à REJECTED, avec un motif, si le transfert n’a pas pu être rapproché.

POST /v1/billing/topup-requests
curl -X POST https://api.zendou.app/v1/billing/topup-requests \
  -H "Content-Type: application/json" \
  --cookie "zendou_session=..." \
  -d '{
    "packId": "starter",
    "method": "ORANGE_MONEY",
    "phoneNumber": "+224 620 00 00 00",
    "transactionRef": "OM.2601.2201.A12345"
  }'
201 Created
{
  "id": "clx1a2b3c4d5",
  "packId": "starter",
  "credits": 15000,
  "amountGnf": 50000,
  "method": "ORANGE_MONEY",
  "phoneNumber": "+224 620 00 00 00",
  "transactionRef": "OM.2601.2201.A12345",
  "status": "PENDING",
  "rejectionReason": null,
  "createdAt": "2026-08-11T10:32:00.000Z"
}

Une même référence de transaction ne peut avoir qu’une seule demande en attente à la fois - une seconde tentative avec la même référence répond 409 Conflict.

Endpoints de facturation

EndpointDescription
GET /v1/billing/balanceSolde actuel, total acheté, total offert, total consommé.
GET /v1/billing/packsCatalogue des packs disponibles.
GET /v1/billing/entriesHistorique paginé des mouvements de crédits (recharges, envois).
POST /v1/billing/topup-requestsDéclare une recharge Mobile Money en attente de validation.

Ces endpoints sont authentifiés par la session du tableau de bord (cookie), pas par une clé API.

Limite journalière

Indépendamment du solde de crédits, chaque compte a une limite d’envois par jour (comptés depuis minuit UTC), qui protège la réputation d’envoi de la plateforme entière pendant qu’un compte fait ses preuves. Elle monte automatiquement, sans démarche de votre part, dès que l’ancienneté et le volume cumulé sont atteints :

ConditionLimite journalière
Compte nouvellement créé200 emails / jour
3 jours d'ancienneté et 100 emails envoyés au total1 000 emails / jour
7 jours d'ancienneté et 1 000 emails envoyés au total5 000 emails / jour
30 jours d'ancienneté et 10 000 emails envoyés au total20 000 emails / jour

La limite ne redescend jamais d’elle-même ; seule une suspension du compte pour réputation dégradée coupe les envois. Si vous atteignez la limite du jour, POST /v1/emails répond 429 jusqu’au lendemain.