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 moins envois facturés.

Packs disponibles

PackCréditsPrixAchetable
Découverte1 000Offert à l’inscriptionNon
Starter10 00025 000 GNFOui
Growth30 00060 000 GNFOui
Pack 5 0005 00015 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.

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.dev/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": 10000,
  "amountGnf": 25000,
  "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 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.