Documentation Flinpay
Flinpay est un agrégateur de paiement mobile money couvrant 7 pays d'Afrique francophone. Une seule intégration API pour encaisser dans tous les corridors supportés.
Authentification
Toutes les requêtes à l'API de paiement doivent inclure votre clé API dans l'en-tête Authorization, au format Bearer token.
Vous trouverez vos clés dans Dashboard → Clés API. Chaque clé existe en deux versions :
| Préfixe | Environnement | Effet |
|---|---|---|
| fp_live_ | Production | Transactions réelles, argent réellement déplacé |
| fp_test_ | Sandbox | Transactions simulées, aucun argent déplacé |
fp_live_ côté client (navigateur, app mobile). Utilisez-la uniquement depuis votre serveur.Vérification d'identité (KYC)
Pour des raisons de sécurité et de conformité, la génération de clés API nécessite une vérification d'identité préalable. Rendez-vous sur Vérification, soumettez une pièce d'identité (CNI, passeport ou permis), et attendez la validation (généralement sous 24-48h).
Tant que votre compte n'est pas vérifié, la page Clés API reste verrouillée.
Initier un paiement
Déclenche une demande de paiement mobile money vers le numéro du client. La confirmation lui est envoyée directement sur son téléphone.
| Champ | Type | Description |
|---|---|---|
| amount | number | Montant à encaisser, dans la devise de votre pays marchand |
| phone | string | Numéro mobile money du client |
| client_name | string | Nom complet du client |
| order_id | string | Identifiant unique de la commande côté marchand |
| country | string | Code pays ISO2 du client — voir la liste ci-dessous |
| operator | string | Opérateur mobile money du client — voir la liste ci-dessous |
| otp (optionnel) | string | Requis uniquement si l'opérateur choisi l'exige (rare) — sinon omettez ce champ |
Pays et opérateurs couverts (codes ISO2 réellement pris en charge — n'en inventez pas d'autres, la requête serait rejetée) :
Réponses & statuts
Une requête réussie renvoie :
Statuts possibles pour une transaction :
| Statut | Signification |
|---|---|
| pending | En attente de confirmation par l'opérateur mobile money |
| paid | Paiement confirmé et encaissé |
| failed | Paiement refusé, expiré ou annulé |
Ces trois statuts sont une abstraction stable de notre côté : ils ne changent pas même si le prestataire mobile money sous-jacent évolue.
Erreurs
| Code HTTP | Cause probable |
|---|---|
| 400 | Champ requis manquant ou invalide (montant, opérateur non reconnu pour ce pays...) |
| 401 | Clé API absente, invalide ou révoquée |
| 403 | Quota mensuel du plan Starter atteint, ou compte restreint |
| 429 | Trop de requêtes envoyées trop vite (limite : 60 paiements/minute par IP) |
| 500 / 502 | Erreur serveur ou prestataire de paiement momentanément indisponible — réessayez |
Le corps de la réponse d'erreur contient toujours {"ok": false, "error": "..."} avec un message explicite.
Liens de paiement
Pour encaisser sans écrire de code, créez un lien de paiement partageable depuis Dashboard → Liens de paiement. Votre client ouvre la page (hébergée par Flinpay), choisit son opérateur parmi ceux disponibles pour son pays et confirme directement depuis son téléphone — aucune redirection vers un site tiers.
Sandbox vs Production
Utilisez votre clé fp_test_ pendant le développement : les transactions sont marquées environment: "sandbox" et n'impliquent aucun mouvement d'argent réel, et ne comptent pas dans votre quota mensuel. Basculez vers fp_live_ uniquement en production, une fois votre intégration testée.
Webhooks
Configurez un endpoint depuis Dashboard → Webhooks pour recevoir une notification à chaque paiement confirmé ou échoué.
Événements disponibles : payment.success, payment.failed.
order_id) avec votre propre historique, ou mieux : interrogez votre propre API pour re-confirmer le statut de la transaction plutôt que de faire confiance au webhook seul.