fflashpay← Retour à FlashPay
Documentation›API FlashPay
Documentation
DémarrageDémarrerObtenir une cléAuthentification
IntégrationCréer une collecteSuivre le statutMoyens de paiementNotificationsPays et modesFrais
RéférenceCodes d’erreurPasser en production
API · Version 1

Intègre FlashPay dans ton application.

Crée une demande de paiement mobile money depuis ton serveur, puis suis son statut ou reçois une notification. FlashPay choisit automatiquement le mode de paiement selon le pays du client.

Démarrage

  1. Crée une clé de test dans l’espace Développeur (préfixe fp_test_).
  2. Envoie tes premières collectes en test : aucun argent n’est débité.
  3. Quand ton compte est vérifié, crée une clé live (préfixe fp_live_) et remplace la clé de test dans ton serveur.

Base de l’API : https://f-lashpay.vercel.app

Obtenir une clé

Crée une clé dans l’espace Développeur, en lui donnant un nom qui identifie ton intégration. La clé secrète n’est affichée qu’une seule fois : copie-la immédiatement.

Clé live. Elle n’est acceptée que si ton compte est vérifié et que les paiements réels sont ouverts. Sinon, FlashPay répond 403 à la création, et 503 à la collecte.
Sécurité. Garde la clé dans une variable d’environnement serveur. Ne l’utilise jamais dans le code du navigateur ni dans un dépôt public.

Authentification

Chaque requête porte ta clé dans l’en-tête X-FlashPay-Key.

En-tête HTTP
X-FlashPay-Key: fp_test_…

Créer une collecte

Envoie une requête POST https://f-lashpay.vercel.app/api/v1/collections.

ChampObligatoireDescription
country_codeOuiCode pays à deux lettres (voir « Pays et modes »).
amountOuiMontant dans la devise du pays, strictement supérieur à zéro.
nameOuiNom du payeur.
mobileOuiNuméro mobile money du payeur, sans l’indicatif pays.
payment_methodOui en liveOpérateur mobile money (voir « Moyens de paiement »).
transaction_idNonTa référence unique. Sans elle, FlashPay en génère une. Une référence déjà utilisée renvoie 409.
checkoutNonMettre hosted pour obtenir une page de paiement hébergée (checkout_url).
emailNonE-mail du payeur, transmis au prestataire quand il le demande.

Pays en paiement direct (RDC, Burkina Faso, Bénin, Mali, Togo)

Le client reste sur ton site et valide la demande sur son téléphone. Aucune redirection n’est nécessaire : suis le statut avec « Suivre le statut ».

JavaScript · serveur
const response = await fetch('https://f-lashpay.vercel.app/api/v1/collections', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-FlashPay-Key': process.env.FLASHPAY_KEY,
  },
  body: JSON.stringify({
    country_code: 'CD',
    amount: 25000,
    mobile: '0812345678',
    name: 'Awa Sossou',
    payment_method: 'ORANGE',
    transaction_id: 'CMD-1042',
  }),
});
const result = await response.json();

Pays en paiement hébergé (Cameroun, Congo, Sénégal, Côte d’Ivoire, Nigeria, Rwanda, Ghana, Kenya)

Ajoute checkout: "hosted" et redirige ton client vers data.checkout_url. Il y choisit son opérateur et valide sur son téléphone.

JavaScript · serveur
const response = await fetch('https://f-lashpay.vercel.app/api/v1/collections', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-FlashPay-Key': process.env.FLASHPAY_KEY,
  },
  body: JSON.stringify({
    country_code: 'CM',
    amount: 25000,
    mobile: '670000000',
    name: 'Client',
    payment_method: 'MTN',
    checkout: 'hosted',
    transaction_id: 'CMD-1043',
  }),
});
const { data } = await response.json();
// Redirige ton client vers data.checkout_url
Mode test. Une clé fp_test_ ne contacte aucun prestataire. La réponse contient mode: "test" et une référence commençant par FPTEST-.

Suivre le statut

Interroge GET https://f-lashpay.vercel.app/api/v1/collections/{transaction_id} avec ta clé. Tant que le statut est pending, attends quelques secondes avant de réessayer. Le statut final ne change plus.

StatutSignification
pendingDemande envoyée, en attente de la validation du client.
successfulPaiement reçu. Tu peux livrer la commande.
failedPaiement refusé ou échoué.
cancelledPaiement annulé par le client.
expiredLe client n’a pas validé à temps.
JavaScript · serveur
const response = await fetch('https://f-lashpay.vercel.app/api/v1/collections/CMD-1042', {
  headers: { 'X-FlashPay-Key': process.env.FLASHPAY_KEY },
});
const { data } = await response.json();
// data.status : pending | successful | failed | cancelled | expired

Moyens de paiement

Avant de proposer un opérateur à ton client, demande la liste acceptée pour son pays :

Requête
GET https://f-lashpay.vercel.app/api/v1/payment-methods?country_code=CD

La réponse contient payment_methods, une liste de valeurs à envoyer telles quelles dans payment_method.

Notifications

Quand une collecte est payée, FlashPay envoie une requête POST à l’adresse de notification configurée dans ton espace Développeur.

En-têteContenu
X-FlashPay-TimestampDate d’envoi en secondes (Unix).
X-FlashPay-SignatureHMAC-SHA256 en hexadécimal de timestamp + "." + corps brut, signé avec ton secret de notification.
Corps de la notification
{
  "event": "transaction.successful",
  "created_at": "2026-11-10T11:30:00.000Z",
  "data": {
    "transaction_id": "CMD-1042",
    "status": "successful",
    "amount": 25000,
    "currency_code": "XOF",
    "country_code": "BJ",
    "payment_method": "MTN",
    "environment": "live"
  }
}
Vérification de la signature · Node.js
import { createHmac, timingSafeEqual } from 'node:crypto';

// rawBody : le corps brut reçu, sans le transformer en JSON avant la vérification.
function isGenuine(rawBody, timestamp, signature, secret) {
  const age = Math.abs(Date.now() / 1000 - Number(timestamp));
  if (!Number.isFinite(age) || age > 300) return false;
  const expected = createHmac('sha256', secret)
    .update(timestamp + '.' + rawBody)
    .digest('hex');
  const a = Buffer.from(signature);
  const b = Buffer.from(expected);
  return a.length === b.length && timingSafeEqual(a, b);
}
Important. Vérifie la signature et l’âge de la notification (5 minutes maximum) avant de la traiter. Réponds 2xx dès réception. FlashPay réessaie jusqu’à 3 fois, à 0 s, 2 s et 6 s. Rends ton traitement idempotent : une même transaction peut être notifiée deux fois.
Événement disponible. Seul transaction.successful est envoyé pour le moment. Pour les échecs, interroge le statut.

Pays et modes

FlashPay choisit le mode selon le pays du client. Tu n’as rien à configurer.

PaysCodeMode
République démocratique du CongoCDDirect
Burkina FasoBFDirect
BéninBJDirect
MaliMLDirect
TogoTGDirect
CamerounCMHébergé
Congo-BrazzavilleCGHébergé
SénégalSNHébergé
Côte d’IvoireCIHébergé
NigeriaNGHébergé
RwandaRWHébergé
GhanaGHHébergé
KenyaKEHébergé
Direct : le client valide sur son téléphone, sans quitter ton site. Hébergé : redirige le client vers checkout_url.

Frais

Le payeur règle le taux affiché dans la tarification pour le moyen de paiement choisi (taux du réseau plus la marge FlashPay), avec le minimum du réseau quand il s’applique. Ce montant est identique sur la page hébergée et sur l’appel direct. Avec pass_digital_charge: false, le payeur ne règle aucun frais. La commission FlashPay est de 6 % du montant demandé, prélevée sur ce que tu reçois.

Codes d’erreur

CodeSignificationAction
400Données invalides, pays non pris en charge, ou payment_method absent en live.Vérifie le corps de la requête.
401Clé absente, invalide ou révoquée.Vérifie l’en-tête X-FlashPay-Key.
404Collecte introuvable pour ce compte.Vérifie la référence transaction_id.
409Référence déjà utilisée.Envoie une référence unique.
429Plus de 60 requêtes par minute avec la même clé.Attends 60 secondes (en-tête Retry-After).
502Le prestataire a refusé la demande (mode hébergé).Réessaie avec un autre opérateur.
503Paiements live non ouverts, ou service indisponible.Réessaie plus tard ou contacte le support.

Passer en production

  1. Ton compte est vérifié dans l’espace Développeur.
  2. Tu as créé une clé fp_live_ et remplacé la clé de test sur ton serveur.
  3. Tu as testé au moins une collecte dans chaque mode utilisé par tes clients (direct et hébergé).
  4. Ton endpoint de notification répond 2xx et vérifie la signature.

FlashPay · Documentation développeur