API Site public
Endpoints anonymes utilisés par le site public. Ils ne renvoient jamais de donnée nominative.
Vue d'ensemble
| Endpoint | Méthode | Description |
|---|---|---|
/api/public/statistiques | GET | Chiffres vivants (cache 15 min) |
/api/public/newsletter | POST | Inscription à la newsletter |
/api/public/newsletter/confirmer/{token} | GET, POST | Confirmation d'abonnement |
/api/public/newsletter/desinscrire/{token} | GET, POST | Désinscription |
/api/newsletter/abonnes | GET | Abonnés confirmés (authentifié, permission admin.settings) |
/api/cms/public/articles, /pages, /categories, /{slug} | GET | Contenus publiés |
/api/cms/images/{path} | GET | Image à la une d'un contenu publié |
/api/public/reclamation/* | GET, POST | Formulaire de réclamation (vers KoboToolbox) |
/api/site-public | GET | Réglages du site (textes, images, cibles) |
Chiffres vivants
GET /api/public/statistiques
Réponse
{
"success": true,
"data": {
"menagesEnregistres": 11807,
"menagesBeneficiaires": 5644,
"plaintesRecues": 3271,
"plaintesResolues": 3249,
"tauxResolution": 99,
"dateCalcul": "2026-09-28T11:24:27+00:00"
}
}
Tous les projets comptent, archivés compris. Aucun champ ne concerne les paiements, par décision de sécurité (voir le guide d'administration, page Site public). Réponse mise en cache 15 minutes côté serveur.
Newsletter
Inscription
POST /api/public/newsletter
{ "email": "personne@example.org", "langue": "pt" }
| Code | Signification |
|---|---|
| 200 | Demande enregistrée ; un e-mail de confirmation part par le worker Messenger. Même réponse si l'adresse est déjà confirmée ou en attente. |
| 400 | Adresse invalide |
langue : fr, pt, en ou cr ; à défaut, la langue préférée de la requête, sinon pt. Un renvoi de confirmation n'a lieu qu'après 10 minutes. Limité par la règle api_write du limiteur de débit.
Confirmation et désinscription
POST /api/public/newsletter/confirmer/{token}
POST /api/public/newsletter/desinscrire/{token}
token : 64 caractères hexadécimaux reçus par e-mail. Réponse 200 avec { "data": { "langue": "pt" } }, ou 404 si le jeton est inconnu. Les pages /#/newsletter/confirmer/{token} et /#/newsletter/desinscrire/{token} du frontend appellent ces endpoints.
Abonnés (administration)
GET /api/newsletter/abonnes
GET /api/newsletter/abonnes?format=csv
Permission admin.settings. Renvoie les abonnés confirmés (email, langue, confirmeAt), les effectifs par statut (en_attente, confirme, desinscrit) et total. En CSV : email;langue;confirme_le, encodage UTF-8 avec BOM.
Contenus CMS publics
GET /api/cms/public/articles
GET /api/cms/public/pages
GET /api/cms/public/{slug}
Seuls les contenus publiés sont renvoyés. Le champ createdBy est réduit à { "nom", "prenom" } ; reviewedBy, updatedBy et reviewNote ne sont pas exposés.
GET /api/cms/images/{path}
Anonyme pour l'image d'un contenu publié ; 404 pour un contenu non publié (les utilisateurs connectés y accèdent).