Aller au contenu

Endpoints

L’API expose deux endpoints facturés, plus un endpoint utilitaire GET /v1/me (non facturé) pour vérifier votre signature et votre solde.

EndpointCoûtDescription
GET /v1/centres/candidats/{matricule}1 créditAffectation du candidat (centre, salle, table).
GET /v1/resultats/candidats/{matricule}1 créditRésultat publié — mention et série, admis uniquement.
GET /v1/me0 créditInformations sur votre clé et votre solde.

Toutes les requêtes doivent être signées (voir Authentification). Une signature absente ou invalide renvoie 401 sans débit.


GET /v1/centres/candidats/{matricule}

Retourne l’affectation publiée du candidat pour la session d’examen la plus récente disponible (centre, salle, numéro de table, GPS quand disponible).

URL

GET https://partner.exatrust.cg/v1/centres/candidats/{matricule}

matricule est l’identifiant national du candidat. Format accepté : [A-Z0-9]{3,30}. Auto-mis en majuscules côté serveur.

Exemple

Fenêtre de terminal
curl -sS \
-H "Signature-Input: sig1=(\"@method\" \"@path\" \"@query\");created=1715680570;keyid=\"pk_orange_8a3b\";alg=\"ed25519\";nonce=\"MmJ6...\"" \
-H "Signature: sig1=:WsV/LpsuuS5RVFA0u+xIG47oOHXjC6pyLuSSWVJspt4s2A8Djvt1...:" \
https://partner.exatrust.cg/v1/centres/candidats/EANB260094

Réponse (200)

{
"matricule": "EANB260094",
"session_examen_id": 6,
"candidat": {
"nom": "LOUMOUAMOU",
"prenom": "Mignon Marcel Petith",
"date_naissance": "2009-09-30",
"sexe": "M",
"departement": "POINTE-NOIRE"
},
"affectation": {
"centre": {
"nom": "CENTRE N° 28 : ECOLE CHARLES MYNYNGOU 2",
"latitude": -4.792712,
"longitude": 11.875706
},
"salle": { "libelle": "Salle 04" },
"numero_table": 16
},
"meta": {
"request_id": "01HXY...",
"credit_mode": "postpaid",
"credits_remaining": 95
}
}

Champs de réponse

ChampTypeDescription
matriculestringMatricule normalisé (majuscules).
session_examen_idintIdentifiant interne de la session d’examen résolue.
candidat.nom / prenomstringNom et prénoms officiels au format administratif.
candidat.date_naissancestring YYYY-MM-DDDate de naissance déclarée.
candidat.sexe"M" | "F" | nullSexe déclaré.
candidat.departementstringDépartement d’origine.
affectation.centre.nomstringNom officiel du centre.
affectation.centre.latitude / longitudenumber | nullGPS du centre quand disponible (~80 % des centres).
affectation.salle.libellestringLibellé de la salle.
affectation.numero_tableintNuméro de table.
meta.request_idstringIdentifiant de la requête, à fournir au support.
meta.credit_mode"prepaid" | "postpaid"Mode de facturation actif.
meta.credits_remainingintSolde restant après débit de cette requête.

Erreurs typiques

Code HTTPCode applicatifCause
401INVALID_SIGNATURESignature absente, malformée ou non vérifiable.
402INSUFFICIENT_CREDITSSolde épuisé (mode prepaid).
404CANDIDAT_NOT_FOUNDMatricule inconnu pour la session courante. 1 crédit débité.
404EDITION_NOT_FOUNDAucune session active publiée. Pas de débit.
429RATE_LIMITEDTrop de requêtes (voir Erreurs & limites).

GET /v1/resultats/candidats/{matricule}

Retourne le résultat publié du candidat : mention, série (pour BAC), établissement d’admission. Le système de résultats ne contient que les candidats admis.

URL

GET https://partner.exatrust.cg/v1/resultats/candidats/{matricule}

Format du matricule : [A-Z0-9-]{3,30} (le tiret est accepté côté résultats).

Exemple

Fenêtre de terminal
curl -sS \
-H "Signature-Input: sig1=(\"@method\" \"@path\" \"@query\");created=1715680570;keyid=\"pk_orange_8a3b\";alg=\"ed25519\";nonce=\"MmJ6...\"" \
-H "Signature: sig1=:WsV/LpsuuS5RVFA0u+xIG47oOHXjC6pyLuSSWVJspt4s2A8Djvt1...:" \
https://partner.exatrust.cg/v1/resultats/candidats/EANB260094

Réponse (200)

{
"matricule": "EANB260094",
"session_id": 26,
"session_name": "2025",
"examen_id": 3,
"examen_name": "BEPC",
"candidat": {
"nom": "LOUMOUAMOU",
"prenom": "Mignon Marcel Petith",
"date_naissance": "2009-09-30",
"sexe": "M",
"mention": "AB",
"serie": null
},
"etablissement": {
"code": "ETS001",
"name": "École Charles Mynyngou",
"region": "Brazzaville"
},
"meta": {
"request_id": "01HXY...",
"credit_mode": "prepaid",
"credits_remaining": 4285
}
}

Champs de réponse

ChampTypeDescription
matriculestringMatricule normalisé.
session_idintIdentifiant interne de la session de résultats.
session_namestringAnnée de la session, ex. "2025".
examen_idintIdentifiant interne de l’examen.
examen_name"BAC" | "BEPC" | "CEP" | "BTS"Type d’examen.
candidat.mention"TB" | "B" | "AB" | "PAS" | nullMention obtenue. Codes courts normalisés (Très Bien, Bien, Assez Bien, Passable).
candidat.seriestring | nullSérie pour BAC uniquement : A, A4, C, D, E, F, G, H. null ailleurs.
etablissement.codestringCode de l’établissement (référentiel résultats — différent de code_ets côté centres).
etablissement.namestringNom officiel.
etablissement.regionstringRégion administrative.
meta.*Voir endpoint centres.

Erreurs typiques

Code HTTPCode applicatifCauseCrédit débité ?
401INVALID_SIGNATURESignature invalide.Non
402INSUFFICIENT_CREDITSSolde épuisé (prepaid).Non
404CANDIDAT_NOT_FOUNDMatricule inconnu ou candidat non admis.Oui
404EDITION_NOT_FOUNDRésultats pas encore publiés (typiquement 2 à 6 semaines après l’examen).Non
429RATE_LIMITEDTrop de requêtes.Non

GET /v1/me

Utilitaire non facturé. Retourne votre identité partenaire et votre solde.

{
"user_id": 42,
"email": "tech@orange.cg",
"key_id": "pk_orange_8a3b",
"credits": { "mode": "prepaid", "balance": 4287, "total_consumed": 5713 }
}

credits est null si votre compte n’a pas encore été provisionné. Cet endpoint ne consomme pas de crédit, même en cas de 429.


Diagramme du flux d’appel

sequenceDiagram
autonumber
participant App as Backend partenaire
participant Sign as Lib de signature
participant API as ExaTrust API
App->>Sign: req = GET /v1/resultats/candidats/EANB260094
Sign->>Sign: base = @method + @path + @query + params
Sign->>Sign: signature = Ed25519.Sign(privKey, base)
Sign-->>App: Signature-Input + Signature
App->>API: HTTPS + Signature-Input + Signature (+ mTLS si activé)
API->>API: Vérifie Ed25519 (50 µs)
API->>API: Anti-replay (Redis, TTL 5 min)
API->>API: Rate-limit
API->>API: Crédits
API-->>App: 200 JSON · X-Request-Id · meta.credits_remaining