Documentation API Université d'Abomey-Calavi (UAC) - Frais de Scolarité
Spécifications d'intégration et payloads exacts pour la consultation, le calcul des frais et le paiement des frais de scolarité UAC sur l'environnement PAP.
Présentation
L'API Université d'Abomey-Calavi (UAC) permet d'interroger le dossier de scolarité d'un étudiant et d'effectuer le paiement sécurisé des frais d'inscription ou pénalités via la passerelle B-MO.
URL de Base (selon l'environnement sélectionné) :
- PAP (Pré-production / Défaut) :
https://svc.pap.bestcash.me/external- TEST (Sandbox) :
https://svc.test.bestcash.me/external- LIVE (Production) :
https://svc.bmo.bestcash.me/externalVous pouvez basculer d'un environnement à un autre à tout moment depuis le menu déroulant en haut des consoles d'essai
<ApiPlayground />ci-dessous.
Authentification
L'authentification s'effectue en transmettant les en-têtes HTTP suivants dans chaque requête :
X-Auth-ApiKey: Votre clé d'API partenaire (ex:+2290196666262)X-Auth-ApiSecret: Votre secret d'API partenaire (ex:y7MwWuWeQORtpA==)Content-Type:application/json
En cas d'absence ou d'invalidité de ces en-têtes, la passerelle renvoie une erreur HTTP 401 Unauthorized.
Endpoints & Console d'essai
1. Récupération des informations de l'étudiant (POST /external/universities/uac/invoices)
Permet de consulter le dossier de scolarité d'un étudiant, son statut et le montant dû (frais d'inscription ou pénalités).
- Méthode :
POST - URL :
/external/universities/uac/invoices
Tester la recherche d'étudiant UAC
Consultez les informations et la facture de scolarité pour un étudiant UAC.
Aucun paramètre d'URL configuré.
Paramètres du corps JSON (Body)
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
studentMatricule | string | Oui | Matricule de l'étudiant (ex: "10702514") |
academicYear | string | Oui | Année académique au format YYYY-YYYY (ex: "2025-2026") |
studyYear | string | Oui | Année d'étude (ex: "M2", "L1", "L3") |
Exemple de corps de requête (JSON)
{
"studentMatricule": "10702514",
"academicYear": "2025-2026",
"studyYear": "M2"
}
Exemple de réponse HTTP 200
[
{
"matricule": "10702514",
"firstName": "PAUL",
"lastName": "TOTO",
"phoneNumber": "97257361",
"academicYear": "2025-2026",
"school": "FLASH",
"studyYear": "M2",
"nationality": "BJ (Benin)",
"studentStatus": "NORM",
"amount": 108989.0,
"paymentCategory": "inscription"
}
]
Note : Le champ
paymentCategoryrenvoie la catégorie de frais due (inscriptionoupenalite). Cette valeur est requise lors de l'exécution du paiement.
2. Calcul du coût de l'opération (GET /external/universities/uac/cost)
Permet de calculer les frais de traitement applicables au règlement de la scolarité.
- Méthode :
GET - URL :
/external/universities/uac/cost - Paramètre de requête (Query Param) :
amount(ex:108989)
Tester le calcul du coût UAC
Calculez les frais d'opération liés au montant de la scolarité.
Paramètres de requête
| Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
amount | number | Oui | Montant de la facture de scolarité à régler |
Exemple de réponse HTTP 200
{
"cost": 1000.0,
"targetMonetaryArea": {
"currencyShortName": "F CFA",
"currencyCode": "XOF"
}
}
3. Paiement des frais de scolarité (POST /external/universities/uac/operation)
Exécute le règlement des frais de scolarité d'un étudiant UAC et confirme la transaction.
- Méthode :
POST - URL :
/external/universities/uac/operation
Tester le paiement de scolarité UAC
Effectuez le règlement direct des frais de scolarité UAC.
Aucun paramètre d'URL configuré.
Paramètres du corps JSON (Body)
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
amount | number | Oui | Montant exact de la scolarité (ex: 108989) |
matricule | string | Oui | Matricule de l'étudiant (ex: "10702514") |
academicYear | string | Oui | Année académique (ex: "2025-2026") |
studyYear | string | Oui | Niveau d'étude (ex: "M2") |
paymentCategory | string | Oui | Catégorie de paiement ("inscription" ou "penalite") |
externalReference | string | Oui | Référence unique de transaction générée par le partenaire |
Exemple de corps de requête (JSON)
{
"amount": 108989,
"matricule": "10702514",
"academicYear": "2025-2026",
"studyYear": "M2",
"paymentCategory": "inscription",
"externalReference": "UAC-REF-2026-001"
}
Exemple de réponse HTTP 200 / 201
{
"prefixedAmount": "108 989 F CFA",
"prefixedOperationCost": "1 000 F CFA",
"operationCode": "",
"status": "CONFIRMED",
"operationCost": 1000.0,
"amount": 108989.0,
"operationType": "SCHOOL_FEES",
"reference": "UACSF20260724162911228",
"creationDate": "2026-07-24T16:29:10+00:00",
"matricule": "10702514",
"firstName": "PAUL",
"lastName": "TOTO",
"phoneNumber": "97257361",
"academicYear": "2025-2026",
"school": "FLASH",
"studyYear": "M2",
"nationality": "BJ (Benin)",
"paymentCategory": "inscription"
}
4. Vérification du statut de l'opération (GET /external/thirdparty/operation)
Permet d'interroger le statut final d'une transaction à partir de sa référence partenaire (externalReference) ou interne (reference).
- Méthode :
GET - URL :
/external/thirdparty/operation - Paramètres de requête (Query Params) :
externalReferenceoureference
Tester le suivi de statut
Vérifiez l'état d'un paiement UAC via sa référence.
Exemple de réponse HTTP 200
{
"status": "CONFIRMED",
"operationCost": 1000.0,
"amount": 108989.0,
"operationType": "SCHOOL_FEES",
"reference": "UACSF20260724162911228",
"creationDate": "2026-07-24T16:29:10+00:00",
"externalReference": "UAC-REF-2026-001"
}
Exemple de Code d'Intégration Complet
Voici un exemple d'intégration complet en Node.js (JavaScript Async/Await) illustrant la chaîne d'appels : Recherche Facture -> Calcul Coût -> Paiement -> Vérification du Statut.
Node.js (Axios)
const axios = require('axios');
// Configuration de l'environnement PAP
const BASE_URL = 'https://svc.pap.bestcash.me/external';
const API_KEY = '+2290196666262';
const API_SECRET = 'y7MwWuWeQORtpA==';
const client = axios.create({
baseURL: BASE_URL,
headers: {
'X-Auth-ApiKey': API_KEY,
'X-Auth-ApiSecret': API_SECRET,
'Content-Type': 'application/json'
}
});
async function processUacSchoolFeesPayment() {
try {
// 1. Récupération des informations de l'étudiant
console.log('1. Recherche de la facture étudiant...');
const invoiceRes = await client.post('/universities/uac/invoices', {
studentMatricule: '10702514',
academicYear: '2025-2026',
studyYear: 'M2'
});
const studentInfo = invoiceRes.data[0];
console.log(`Étudiant trouvé : ${studentInfo.firstName} ${studentInfo.lastName}`);
console.log(`Montant dû : ${studentInfo.amount} XOF (${studentInfo.paymentCategory})`);
// 2. Calcul du coût de l'opération
console.log('\n2. Calcul des frais d\'opération...');
const costRes = await client.get(`/universities/uac/cost?amount=${studentInfo.amount}`);
console.log(`Coût de l'opération : ${costRes.data.cost} ${costRes.data.targetMonetaryArea.currencyCode}`);
// 3. Exécution du paiement
const externalReference = `UAC-REF-${Date.now()}`;
console.log(`\n3. Exécution du paiement (Réf: ${externalReference})...`);
const paymentRes = await client.post('/universities/uac/operation', {
amount: studentInfo.amount,
matricule: studentInfo.matricule,
academicYear: studentInfo.academicYear,
studyYear: studentInfo.studyYear,
paymentCategory: studentInfo.paymentCategory,
externalReference: externalReference
});
console.log(`Paiement effectué avec succès ! Statut: ${paymentRes.data.status}`);
console.log(`Référence B-MO: ${paymentRes.data.reference}`);
// 4. Vérification du statut de l'opération
console.log('\n4. Vérification du statut de la transaction...');
const statusRes = await client.get(`/thirdparty/operation?externalReference=${externalReference}`);
console.log('Statut de la transaction:', statusRes.data);
} catch (error) {
if (error.response) {
console.error('Erreur API B-MO:', error.response.status, error.response.data);
} else {
console.error('Erreur réseau / système:', error.message);
}
}
}
processUacSchoolFeesPayment();
Python (Requests)
import requests
import time
BASE_URL = "https://svc.pap.bestcash.me/external"
HEADERS = {
"X-Auth-ApiKey": "+2290196666262",
"X-Auth-ApiSecret": "y7MwWuWeQORtpA==",
"Content-Type": "application/json"
}
# 1. Recherche de la facture
invoice_payload = {
"studentMatricule": "10702514",
"academicYear": "2025-2026",
"studyYear": "M2"
}
resp = requests.post(f"{BASE_URL}/universities/uac/invoices", json=invoice_payload, headers=HEADERS)
student_info = resp.json()[0]
print("Étudiant trouvé:", student_info["firstName"], student_info["lastName"])
# 2. Calcul du coût
cost_resp = requests.get(f"{BASE_URL}/universities/uac/cost", params={"amount": student_info["amount"]}, headers=HEADERS)
print("Frais d'opération:", cost_resp.json()["cost"], "XOF")
# 3. Effectuer le paiement
ext_ref = f"UAC-REF-{int(time.time())}"
payment_payload = {
"amount": student_info["amount"],
"matricule": student_info["matricule"],
"academicYear": student_info["academicYear"],
"studyYear": student_info["studyYear"],
"paymentCategory": student_info["paymentCategory"],
"externalReference": ext_ref
}
pay_resp = requests.post(f"{BASE_URL}/universities/uac/operation", json=payment_payload, headers=HEADERS)
print("Résultat Paiement:", pay_resp.json())
# 4. Vérification du statut
status_resp = requests.get(f"{BASE_URL}/thirdparty/operation", params={"externalReference": ext_ref}, headers=HEADERS)
print("Statut final:", status_resp.json())
cURL (Commandes CLI)
# 1. Recherche de facture
curl -X POST "https://svc.pap.bestcash.me/external/universities/uac/invoices" \
-H "X-Auth-ApiKey: +2290196666262" \
-H "X-Auth-ApiSecret: y7MwWuWeQORtpA==" \
-H "Content-Type: application/json" \
-d '{
"studentMatricule": "10702514",
"academicYear": "2025-2026",
"studyYear": "M2"
}'
# 2. Calcul du coût
curl -X GET "https://svc.pap.bestcash.me/external/universities/uac/cost?amount=108989" \
-H "X-Auth-ApiKey: +2290196666262" \
-H "X-Auth-ApiSecret: y7MwWuWeQORtpA==" \
-H "Content-Type: application/json"
# 3. Paiement de la scolarité
curl -X POST "https://svc.pap.bestcash.me/external/universities/uac/operation" \
-H "X-Auth-ApiKey: +2290196666262" \
-H "X-Auth-ApiSecret: y7MwWuWeQORtpA==" \
-H "Content-Type: application/json" \
-d '{
"amount": 108989,
"matricule": "10702514",
"academicYear": "2025-2026",
"studyYear": "M2",
"paymentCategory": "inscription",
"externalReference": "UAC-REF-2026-001"
}'
# 4. Vérification du statut
curl -X GET "https://svc.pap.bestcash.me/external/thirdparty/operation?externalReference=UAC-REF-2026-001" \
-H "X-Auth-ApiKey: +2290196666262" \
-H "X-Auth-ApiSecret: y7MwWuWeQORtpA==" \
-H "Content-Type: application/json"
Autres cas de figure & Gestion des erreurs
- Double soumission (
REQUEST ALREADY SUBMITTED) : Si les frais de scolarité pour un matricule, une année académique et une année d'étude ont déjà été réglés et confirmés, toute nouvelle tentative de paiement entraînera une erreur indiquant que l'opération existe déjà. - Erreur de formulaire / Champs obligatoires : Si l'un des paramètres du tuple (
matricule,academicYear,studyYear,amount,paymentCategory,externalReference) est manquant ou invalide, l'API renvoie une erreur de validation.