BARO·Développeurs

API BARO · v1

Branchez l'encaissement de la scolarité à votre logiciel.

BARO génère les échéanciers, encaisse par mobile money directement sur le compte de l'établissement, relance les parents — et vous notifie en temps réel, par webhook signé.

Base de l'API : https://baro.africa/api/v1

installment.settled
webhook
POST https://votre-logiciel.com/webhooks/baro
X-Baro-Signature: v1:9f2c4e…a7d1

{
  "eventType": "installment.settled",
  "eventId": "5b1e9c0a4f…",
  "timestamp": "2026-08-02T14:07:33Z",
  "data": {
    "provider": "sadaby",
    "loan_ref": "PLAN-000123",
    "amount_paid": 203046,
    "received_amount": 200000,
    "status": "PAID"
  }
}

Votre logiciel de gestion garde ses élèves et ses classes. BARO est la couche encaissement + relance par-dessus : vous branchez l'API, BARO fait payer les parents sur le compte de chaque établissement et vous renvoie chaque règlement.

ZÉRO-CUSTODY

BARO ne détient jamais les fonds. L'argent va directement sur le compte de chaque établissement. Ni vous ni BARO ne devenez agrégateur régulé — c'est ce qui protège les deux.

Démarrage rapide

Trois étapes, du roster au règlement en temps réel.

1Importez un roster. Envoyez la liste « qui doit combien, quand » — BARO crée les échéanciers.
2BARO encaisse et relance. Le parent paie sur WhatsApp / SMS ; l'argent settle sur le compte de l'établissement.
3Recevez le webhook. À chaque règlement, BARO POST un événement signé vers votre logiciel — vous mettez à jour votre interface.

Authentification

Deux niveaux, par isolation et sécurité. Règle : la clé dev provisionne, le token d'établissement opère.

Clé développeur — X-Dev-Key

Une clé par intégrateur. Elle sert à provisionner et gérer vos établissements — jamais ceux d'un autre intégrateur, jamais la clé maître BARO. Vous ne payez pas la fuite d'un client par celle des autres.

En-tête
X-Dev-Key: bk_live_<votre clé>

Créez un établissement — il vous répond son slug et son provider_token :

POSTcURL
curl -X POST https://baro.africa/api/v1/dev/providers \
  -H "X-Dev-Key: bk_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Markaz An-Nour",
    "sector": "education",
    "settlement": {
      "rail": "djomy",
      "client_id": "djomy-client-…",
      "client_secret": "…",
      "merchant_code": "727066"
    }
  }'
ZÉRO-CUSTODY

Chaque établissement fournit ses propres identifiants de règlement — l'argent settle sur son compte. Sans eux, la création est refusée : vous ne pouvez pas router les fonds vers vous-même (ce serait devenir agrégateur régulé). Le client_secret est chiffré au repos, jamais renvoyé.

Token d'établissement — X-Provider-Token

Un token par établissement, renvoyé à la création. Il autorise les opérations courantes de cet établissement (import, statuts, relances). Un token qui fuit n'expose qu'un établissement.

En-tête
X-Provider-Token: <token de l'établissement>

Endpoints

Provisioning — avec l'en-tête X-Dev-Key :

MéthodeEndpointRôle
POST/dev/providersCréer un établissement (renvoie son token)
GET/dev/providersLister vos établissements
POST/dev/providers/{slug}/rotate-tokenRévoquer / renouveler un token
PUT/dev/providers/{slug}/settlementMettre à jour les creds de règlement
PUT/dev/webhookWebhook temps-réel (niveau intégrateur)
POST/dev/sandbox/simulate-paymentSimuler un règlement signé (test webhook, sans argent)
GET/dev/usageUsage & commission accumulée (metering)

Opérations d'un établissement — avec l'en-tête X-Provider-Token. {slug} = l'identifiant de l'établissement.

MéthodeEndpointRôle
POST/payment_plans/{slug}/bulkImporter un roster (tranches égales)
POST/recovery/{slug}/importImporter un roster CSV (tranches sur mesure)
GET/payment_plans/{slug}Lister les échéanciers
GET/recovery/{slug}/loansStatut des tranches (PENDING / PAID / OVERDUE)
PUT/recovery/{slug}/reminders/configConfigurer les relances (J-7, J-3, J…)
PUT/recovery/{slug}/webhookConfigurer le webhook temps-réel

Référence interactive complète (Swagger) : baro.africa/api/v1/sdk/docs — ou le schéma brut /api/v1/sdk/openapi.json à importer dans Postman ou un générateur de client.

Idempotence

Les créations acceptent un en-tête Idempotency-Key. Un rejeu (timeout, retry automatique) avec la même clé et le même corps ne crée pas de doublon — la réponse d'origine est renvoyée. La même clé avec un corps différent renvoie 409. Générez une clé unique (ex. un UUID) par opération.

POSTcURL
curl -X POST https://baro.africa/api/v1/dev/providers \
  -H "X-Dev-Key: bk_live_…" \
  -H "Idempotency-Key: 9f2c1a4e-…" \
  -H "Content-Type: application/json" \
  -d '{ … }'

Webhook temps-réel

Fini le polling : BARO pousse chaque règlement vers votre logiciel, en temps réel et signé.

1 · Configurez votre URL

PUTcURL
curl -X PUT https://baro.africa/api/v1/recovery/{slug}/webhook \
  -H "X-Provider-Token: <token>" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://votre-logiciel.example/baro/webhook"}'

La réponse contient un webhook_secret — renvoyé une seule fois, à stocker pour vérifier les signatures.

2 · Recevez l'événement

À chaque règlement, BARO POST vers votre URL, avec l'en-tête X-Baro-Signature: v1:<hmac>.

Corps — installment.settled
{
  "eventType": "installment.settled",
  "eventId": "a1b2c3…",
  "timestamp": "2026-10-01T09:12:00Z",
  "data": {
    "provider": "markaz-an-nour",
    "loan_ref": "PLAN-…-3",
    "amount_paid": 203046,
    "received_amount": 200000,
    "gateway_fee": 3046,
    "transactionId": "…",
    "payer": "224620000001",
    "status": "PAID"
  }
}

3 · Vérifiez la signature

Recalculez le HMAC-SHA256 du corps brut avec votre webhook_secret et comparez-le à l'en-tête. S'il correspond, traitez l'événement ; sinon, ignorez-le.

Node.js
const crypto = require("crypto");

function verify(rawBody, header, secret) {
  const expected = "v1:" + crypto
    .createHmac("sha256", secret)
    .update(rawBody)
    .digest("hex");
  return crypto.timingSafeEqual(
    Buffer.from(header), Buffer.from(expected)
  );
}
FIABILITÉ

En cas d'échec (votre serveur ne répond pas 2xx), BARO réessaie avec back-off. Utilisez eventId pour ignorer les doublons.

Sandbox

Testez votre réception de webhook de bout en bout, sans argent réel. Un appel simule un règlement : BARO POST vers votre URL un événement installment.settled signé exactement comme en production, marqué "sandbox": true. Aucune écriture en base, aucun rail sollicité.

Configurez d'abord votre webhook (PUT /dev/webhook), puis :

POSTcURL
curl -X POST https://baro.africa/api/v1/dev/sandbox/simulate-payment \
  -H "X-Dev-Key: bk_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 200000,
    "student_name": "Élève Test",
    "loan_ref": "PLAN-SANDBOX-1"
  }'

La réponse confirme la livraison et vous redonne la signature envoyée — de quoi vérifier votre implémentation :

200réponse
{
  "sandbox": true,
  "delivered": true,
  "http_status": 200,
  "eventType": "installment.settled",
  "eventId": "a1b2c3…",
  "signature": "v1:9f86d0…"
}
CONSEIL

Passez provider_slug pour cibler le webhook d'un établissement précis (il doit être dans votre périmètre) ; sans lui, l'événement part vers votre webhook intégrateur. La signature se vérifie exactement comme en production : v1:HMAC-SHA256(corps, webhook_secret).

Facturation & usage

BARO mesure le volume réglé via votre intégration et accumule la commission convenue (accrued_fees, au taux rev_share_rate). Zéro-custody : c'est un dû comptabilisé, facturé hors-bande — jamais un prélèvement. L'argent va toujours directement sur le compte de l'établissement.

GETcURL
curl https://baro.africa/api/v1/dev/usage \
  -H "X-Dev-Key: bk_live_…"
200réponse
{
  "integrator": "logiciel-markaz",
  "rev_share_rate": 0.01,
  "currency": "GNF",
  "count": 128,
  "gross_volume": 25600000,
  "accrued_fees": 256000
}

Période par défaut : le mois calendaire courant. Bornez avec ?from=YYYY-MM-DD&to=YYYY-MM-DD.

Zéro-custody — les invariants

Le SDK garantit, par construction :

11 établissement = 1 compte de règlement. L'argent settle sur son compte, jamais celui de BARO ni le vôtre.
2KYC par établissement avant tout routage d'argent.
3BARO ne regroupe jamais les fonds. Pas de pot commun → pas de statut d'agrégateur régulé, ni pour vous ni pour BARO.

Branchez l'encaissement de la scolarité à votre logiciel.

Démarrer sur WhatsApp