Premier appel, sans clé
Les endpoints publics répondent sans clé, sans compte et sans en-tête particulier :
curl "https://api.prisme.vote/votes/recent?country=FR&limit=20" L'API PRISME expose les mêmes données factuelles que la plateforme (votes, profils sur 27 axes publiés, partis, élus, programmes) pour une intégration programmatique. Schéma OpenAPI complet et interactif ci-dessous.
Les endpoints publics répondent sans clé, sans compte et sans en-tête particulier :
curl "https://api.prisme.vote/votes/recent?country=FR&limit=20" 401.Gratuit à vie, jamais métré : le quiz, tous les agrégats, et la vérification à la source (« Vérifier au scrutin », viewer de documents). On paie l'analyse, jamais le registre.
Chaque réponse d'un endpoint métré (200 comme 402) porte les en-têtes
X-Prisme-Reads-Limit,
X-Prisme-Reads-Remaining,
X-Prisme-Reads-Reset et
X-Prisme-Wall-Mode.
Mode actuel : enforce, en production depuis le 8 juillet 2026 :
au-delà du quota, l'endpoint répond
402 avec un corps unifié :
{"code": "QUOTA_DETAIL_REACHED",
"message": "Quota mensuel de consultations détaillées atteint",
"quota": 10, "quota_used": 10, "quota_remaining": 0,
"reset_at": "2026-08-01T00:00:00Z", "upgrade_url": "/compte/upgrade"}
Toutes les erreurs 401 / 402 / 403 / 429 partagent le même schéma
{"code", "message", …}.
JWT Cognito (Authorization: Bearer,
ID token) : identifie votre compte sur les routes de données et débloque les consultations
détaillées. Clé API (X-API-Key,
gérée dans le hub Développeurs, tier business) : si une clé est
présentée, elle est validée et rate-limitée (free 60 req/min, business
600 req/min : 429 + Retry-After + X-RateLimit-*
en rafale) et la consommation est comptée par organisation, sans plafond mensuel ni
facturation. Une clé API est temporaire : elle expire 6 heures après sa
création.
# Agrégats - ouvert à tous
curl "https://api.prisme.vote/votes/recent?country=FR&limit=20"
# Détail - compte requis (401 sans jeton)
curl -H "Authorization: Bearer $ID_TOKEN" "https://api.prisme.vote/scrutins/FR-AN-17-1234"
# Clé API - validée + rate-limitée quand présente
curl -H "X-API-Key: $PRISME_KEY" "https://api.prisme.vote/votes/recent" Référence complète, testable, des endpoints publics - générée depuis l'API (toujours à jour). Les endpoints métrés y documentent leurs réponses 401/402 et leurs en-têtes.
/votes/recent, /scrutins, /votes/search Listes et résumés : accès ouvert (projection agrégée en anonyme). Détail d'un scrutin/vote : compte requis (métré). /lois/search, /lois/{id} Dossiers législatifs, chronologie, votes liés - accès ouvert. /questions, /profile Quiz politique et calcul de profil - gratuit à vie, jamais métré. /parties, /parties/ranges, /parties/{code}/evolution, /parties/{code}/semaines Positions agrégées des partis et des groupes, séries trimestrielle et hebdomadaire d'un groupe - accès ouvert. /representatives Profils agrégés (27 axes publiés) : ouverts. Historique de votes complet : compte requis (métré). /elus/search, /elus/{id} Identités et mandats : ouverts. Historique de votes / programmes complets : compte requis (métré). /elections/{id}/candidates Listes de candidats : ouvertes. Fiche candidat avec programme complet : compte requis (métré). /government Composition actuelle du gouvernement - accès ouvert. /deliberations/recent Listes et profils agrégés : ouverts. Délibération complète : compte requis (métré). /discours/recent Listes et profils agrégés : ouverts. Texte intégral d'un discours : compte requis (métré). Depuis le 18 octobre 2026, sans paramètre source, les routes fusionnent le site de l'Élysée et vie-publique.fr (DILA) ; chaque item porte source et kind. Passez source=ELYSEE pour l'ancien comportement. /programmes/{election}/candidates Résumés et axes agrégés : ouverts. Programme complet d'un candidat : compte requis (métré). /usage Votre consommation API (scope user|org|key, jour|mois) - JWT requis. 🔒 = famille contenant des endpoints de détail métrés (compte requis, quota mensuel).
GET /parties/{code}/semaines : chaque semaine qui compte au moins un scrutin,
le classement de l'Assemblée recalculé sur les 12 mois de scrutins qui finissent à son dernier scrutin
(bornés au début de la législature). Public, sans clé. Les codes de groupes servis sont dans
parti_semaines_groupes de GET /paysage/overton.
curl -s 'https://api.prisme.vote/parties/RN/semaines?source=FR-AN&legislature=17' Forme de la réponse depuis la calibration unique (1.9.5.0), réduite à deux semaines :
{
"party_code": "RN", "chambre": "AN", "a_jour": true, "calcule_le": "2026-10-08",
"methode_version": "…", "ecart_un_an": null,
"ecart_un_an_absence": "dernier_point_en_rupture",
"semaines": [
{"dimanche": "2024-10-13", "legislature": "17", "en_cours": false,
"periode": {"debut": "2024-07-18", "fin": "2024-10-09", "jours": 84, "raccourcie": true, "scrutins": 3},
"scrutins_semaine": 3, "calibration": null, "rupture_classement": false,
"left_right": null, "absence": "sous_le_seuil", "segment": null},
{"dimanche": "2026-10-11", "legislature": "17", "en_cours": true,
"periode": {"debut": "2025-10-07", "fin": "2026-10-06", "jours": 365, "raccourcie": false, "scrutins": 4283},
"scrutins_semaine": 31, "calibration": "lineaire", "rupture_classement": false,
"left_right": 48, "absence": null, "segment": 10}
]
} (legislature, dimanche) ; autour d'une dissolution, un même dimanche peut avoir deux entrées.absence : sous_le_seuil (le calcul de la semaine ne rend rien : moins de 30 scrutins, 5 groupes ou 10 votes par groupe), absent_du_modele (la semaine est mesurée, pas ce groupe ; équivaut à moins_de_scrutins de /evolution), null (mesurée).calibration : lineaire, une droite ajustée sur les notes des programmes, la même chaque semaine (depuis 1.9.5.0 ; une série calculée avant peut porter une autre étiquette) ; null sans mesure. sous_le_seuil couvre aussi une semaine dont les ancres se contredisent (pente ≤ 0).en_cours : semaine pas encore finie au jour du calcul. rupture_classement : le dernier point (le classement) s'écarte de 2 points ou plus du calcul de la série pour ce groupe.segment : morceau de courbe, change à chaque législature, rupture ou semaine non mesurée (et à un changement de calibration dans une série d'avant 1.9.5.0). ecart_un_an ou ecart_un_an_absence : debut_de_legislature, pas_de_mesure, dernier_point_en_rupture, changement_de_calibration (série d'avant 1.9.5.0). Liste ouverte : un client doit accepter une valeur qu'il ne connaît pas.legislature (code) et depuis (AAAA-MM-JJ, dimanche à cette date ou après) ; ils ne changent ni les segments ni l'écart. Erreurs : 503 tant que la série n'est pas calculée, 404 pour une source ou un groupe sans série, 422 pour un paramètre illisible.methode_version différentes ne se comparent pas point à point.limit / offset, avec un plafond serveur par endpoint.calibration a les mêmes sept clés pour
l'Assemblée et le Sénat (degre, repli_lineaire, monotone_sur_projection,
bornes_projection, residus, recalibre, libelle) : le Sénat gagne
recalibre et libelle. Constantes depuis 1.9.5.0 : degre 1,
repli_lineaire false (il valait true à l'Assemblée : la droite est la méthode, pas un repli),
monotone_sur_projection true, recalibre false, libelle lineaire.
Sur GET /parties/display:block; padding:1rem 1.2rem; border-radius:14px; background:#0f172a; color:#e2e8f0; font-family:'SFMono-Regular',Consolas,monospace; font-size:0.9rem; overflow-x:auto; white-space:pre; line-height:1.5;/semaines : ecart_un_an_absence gagne
dernier_point_en_rupture (liste ouverte) ; rupture_classement ne dit plus qu'un écart
de 2 points ou plus ; methode_version change au déploiement, puis au précalcul qui suit :
deux methode_version ne se comparent pas point à point. Les constantes valent pour toute
section calculée depuis 1.9.5.0 ; une section Sénat gardée d'un calcul plus ancien (Sénat en échec)
garde sa forme d'alors.
GET /parties/{code}/semaines (voir
Série hebdomadaire d'un groupe). Sur GET /paysage/overton :
parti_semaines_groupes (groupes de la série et leurs législatures) et
calibration de l'Assemblée (même objet que chambres.SENAT.calibration,
plus recalibre et libelle) sont ajoutés.
GET /paysage/overton :
periode.fenetre_modele et chambres.SENAT.fenetre_modele sont ajoutés
({debut, fin, jours, legislature, scrutins, scrutins_departageants, regle, …}),
ainsi que parti_series_groupes (groupes de la courbe trimestrielle et leurs
législatures). Sur les représentants : left_right_fenetre
({debut, fin}, placé ou non ; un élu absent_du_paysage a moins de
10 votes départageant la gauche et la droite sur cette période).
Changement de sens sur GET /parties/profiles/v2 :
axes.left_right est la position du groupe dans le paysage (la même que
/paysage et /parties, absente si le paysage ne place pas le groupe) ;
l'ancienne moyenne des élus est servie sous left_right_des_elus
({moyenne, min, max, n}).
GET /paysage/overton : echelle.bande_democratique est
retiré ; echelle.reperes_bareme est ajouté (liste de repères
{valeur, libelle}) ; genere_le, pays et
chambres.SENAT sont ajoutés (groupes du Sénat et sénateurs, avec leur
propre calibration).
Sur les représentants (GET /representatives/profiles/v2,
/representatives, /representatives/{id}) :
axes.left_right peut désormais valoir null ;
left_right_source et left_right_unavailable_reason sont
ajoutés, ce dernier avec les valeurs absent_du_paysage,
non_inscrit, chambre_absente, paysage_illisible,
paysage_perime et pays_different.
La valeur de left_right des élus change : c'est désormais le même calcul
que celui de leur groupe sur le paysage.
tour
ajouté (additif) ; display_name corrigé
(accents restitués) ; candidate_id est
l'identifiant stable, ne jamais apparier par nom. Tri : tour, puis parti, puis nom.
Le registre de vérification est mis en cache 15 minutes côté API (un changement de
statut peut mettre jusqu'à 15 min à se propager) ; le détail d'un document
pending n'est pas métré.
X-Prisme-Reads-*,
mode observe : aucun 402 émis). Les listes publiques servent une projection
agrégée en anonyme. Les clés X-API-Key présentées
sur les routes de données sont désormais validées, rate-limitées et comptées.
Aucune clé API n'avait été émise avant ce changement : aucun consommateur existant n'est cassé.