Documentation API
v1.0 · REST API Contactez-nous

Documentation API ElyonPay

Bienvenue dans la documentation technique de l'API ElyonPay. Cette référence vous permet d'intégrer les paiements Mobile Money, Visa, Mastercard et virements dans votre application en quelques lignes de code.

URL de base : https://api.elyonpay.com/v1
Toutes les requêtes doivent être envoyées en HTTPS. Les requêtes HTTP non sécurisées sont refusées.

Fonctionnalités clés

  • 🌍 Mobile Money unifié — MTN MoMo, Orange Money, Wave, Moov, Airtel Money
  • 💳 Cartes bancaires — Visa, Mastercard avec 3D Secure, conformité PCI DSS niveau 1
  • 🔔 Webhooks temps réel — notifications instantanées pour chaque événement
  • 🧪 Sandbox complet — testez sans frais avec des données simulées
  • 🌐 Multi-devises — XAF, XOF, EUR, USD, GBP, NGN, CDF, KES
  • 📦 SDKs officiels — JavaScript, PHP, Python, Java, React Native

Démarrage rapide

Suivez ces 3 étapes pour effectuer votre premier paiement :

  1. Créez un compte sur app.elyonpay.com et obtenez votre clé API
  2. Installez le SDK de votre langage ou utilisez cURL directement
  3. Appelez POST /v1/payments avec le montant, la devise et la méthode de paiement
cURL
curl -X POST https://api.elyonpay.com/v1/payments \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "amount": 15000, "currency": "XAF", "method": "mtn_mobile_money", "phone": "+237600000000", "description": "Commande #1234", "callback_url": "https://yoursite.com/webhook" }'

Authentification

L'API ElyonPay utilise des clés API avec le schéma d'authentification Bearer Token. Chaque compte dispose d'une clé de test et d'une clé de production.

Vos clés API

TypePréfixeEnvironnementUsage
testsk_test_...SandboxDéveloppement & tests — aucun débit réel
livesk_live_...ProductionTransactions réelles — à garder secrète

Utilisation dans l'en-tête HTTP

HTTP Header
Authorization: Bearer sk_test_xxxxxxxxxxxxxxxxxxxxxxxx
Sécurité : Ne jamais exposer votre clé API côté client (JavaScript navigateur). Effectuez toujours les appels depuis votre serveur backend.

Environnements

ElyonPay propose deux environnements distincts pour vous permettre de développer et tester en toute sécurité avant la mise en production.

URLs de base

EnvironnementURL de baseDescription
Sandboxhttps://api.elyonpay.com/v1 (clé sk_test_)Aucun débit réel — données simulées
Productionhttps://api.elyonpay.com/v1 (clé sk_live_)Transactions réelles
L'environnement est déterminé automatiquement par le type de clé API utilisée. Il n'est pas nécessaire de changer l'URL.

Numéros de test Mobile Money

NuméroRéseauComportement simulé
+237600000001MTN MoMo✅ Paiement réussi
+237600000002MTN MoMo❌ Solde insuffisant
+237690000001Orange Money✅ Paiement réussi
+237690000002Orange Money⏱ Timeout simulé
+221700000001Wave✅ Paiement réussi

Format des requêtes

Toutes les requêtes et réponses utilisent le format JSON. L'en-tête Content-Type: application/json est obligatoire pour les requêtes avec un body.

En-têtes requis

En-têteValeurObligatoire
AuthorizationBearer {votre_cle_api}Requis
Content-Typeapplication/jsonRequis (POST)
Acceptapplication/jsonOptionnel
Idempotency-KeyUUID uniqueRecommandé

Format de réponse standard

JSON — Réponse succès
{ "success": true, "data": { "id": "pay_1A2B3C4D5E6F", "status": "pending", "amount": 15000, "currency": "XAF" }, "meta": { "request_id": "req_xxxxxxx", "timestamp": "2024-03-24T10:15:00Z" } }

Créer un paiement

Initie une transaction de paiement vers un client via Mobile Money ou carte bancaire.

POST /v1/payments Initier un paiement

Paramètres du body

ParamètreTypeRequisDescription
amountintegerRequisMontant en unité de la devise (ex: centimes pour EUR, entier pour XAF)
currencystringRequisCode ISO 4217 : XAF, XOF, EUR, USD, GBP
methodstringRequismtn_mobile_money · orange_money · wave · moov_money · airtel_money · card
phonestringMobile MoneyNuméro au format international : +237600000000
descriptionstringOptionnelLibellé visible par le client (max 255 caractères)
callback_urlstringOptionnelURL HTTPS pour recevoir le webhook de confirmation
metadataobjectOptionnelDonnées libres associées au paiement (order_id, customer_id…)

Exemple — JavaScript (Node.js)

JavaScript / Node.js
// npm install elyonpay-sdk const ElyonPay = require('elyonpay-sdk'); const client = new ElyonPay('sk_test_xxxxxxxxxx'); const payment = await client.payments.create({ amount: 15000, currency: 'XAF', method: 'mtn_mobile_money', phone: '+237600000001', description: 'Commande #1234', callback_url: 'https://yoursite.com/webhook/elyonpay', metadata: { order_id: 'ORD-1234', customer_id: 'USR-567' } }); console.log(payment.id); // pay_1A2B3C4D5E6F console.log(payment.status); // pending
PHP
// composer require elyonpay/php-sdk require_once 'vendor/autoload.php'; use ElyonPay\Client; $client = new Client('sk_test_xxxxxxxxxx'); $payment = $client->payments->create([ 'amount' => 15000, 'currency' => 'XAF', 'method' => 'orange_money', 'phone' => '+237690000001', 'description' => 'Commande #1234', 'callback_url' => 'https://yoursite.com/webhook' ]); echo $payment->id; // pay_1A2B3C4D5E6F echo $payment->status; // pending
Python
# pip install elyonpay import elyonpay client = elyonpay.Client('sk_test_xxxxxxxxxx') payment = client.payments.create( amount=15000, currency='XAF', method='mtn_mobile_money', phone='+237600000001', description='Commande #1234', callback_url='https://yoursite.com/webhook' ) print(payment.id) # pay_1A2B3C4D5E6F print(payment.status) # pending
cURL
curl -X POST https://api.elyonpay.com/v1/payments \ -H "Authorization: Bearer sk_test_xxxxxxxxxx" \ -H "Content-Type: application/json" \ -d '{ "amount": 15000, "currency": "XAF", "method": "mtn_mobile_money", "phone": "+237600000001", "description": "Commande #1234" }'

Statut d'un paiement

GET /v1/payments/{id} Récupère un paiement par son ID

Paramètre de chemin

ParamètreTypeDescription
idstringIdentifiant du paiement, ex : pay_1A2B3C4D5E6F
JSON — Réponse
{ "success": true, "data": { "id": "pay_1A2B3C4D5E6F", "status": "successful", "amount": 15000, "currency": "XAF", "method": "mtn_mobile_money", "phone": "+237600000001", "description": "Commande #1234", "created_at": "2024-03-24T10:15:00Z", "paid_at": "2024-03-24T10:15:42Z", "metadata": { "order_id": "ORD-1234" } } }

Liste des paiements

GET /v1/payments Liste paginée des paiements

Paramètres de requête (query)

ParamètreTypeDéfautDescription
pageinteger1Numéro de page
limitinteger20Résultats par page (max 100)
statusstringFiltrer par statut : pending, successful, failed
fromdateDate de début ISO 8601 : 2024-01-01
todateDate de fin ISO 8601

Remboursements

POST /v1/refunds Rembourser un paiement
ParamètreTypeRequisDescription
payment_idstringRequisID du paiement à rembourser
amountintegerOptionnelMontant partiel (si omis : remboursement total)
reasonstringOptionnelMotif du remboursement
Les remboursements Mobile Money sont traités sous 24 à 72 heures selon l'opérateur. Les remboursements carte sont effectués sous 5 à 10 jours ouvrés.

Virements (Payouts)

Envoyez des fonds depuis votre solde ElyonPay vers un compte Mobile Money ou bancaire.

POST /v1/payouts Initier un virement sortant
ParamètreTypeRequisDescription
amountintegerRequisMontant à virer
currencystringRequisDevise : XAF, XOF, EUR
methodstringRequismtn_mobile_money, orange_money, bank_transfer
phonestringMobile MoneyNuméro destinataire
descriptionstringOptionnelRéférence du virement

Solde du compte

GET /v1/balance Consulte le solde disponible
JSON — Réponse
{ "success": true, "data": { "available": { "XAF": 850000, "EUR": 1290 }, "pending": { "XAF": 125000, "EUR": 0 } } }

Liste des transactions

GET /v1/transactions Historique complet des mouvements

Retourne tous les mouvements de compte : paiements reçus, remboursements, virements, frais. Mêmes filtres que /v1/payments (page, limit, from, to).

SDKs officiels

Des SDKs officiels sont disponibles pour les principaux langages et frameworks. Ils gèrent automatiquement l'authentification, les erreurs et les webhooks.

Webhooks

ElyonPay envoie des notifications HTTP POST à votre callback_url à chaque événement important. Configurez vos webhooks depuis votre tableau de bord.

Événements disponibles

  • payment.successfulPaiement confirmé et fonds reçus
  • payment.failedPaiement échoué (solde insuffisant, timeout…)
  • payment.pendingPaiement en attente de confirmation opérateur
  • refund.successfulRemboursement effectué avec succès
  • payout.successfulVirement sortant exécuté
  • payout.failedVirement sortant échoué
  • balance.lowSolde sous le seuil configuré

Structure du payload webhook

JSON — Payload webhook
{ "event": "payment.successful", "created_at": "2024-03-24T10:15:42Z", "data": { "id": "pay_1A2B3C4D5E6F", "amount": 15000, "currency": "XAF", "status": "successful", "metadata": { "order_id": "ORD-1234" } }, "signature": "sha256=abcdef1234567890..." }
Vérifiez toujours la signature X-ElyonPay-Signature dans l'en-tête HTTP pour authentifier les webhooks. Comparez avec HMAC-SHA256(payload, votre_webhook_secret).

Mobile Money

ElyonPay unifie 5 réseaux Mobile Money africains sous une seule API. Chaque réseau possède ses propres codes opérateurs et pays de couverture.

Réseaux supportés

Code méthodeRéseauPaysDevises
mtn_mobile_moneyMTN MoMo🇨🇲 CM · 🇳🇬 NG · 🇨🇮 CI · 🇬🇭 GH · 🇺🇬 UGXAF · NGN · XOF
orange_moneyOrange Money🇨🇲 CM · 🇨🇮 CI · 🇸🇳 SN · 🇲🇱 MLXAF · XOF
waveWave🇸🇳 SN · 🇨🇮 CI · 🇧🇫 BF · 🇲🇱 MLXOF
moov_moneyMoov Africa🇧🇯 BJ · 🇹🇬 TG · 🇧🇫 BF · 🇳🇪 NEXOF
airtel_moneyAirtel Money🇰🇪 KE · 🇹🇿 TZ · 🇺🇬 UG · 🇿🇲 ZM · 🇨🇩 CDKES · TZS · UGX · CDF

Cartes bancaires

Acceptez les paiements Visa et Mastercard avec 3D Secure, tokenisation et conformité PCI DSS niveau 1.

Cartes de test (Sandbox)

Numéro de carteExpirationCVVComportement
4242 4242 4242 424212/28123✅ Paiement réussi
4000 0000 0000 000212/28123❌ Carte refusée
4000 0000 0000 322012/28123🔐 3D Secure requis
5555 5555 5555 444412/28123✅ Mastercard réussi

Statuts des paiements

Chaque paiement passe par plusieurs statuts au cours de son cycle de vie.

pending
En attente de confirmation opérateur
successful
Paiement confirmé, fonds reçus
failed
Paiement échoué ou refusé
refunded
Remboursement effectué
cancelled
Annulé avant traitement
expired
Délai de paiement dépassé

Codes d'erreur

En cas d'erreur, l'API retourne un objet JSON avec un code d'erreur machine et un message lisible.

JSON — Réponse erreur
{ "success": false, "error": { "code": "INSUFFICIENT_FUNDS", "message": "Le solde Mobile Money du client est insuffisant.", "http_status": 402 } }

Table des erreurs

Code erreurHTTPDescription
UNAUTHORIZED401Clé API manquante ou invalide
INVALID_AMOUNT400Montant invalide ou inférieur au minimum autorisé
CURRENCY_NOT_SUPPORTED400Devise non supportée pour ce réseau
PHONE_INVALID400Numéro de téléphone invalide ou non enregistré
INSUFFICIENT_FUNDS402Solde insuffisant côté client
OPERATOR_TIMEOUT408L'opérateur Mobile Money n'a pas répondu dans les délais
DUPLICATE_REQUEST409Requête dupliquée — utiliser Idempotency-Key
PAYMENT_NOT_FOUND404Paiement introuvable
RATE_LIMIT_EXCEEDED429Trop de requêtes — réessayez dans quelques secondes
INTERNAL_ERROR500Erreur interne ElyonPay — contactez le support

Devises supportées

CodeDeviseMontant minimumMéthodes
XAFFranc CFA BEAC100 XAFMTN MoMo, Orange Money, Carte
XOFFranc CFA BCEAO100 XOFWave, Moov, Orange Money, MTN, Carte
EUREuro0,50 €Carte (Visa, Mastercard), PayPal
USDDollar américain0,50 $Carte, PayPal, Stripe
GBPLivre sterling0,30 £Carte
NGNNaira nigérian100 NGNMTN MoMo NG
KESShilling kenyan10 KESAirtel Money
CDFFranc congolais500 CDFAirtel Money

Sandbox & Tests

L'environnement sandbox vous permet de tester l'intégration complète sans effectuer de vrais paiements. Utilisez votre clé sk_test_ — aucun débit réel ne sera effectué.

Accédez au tableau de bord sandbox sur app.elyonpay.com pour visualiser vos transactions de test en temps réel.

Limites du sandbox

  • Les transactions sandbox n'engendrent aucuns frais
  • Les webhooks sandbox sont envoyés avec un délai de 2 à 5 secondes
  • Les données sont réinitialisées tous les 30 jours
  • Limite de 1 000 requêtes/heure par clé test

Passer en production

  1. Complétez la vérification KYB (Know Your Business) dans votre tableau de bord
  2. Remplacez sk_test_ par votre clé sk_live_
  3. Vérifiez votre callback_url en HTTPS
  4. Configurez vos alertes de solde bas
En production, assurez-vous que votre callback_url retourne un HTTP 200 dans les 10 secondes. En cas d'échec, ElyonPay retente 3 fois avec un délai exponentiel.