Aller au contenu

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

Fenêtre de terminal
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 os
import 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

  1. 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.
  2. Stockez les clés dans des variables d’environnement (ou un gestionnaire de secrets), jamais dans le code.
  3. Utilisez des clés différentes pour le test et la production (c’est déjà le cas : _test_ / _live_).
  4. 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_key dans l’adresse est le bon (celui de votre entreprise) ;
  • X-Api-Key et X-Api-Secret sont 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).