Philosophie
Cette application est 100% statique : il n'y a ni base de données, ni backend, ni point d'API au sens classique.
Tous les chiffres affichés viennent de fichiers JSON pré-calculés et publiés tels
quels sous /data/. Vous pouvez donc les consommer directement : il
suffit de faire un fetch() (ou un curl) sur l'URL
correspondante. Pas d'authentification, pas de rate-limit, pas de CORS restrictif.
Tout ce que la méthodologie décrit est aussi téléchargeable.
Stabilité & versioning
Les chemins ci-dessous sont considérés stables. Quand le format évoluera (ajout d'un
champ, refonte d'une analyse), les changements seront annoncés dans le changelog et,
si la rupture est forte, exposés sous un nouveau préfixe (/data/v2/).
Les fichiers sont régénérés à chaque ingestion (typiquement plusieurs fois par mois
à mesure que de nouveaux scrutins sont publiés). La date de génération est
disponible dans legislatures.json (champ buildDate).
Licence
Les données brutes viennent de l'open data de l'Assemblée Nationale, sous Licence Ouverte Etalab 2.0. Les agrégations, scores et thématiques calculés par cette application restent diffusés sous la même licence : vous pouvez les réutiliser librement, y compris à des fins commerciales, à condition de mentionner la source.
Mention suggérée : Source : monparlement.fr, à partir de l'open data Assemblée Nationale (Etalab 2.0).
Index général
Toutes les ressources sont sous https://www.monparlement.fr/data/. Liste à plat (les fichiers
multi-législatures sont sous /data/LG{n}/) :
/data/
├── legislatures.json # ⟶ §05 méta-données + buildDate
├── index.json # ⟶ §06 liste globale des scrutins (multi-leg)
├── deputes.json # ⟶ §08 député·es en cours de mandat
├── groupes.json # ⟶ §09 référentiel global groupes
├── families.json # ⟶ §10 familles politiques transverses
├── themes.json # ⟶ §11 taxonomie thématique
├── dossiers.json # ⟶ §12 dossiers législatifs
├── textes_index.json # ⟶ §13 index PPL/PJL
├── analyses.json # ⟶ §14 agrégats analytiques pré-calculés
├── enjeux.json # ⟶ §15 résumés LLM par vote final
├── deputes_events.json # ⟶ §16 événements marquants députés
├── deputes_commissions.json # ⟶ §16 mandats en commission
│
├── LG15/ LG16/ LG17/ # ⟶ §05 une vue par législature
│ ├── index.json # votes finals de la législature
│ ├── index_all.json # tous les scrutins (~6 MB, lazy-load)
│ ├── deputes.json # député·es actifs sur la législature
│ ├── deputes_stats.json # KPIs par député (loyauté, présence…)
│ ├── groupes.json # composition des groupes
│ └── deputes_votes/
│ └── {id}.json # vote nominatif d'un député·e
│
├── scrutins/{id}.json # ⟶ §06 détail d'un scrutin
├── textes/{uid}.json # ⟶ §13 texte intégral d'une PPL/PJL
│
│ # Les questions au Gouvernement (§17)
├── questions_corpus.json # ⟶ §17 corpus de la législature en cours
├── questions_corpus_16.json # ⟶ §17 idem, 16e législature
├── questions_corpus_15.json # ⟶ §17 idem, 15e législature
├── questions_index.json # ⟶ §17 compteurs par député·e, toutes législatures
├── questions_global.json # ⟶ §17 agrégats par rubrique et par ministère
├── questions_depute/{id}.json # ⟶ §17 questions d'un·e député·e
├── questions_texte/{slug}.json # ⟶ §17 texte intégral, shardé par ministère
│
│ # Les amendements et les indicateurs par commission
├── amdt/{b0}/{bucket}.json # fiche d'un amendement (paquet adressé par hachage de l'uid)
├── amdt_num/{b0}/{bucket}.json # numéro imprimé (« CF396 ») ⟶ {n: total, l: [uid…]}
├── amdt_dossier/{dossier}/ # sommaire puis lignes, shardé par division
├── amdt_meta.json # périmètre réel du corpus d'amendements publié
└── participation_commission_{leg}.json # participation par commission + médianesLégislatures
Endpoint : https://www.monparlement.fr/data/legislatures.json
Une entrée par législature couverte (actuellement 15, 16, 17), plus la date de génération :
{
"legislatures": [
{
"n": 17,
"label": "17e (en cours)",
"dateDebut": "2024-07-18",
"dateFin": null,
"nGroupes": 14,
"nDeputes": 645,
"nScrutinsMajeurs": 244, // votes finals (nom historique)
"nVotesMajeurs": 127,
"nScrutinsTotal": 6933,
"medianParticipation": 0.9745
}
],
"buildDate": "2026-05-29",
"lastVoteDate": "2026-05-26"
}Scrutins
Index multi-lég : https://www.monparlement.fr/data/index.json (votes finals uniquement : votes sur l'ensemble d'un texte, motions de censure, Congrès ; chacun porte important, vrai pour un vote majeur)
Index par législature : https://www.monparlement.fr/data/LG{n}/index.json
Index exhaustif (ordinaires inclus) : https://www.monparlement.fr/data/LG{n}/index_all.json (~6 MB)
Détail d'un scrutin : https://www.monparlement.fr/data/scrutins/{id}.json
Champs d'une entrée d'index :
{
"id": "VTANR5L17V6753",
"legislature": 17,
"numero": 6753,
"date": "2026-05-20",
"titre": "l'ensemble de la proposition de loi organique...",
"typeVote": { "code": "SPS", "libelle": "scrutin public solennel" },
"sort": { "code": "adopté", "libelle": "..." },
"textType": "ppl", // "ppl" | "pjl" | "moc" | "res" | "dec"
"dossierLegislatifRef": {
"libelle": "...",
"dossierRef": "DLR5L17N52104"
},
"synthese": {
"nombreVotants": 516, "suffragesExprimes": 513,
"nbrSuffragesRequis": 257,
"nbPour": 343, "nbContre": 170, "nbAbstentions": 3, "nbNonVotants": 0
},
"themes": ["institutions", "outre-mer"], // hérité du dossier
"important": true // vote majeur (critères : page Méthodologie)
} Le détail (sous /scrutins/{id}.json) contient en plus le vote nominatif par groupe (groupes[].vote.{pours|contres|abstentions|nonVotants} avec les IDs de député·es).
Votes nominatifs par député·e
Endpoint : https://www.monparlement.fr/data/LG{n}/deputes_votes/{id}.json
L'historique complet des votes d'un·e député·e sur la législature. Un fichier par député·e (~quelques dizaines de Ko).
{
"deputeId": "PA793218",
"legislature": 17,
"votes": [
{ "scrutinId": "VTANR5L17V6753", "vote": "pour", "date": "2026-05-20" },
{ "scrutinId": "VTANR5L17V6752", "vote": "absent" }
]
} Valeurs possibles pour vote : "pour", "contre", "abstention", "nonVotant", "absent".
Députés
Mandat en cours : https://www.monparlement.fr/data/deputes.json (uniquement les député·es dont le mandat court, pas l'historique)
Par législature : https://www.monparlement.fr/data/LG{n}/deputes.json (c'est ici que se trouvent celles et ceux qui n'ont pas été réélu·es)
KPIs calculés : https://www.monparlement.fr/data/LG{n}/deputes_stats.json
// deputes.json - extrait
{
"id": "PA793218",
"civ": "M.", "prenom": "Olivier", "nomFamille": "...",
"groupe": "PO845413", // organisme parent au début de la légis
"circonscription": { "departement": "75", "num": 1 },
"datesMandats": [
{ "legislature": 17, "debut": "2024-07-18", "fin": null }
],
"email": "...", "urlAN": "https://www2.assemblee-nationale.fr/..."
}
// deputes_stats.json - extrait
{
"id": "PA793218",
"scrutinsParticipation": 0.94,
"tauxLoyaute": 0.92, // alignement avec la majorité du groupe
"scrutinsMajeursVotes": 65,
"scrutinsOrdinairesVotes": 4810,
"pplInitiees": 4, "pplCosignees": 31
}Groupes parlementaires
Global : https://www.monparlement.fr/data/groupes.json · Par législature : https://www.monparlement.fr/data/LG{n}/groupes.json
{
"id": "PO845413",
"code": "EPR",
"libelle": "Ensemble pour la République",
"famille": "macroniste", // ⟶ §10
"couleur": "#5fc1e8",
"legislature": 17,
"nMembres": 99,
"dateDebut": "2024-07-18",
"dateFin": null
}Familles politiques transverses
Endpoint : https://www.monparlement.fr/data/families.json
Mapping stable utilisé pour comparer les législatures entre elles (Renaissance ⟶ EPR, etc.).
[
{ "id": "macroniste", "label": "Ensemble (macronisme)",
"couleur": "#5fc1e8", "labelCourt": "EPR",
"groupes": ["PO730964", "PO845413"] },
{ "id": "rn", "label": "Rassemblement National", ... },
{ "id": "lfi", "label": "La France Insoumise", ... }
]Thèmes
Endpoint : https://www.monparlement.fr/data/themes.json
~50 thèmes regroupés en 12 catégories. Classification appliquée au niveau du dossier législatif (et propagée aux scrutins).
{
"categories": [
{
"id": "social",
"label": "Société & solidarité",
"themes": [
{ "id": "logement", "label": "Logement", "nScrutins": 8 },
{ "id": "famille", "label": "Famille & enfance", "nScrutins": 12 }
]
}
]
}Dossiers législatifs
Endpoint : https://www.monparlement.fr/data/dossiers.json
Liste des « grands dossiers » identifiés (réformes des retraites, immigration,
justice, etc.). Chaque dossier regroupe plusieurs scrutins liés via leur dossierLegislatifRef.dossierRef.
Textes (propositions de loi)
Index : https://www.monparlement.fr/data/textes_index.json (~5700 PPL/PJL)
Détail : https://www.monparlement.fr/data/textes/{uid}.json
Le détail contient le texte intégral (exposé des motifs + articles), les auteurs et cosignataires, et le statut d'examen.
Analyses politiques
Endpoint : https://www.monparlement.fr/data/analyses.json
Agrégats pré-calculés utilisés par la page Analyses : votes décisifs, dissidents par groupe, niches d'opposition, alliances inter-familles, coordonnées 2D des familles politiques, récidives de scrutins, évolution temporelle.
Tous les champs sont documentés in-extenso dans la méthodologie.
Résumés d'enjeux (LLM)
Endpoint : https://www.monparlement.fr/data/enjeux.json
Résumés rédigés en amont par un LLM (Claude Haiku) à partir de la lettre du texte.
Indexés par scrutinId. Chaque entrée comprend : resume court (1 phrase), arguments_pour et arguments_contre (2-3
puces chacun), portee (loi cadre / loi technique / résolution), controverse (faible / moyenne / forte).
Aucun appel LLM n'est fait à l'usage du site : tout est pré-calculé. Les résumés ne changent pas tant que la pipeline n'est pas relancée.
Commissions & événements députés
Mandats en commission : https://www.monparlement.fr/data/deputes_commissions.json (~18800 entrées)
Événements marquants : https://www.monparlement.fr/data/deputes_events.json (~3800 entrées)
Les événements regroupent élections, réélections, entrées au gouvernement,
retours à l'Assemblée, démissions. Type : "election" | "reelection" | "ministre" | "retour" | "demission".
Questions au Gouvernement
Trois types, tels que l'Assemblée les distingue : QE écrites, QG au Gouvernement (les « QAG »), QOSD orales sans débat.
Les intitulés et les rubriques sont ceux des services de l'Assemblée, repris sans
reformulation.
Corpus d'une législature : https://www.monparlement.fr/data/questions_corpus.json (législature en cours), …_16.json, …_15.json.
{
"_meta": {
"legislature": 17,
"fraicheur": { "QE": "2026-08-04", "QG": "2026-07-21", "QOSD": "2026-06-23" },
"fraicheurOfficielle": { "QE": "2026-08-04", "QG": "2026-06-25", "QOSD": "2026-06-23" },
"complementSeance": { "apresLe": "2026-06-25", "nQuestions": 64, "seances": [ … ] },
"topline": { "tauxReponseQE": 60, "delaiMedianQE": 126, "nQE": 17641 }
},
"ministeres": [ { "slug", "label", "n" } ],
"rubriques": [ { "label", "n" } ],
"questions": [ {
"uid", "type", "numero", "date", "rubrique", "analyse",
"ministere", "ministereSlug", "depute", "acteurRef", "groupe",
"repondue", "dateReponse", "delaiJours",
"source" // absent = jeu de données « questions » ; "seance" = compte rendu de séance
} ]
} ⚠️ Deux dates de fraîcheur, et c'est volontaire. fraicheurOfficielle est la dernière date publiée par l'Assemblée dans son
jeu de données des questions ; fraicheur tient compte du complément
décrit ci-dessous. L'Assemblée ne publie pas les trois types au même rythme : au
5 août 2026, les questions écrites allaient jusqu'au 4 août et les questions au
Gouvernement seulement jusqu'au 16 juillet.
⚠️ Le champ source. Une question portant "source": "seance" est reprise du compte rendu intégral de
séance, que l'Assemblée publie en quelques jours, alors que son jeu de données
des questions paraît avec plusieurs semaines de retard. Ces questions n'ont pas de numéro officiel (numero vide) et portent un uid de la forme CRQG{leg}-{jo}-{n},
distinct des uid officiels. Elles disparaissent du complément dès que
l'Assemblée les publie : le complément ne couvre que les séances postérieures à fraicheurOfficielle.QG, il n'y a donc jamais de doublon.
Compteurs par député·e : https://www.monparlement.fr/data/questions_index.json
{
"_meta": { "totaux": { "QE", "QG", "QOSD" }, "parLeg": { "17": { "deputes", "questions" } } },
"deputes": { "PA794008": [nQE, nQG, nQOSD] } // totaux TOUTES législatures
} ⚠️ Le tableau est un total toutes législatures confondues. Pour le
détail par législature, utiliser https://www.monparlement.fr/data/questions_depute/{acteurRef}.json,
qui porte parLeg avec les compteurs, les taux de réponse, les rubriques
dominantes et les dix questions les plus récentes.
Texte intégral : https://www.monparlement.fr/data/questions_texte/{ministereSlug}.json (et questions_texte_16/, questions_texte_15/), indexé par uid : { "q": "…", "r": "…" }. Pour une question au
Gouvernement issue du compte rendu, un tableau echanges donne en plus le
fil des prises de parole (nom, qualite, acteurRef, texte).
Agrégats : https://www.monparlement.fr/data/questions_global.json (rubriques et
ministères, législature en cours).
Page correspondante : /questions/liste, et une page par question : /questions/q/{uid}.
Flux RSS
URL : https://www.monparlement.fr/rss.xml
Flux RSS 2.0 listant les 50 derniers votes majeurs (toutes législatures confondues). Chaque entrée contient le titre du scrutin, sa date, le résultat (pour/contre/abstentions), le sort de l'Assemblée, et - si disponible - le résumé d'enjeu en une phrase. Idéal pour brancher un lecteur RSS ou un bot Mastodon/Bluesky.
curl -s https://www.monparlement.fr/rss.xml | head -50 Le flux est aussi déclaré dans la balise <head> du site
(<link rel="alternate" type="application/rss+xml">), donc les
extensions de navigateur compatibles le détectent automatiquement.
Exemples d'usage
Récupérer les 5 derniers votes majeurs :
curl -s https://www.monparlement.fr/data/index.json | jq '.scrutins | map(select(.important)) | sort_by(.date) | reverse | .[0:5] | .[].titre' Voir les votes d'un·e député·e :
curl -s https://www.monparlement.fr/data/LG17/deputes_votes/PA793218.json | jq '.votes | map(.vote) | group_by(.) | map({vote: .[0], n: length})' Lister les groupes d'une législature :
curl -s https://www.monparlement.fr/data/LG17/groupes.json | jq '.[] | "\(.code)\t\(.libelle)\t\(.nMembres)"' En JavaScript depuis un site tiers :
const r = await fetch('https://www.monparlement.fr/data/legislatures.json');
const { legislatures, buildDate } = await r.json();
console.log(`Données à jour au ${buildDate}`);Ce que l'API n'est pas
- Pas de filtre côté serveur. Pour ne récupérer que les scrutins d'un groupe ou d'un thème, téléchargez l'index puis filtrez côté client.
- Pas de webhook ni de notification temps réel. Comparez
buildDateentre deux requêtes pour détecter une mise à jour. - Pas de pagination. Les fichiers sont mono-bloc ;
index_all.jsonfait ~6 MB par législature, à lazy-loader. - Pas d'historique de versions. Quand un fichier est régénéré, l'ancienne version n'est pas conservée. Pour figer un instantané, copiez les fichiers vous-même.
Pour un besoin non couvert ou un bug, ouvrez une issue ou utilisez le bouton « Signaler » en bas à droite du site.