Encaissez par mobile money et par carte
Une page de paiement hébergée prête à l'emploi, ou une intégration directe pour construire votre propre formulaire.
Tous les moyens sur une page
Mobile money dans 13 pays d'Afrique, carte bancaire, Apple Pay et Google Pay, sur une même page de paiement.
Reçus et idempotence
Un reçu à votre marque pour chaque paiement, renvoyable en un clic, et une clé d'idempotence sur chaque création pour ne jamais encaisser deux fois.
Votre image de marque
Votre logo et votre couleur sur la page de paiement et sur le reçu envoyé à votre client.

Une page de paiement hébergée, prête à l'emploi
Votre client choisit son opérateur mobile money, sa carte, Apple Pay ou Google Pay sur la même page, et confirme. L’opérateur est reconnu dès qu’il tape son numéro. Aucune redirection tierce à gérer de votre côté.
Préférez construire votre propre formulaire de paiement plutôt que rediriger vers une page hébergée ? La charge directe fait exactement la même chose depuis votre propre interface, via la même API.

Plus de moyens pour vos clients, même en FCFA
Un paiement par carte en FCFA est débité en euros, au taux fixe qui lie le franc CFA à l’euro. Votre client voit le montant exact avant de payer, et votre solde est crédité en FCFA, comme d’habitude.
Cela ouvre à vos clients Apple Pay, Google Pay et, selon leur pays et leur appareil, Bancontact, Klarna, Amazon Pay et d’autres moyens locaux. Vous n’avez rien à activer.
const response = await fetch("/api/v1/checkout_sessions", { method: "POST", headers: { Authorization: `Bearer ${process.env.MERCY_PAY_KEY}`, "Content-Type": "application/json", "Idempotency-Key": crypto.randomUUID(), }, body: JSON.stringify({ amount: 15000, currency: "XAF", description: "Commande 1042", success_url: "https://votre-site.com/merci", }),}); const { data } = await response.json();// Redirigez votre client vers data.checkout_urlUne API pensée pour vos développeurs
Une requête crée une session de paiement et vous renvoie le lien du checkout. JSON en entrée comme en sortie, clés sandbox et live séparées, requêtes rejouables sans double débit grâce à l’en-tête Idempotency-Key.
import { createHmac, timingSafeEqual } from "node:crypto"; app.post("/webhooks/mercy-pay", (req, res) => { // t=1791022800,v1=5257a869… const { t, v1 } = parse(req.header("MercyPay-Signature")); const expected = createHmac("sha256", SECRET) .update(`${t}.${req.rawBody}`) .digest("hex"); if (!timingSafeEqual(Buffer.from(expected), Buffer.from(v1))) { return res.sendStatus(401); } const { type, data } = req.body; if (type === "payment.succeeded") { markOrderPaid(data); } res.sendStatus(200);});Des webhooks signés
Chaque changement de statut arrive sur votre serveur, signé en HMAC-SHA256 et horodaté dans l’en-tête MercyPay-Signature. Une livraison qui échoue est relancée, et son historique reste dans votre dashboard.
Vérifiez la signature avant de traiter l’événement : un webhook non signé ou falsifié est rejeté par votre code, pas par Mercy Pay.
Une seule intégration pour encaisser et reverser
Le mobile money et la carte sur une seule page de paiement.
Pour démarrer
Le compte donne accès à la sandbox et à vos clés de test. Le live s’ouvre après la vérification de votre identité.
Commission par paiement réussi, sans abonnement. La carte ajoute un frais fixe par paiement. Détail sur la page Tarifs.

