API ouverte

01

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.

En une phrase

Tout ce que la méthodologie décrit est aussi téléchargeable.

02

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).

03

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).

04

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édianes
05

Lé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"
}
06

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).

07

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".

08

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
}
09

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
}
10

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", ... }
]
11

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 }
      ]
    }
  ]
}
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.

13

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.

14

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.

15

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).

Garantie de stabilité

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.

16

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".

17

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}.

18

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.

19

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}`);
20

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 buildDate entre deux requêtes pour détecter une mise à jour.
  • Pas de pagination. Les fichiers sont mono-bloc ; index_all.json fait ~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.