Authentification et clés API
Chaque requête vers l’API de paiement doit prouver qu’elle vient bien de votre application. Pour cela, MafPay utilise deux en-têtes HTTP :
| En-tête | Contenu | Exemple |
|---|---|---|
X-Api-Key |
la clé publique de l’application | pk_test_9f2c… |
X-Api-Secret |
le secret de l’application | sk_test_41ab… |
Il n’y a pas de connexion préalable, pas de jeton à renouveler : vous envoyez les deux en-têtes à chaque requête.
L’adresse d’une requête
https://api.mafpay.metalafrique-it.com/api/v1/{endpoint_key}/payments/initiate/ └────┬─────┘ l'identifiant de votre entreprise (24 caractères)L’endpoint_key se trouve sur la page Entreprise du portail. Il n’est pas secret, mais il ne remplace pas les clés : sans les bons X-Api-Key / X-Api-Secret, la requête est refusée.
Quatre clés par application
| Clé publique | Secret | |
|---|---|---|
| Sandbox | pk_test_… |
sk_test_… |
| Live | pk_live_… |
sk_live_… |
Le mode est déduit de la clé. Avec des clés _test_, vous êtes en sandbox ; avec des clés _live_, vous êtes en production. L’adresse et les champs ne changent pas : passer en production, c’est changer de clés (voir Sandbox et live).
Où trouver vos clés
Portail client → Applications → votre application → clés API. Les secrets ne sont visibles que par le propriétaire du compte ou par un membre disposant de la permission « secrets ».
Vous pouvez régénérer les clés d’un environnement (sandbox ou live) si elles ont fuité. Les anciennes cessent immédiatement de fonctionner ; cela ne touche pas l’autre environnement ni les autres applications.
Exemples
curl "https://api.mafpay.metalafrique-it.com/api/v1/$ENDPOINT_KEY/providers/" \ -H "X-Api-Key: $MAFPAY_PK" \ -H "X-Api-Secret: $MAFPAY_SK"const response = await fetch( `${process.env.MAFPAY_URL}/api/v1/${process.env.MAFPAY_ENDPOINT_KEY}/providers/`, { headers: { "X-Api-Key": process.env.MAFPAY_PK, "X-Api-Secret": process.env.MAFPAY_SK, }, });console.log(await response.json());import osimport requests
response = requests.get( f"{os.environ['MAFPAY_URL']}/api/v1/{os.environ['MAFPAY_ENDPOINT_KEY']}/providers/", headers={ "X-Api-Key": os.environ["MAFPAY_PK"], "X-Api-Secret": os.environ["MAFPAY_SK"], }, timeout=15,)print(response.json())<?php$ch = curl_init(getenv('MAFPAY_URL') . '/api/v1/' . getenv('MAFPAY_ENDPOINT_KEY') . '/providers/');curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 15, CURLOPT_HTTPHEADER => [ 'X-Api-Key: ' . getenv('MAFPAY_PK'), 'X-Api-Secret: ' . getenv('MAFPAY_SK'), ],]);echo curl_exec($ch);Règles de sécurité à respecter
- Le secret (
sk_…) ne doit JAMAIS apparaître côté navigateur : ni dans du JavaScript de page web, ni dans une application mobile, ni dans un dépôt Git public. Tous les appels à MafPay se font depuis votre serveur. - Stockez les clés dans des variables d’environnement (ou un gestionnaire de secrets), jamais dans le code.
- Utilisez des clés différentes pour le test et la production (c’est déjà le cas :
_test_/_live_). - Si vous pensez qu’un secret a fuité : régénérez-le tout de suite dans le portail.
Si l’authentification échoue
Vous recevez un code 401 avec toujours le même message :
{ "status": 401, "error": "Unauthorized", "message": "Clés API invalides.", "timestamp": "2026-09-25T13:34:17.691385+00:00" }Le message est volontairement identique dans tous les cas (on ne révèle pas si une clé existe). Vérifiez, dans l’ordre :
- l’
endpoint_keydans l’adresse est le bon (celui de votre entreprise) ; X-Api-KeyetX-Api-Secretsont bien envoyés, sans espace ni retour à la ligne en trop ;- le secret correspond à la clé publique (même environnement, même application) ;
- votre application n’est pas suspendue ;
- si vous utilisez des clés
_live_: l’application a bien été passée en live (sinon : « Cette application n’est pas en mode live : utilisez vos clés sandbox ») ; et inversement, une application déjà en live refuse les clés_test_(voir Sandbox et live).