{"openapi":"3.1.0","info":{"title":"normatic API","description":"API REST unifiée d'accès aux corpus juridiques normatic : jurisprudence judiciaire (Judilibre), justice administrative (ArianeWeb), législation (codes, LODA, articles), droit de l'UE (EUR-Lex), conventions collectives (KALI), accords d'entreprise et petits fonds (CNIL, Conseil constitutionnel).\n\n**Sources des données** : les données proviennent de la DILA (Direction de l'information légale et administrative), de la Cour de cassation, du Conseil d'État et de l'Union européenne.\n\n**Authentification** : `Authorization: Bearer <votre_token>`. L'accès requiert le scope `api` (offre payante). Le même token ouvre aussi les serveurs MCP, et le quota mensuel est partagé entre l'API REST et le MCP.","version":"1.0.0"},"paths":{"/jj/search":{"get":{"tags":["Jurisprudence judiciaire (jj)"],"summary":"Rechercher des décisions judiciaires","description":"Recherche par mots-clés et/ou numéro de décision.\n\nLa réponse contient la pagination, `search_mode`, `warnings` et `results`.\n`total_capped=true` signifie que `total` est un minimum limité à 10 000.","operationId":"rechercher_decisions_jj_search_get","security":[{"BearerToken":[]}],"parameters":[{"name":"query","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recherche lexicale dans le texte des décisions. Les opérateurs `ET`, `OU`, `SAUF` et les `\"expressions exactes\"` sont acceptés. Obligatoire si `number` est absent.","title":"Query"},"description":"Recherche lexicale dans le texte des décisions. Les opérateurs `ET`, `OU`, `SAUF` et les `\"expressions exactes\"` sont acceptés. Obligatoire si `number` est absent."},{"name":"number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Numéro de pourvoi de la Cour de cassation (`21-12.345`), numéro RG de cour d'appel ou de tribunal judiciaire (`24/01068`), ou numéro de tribunal de commerce (`2024F00183`). La ponctuation et la casse sont ignorées. Utilisé seul, il déclenche une recherche directe ; avec `query`, il filtre la recherche lexicale.","title":"Number"},"description":"Numéro de pourvoi de la Cour de cassation (`21-12.345`), numéro RG de cour d'appel ou de tribunal judiciaire (`24/01068`), ou numéro de tribunal de commerce (`2024F00183`). La ponctuation et la casse sont ignorées. Utilisé seul, il déclenche une recherche directe ; avec `query`, il filtre la recherche lexicale."},{"name":"jurisdiction","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Une ou plusieurs juridictions séparées par des virgules : `cc`, `ca`, `tj`, `tcom`. La casse est ignorée.","title":"Jurisdiction"},"description":"Une ou plusieurs juridictions séparées par des virgules : `cc`, `ca`, `tj`, `tcom`. La casse est ignorée."},{"name":"chamber","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Une ou plusieurs chambres séparées par des virgules. Avec `jurisdiction=cc` seul, utiliser une clé exacte (`soc`, `civ1`, `civ2`, `civ3`, `comm`, `cr`…) ; pour les autres juridictions, le filtre recherche dans un libellé libre.","title":"Chamber"},"description":"Une ou plusieurs chambres séparées par des virgules. Avec `jurisdiction=cc` seul, utiliser une clé exacte (`soc`, `civ1`, `civ2`, `civ3`, `comm`, `cr`…) ; pour les autres juridictions, le filtre recherche dans un libellé libre."},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Un ou plusieurs types séparés par des virgules : `arret`, `avis`, `qpc`, `ordonnance`…","title":"Type"},"description":"Un ou plusieurs types séparés par des virgules : `arret`, `avis`, `qpc`, `ordonnance`…"},{"name":"solution","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Une ou plusieurs solutions séparées par des virgules. Les clés comme `cassation` ou `rejet` sont normalisées pour la Cour de cassation ; les autres juridictions peuvent publier des libellés libres.","title":"Solution"},"description":"Une ou plusieurs solutions séparées par des virgules. Les clés comme `cassation` ou `rejet` sont normalisées pour la Cour de cassation ; les autres juridictions peuvent publier des libellés libres."},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Une ou plusieurs sources séparées par des virgules : `dila`, `jurinet`, `jurica`, `juritj`, `juritcom`.","title":"Source"},"description":"Une ou plusieurs sources séparées par des virgules : `dila`, `jurinet`, `jurica`, `juritj`, `juritcom`."},{"name":"nac","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Codes NAC séparés par des virgules. La sélection est hiérarchique : `3` désigne une catégorie, `30` une sous-catégorie et `30A` un code détaillé. Ce filtre concerne les cours d'appel et tribunaux judiciaires.","title":"Nac"},"description":"Codes NAC séparés par des virgules. La sélection est hiérarchique : `3` désigne une catégorie, `30` une sous-catégorie et `30A` un code détaillé. Ce filtre concerne les cours d'appel et tribunaux judiciaires."},{"name":"location_label","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Libellés de ville du siège séparés par des virgules, par exemple `Paris,Lyon`.","title":"Location Label"},"description":"Libellés de ville du siège séparés par des virgules, par exemple `Paris,Lyon`."},{"name":"date_start","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Date minimale de la décision, au format `AAAA-MM-JJ`.","title":"Date Start"},"description":"Date minimale de la décision, au format `AAAA-MM-JJ`."},{"name":"date_end","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Date maximale de la décision, au format `AAAA-MM-JJ`.","title":"Date End"},"description":"Date maximale de la décision, au format `AAAA-MM-JJ`."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Nombre maximal de décisions dans la page.","default":20,"title":"Limit"},"description":"Nombre maximal de décisions dans la page."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":0,"description":"Nombre de décisions à ignorer avant la page, de 0 à 10 000.","default":0,"title":"Offset"},"description":"Nombre de décisions à ignorer avant la page, de 0 à 10 000."}],"responses":{"200":{"description":"Page de décisions classées par pertinence ou résultat d'une recherche par numéro.","content":{"application/json":{"schema":{"title":"Response Rechercher Decisions Jj Search Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service JUDILIBRE en amont."},"503":{"description":"Service de jurisprudence judiciaire temporairement indisponible."},"400":{"description":"Valeur inconnue pour un filtre à vocabulaire fermé."},"422":{"description":"Paramètre invalide ou absence simultanée de `query` et `number`."}}}},"/jj/search/zones":{"get":{"tags":["Jurisprudence judiciaire (jj)"],"summary":"Rechercher dans les zones structurelles des décisions","description":"Recherche dans les zones extraites des décisions.\n\nSans `zone`, les zones sont combinées dans un classement unique. La couverture\nest partielle et `total` désigne le nombre retourné, pas le total du corpus.","operationId":"recherche_par_zone_jj_search_zones_get","security":[{"BearerToken":[]}],"parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string","description":"Recherche lexicale dans le texte des zones. Les opérateurs `ET`, `OU`, `SAUF` et les expressions exactes sont acceptés.","title":"Query"},"description":"Recherche lexicale dans le texte des zones. Les opérateurs `ET`, `OU`, `SAUF` et les expressions exactes sont acceptés."},{"name":"zone","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone unique : `introduction`, `expose`, `moyens`, `motivations`, `dispositif` ou `annexes`. Si omise, un classement multi-zone pondéré est appliqué.","title":"Zone"},"description":"Zone unique : `introduction`, `expose`, `moyens`, `motivations`, `dispositif` ou `annexes`. Si omise, un classement multi-zone pondéré est appliqué."},{"name":"jurisdiction","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Juridictions séparées par des virgules : `cc`, `ca`, `tj`, `tcom`.","title":"Jurisdiction"},"description":"Juridictions séparées par des virgules : `cc`, `ca`, `tj`, `tcom`."},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sources séparées par des virgules : `dila`, `jurinet`, `jurica`, `juritj`, `juritcom`.","title":"Source"},"description":"Sources séparées par des virgules : `dila`, `jurinet`, `jurica`, `juritj`, `juritcom`."},{"name":"date_start","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Date minimale de la décision, au format `AAAA-MM-JJ`.","title":"Date Start"},"description":"Date minimale de la décision, au format `AAAA-MM-JJ`."},{"name":"date_end","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Date maximale de la décision, au format `AAAA-MM-JJ`.","title":"Date End"},"description":"Date maximale de la décision, au format `AAAA-MM-JJ`."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Nombre maximal de décisions retournées.","default":20,"title":"Limit"},"description":"Nombre maximal de décisions retournées."}],"responses":{"200":{"description":"Décisions correspondant à la zone demandée ou au classement multi-zone.","content":{"application/json":{"schema":{"title":"Response Recherche Par Zone Jj Search Zones Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service JUDILIBRE en amont."},"503":{"description":"Service de jurisprudence judiciaire temporairement indisponible."},"400":{"description":"Juridiction, source ou zone inconnue."},"422":{"description":"Requête, date ou limite invalide."}}}},"/jj/decisions/{decision_id}":{"get":{"tags":["Jurisprudence judiciaire (jj)"],"summary":"Consulter le texte intégral d'une décision judiciaire","description":"Retourne les métadonnées, `text`, les éventuelles `zones` et l'URL source.","operationId":"consulter_decision_jj_decisions__decision_id__get","security":[{"BearerToken":[]}],"parameters":[{"name":"decision_id","in":"path","required":true,"schema":{"type":"string","description":"Identifiant JUDILIBRE retourné par une recherche, généralement sur 24 caractères hexadécimaux.","title":"Decision Id"},"description":"Identifiant JUDILIBRE retourné par une recherche, généralement sur 24 caractères hexadécimaux."}],"responses":{"200":{"description":"Décision complète et métadonnées JUDILIBRE.","content":{"application/json":{"schema":{"title":"Response Consulter Decision Jj Decisions  Decision Id  Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service JUDILIBRE en amont."},"503":{"description":"Service de jurisprudence judiciaire temporairement indisponible."},"404":{"description":"Décision inconnue."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/jj/decisions/{decision_id}/zones/{zone_name}":{"get":{"tags":["Jurisprudence judiciaire (jj)"],"summary":"Consulter une zone d'une décision judiciaire","description":"Retourne le texte et les positions de la zone ; toutes les décisions n'en disposent pas.","operationId":"consulter_zone_decision_jj_decisions__decision_id__zones__zone_name__get","security":[{"BearerToken":[]}],"parameters":[{"name":"decision_id","in":"path","required":true,"schema":{"type":"string","description":"Identifiant JUDILIBRE de la décision.","title":"Decision Id"},"description":"Identifiant JUDILIBRE de la décision."},{"name":"zone_name","in":"path","required":true,"schema":{"type":"string","description":"Zone à retourner : `introduction`, `expose`, `moyens`, `motivations`, `dispositif` ou `annexes`. La casse est ignorée.","title":"Zone Name"},"description":"Zone à retourner : `introduction`, `expose`, `moyens`, `motivations`, `dispositif` ou `annexes`. La casse est ignorée."}],"responses":{"200":{"description":"Texte et positions de la zone dans la décision.","content":{"application/json":{"schema":{"title":"Response Consulter Zone Decision Jj Decisions  Decision Id  Zones  Zone Name  Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service JUDILIBRE en amont."},"503":{"description":"Service de jurisprudence judiciaire temporairement indisponible."},"404":{"description":"Décision ou zone absente."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/jj/decisions/{decision_id}/citations":{"get":{"tags":["Jurisprudence judiciaire (jj)"],"summary":"Lister les articles cités par une décision","description":"Retourne les références d'articles extraites et agrégées.\n\nCette route ne résout ni le texte cité ni sa version applicable à la date de la décision.","operationId":"citations_decision_jj_decisions__decision_id__citations_get","security":[{"BearerToken":[]}],"parameters":[{"name":"decision_id","in":"path","required":true,"schema":{"type":"string","description":"Identifiant JUDILIBRE de la décision.","title":"Decision Id"},"description":"Identifiant JUDILIBRE de la décision."}],"responses":{"200":{"description":"Articles et instruments juridiques extraits de la décision.","content":{"application/json":{"schema":{"title":"Response Citations Decision Jj Decisions  Decision Id  Citations Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service JUDILIBRE en amont."},"503":{"description":"Service de jurisprudence judiciaire temporairement indisponible."},"404":{"description":"Décision inconnue."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/jj/decisions/{decision_id}/cite-par":{"get":{"tags":["Jurisprudence judiciaire (jj)"],"summary":"Lister les décisions qui citent une décision","description":"Retourne une page de décisions citantes et les compteurs par zone.\n\nLe graphe couvre uniquement les références résolues entre décisions du corpus.","operationId":"decisions_citant_cette_decision_jj_decisions__decision_id__cite_par_get","security":[{"BearerToken":[]}],"parameters":[{"name":"decision_id","in":"path","required":true,"schema":{"type":"string","description":"Identifiant JUDILIBRE de la décision citée.","title":"Decision Id"},"description":"Identifiant JUDILIBRE de la décision citée."},{"name":"zone","in":"query","required":false,"schema":{"type":"string","description":"Zone dans laquelle la référence à la décision a été détectée : `motivations` par défaut, ou notamment `expose`, `moyens`, `dispositif` et `introduction`. Une chaîne vide désactive le filtre de zone.","default":"motivations","title":"Zone"},"description":"Zone dans laquelle la référence à la décision a été détectée : `motivations` par défaut, ou notamment `expose`, `moyens`, `dispositif` et `introduction`. Une chaîne vide désactive le filtre de zone."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Nombre maximal de décisions dans la page.","default":50,"title":"Limit"},"description":"Nombre maximal de décisions dans la page."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Nombre de décisions à ignorer avant la page.","default":0,"title":"Offset"},"description":"Nombre de décisions à ignorer avant la page."}],"responses":{"200":{"description":"Compteurs par zone et page de décisions citantes.","content":{"application/json":{"schema":{"title":"Response Decisions Citant Cette Decision Jj Decisions  Decision Id  Cite Par Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service JUDILIBRE en amont."},"503":{"description":"Service de jurisprudence judiciaire temporairement indisponible."},"404":{"description":"Décision inconnue."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/jj/decisions/{decision_id}/liens":{"get":{"tags":["Jurisprudence judiciaire (jj)"],"summary":"Consulter la chaîne procédurale d'une décision","description":"Retourne le sort en cassation et les décisions liées.\n\n`casse=null` signifie que le sort est inconnu ; `target_id=null` qu'une cible\nn'a pas pu être résolue dans le corpus.","operationId":"liens_decision_jj_decisions__decision_id__liens_get","security":[{"BearerToken":[]}],"parameters":[{"name":"decision_id","in":"path","required":true,"schema":{"type":"string","description":"Identifiant JUDILIBRE de la décision.","title":"Decision Id"},"description":"Identifiant JUDILIBRE de la décision."}],"responses":{"200":{"description":"Sort en cassation et décisions procéduralement liées.","content":{"application/json":{"schema":{"title":"Response Liens Decision Jj Decisions  Decision Id  Liens Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service JUDILIBRE en amont."},"503":{"description":"Service de jurisprudence judiciaire temporairement indisponible."},"404":{"description":"Décision inconnue."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/jj/stats":{"get":{"tags":["Jurisprudence judiciaire (jj)"],"summary":"Consulter la couverture du corpus judiciaire","description":"Retourne la volumétrie et la répartition du corpus par juridiction.","operationId":"statistiques_corpus_jj_stats_get","responses":{"200":{"description":"Volumétrie du corpus et répartition par juridiction.","content":{"application/json":{"schema":{"title":"Response Statistiques Corpus Jj Stats Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service JUDILIBRE en amont."},"503":{"description":"Service de jurisprudence judiciaire temporairement indisponible."}},"security":[{"BearerToken":[]}]}},"/jj/nac":{"get":{"tags":["Jurisprudence judiciaire (jj)"],"summary":"Parcourir la nomenclature des affaires civiles","description":"Retourne les codes NAC utilisables par le filtre `nac` de `/search`.","operationId":"lister_nac_jj_nac_get","security":[{"BearerToken":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recherche insensible à la casse dans les libellés NAC.","title":"Q"},"description":"Recherche insensible à la casse dans les libellés NAC."},{"name":"level","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Niveau hiérarchique : `1` catégorie, `2` sous-catégorie, `3` code détaillé.","title":"Level"},"description":"Niveau hiérarchique : `1` catégorie, `2` sous-catégorie, `3` code détaillé."},{"name":"parent","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Code parent dont les enfants directs doivent être retournés.","title":"Parent"},"description":"Code parent dont les enfants directs doivent être retournés."}],"responses":{"200":{"description":"Codes NAC correspondant aux critères de recherche ou de hiérarchie.","content":{"application/json":{"schema":{"title":"Response Lister Nac Jj Nac Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service JUDILIBRE en amont."},"503":{"description":"Service de jurisprudence judiciaire temporairement indisponible."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/jj/nac/{code}":{"get":{"tags":["Jurisprudence judiciaire (jj)"],"summary":"Consulter une entrée de la nomenclature NAC","description":"Retourne le libellé, la position hiérarchique et les métadonnées d'un code NAC.","operationId":"consulter_nac_jj_nac__code__get","security":[{"BearerToken":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Code NAC de niveau 1, 2 ou 3, par exemple `3`, `30` ou `30A`.","title":"Code"},"description":"Code NAC de niveau 1, 2 ou 3, par exemple `3`, `30` ou `30A`."}],"responses":{"200":{"description":"Détail du code NAC demandé.","content":{"application/json":{"schema":{"title":"Response Consulter Nac Jj Nac  Code  Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service JUDILIBRE en amont."},"503":{"description":"Service de jurisprudence judiciaire temporairement indisponible."},"404":{"description":"Code NAC inconnu."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/jj/citations/codes":{"get":{"tags":["Jurisprudence judiciaire (jj)"],"summary":"Lister les instruments disponibles pour la recherche de citations","description":"Retourne les slugs exacts acceptés par `/citations/{code_slug}/{article}`.","operationId":"lister_codes_cites_jj_citations_codes_get","responses":{"200":{"description":"Référentiel des slugs acceptés par la route de citations d'article.","content":{"application/json":{"schema":{"title":"Response Lister Codes Cites Jj Citations Codes Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service JUDILIBRE en amont."},"503":{"description":"Service de jurisprudence judiciaire temporairement indisponible."}},"security":[{"BearerToken":[]}]}},"/jj/citations/{code_slug}/{article}":{"get":{"tags":["Jurisprudence judiciaire (jj)"],"summary":"Rechercher les décisions qui citent un article","description":"Retourne les décisions dans lesquelles la citation a été extraite.\n\n`total_capped=true` signifie que `total` est un minimum de 10 000. La route\nne vérifie pas la version de l'article applicable à la date de la décision.","operationId":"decisions_citant_article_jj_citations__code_slug___article__get","security":[{"BearerToken":[]}],"parameters":[{"name":"code_slug","in":"path","required":true,"schema":{"type":"string","description":"Slug exact de l'instrument, avec des underscores, par exemple `code_civil` ou `code_travail`. Consulter `/jj/citations/codes` pour le référentiel.","title":"Code Slug"},"description":"Slug exact de l'instrument, avec des underscores, par exemple `code_civil` ou `code_travail`. Consulter `/jj/citations/codes` pour le référentiel."},{"name":"article","in":"path","required":true,"schema":{"type":"string","description":"Numéro de l'article. Les variantes usuelles de ponctuation sont normalisées : `L1235-3`, `L.1235-3` et `L. 1235-3` sont équivalents.","title":"Article"},"description":"Numéro de l'article. Les variantes usuelles de ponctuation sont normalisées : `L1235-3`, `L.1235-3` et `L. 1235-3` sont équivalents."},{"name":"jurisdiction","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Une seule juridiction : `cc`, `ca`, `tj` ou `tcom`.","title":"Jurisdiction"},"description":"Une seule juridiction : `cc`, `ca`, `tj` ou `tcom`."},{"name":"chamber","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Une ou plusieurs chambres séparées par des virgules.","title":"Chamber"},"description":"Une ou plusieurs chambres séparées par des virgules."},{"name":"publication","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Codes de publication de la Cour de cassation séparés par des virgules : `b` Bulletin, `r` Rapport, `l` Lettres, `c` communiqué, `n` non publiée.","title":"Publication"},"description":"Codes de publication de la Cour de cassation séparés par des virgules : `b` Bulletin, `r` Rapport, `l` Lettres, `c` communiqué, `n` non publiée."},{"name":"date_start","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Date minimale de la décision, au format `AAAA-MM-JJ`.","title":"Date Start"},"description":"Date minimale de la décision, au format `AAAA-MM-JJ`."},{"name":"date_end","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Date maximale de la décision, au format `AAAA-MM-JJ`.","title":"Date End"},"description":"Date maximale de la décision, au format `AAAA-MM-JJ`."},{"name":"in_visa","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Avec `true`, conserver uniquement les citations extraites du visa.","title":"In Visa"},"description":"Avec `true`, conserver uniquement les citations extraites du visa."},{"name":"procedural","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filtre tri-état : `true` conserve uniquement les articles procéduraux, `false` les exclut, paramètre omis conserve les deux catégories.","title":"Procedural"},"description":"Filtre tri-état : `true` conserve uniquement les articles procéduraux, `false` les exclut, paramètre omis conserve les deux catégories."},{"name":"zones","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zones contenant la citation, séparées par des virgules : `introduction`, `expose`, `moyens`, `motivations`, `dispositif`.","title":"Zones"},"description":"Zones contenant la citation, séparées par des virgules : `introduction`, `expose`, `moyens`, `motivations`, `dispositif`."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Nombre maximal de décisions dans la page.","default":50,"title":"Limit"},"description":"Nombre maximal de décisions dans la page."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Nombre de décisions à ignorer avant la page.","default":0,"title":"Offset"},"description":"Nombre de décisions à ignorer avant la page."}],"responses":{"200":{"description":"Page de décisions dans lesquelles la citation de l'article a été extraite.","content":{"application/json":{"schema":{"title":"Response Decisions Citant Article Jj Citations  Code Slug   Article  Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service JUDILIBRE en amont."},"503":{"description":"Service de jurisprudence judiciaire temporairement indisponible."},"400":{"description":"Valeur de filtre invalide."},"404":{"description":"Slug de code inconnu ; la réponse peut proposer des slugs proches."},"422":{"description":"Article, date ou pagination invalide."}}}},"/ja/search":{"get":{"tags":["Justice administrative (ja)"],"summary":"Rechercher dans la jurisprudence administrative","description":"Retourne les décisions correspondantes avec le total réel et la pagination.\n\n`total` est le nombre de correspondances de la requête et des filtres ;\n`returned` la taille de la page. Un `total` de zéro n'établit pas l'absence\nde jurisprudence : le fonds commence en décembre 2021 et le moteur exige\nchaque terme de `q`.","operationId":"rechercher_decisions_ja_search_get","security":[{"BearerToken":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","maxLength":500,"description":"Termes de recherche. Moteur lexical (BM25) en ET strict : tous les termes sont exigés, mots vides compris — préférer deux ou trois termes discriminants à une question rédigée.","title":"Q"},"description":"Termes de recherche. Moteur lexical (BM25) en ET strict : tous les termes sont exigés, mots vides compris — préférer deux ou trois termes discriminants à une question rédigée."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Nombre maximal de décisions par page.","default":10,"title":"Limit"},"description":"Nombre maximal de décisions par page."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":0,"description":"Rang de départ pour paginer (`total` reste constant).","default":0,"title":"Offset"},"description":"Rang de départ pour paginer (`total` reste constant)."},{"name":"juridiction","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Code exact de juridiction ArianeWeb : `CE`, `CAA75`, `TA38`… Les familles `CAA` et `TA` ne sont pas des codes et sont refusées ; pour un périmètre géographique, utiliser `ressort`. La liste des codes présents est dans `/ja/stats`.","title":"Juridiction"},"description":"Code exact de juridiction ArianeWeb : `CE`, `CAA75`, `TA38`… Les familles `CAA` et `TA` ne sont pas des codes et sont refusées ; pour un périmètre géographique, utiliser `ressort`. La liste des codes présents est dans `/ja/stats`."},{"name":"ressort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Ressort d'appel regroupant une CAA et les TA de son ressort : `paris`, `versailles`, `douai`, `nancy`, `nantes`, `lyon`, `marseille`, `bordeaux`, `toulouse`, `outre_mer`.","title":"Ressort"},"description":"Ressort d'appel regroupant une CAA et les TA de son ressort : `paris`, `versailles`, `douai`, `nancy`, `nantes`, `lyon`, `marseille`, `bordeaux`, `toulouse`, `outre_mer`."},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Date minimale de lecture, au format `AAAA-MM-JJ` (le fonds commence le 2021-12-06).","title":"Date From"},"description":"Date minimale de lecture, au format `AAAA-MM-JJ` (le fonds commence le 2021-12-06)."},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Date maximale de lecture de la décision, au format `AAAA-MM-JJ`.","title":"Date To"},"description":"Date maximale de lecture de la décision, au format `AAAA-MM-JJ`."},{"name":"type_decision","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Type exact publié par ArianeWeb, par exemple `Décision` ou `Ordonnance`. Métadonnée source sans contrôle de cohérence avec le dispositif : filtre indicatif.","title":"Type Decision"},"description":"Type exact publié par ArianeWeb, par exemple `Décision` ou `Ordonnance`. Métadonnée source sans contrôle de cohérence avec le dispositif : filtre indicatif."},{"name":"code_publication","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Codes de publication (répétable) : `A`, `B`, `R`, `C`, `C+`, `D`, `Z`.","title":"Code Publication"},"description":"Codes de publication (répétable) : `A`, `B`, `R`, `C`, `C+`, `D`, `Z`."},{"name":"solution","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Sens de la décision tel que publié (répétable), par exemple `Rejet`.","title":"Solution"},"description":"Sens de la décision tel que publié (répétable), par exemple `Rejet`."},{"name":"q_dispositif","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Termes exigés dans le dispositif uniquement. Appariement mot à mot, sans expression exacte : un terme discriminant (`annulée`, `astreinte`) est l'usage fiable.","title":"Q Dispositif"},"description":"Termes exigés dans le dispositif uniquement. Appariement mot à mot, sans expression exacte : un terme discriminant (`annulée`, `astreinte`) est l'usage fiable."},{"name":"boost_publication","in":"query","required":false,"schema":{"type":"boolean","description":"Mise en avant des décisions publiées au recueil ; `false` pour un classement neutre.","default":true,"title":"Boost Publication"},"description":"Mise en avant des décisions publiées au recueil ; `false` pour un classement neutre."},{"name":"lebon_only","in":"query","required":false,"schema":{"type":"boolean","description":"Avec `true`, conserver les décisions portant un code de sélection `A`, `B`, `R` ou `C+`.","default":false,"title":"Lebon Only"},"description":"Avec `true`, conserver les décisions portant un code de sélection `A`, `B`, `R` ou `C+`."},{"name":"llm_formatter","in":"query","required":false,"schema":{"type":"boolean","description":"Avec `true`, ajouter le champ `formatted` (rendu Markdown) sans altérer `results`.","default":false,"title":"Llm Formatter"},"description":"Avec `true`, ajouter le champ `formatted` (rendu Markdown) sans altérer `results`."},{"name":"panorama","in":"query","required":false,"schema":{"type":"boolean","description":"Rendu `formatted` compact, une ligne par décision (implique `llm_formatter`).","default":false,"title":"Panorama"},"description":"Rendu `formatted` compact, une ligne par décision (implique `llm_formatter`)."},{"name":"max_chars","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":400000,"minimum":1000},{"type":"null"}],"description":"Budget de caractères du rendu `formatted`.","title":"Max Chars"},"description":"Budget de caractères du rendu `formatted`."},{"name":"max_docs","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":30,"minimum":1},{"type":"null"}],"description":"Nombre de documents détaillés du rendu `formatted`.","title":"Max Docs"},"description":"Nombre de documents détaillés du rendu `formatted`."}],"responses":{"200":{"description":"JSON structuré : `total` (correspondances réelles), `returned` (taille de la page), `results` (décisions avec id, ECLI, numéro de dossier, scores) et, si `llm_formatter` est demandé, `formatted` (rendu Markdown).","content":{"application/json":{"schema":{"title":"Response Rechercher Decisions Ja Search Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service ArianeWeb en amont."},"503":{"description":"Service de justice administrative temporairement indisponible."},"422":{"description":"Requête, code de juridiction, ressort, date ou borne de pagination invalide."}}}},"/ja/decisions/{identifiant}":{"get":{"tags":["Justice administrative (ja)"],"summary":"Consulter une décision administrative","description":"Retourne les métadonnées, le texte et les sections structurées de la décision.\n\nUn numéro de dossier n'est pas nécessairement unique entre juridictions ou\nannées : la décision la plus récente est alors retournée ; `id` est la clé\nnon ambiguë.","operationId":"consulter_decision_ja_decisions__identifiant__get","security":[{"BearerToken":[]}],"parameters":[{"name":"identifiant","in":"path","required":true,"schema":{"type":"string","description":"ECLI complet (Conseil d'État uniquement), numéro de dossier (toutes juridictions, ex. `2006065` ou `24PA00707`) ou identifiant interne `id` retourné par `/ja/search`. Une valeur numérique est d'abord résolue comme numéro de dossier, puis comme `id`.","title":"Identifiant"},"description":"ECLI complet (Conseil d'État uniquement), numéro de dossier (toutes juridictions, ex. `2006065` ou `24PA00707`) ou identifiant interne `id` retourné par `/ja/search`. Une valeur numérique est d'abord résolue comme numéro de dossier, puis comme `id`."}],"responses":{"200":{"description":"Décision complète et sections structurées disponibles.","content":{"application/json":{"schema":{"title":"Response Consulter Decision Ja Decisions  Identifiant  Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service ArianeWeb en amont."},"503":{"description":"Service de justice administrative temporairement indisponible."},"404":{"description":"Décision inconnue."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ja/decisions/{identifiant}/references":{"get":{"tags":["Justice administrative (ja)"],"summary":"Lister les références juridiques d'une décision administrative","description":"Retourne `references` avec le type, la forme trouvée et l'identifiant normalisé.\n\nSept types sont extraits (`article_code`, `loi`, `decret`, `ordonnance`,\n`ecli_ref`, `directive_ue`, `reglement_ue`) : la liste n'est pas le visa\ncomplet de la décision. `normalized_id` est dérivé du texte sans contrôle\nde cohérence — `raw_text` fait foi.","operationId":"references_decision_ja_decisions__identifiant__references_get","security":[{"BearerToken":[]}],"parameters":[{"name":"identifiant","in":"path","required":true,"schema":{"type":"string","description":"ECLI complet ou numéro de dossier de la décision (toutes juridictions).","title":"Identifiant"},"description":"ECLI complet ou numéro de dossier de la décision (toutes juridictions)."}],"responses":{"200":{"description":"Références extraites du texte de la décision.","content":{"application/json":{"schema":{"title":"Response References Decision Ja Decisions  Identifiant  References Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service ArianeWeb en amont."},"503":{"description":"Service de justice administrative temporairement indisponible."},"404":{"description":"Décision inconnue."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ja/stats":{"get":{"tags":["Justice administrative (ja)"],"summary":"Consulter la couverture du corpus administratif","description":"Retourne la volumétrie par juridiction et type, et les dates couvertes.\n\nMesure du corpus chargé à un instant donné — source des codes valides du\nparamètre `juridiction` — et non une garantie d'exhaustivité ou de\nfraîcheur.","operationId":"statistiques_ja_stats_get","responses":{"200":{"description":"Volumétrie, facettes et bornes chronologiques du corpus.","content":{"application/json":{"schema":{"title":"Response Statistiques Ja Stats Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service ArianeWeb en amont."},"503":{"description":"Service de justice administrative temporairement indisponible."}},"security":[{"BearerToken":[]}]}},"/legi/recherche/codes":{"get":{"tags":["Législation (legi)"],"summary":"Lister les codes présents dans le corpus","description":"Cette route retourne la liste des codes du corpus LEGI.\n\n- ``code_names`` : les noms des codes, sans doublon. C'est la valeur\n  attendue par le paramètre ``code_name`` de ``/legi/recherche/code``.\n- ``codes`` : une entrée par code — ``title``, ``legitext_id``, ``cid``,\n  ``etat`` (VIGUEUR, ABROGE…), ``date_debut``, ``date_fin`` et\n  ``applicable``.\n- ``total``, ``total_names``, ``total_applicable`` : le nombre d'entrées,\n  de noms et de codes applicables.\n\nParamètres : ``as_of`` fixe la date à laquelle l'applicabilité est évaluée\n(défaut : aujourd'hui). Pour une recherche dans du droit ancien, appeler\ncette route avec le même ``as_of`` que la recherche, afin de connaître les\ncodes existant à cette date.\n\nLimites :\n\n- un code non applicable à ``as_of`` reste listé, avec ``applicable=false``\n  et un ``selection_warning`` : le filtrage est à la charge du client ;\n- ``related_code_titles`` rapproche les titres d'une même famille (« Code\n  minier » / « Code minier (nouveau) ») pour inviter à vérifier lequel\n  s'applique ; il n'établit pas que l'un a remplacé l'autre ;\n- ``discovery_source`` vaut ``text_nature`` quand le corpus classe le texte\n  comme un code, et ``dila_title`` quand ce classement manque mais que le\n  titre commence par « Code » (ex. « Code du travail applicable à\n  Mayotte ») ; ce second cas est une déduction sur le titre, pas une donnée\n  certifiée ;\n- ``title_ambiguous=true`` signale plusieurs textes de titre identique :\n  tous restent dans ``codes``, ``code_names`` ne cite le titre qu'une fois,\n  et la recherche par nom en retient un seul — ``legitext_id`` et ``cid``\n  indiquent lequel.","operationId":"lister_codes_legi_recherche_codes_get","security":[{"BearerToken":[]}],"parameters":[{"name":"as_of","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Date à laquelle qualifier l'applicabilité (AAAA-MM-JJ, défaut : aujourd'hui)","title":"As Of"},"description":"Date à laquelle qualifier l'applicabilité (AAAA-MM-JJ, défaut : aujourd'hui)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Lister Codes Legi Recherche Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/legi/recherche/code":{"get":{"tags":["Législation (legi)"],"summary":"Rechercher dans un code","description":"Cette route retourne le résultat d'une recherche dans un seul code :\ndes articles, chacun dans sa rédaction applicable à ``as_of`` (défaut :\naujourd'hui), avec pagination.\n\nParamètres : ``code_name`` attend un nom exact, pris dans ``code_names`` de\n``/legi/recherche/codes``. ``champ`` fixe où ``search`` est cherché :\n\n- ``NUM_ARTICLE`` : le numéro exact d'un article (« 1240 », « L1221-1 ») ;\n- ``ARTICLE`` : le corps des articles, en plein texte ;\n- ``TITLE`` : les intitulés des sections, qui renvoient leurs articles ;\n- ``TABLE`` : les libellés du sommaire ;\n- ``ALL`` (défaut) : les quatre à la fois, sans doublon. Avec le tri\n  ``PERTINENCE``, un numéro exact sort en tête : ``search=\"1240\"``\n  retourne l'article 1240 en premier.\n\n``search`` vide retourne le code entier, article par article, dans l'ordre\ndu sommaire. ``search`` accepte ``OU``, ``SAUF`` et les \"guillemets\"\n(expression exacte).\n\nLimites : chaque mot de ``search`` doit être présent dans l'article ; si\naucun article ne les contient tous, la réponse est vide. Il n'y a aucun\nrepli automatique ET→OU : c'est au client d'élargir la requête. Un article\ns'applique jusqu'à la veille de sa date de fin.","operationId":"rechercher_code_legi_recherche_code_get","security":[{"BearerToken":[]}],"parameters":[{"name":"code_name","in":"query","required":true,"schema":{"type":"string","description":"Nom exact du code (ex: Code civil), pris dans `code_names` de /legi/recherche/codes","title":"Code Name"},"description":"Nom exact du code (ex: Code civil), pris dans `code_names` de /legi/recherche/codes"},{"name":"search","in":"query","required":false,"schema":{"type":"string","description":"Termes de recherche (BM25) ; vide = code en intégralité","default":"","title":"Search"},"description":"Termes de recherche (BM25) ; vide = code en intégralité"},{"name":"champ","in":"query","required":false,"schema":{"enum":["ALL","TITLE","TABLE","NUM_ARTICLE","ARTICLE"],"type":"string","description":"ALL = union numéro, sommaire, intitulés et corps ; TITLE = intitulés des sections parentes ; TABLE = libellés du sommaire DILA ; NUM_ARTICLE = numéro canonique ; ARTICLE = corps de l'article en plein texte.","default":"ALL","title":"Champ"},"description":"ALL = union numéro, sommaire, intitulés et corps ; TITLE = intitulés des sections parentes ; TABLE = libellés du sommaire DILA ; NUM_ARTICLE = numéro canonique ; ARTICLE = corps de l'article en plein texte."},{"name":"sort","in":"query","required":false,"schema":{"enum":["PERTINENCE","DATE_DESC","DATE_ASC"],"type":"string","description":"Tri : PERTINENCE, DATE_DESC ou DATE_ASC. Les tris par date ordonnent la date de début de la VERSION D'ARTICLE trouvée — ni la date de publication, ni la date de signature du code.","default":"PERTINENCE","title":"Sort"},"description":"Tri : PERTINENCE, DATE_DESC ou DATE_ASC. Les tris par date ordonnent la date de début de la VERSION D'ARTICLE trouvée — ni la date de publication, ni la date de signature du code."},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":5,"title":"Page Size"}},{"name":"page_number","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page Number"}},{"name":"as_of","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Droit applicable à cette date (AAAA-MM-JJ)","title":"As Of"},"description":"Droit applicable à cette date (AAAA-MM-JJ)"},{"name":"show_modifications","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Show Modifications"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Rechercher Code Legi Recherche Code Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/legi/recherche/loda":{"get":{"tags":["Législation (legi)"],"summary":"Rechercher dans les textes LODA (lois, décrets)","description":"Cette route retourne le droit non codifié : lois, ordonnances, décrets\net arrêtés consolidés, dans leur rédaction applicable à ``as_of`` (défaut :\naujourd'hui).\n\nParamètres : la forme de la réponse dépend de leur combinaison :\n\n- ``text_id`` seul : le texte entier, article par article, dans l'ordre du\n  sommaire. ``page_size`` compte alors des articles, et le texte de chacun\n  est complet — jamais un résumé ni un aperçu coupé.\n- ``text_id`` + ``search`` : recherche à l'intérieur de ce texte.\n- ``search`` seul : recherche dans tout le fonds, filtrable par ``nature``.\n- ni l'un ni l'autre : la liste des textes des natures demandées.\n\n``text_id`` accepte le numéro du texte (« 78-17 ») ou son NOR\n(« MICX1902858L »). Le NOR ne se cherche jamais dans ``search`` : il ne\nfigure pas dans le corps du texte. ``search`` accepte ``OU``, ``SAUF`` et\nles \"guillemets\" (expression exacte).\n\nLimites : chaque mot de ``search`` doit être présent dans le texte ; si\naucun ne les contient tous, la réponse est vide. L'API ne relance jamais\nd'elle-même la recherche en « au moins un des mots » (aucun repli\nautomatique ET→OU) : une réponse vide est une vraie réponse. Seul le tri\npar pertinence est disponible.","operationId":"rechercher_loda_legi_recherche_loda_get","security":[{"BearerToken":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"type":"string","description":"Termes de recherche (BM25) ; « * » = aucun filtre de mots","default":"*","title":"Search"},"description":"Termes de recherche (BM25) ; « * » = aucun filtre de mots"},{"name":"text_id","in":"query","required":false,"schema":{"type":"string","description":"Un texte précis, par son numéro (« 78-17 ») ou son NOR","default":"","title":"Text Id"},"description":"Un texte précis, par son numéro (« 78-17 ») ou son NOR"},{"name":"nature","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"enum":["LOI","ORDONNANCE","DECRET","ARRETE"],"type":"string"}},{"type":"null"}],"description":"Natures de texte : LOI, ORDONNANCE, DECRET ou ARRETE","title":"Nature"},"description":"Natures de texte : LOI, ORDONNANCE, DECRET ou ARRETE"},{"name":"champ","in":"query","required":false,"schema":{"enum":["ALL","ARTICLE","NUM_ARTICLE"],"type":"string","description":"Champ ciblé : ALL, ARTICLE ou NUM_ARTICLE","default":"ALL","title":"Champ"},"description":"Champ ciblé : ALL, ARTICLE ou NUM_ARTICLE"},{"name":"sort","in":"query","required":false,"schema":{"const":"PERTINENCE","type":"string","description":"Tri : PERTINENCE uniquement — les tris par date ne sont pas disponibles sur LODA.","default":"PERTINENCE","title":"Sort"},"description":"Tri : PERTINENCE uniquement — les tris par date ne sont pas disponibles sur LODA."},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Résultats par page. Avec ``text_id`` et une recherche vide ou ``*``, compte des articles complets du texte, pas des fiches de résultats.","default":10,"title":"Page Size"},"description":"Résultats par page. Avec ``text_id`` et une recherche vide ou ``*``, compte des articles complets du texte, pas des fiches de résultats."},{"name":"page_number","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page Number"}},{"name":"as_of","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Droit applicable à cette date (AAAA-MM-JJ)","title":"As Of"},"description":"Droit applicable à cette date (AAAA-MM-JJ)"},{"name":"show_modifications","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Show Modifications"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Rechercher Loda Legi Recherche Loda Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/legi/articles/graph":{"get":{"tags":["Législation (legi)"],"summary":"PREVIEW — graphe légistique d'un article","description":"**PREVIEW.** Timeline ChronoLEGI enrichie des relations DILA (création,\ncodification, modification, abrogation, application, transfert) et de\nl'intégralité des citations législatives dédoublonnées — sans limite ni\npagination. Ces citations sont des liens entre **textes**, pas des\ndécisions de justice.\n\nLa réponse conserve ``status``, ``reliability_notice``, ``known_limitations``\net la fraîcheur des données dans ``source``. Le graphe est une projection\ndes liens techniques de la DILA, pas une qualification doctrinale, et une\nabsence de relation ne prouve jamais à elle seule qu'elle n'existe pas.\n``citations.complete=true`` atteste seulement qu'aucune ligne ingérée n'a\nété retranchée.\n\nRésolution par ``article_id`` seul, ou par ``article_num`` + exactement un\nde ``code_name``/``code_id``. Quand LEGI ne peut pas prouver l'exhaustivité,\nil répond ``409`` et le statut comme le code métier sont conservés\n(``GRAPH_INCONSISTENT``, ``CITATIONS_INCOMPLETE``) : jamais une liste\nsilencieusement partielle. Autres codes relayés : ``CODE_NOT_FOUND``,\n``ARTICLE_NOT_FOUND``.","operationId":"graph_article_legi_articles_graph_get","security":[{"BearerToken":[]}],"parameters":[{"name":"article_id","in":"query","required":false,"schema":{"type":"string","description":"Version ou CID LEGIARTI... (mode identifiant, exclusif)","default":"","title":"Article Id"},"description":"Version ou CID LEGIARTI... (mode identifiant, exclusif)"},{"name":"code_name","in":"query","required":false,"schema":{"type":"string","description":"Titre du code, graphies usuelles tolérées (ex: Code civil)","default":"","title":"Code Name"},"description":"Titre du code, graphies usuelles tolérées (ex: Code civil)"},{"name":"code_id","in":"query","required":false,"schema":{"type":"string","description":"Identifiant LEGITEXT... d'un code (nature CODE)","default":"","title":"Code Id"},"description":"Identifiant LEGITEXT... d'un code (nature CODE)"},{"name":"article_num","in":"query","required":false,"schema":{"type":"string","description":"Numéro de l'article (mode code + numéro)","default":"","title":"Article Num"},"description":"Numéro de l'article (mode code + numéro)"},{"name":"as_of","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Date de sélection de la version focale (AAAA-MM-JJ)","title":"As Of"},"description":"Date de sélection de la version focale (AAAA-MM-JJ)"},{"name":"profondeur","in":"query","required":false,"schema":{"type":"integer","maximum":2,"minimum":1,"description":"1 = relations directes ; 2 = + contenu des nœuds liés","default":2,"title":"Profondeur"},"description":"1 = relations directes ; 2 = + contenu des nœuds liés"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Graph Article Legi Articles Graph Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/legi/articles/{cid}/timeline":{"get":{"tags":["Législation (legi)"],"summary":"ChronoLEGI — rédactions successives d'un article","description":"Cette route retourne l'historique d'un article (ChronoLEGI) : ses\nrédactions successives, de la plus ancienne à la plus récente.\n\n- ``versions`` : chaque rédaction, avec ses dates d'application et son\n  état. Une ``date_fin`` à ``null`` signifie qu'aucune fin n'est connue à\n  ce jour — les fins fictives DILA (2999) arrivent ainsi.\n- ``concordances`` : les renumérotations et recodifications connues\n  (ex. L. 122-14-4 devenu L. 1235-3).\n- ``continuity_notice`` : l'avertissement qui qualifie la chaîne.\n\nParamètres : ``cid`` est l'identifiant LEGIARTI de l'article, commun à\ntoutes ses rédactions ; il figure dans les réponses de\n``/legi/recherche/code`` et ``/legi/recherche/loda``.\n\nLimites : la chaîne suit le numéro de l'article, pas la règle de droit.\nLors d'une refonte, une règle peut continuer sous un autre numéro — la\nchaîne du premier s'arrête alors sans que la règle ait disparu — et, à\nl'inverse, deux rédactions successives du même numéro peuvent porter des\nrègles différentes. Avant de conclure qu'une règle est née, a survécu ou a\ndisparu, lire ``concordances`` et ``continuity_notice`` ;\n``/legi/articles/graph`` montre les textes qui ont opéré un transfert.","operationId":"versions_article_legi_articles__cid__timeline_get","security":[{"BearerToken":[]}],"parameters":[{"name":"cid","in":"path","required":true,"schema":{"type":"string","description":"Identifiant d'article (LEGIARTI...), partagé par toutes ses rédactions","title":"Cid"},"description":"Identifiant d'article (LEGIARTI...), partagé par toutes ses rédactions"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Versions Article Legi Articles  Cid  Timeline Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/eurlex/search":{"get":{"tags":["Droit de l'UE (eurlex)"],"summary":"Effectuer une recherche lexicale dans le corpus EUR-Lex","description":"Retourne `results` avec les identifiants CELEX, métadonnées et extraits pertinents.\n\n`interpretation` décrit la requête appliquée. La pagination utilise `limit`\net `offset` ; le champ `total` n'est calculé que si le paramètre correspondant\nvaut `true`. `group` choisit entre un résultat par acte ou par passage.\n\nUne décision porte son dispositif (`operative`, `n_operative`) quel que soit le\npassage qui a matché : le classement remonte le passage le plus proche des mots\ncherchés, et c'est presque toujours un motif — parfois les questions posées par\nle juge de renvoi, c'est-à-dire ce qui a été demandé et non ce qui a été jugé.\n`operative_note` le dit, sur la page quand aucun passage ne vient du dispositif,\nsur un résultat quand le fonds n'a pas ce dispositif découpé. Le dispositif décrit\nla décision et non la requête : ne pas le présenter comme un extrait pertinent.","operationId":"rechercher_actes_eurlex_search_get","security":[{"BearerToken":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Recherche lexicale par mots-clés dans le corpus, limitée à 1 000 caractères. Tous les termes sont requis par défaut. Syntaxe disponible : `\"expression exacte\"`, `-terme` pour exclure, `préfixe*` pour la troncature et `terme1 OR terme2` pour une alternative.","title":"Q"},"description":"Recherche lexicale par mots-clés dans le corpus, limitée à 1 000 caractères. Tous les termes sont requis par défaut. Syntaxe disponible : `\"expression exacte\"`, `-terme` pour exclure, `préfixe*` pour la troncature et `terme1 OR terme2` pour une alternative."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Nombre maximal de résultats dans la page.","default":10,"title":"Limit"},"description":"Nombre maximal de résultats dans la page."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":0,"description":"Nombre de résultats à ignorer avant la page retournée, de 0 à 10 000.","default":0,"title":"Offset"},"description":"Nombre de résultats à ignorer avant la page retournée, de 0 à 10 000."},{"name":"resource_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Un ou plusieurs types de document séparés par des virgules : `regulation`, `directive`, `decision`, `judgment`, `order` ou `opinion_ag`. Exemple : `judgment,order`.","title":"Resource Type"},"description":"Un ou plusieurs types de document séparés par des virgules : `regulation`, `directive`, `decision`, `judgment`, `order` ou `opinion_ag`. Exemple : `judgment,order`."},{"name":"sector","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":9,"minimum":0},{"type":"null"}],"description":"Secteur CELEX du document : `3` pour la législation, `6` pour les documents juridictionnels ; omettre le paramètre pour interroger les deux.","title":"Sector"},"description":"Secteur CELEX du document : `3` pour la législation, `6` pour les documents juridictionnels ; omettre le paramètre pour interroger les deux."},{"name":"language","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Langue des passages recherchés, sous forme de code (`fr` ou `en`).","title":"Language"},"description":"Langue des passages recherchés, sous forme de code (`fr` ou `en`)."},{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Type de passage : `article`, `recital`, `annex`, `point`, `fulltext` ou `operative` — le dispositif d'une décision, c'est-à-dire ce qui a été jugé. Une décision remonte par ses motifs : restreindre à `operative` cherche dans ce que la Cour a répondu, pas dans ce qui lui a été demandé.","title":"Unit Type"},"description":"Type de passage : `article`, `recital`, `annex`, `point`, `fulltext` ou `operative` — le dispositif d'une décision, c'est-à-dire ce qui a été jugé. Une décision remonte par ses motifs : restreindre à `operative` cherche dans ce que la Cour a répondu, pas dans ce qui lui a été demandé."},{"name":"in_force","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"État de vigueur publié pour les actes du secteur 3 : `true` sélectionne les actes en vigueur, `false` ceux marqués hors vigueur dans le fonds. Ce dernier filtre ne donne pas accès à l'ensemble historique des actes abrogés.","title":"In Force"},"description":"État de vigueur publié pour les actes du secteur 3 : `true` sélectionne les actes en vigueur, `false` ceux marqués hors vigueur dans le fonds. Ce dernier filtre ne donne pas accès à l'ensemble historique des actes abrogés."},{"name":"date_debut","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Date minimale d'entrée en vigueur d'un acte, au format `AAAA-MM-JJ`.","title":"Date Debut"},"description":"Date minimale d'entrée en vigueur d'un acte, au format `AAAA-MM-JJ`."},{"name":"date_fin","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Date maximale d'entrée en vigueur d'un acte, au format `AAAA-MM-JJ`.","title":"Date Fin"},"description":"Date maximale d'entrée en vigueur d'un acte, au format `AAAA-MM-JJ`."},{"name":"eurovoc","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Concept thématique EuroVoc : identifiant numérique, URI complète ou libellé français. Utiliser `/eurlex/eurovoc` pour rechercher un concept.","title":"Eurovoc"},"description":"Concept thématique EuroVoc : identifiant numérique, URI complète ou libellé français. Utiliser `/eurlex/eurovoc` pour rechercher un concept."},{"name":"eurovoc_expand","in":"query","required":false,"schema":{"type":"boolean","description":"Étendre le filtre `eurovoc` à tous les sous-concepts du concept résolu.","default":false,"title":"Eurovoc Expand"},"description":"Étendre le filtre `eurovoc` à tous les sous-concepts du concept résolu."},{"name":"author","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Code de l'institution auteur, par exemple `CONSIL`, `EP` ou `COM`.","title":"Author"},"description":"Code de l'institution auteur, par exemple `CONSIL`, `EP` ou `COM`."},{"name":"directory_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Code de classement du répertoire de la législation de l'Union.","title":"Directory Code"},"description":"Code de classement du répertoire de la législation de l'Union."},{"name":"act_year","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Année à quatre chiffres extraite de la référence de l'acte, par exemple `2016`.","title":"Act Year"},"description":"Année à quatre chiffres extraite de la référence de l'acte, par exemple `2016`."},{"name":"act_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Numéro numérique extrait de la référence de l'acte, par exemple `679`.","title":"Act Number"},"description":"Numéro numérique extrait de la référence de l'acte, par exemple `679`."},{"name":"exclude_consolidated","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Avec `true`, exclure les passages provenant de versions consolidées.","title":"Exclude Consolidated"},"description":"Avec `true`, exclure les passages provenant de versions consolidées."},{"name":"exclude_corrigenda","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Avec `true`, exclure les rectificatifs.","title":"Exclude Corrigenda"},"description":"Avec `true`, exclure les rectificatifs."},{"name":"court","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"description":"Juridiction des documents du secteur 6 : `C` (Cour de justice), `T` (Tribunal) ou `F` (Tribunal de la fonction publique).","title":"Court"},"description":"Juridiction des documents du secteur 6 : `C` (Cour de justice), `T` (Tribunal) ou `F` (Tribunal de la fonction publique)."},{"name":"date_decision_debut","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Date minimale d'un document juridictionnel, au format `AAAA-MM-JJ`.","title":"Date Decision Debut"},"description":"Date minimale d'un document juridictionnel, au format `AAAA-MM-JJ`."},{"name":"date_decision_fin","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Date maximale d'un document juridictionnel, au format `AAAA-MM-JJ`.","title":"Date Decision Fin"},"description":"Date maximale d'un document juridictionnel, au format `AAAA-MM-JJ`."},{"name":"group","in":"query","required":false,"schema":{"type":"boolean","description":"Avec `true`, retourner une entrée par acte avec ses passages pertinents ; avec `false`, retourner une entrée par passage.","default":true,"title":"Group"},"description":"Avec `true`, retourner une entrée par acte avec ses passages pertinents ; avec `false`, retourner une entrée par passage."},{"name":"total","in":"query","required":false,"schema":{"type":"boolean","description":"Calculer le nombre total de résultats. Le total compte des actes si `group=true`, sinon des passages.","default":false,"title":"Total"},"description":"Calculer le nombre total de résultats. Le total compte des actes si `group=true`, sinon des passages."}],"responses":{"200":{"description":"Résultats de recherche paginés et interprétation de la requête.","content":{"application/json":{"schema":{"title":"Response Rechercher Actes Eurlex Search Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service EUR-Lex en amont."},"503":{"description":"Service EUR-Lex temporairement indisponible."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/eurlex/doc/{celex}":{"get":{"tags":["Droit de l'UE (eurlex)"],"summary":"Consulter un document EUR-Lex par son CELEX","description":"Retourne les métadonnées et les unités du document.\n\nPar défaut, `units` sert de sommaire — sans les textes, sauf le dispositif d'une\ndécision, qui garde le sien. Utiliser `unit_type` seul pour toutes les unités d'un\ntype avec leur texte, `unit_type` et `unit_number` pour une disposition précise,\nou `full=true` pour inclure tous les textes.\n`text_complete=false` signale une unité dont l'extraction est incomplète.\n`unit_query` accompagne toute demande d'unité — un type, un numéro ou les deux :\nla clé demandée, celle qui a été servie et, quand rien ne correspond, pourquoi,\navec la liste des numéros qui existent. Un `n_units=0` y dit qu'une clé ne désigne\nrien dans cet acte, pas que la disposition n'existe pas.","operationId":"consulter_acte_eurlex_doc__celex__get","security":[{"BearerToken":[]}],"parameters":[{"name":"celex","in":"path","required":true,"schema":{"type":"string","description":"Identifiant CELEX de base (`32016R0679`) ou d'une version consolidée (`02016R0679-20160504`).","title":"Celex"},"description":"Identifiant CELEX de base (`32016R0679`) ou d'une version consolidée (`02016R0679-20160504`)."},{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"description":"Type d'unité à sélectionner : `article`, `recital`, `annex`, `point`, `operative` ou `fulltext`. Employé seul, il rend le texte de toutes les unités de ce type ; sur une décision, `operative` rend le dispositif entier.","title":"Unit Type"},"description":"Type d'unité à sélectionner : `article`, `recital`, `annex`, `point`, `operative` ou `fulltext`. Employé seul, il rend le texte de toutes les unités de ce type ; sur une décision, `operative` rend le dispositif entier."},{"name":"unit_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":128},{"type":"null"}],"description":"Numéro de l'unité à sélectionner, par exemple `45`. Associé à `unit_type`, il permet de récupérer une disposition précise. Trois formes sont acceptées pour une même disposition : la clé technique (`5o`), le nom citable (`5 sexdecies`) et le nom complet (`Article 5 sexdecies`).","title":"Unit Number"},"description":"Numéro de l'unité à sélectionner, par exemple `45`. Associé à `unit_type`, il permet de récupérer une disposition précise. Trois formes sont acceptées pour une même disposition : la clé technique (`5o`), le nom citable (`5 sexdecies`) et le nom complet (`Article 5 sexdecies`)."},{"name":"full","in":"query","required":false,"schema":{"type":"boolean","description":"Avec `true`, inclure le texte complet de toutes les unités sélectionnées.","default":false,"title":"Full"},"description":"Avec `true`, inclure le texte complet de toutes les unités sélectionnées."}],"responses":{"200":{"description":"Métadonnées du document, structure et unités demandées.","content":{"application/json":{"schema":{"title":"Response Consulter Acte Eurlex Doc  Celex  Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service EUR-Lex en amont."},"503":{"description":"Service EUR-Lex temporairement indisponible."},"404":{"description":"CELEX absent du corpus."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/eurlex/by-eli/{eli}":{"get":{"tags":["Droit de l'UE (eurlex)"],"summary":"Résoudre un identifiant ELI","description":"Retourne la correspondance ELI–CELEX et les métadonnées de l'acte trouvé.","operationId":"acte_par_eli_eurlex_by_eli__eli__get","security":[{"BearerToken":[]}],"parameters":[{"name":"eli","in":"path","required":true,"schema":{"type":"string","description":"ELI relatif, par exemple `reg/2016/679`, ou URI ELI complète. Les `/` font partie de la valeur du paramètre.","title":"Eli"},"description":"ELI relatif, par exemple `reg/2016/679`, ou URI ELI complète. Les `/` font partie de la valeur du paramètre."}],"responses":{"200":{"description":"Correspondance ELI–CELEX et métadonnées de l'acte.","content":{"application/json":{"schema":{"title":"Response Acte Par Eli Eurlex By Eli  Eli  Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service EUR-Lex en amont."},"503":{"description":"Service EUR-Lex temporairement indisponible."},"400":{"description":"Format ELI non reconnu."},"404":{"description":"Aucun acte du corpus ne correspond à l'ELI."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/eurlex/by-case/{reference}":{"get":{"tags":["Droit de l'UE (eurlex)"],"summary":"Résoudre un numéro d'affaire ou un ECLI","description":"Retourne les documents associés, avec leur CELEX, ECLI, juridiction, nature et date.","operationId":"decision_par_affaire_eurlex_by_case__reference__get","security":[{"BearerToken":[]}],"parameters":[{"name":"reference","in":"path","required":true,"schema":{"type":"string","minLength":3,"maxLength":64,"description":"Numéro d'affaire (`C-311/18`, `T-201/04`) ou ECLI (`ECLI:EU:C:2020:559`).","title":"Reference"},"description":"Numéro d'affaire (`C-311/18`, `T-201/04`) ou ECLI (`ECLI:EU:C:2020:559`)."}],"responses":{"200":{"description":"Documents EUR-Lex associés à la référence d'affaire.","content":{"application/json":{"schema":{"title":"Response Decision Par Affaire Eurlex By Case  Reference  Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service EUR-Lex en amont."},"503":{"description":"Service EUR-Lex temporairement indisponible."},"404":{"description":"Aucun document du corpus ne correspond à la référence."},"422":{"description":"Format de référence non reconnu."}}}},"/eurlex/eurovoc":{"get":{"tags":["Droit de l'UE (eurlex)"],"summary":"Rechercher un concept dans le thésaurus EuroVoc","description":"Retourne les concepts et identifiants utilisables par le filtre `eurovoc` de `/search`.","operationId":"rechercher_eurovoc_eurlex_eurovoc_get","security":[{"BearerToken":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":128,"description":"Libellé ou synonyme d'un concept EuroVoc, entre 2 et 128 caractères.","title":"Q"},"description":"Libellé ou synonyme d'un concept EuroVoc, entre 2 et 128 caractères."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Nombre maximal de concepts retournés.","default":20,"title":"Limit"},"description":"Nombre maximal de concepts retournés."},{"name":"with_children","in":"query","required":false,"schema":{"type":"boolean","description":"Ajouter à chaque résultat le nombre de concepts descendants.","default":false,"title":"With Children"},"description":"Ajouter à chaque résultat le nombre de concepts descendants."}],"responses":{"200":{"description":"Concepts EuroVoc correspondant au libellé ou au synonyme recherché.","content":{"application/json":{"schema":{"title":"Response Rechercher Eurovoc Eurlex Eurovoc Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service EUR-Lex en amont."},"503":{"description":"Service EUR-Lex temporairement indisponible."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/eurlex/doc/{celex}/timeline":{"get":{"tags":["Droit de l'UE (eurlex)"],"summary":"Lister les versions consolidées d'un acte","description":"Retourne `versions` avec le CELEX, la date et la disponibilité du texte français.","operationId":"historique_acte_eurlex_doc__celex__timeline_get","security":[{"BearerToken":[]}],"parameters":[{"name":"celex","in":"path","required":true,"schema":{"type":"string","description":"CELEX de base de l'acte, par exemple `32016R0679`.","title":"Celex"},"description":"CELEX de base de l'acte, par exemple `32016R0679`."}],"responses":{"200":{"description":"Versions consolidées connues, classées par date croissante.","content":{"application/json":{"schema":{"title":"Response Historique Acte Eurlex Doc  Celex  Timeline Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service EUR-Lex en amont."},"503":{"description":"Service EUR-Lex temporairement indisponible."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/eurlex/doc/{celex}/version/{as_of}":{"get":{"tags":["Droit de l'UE (eurlex)"],"summary":"Lire la version consolidée applicable à une date","description":"Retourne la dernière consolidation antérieure ou égale à `as_of`.\n\n`text_available` indique si le texte français a pu être récupéré. Cette route\ninterroge la source officielle pendant l'appel et peut prendre plusieurs secondes.","operationId":"version_acte_eurlex_doc__celex__version__as_of__get","security":[{"BearerToken":[]}],"parameters":[{"name":"celex","in":"path","required":true,"schema":{"type":"string","description":"CELEX de base de l'acte, par exemple `32016R0679`.","title":"Celex"},"description":"CELEX de base de l'acte, par exemple `32016R0679`."},{"name":"as_of","in":"path","required":true,"schema":{"type":"string","description":"Date d'application recherchée au format `AAAA-MM-JJ`.","title":"As Of"},"description":"Date d'application recherchée au format `AAAA-MM-JJ`."}],"responses":{"200":{"description":"Version consolidée retenue et unités textuelles disponibles en français.","content":{"application/json":{"schema":{"title":"Response Version Acte Eurlex Doc  Celex  Version  As Of  Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service EUR-Lex en amont."},"503":{"description":"Service EUR-Lex temporairement indisponible."},"404":{"description":"Aucune version consolidée n'existe à la date demandée ou avant."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/eurlex/doc/{celex}/compare":{"get":{"tags":["Droit de l'UE (eurlex)"],"summary":"Comparer deux états consolidés d'un acte","description":"Compare les consolidations applicables aux dates `a` et `b`, article par article.\n\n`summary` compte les articles ajoutés, supprimés, modifiés ou inchangés.\n`comparable=false` signale qu'un diff fiable n'a pas pu être produit.","operationId":"comparer_acte_eurlex_doc__celex__compare_get","security":[{"BearerToken":[]}],"parameters":[{"name":"celex","in":"path","required":true,"schema":{"type":"string","description":"CELEX de base de l'acte à comparer.","title":"Celex"},"description":"CELEX de base de l'acte à comparer."},{"name":"a","in":"query","required":true,"schema":{"type":"string","description":"Première date d'application, au format `AAAA-MM-JJ`.","title":"A"},"description":"Première date d'application, au format `AAAA-MM-JJ`."},{"name":"b","in":"query","required":true,"schema":{"type":"string","description":"Seconde date d'application, au format `AAAA-MM-JJ`.","title":"B"},"description":"Seconde date d'application, au format `AAAA-MM-JJ`."}],"responses":{"200":{"description":"Comparaison structurée article par article entre les deux dates.","content":{"application/json":{"schema":{"title":"Response Comparer Acte Eurlex Doc  Celex  Compare Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service EUR-Lex en amont."},"503":{"description":"Service EUR-Lex temporairement indisponible."},"404":{"description":"Aucune version consolidée n'existe pour l'une des dates."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/eurlex/doc/{celex}/citations":{"get":{"tags":["Droit de l'UE (eurlex)"],"summary":"Consulter le réseau de citations d'un document","description":"Retourne les citations avec leur sens, relation, fragment et document lié.\n\n`group_by_document` choisit entre une entrée par citation ou par document.\n`counts` fournit les totaux et `coverage` précise la couverture de collecte.\n`in_corpus=false` indique que le document lié n'est pas consultable ici, son\n`eurlex_url` restant valable. `n_authority` compte les documents du fonds qui\ncitent le document lié et `source_points_suspect` marque un relevé de points\naberrant, qui pèse zéro dans le tri : deux mesures du fonds, pas de l'éditeur.","operationId":"citations_acte_eurlex_doc__celex__citations_get","security":[{"BearerToken":[]}],"parameters":[{"name":"celex","in":"path","required":true,"schema":{"type":"string","description":"CELEX du document, par exemple `32016R0679`.","title":"Celex"},"description":"CELEX du document, par exemple `32016R0679`."},{"name":"direction","in":"query","required":false,"schema":{"type":"string","pattern":"^(cited_by|cites|both)$","description":"Sens des liens : `cited_by` pour les documents qui citent ce CELEX, `cites` pour les documents cités par ce CELEX, `both` pour les deux listes.","default":"cited_by","title":"Direction"},"description":"Sens des liens : `cited_by` pour les documents qui citent ce CELEX, `cites` pour les documents cités par ce CELEX, `both` pour les deux listes."},{"name":"article","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":12},{"type":"null"}],"description":"Restreindre la cible à un numéro d'article, par exemple `45`.","title":"Article"},"description":"Restreindre la cible à un numéro d'article, par exemple `45`."},{"name":"relation","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Type de relation : `cites`, `interprets`, `declares_void` ou `declares_valid`.","title":"Relation"},"description":"Type de relation : `cites`, `interprets`, `declares_void` ou `declares_valid`."},{"name":"sector","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":1},{"type":"null"}],"description":"Secteur CELEX des documents liés : `6` pour la jurisprudence, `3` pour la législation.","title":"Sector"},"description":"Secteur CELEX des documents liés : `6` pour la jurisprudence, `3` pour la législation."},{"name":"resource_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"description":"Un ou plusieurs types de document séparés par des virgules : `judgment`, `order` ou `opinion_ag`. Exemple : `judgment,order`.","title":"Resource Type"},"description":"Un ou plusieurs types de document séparés par des virgules : `judgment`, `order` ou `opinion_ag`. Exemple : `judgment,order`."},{"name":"group_by_document","in":"query","required":false,"schema":{"type":"boolean","description":"Avec `true`, regrouper tous les liens d'un même document dans une entrée et exposer ses fragments ; avec `false`, retourner une entrée par citation.","default":false,"title":"Group By Document"},"description":"Avec `true`, regrouper tous les liens d'un même document dans une entrée et exposer ses fragments ; avec `false`, retourner une entrée par citation."},{"name":"sort","in":"query","required":false,"schema":{"type":"string","pattern":"^(date|weight|authority)$","description":"Ordre des résultats : `date` du document décroissante, `weight` décroissant, calculé à partir du nombre de points sources associés au lien, ou `authority` décroissant, calculé à partir du nombre de documents du fonds qui citent le document lié (`n_authority`).","default":"date","title":"Sort"},"description":"Ordre des résultats : `date` du document décroissante, `weight` décroissant, calculé à partir du nombre de points sources associés au lien, ou `authority` décroissant, calculé à partir du nombre de documents du fonds qui citent le document lié (`n_authority`)."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Nombre maximal d'entrées dans la page.","default":50,"title":"Limit"},"description":"Nombre maximal d'entrées dans la page."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Nombre d'entrées à ignorer avant la page retournée.","default":0,"title":"Offset"},"description":"Nombre d'entrées à ignorer avant la page retournée."}],"responses":{"200":{"description":"Citations entrantes, sortantes ou les deux, avec compteurs et couverture.","content":{"application/json":{"schema":{"title":"Response Citations Acte Eurlex Doc  Celex  Citations Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service EUR-Lex en amont."},"503":{"description":"Service EUR-Lex temporairement indisponible."},"422":{"description":"Valeur inconnue pour `direction`, `relation`, `resource_type` ou `sort`."}}}},"/eurlex/doc/{celex}/transpositions":{"get":{"tags":["Droit de l'UE (eurlex)"],"summary":"Lister les mesures françaises de transposition d'une directive","description":"Retourne les échéances et mesures françaises répertoriées pour la directive.\n\nUne liste vide signifie qu'aucune mesure n'est connue dans le corpus, sans\nconstituer une attestation de non-transposition.","operationId":"transpositions_acte_eurlex_doc__celex__transpositions_get","security":[{"BearerToken":[]}],"parameters":[{"name":"celex","in":"path","required":true,"schema":{"type":"string","description":"CELEX de base ou CELEX consolidé de la directive.","title":"Celex"},"description":"CELEX de base ou CELEX consolidé de la directive."}],"responses":{"200":{"description":"Échéances et mesures nationales de transposition répertoriées.","content":{"application/json":{"schema":{"title":"Response Transpositions Acte Eurlex Doc  Celex  Transpositions Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service EUR-Lex en amont."},"503":{"description":"Service EUR-Lex temporairement indisponible."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/eurlex/stats":{"get":{"tags":["Droit de l'UE (eurlex)"],"summary":"Consulter la couverture du corpus EUR-Lex","description":"Retourne la volumétrie, les facettes et les indicateurs de couverture et de qualité.","operationId":"statistiques_eurlex_stats_get","responses":{"200":{"description":"Volumétrie, facettes, qualité et couverture du corpus à l'instant de l'appel.","content":{"application/json":{"schema":{"title":"Response Statistiques Eurlex Stats Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service EUR-Lex en amont."},"503":{"description":"Service EUR-Lex temporairement indisponible."}},"security":[{"BearerToken":[]}]}},"/kali/search":{"get":{"tags":["Conventions collectives (kali)"],"summary":"Rechercher dans les conventions collectives","description":"Retourne une page d'articles avec leur IDCC, texte, dates et applicabilité.\n\n`search_diagnostics` précise le mode réellement utilisé. Si la recherche\nsémantique est indisponible, `hybrid` est automatiquement rejoué en lexical.","operationId":"rechercher_kali_search_get","security":[{"BearerToken":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Termes recherchés dans le texte des articles. Les opérateurs `ET`, `OU`, `SAUF` et les `\"expressions exactes\"` sont acceptés.","title":"Q"},"description":"Termes recherchés dans le texte des articles. Les opérateurs `ET`, `OU`, `SAUF` et les `\"expressions exactes\"` sont acceptés."},{"name":"idcc","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Un ou plusieurs codes IDCC séparés par des virgules, sous la forme `1486` ou `IDCC 1486`.","title":"Idcc"},"description":"Un ou plusieurs codes IDCC séparés par des virgules, sous la forme `1486` ou `IDCC 1486`."},{"name":"nature","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Une ou plusieurs natures de texte, par exemple `ACCORD` ou `AVENANT`.","title":"Nature"},"description":"Une ou plusieurs natures de texte, par exemple `ACCORD` ou `AVENANT`."},{"name":"etat","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Un ou plusieurs états KALI, ou les libellés `en vigueur` et `étendu`. Un état explicite remplace le filtre `en_vigueur`.","title":"Etat"},"description":"Un ou plusieurs états KALI, ou les libellés `en vigueur` et `étendu`. Un état explicite remplace le filtre `en_vigueur`."},{"name":"en_vigueur","in":"query","required":false,"schema":{"type":"boolean","description":"Avec `true`, limiter la recherche aux articles en vigueur à la date du jour.","default":true,"title":"En Vigueur"},"description":"Avec `true`, limiter la recherche aux articles en vigueur à la date du jour."},{"name":"etendu","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"`true` sélectionne les textes étendus ; `false`, les textes non étendus.","title":"Etendu"},"description":"`true` sélectionne les textes étendus ; `false`, les textes non étendus."},{"name":"date_start","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Ancien nom de `date_effet_start`, conservé pour compatibilité.","title":"Date Start"},"description":"Ancien nom de `date_effet_start`, conservé pour compatibilité."},{"name":"date_end","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Ancien nom de `date_effet_end`, conservé pour compatibilité.","title":"Date End"},"description":"Ancien nom de `date_effet_end`, conservé pour compatibilité."},{"name":"date_effet_start","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Date d'effet minimale de l'article, au format `AAAA-MM-JJ`.","title":"Date Effet Start"},"description":"Date d'effet minimale de l'article, au format `AAAA-MM-JJ`."},{"name":"date_effet_end","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Date d'effet maximale de l'article, au format `AAAA-MM-JJ`.","title":"Date Effet End"},"description":"Date d'effet maximale de l'article, au format `AAAA-MM-JJ`."},{"name":"date_signature_start","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Date de signature minimale du texte parent, au format `AAAA-MM-JJ`.","title":"Date Signature Start"},"description":"Date de signature minimale du texte parent, au format `AAAA-MM-JJ`."},{"name":"date_signature_end","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Date de signature maximale du texte parent, au format `AAAA-MM-JJ`.","title":"Date Signature End"},"description":"Date de signature maximale du texte parent, au format `AAAA-MM-JJ`."},{"name":"mode","in":"query","required":false,"schema":{"type":"string","pattern":"^(bm25|hybrid)$","description":"Méthode de recherche : `hybrid` combine recherche lexicale par mots-clés et proximité sémantique ; `bm25` utilise uniquement les mots-clés.","default":"hybrid","title":"Mode"},"description":"Méthode de recherche : `hybrid` combine recherche lexicale par mots-clés et proximité sémantique ; `bm25` utilise uniquement les mots-clés."},{"name":"alpha","in":"query","required":false,"schema":{"type":"number","maximum":1.0,"minimum":0.0,"description":"Poids de la composante sémantique en mode `hybrid`, de 0 à 1.","default":0.5,"title":"Alpha"},"description":"Poids de la composante sémantique en mode `hybrid`, de 0 à 1."},{"name":"sort","in":"query","required":false,"schema":{"type":"string","pattern":"^(pertinence|date_effet_desc|date_effet_asc)$","description":"Ordre des résultats : `pertinence`, `date_effet_desc` pour les plus récents ou `date_effet_asc` pour les plus anciens.","default":"pertinence","title":"Sort"},"description":"Ordre des résultats : `pertinence`, `date_effet_desc` pour les plus récents ou `date_effet_asc` pour les plus anciens."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Nombre maximal d'articles dans la page.","default":20,"title":"Limit"},"description":"Nombre maximal d'articles dans la page."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Nombre d'articles à ignorer avant la page retournée.","default":0,"title":"Offset"},"description":"Nombre d'articles à ignorer avant la page retournée."}],"responses":{"200":{"description":"Page d'articles conventionnels correspondant à la recherche.","content":{"application/json":{"schema":{"title":"Response Rechercher Kali Search Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service KALI en amont."},"503":{"description":"Service des conventions collectives temporairement indisponible."},"422":{"description":"Paramètre, filtre ou intervalle de dates invalide."}}}},"/kali/conventions":{"get":{"tags":["Conventions collectives (kali)"],"summary":"Lister les conventions collectives","description":"Retourne une liste paginée avec les identifiants, titres, IDCC, états et dates disponibles.","operationId":"lister_conventions_kali_conventions_get","security":[{"BearerToken":[]}],"parameters":[{"name":"idcc","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Un ou plusieurs codes IDCC séparés par des virgules.","title":"Idcc"},"description":"Un ou plusieurs codes IDCC séparés par des virgules."},{"name":"nature","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"`IDCC` pour les conventions de branche ou `TI` pour les textes indépendants.","title":"Nature"},"description":"`IDCC` pour les conventions de branche ou `TI` pour les textes indépendants."},{"name":"etat","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Un ou plusieurs états KALI séparés par des virgules.","title":"Etat"},"description":"Un ou plusieurs états KALI séparés par des virgules."},{"name":"en_vigueur","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Avec `true`, limiter la liste aux conventions en vigueur.","title":"En Vigueur"},"description":"Avec `true`, limiter la liste aux conventions en vigueur."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Nombre maximal de conventions dans la page.","default":50,"title":"Limit"},"description":"Nombre maximal de conventions dans la page."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Nombre de conventions à ignorer avant la page retournée.","default":0,"title":"Offset"},"description":"Nombre de conventions à ignorer avant la page retournée."}],"responses":{"200":{"description":"Page de conventions correspondant aux filtres.","content":{"application/json":{"schema":{"title":"Response Lister Conventions Kali Conventions Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service KALI en amont."},"503":{"description":"Service des conventions collectives temporairement indisponible."},"422":{"description":"Paramètre ou filtre invalide."}}}},"/kali/conventions/{conv_id}":{"get":{"tags":["Conventions collectives (kali)"],"summary":"Consulter une convention collective","description":"Retourne la convention et la liste paginée `textes_annonces` de ses textes rattachés.","operationId":"consulter_convention_kali_conventions__conv_id__get","security":[{"BearerToken":[]}],"parameters":[{"name":"conv_id","in":"path","required":true,"schema":{"type":"string","description":"Identifiant `KALICONT` ou code IDCC numérique de la convention.","title":"Conv Id"},"description":"Identifiant `KALICONT` ou code IDCC numérique de la convention."},{"name":"textes_limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Nombre maximal de textes rattachés dans la réponse.","default":50,"title":"Textes Limit"},"description":"Nombre maximal de textes rattachés dans la réponse."},{"name":"textes_offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Nombre de textes rattachés à ignorer avant la page retournée.","default":0,"title":"Textes Offset"},"description":"Nombre de textes rattachés à ignorer avant la page retournée."}],"responses":{"200":{"description":"Métadonnées de la convention et page de textes qui lui sont rattachés.","content":{"application/json":{"schema":{"title":"Response Consulter Convention Kali Conventions  Conv Id  Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service KALI en amont."},"503":{"description":"Service des conventions collectives temporairement indisponible."},"404":{"description":"Convention introuvable."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/kali/conventions/{conv_id}/structure":{"get":{"tags":["Conventions collectives (kali)"],"summary":"Parcourir la structure d'une convention collective","description":"Retourne un arbre de navigation organisé par texte puis par section.","operationId":"structure_convention_kali_conventions__conv_id__structure_get","security":[{"BearerToken":[]}],"parameters":[{"name":"conv_id","in":"path","required":true,"schema":{"type":"string","description":"Identifiant `KALICONT` ou code IDCC numérique.","title":"Conv Id"},"description":"Identifiant `KALICONT` ou code IDCC numérique."}],"responses":{"200":{"description":"Arbre des textes et sections de la convention.","content":{"application/json":{"schema":{"title":"Response Structure Convention Kali Conventions  Conv Id  Structure Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service KALI en amont."},"503":{"description":"Service des conventions collectives temporairement indisponible."},"404":{"description":"Convention introuvable."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/kali/articles":{"get":{"tags":["Conventions collectives (kali)"],"summary":"Lister les articles conventionnels","description":"Retourne les métadonnées et le texte des articles avec une pagination par décalage.","operationId":"lister_articles_kali_articles_get","security":[{"BearerToken":[]}],"parameters":[{"name":"idcc","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Un ou plusieurs codes IDCC séparés par des virgules.","title":"Idcc"},"description":"Un ou plusieurs codes IDCC séparés par des virgules."},{"name":"texte_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Un ou plusieurs identifiants `KALITEXT` séparés par des virgules.","title":"Texte Id"},"description":"Un ou plusieurs identifiants `KALITEXT` séparés par des virgules."},{"name":"etat","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Un ou plusieurs états KALI séparés par des virgules.","title":"Etat"},"description":"Un ou plusieurs états KALI séparés par des virgules."},{"name":"en_vigueur","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Avec `true`, limiter la liste aux articles en vigueur.","title":"En Vigueur"},"description":"Avec `true`, limiter la liste aux articles en vigueur."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Nombre maximal d'articles dans la page.","default":50,"title":"Limit"},"description":"Nombre maximal d'articles dans la page."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Nombre d'articles à ignorer avant la page retournée.","default":0,"title":"Offset"},"description":"Nombre d'articles à ignorer avant la page retournée."}],"responses":{"200":{"description":"Page d'articles correspondant aux filtres.","content":{"application/json":{"schema":{"title":"Response Lister Articles Kali Articles Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service KALI en amont."},"503":{"description":"Service des conventions collectives temporairement indisponible."},"422":{"description":"Paramètre ou filtre invalide."}}}},"/kali/articles/{article_id}":{"get":{"tags":["Conventions collectives (kali)"],"summary":"Consulter un article conventionnel","description":"Retourne le texte, ses dates et son contexte ; `applicable_a_ce_jour` donne son applicabilité.","operationId":"consulter_article_kali_articles__article_id__get","security":[{"BearerToken":[]}],"parameters":[{"name":"article_id","in":"path","required":true,"schema":{"type":"string","description":"Identifiant `KALIARTI` de l'article.","title":"Article Id"},"description":"Identifiant `KALIARTI` de l'article."}],"responses":{"200":{"description":"Texte, métadonnées et contexte conventionnel de l'article.","content":{"application/json":{"schema":{"title":"Response Consulter Article Kali Articles  Article Id  Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service KALI en amont."},"503":{"description":"Service des conventions collectives temporairement indisponible."},"404":{"description":"Article introuvable."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/kali/articles/{article_id}/liens":{"get":{"tags":["Conventions collectives (kali)"],"summary":"Consulter les liens d'un article conventionnel","description":"Retourne les liens entrants et sortants ; `resolu=false` signale une cible absente du corpus.","operationId":"resoudre_liens_kali_articles__article_id__liens_get","security":[{"BearerToken":[]}],"parameters":[{"name":"article_id","in":"path","required":true,"schema":{"type":"string","description":"Identifiant `KALIARTI` de l'article.","title":"Article Id"},"description":"Identifiant `KALIARTI` de l'article."}],"responses":{"200":{"description":"Liens entrants et sortants, avec leurs cibles lorsqu'elles sont disponibles.","content":{"application/json":{"schema":{"title":"Response Resoudre Liens Kali Articles  Article Id  Liens Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service KALI en amont."},"503":{"description":"Service des conventions collectives temporairement indisponible."},"404":{"description":"Article introuvable."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/kali/stats":{"get":{"tags":["Conventions collectives (kali)"],"summary":"Consulter la couverture du corpus KALI","description":"Retourne les statistiques utiles pour contrôler le périmètre et la fraîcheur des données.","operationId":"statistiques_kali_stats_get","responses":{"200":{"description":"Volumétrie, dates de mise à jour et couverture du corpus.","content":{"application/json":{"schema":{"title":"Response Statistiques Kali Stats Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service KALI en amont."},"503":{"description":"Service des conventions collectives temporairement indisponible."}},"security":[{"BearerToken":[]}]}},"/accords/search":{"get":{"tags":["Accords d'entreprise (accords)"],"summary":"Rechercher dans les accords d'entreprise","description":"Retourne une page d'accords avec métadonnées, extrait, score et rangs.\n\nEn mode `hybrid`, `couverture_semantique` indique la part indexée. `total`\nreste lexical ; `total_plafonne=true` en fait un minimum. Un service\nsémantique indisponible renvoie 503 sans repli automatique.","operationId":"rechercher_accords_search_get","security":[{"BearerToken":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":1000,"description":"Termes recherchés dans le texte des accords. Les opérateurs `ET`, `OU`, `SAUF` et les `\"expressions exactes\"` sont acceptés.","title":"Q"},"description":"Termes recherchés dans le texte des accords. Les opérateurs `ET`, `OU`, `SAUF` et les `\"expressions exactes\"` sont acceptés."},{"name":"mode","in":"query","required":false,"schema":{"type":"string","pattern":"^(bm25|hybrid)$","description":"Méthode de recherche : `bm25` effectue une recherche lexicale par mots-clés ; `hybrid` y ajoute une recherche par proximité sémantique.","default":"bm25","title":"Mode"},"description":"Méthode de recherche : `bm25` effectue une recherche lexicale par mots-clés ; `hybrid` y ajoute une recherche par proximité sémantique."},{"name":"alpha","in":"query","required":false,"schema":{"type":"number","maximum":1.0,"minimum":0.0,"description":"Poids de la composante sémantique en mode `hybrid`, de 0 à 1.","default":0.5,"title":"Alpha"},"description":"Poids de la composante sémantique en mode `hybrid`, de 0 à 1."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Nombre maximal d'accords dans la page.","default":20,"title":"Limit"},"description":"Nombre maximal d'accords dans la page."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","maximum":1000000,"minimum":0,"description":"Nombre d'accords à ignorer avant la page retournée, jusqu'à 1 000 000.","default":0,"title":"Offset"},"description":"Nombre d'accords à ignorer avant la page retournée, jusqu'à 1 000 000."},{"name":"nature","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Une ou plusieurs natures séparées par des virgules ; voir `/accords/facets`.","title":"Nature"},"description":"Une ou plusieurs natures séparées par des virgules ; voir `/accords/facets`."},{"name":"idcc","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Un ou plusieurs codes IDCC séparés par des virgules.","title":"Idcc"},"description":"Un ou plusieurs codes IDCC séparés par des virgules."},{"name":"ape","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Un ou plusieurs codes APE/NAF séparés par des virgules.","title":"Ape"},"description":"Un ou plusieurs codes APE/NAF séparés par des virgules."},{"name":"siren","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Numéro SIREN de l'entreprise signataire.","title":"Siren"},"description":"Numéro SIREN de l'entreprise signataire."},{"name":"theme","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Un ou plusieurs codes numériques ACCO séparés par des virgules, par exemple `141`. Les libellés ne sont pas acceptés. Les codes courts sont complétés à trois chiffres (`11` devient `011`) ; voir `/accords/themes`.","title":"Theme"},"description":"Un ou plusieurs codes numériques ACCO séparés par des virgules, par exemple `141`. Les libellés ne sont pas acceptés. Les codes courts sont complétés à trois chiffres (`11` devient `011`) ; voir `/accords/themes`."},{"name":"include_missing_idcc","in":"query","required":false,"schema":{"type":"boolean","description":"Avec un filtre `idcc`, inclure également les accords sans IDCC renseigné.","default":false,"title":"Include Missing Idcc"},"description":"Avec un filtre `idcc`, inclure également les accords sans IDCC renseigné."},{"name":"date_start","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Date de signature minimale (`date_texte`), au format `AAAA-MM-JJ`.","title":"Date Start"},"description":"Date de signature minimale (`date_texte`), au format `AAAA-MM-JJ`."},{"name":"date_end","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Date de signature maximale (`date_texte`), au format `AAAA-MM-JJ`.","title":"Date End"},"description":"Date de signature maximale (`date_texte`), au format `AAAA-MM-JJ`."}],"responses":{"200":{"description":"Page d'accords correspondant aux termes et filtres demandés.","content":{"application/json":{"schema":{"title":"Response Rechercher Accords Search Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service ACCO en amont."},"503":{"description":"Recherche sémantique indisponible ; la recherche lexicale reste accessible avec `mode=bm25`."},"422":{"description":"Paramètre, valeur de filtre ou intervalle de dates invalide."}}}},"/accords/facets":{"get":{"tags":["Accords d'entreprise (accords)"],"summary":"Lister les valeurs de filtre disponibles","description":"Retourne les valeurs acceptées pour `nature`, `theme` et `idcc`.\n\nLe pseudo-IDCC `9999` est signalé par `est_pseudo_idcc=true`.","operationId":"facettes_accords_facets_get","responses":{"200":{"description":"Natures, thèmes et principaux IDCC présents dans le corpus.","content":{"application/json":{"schema":{"title":"Response Facettes Accords Facets Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service ACCO en amont."},"503":{"description":"Service des accords d'entreprise temporairement indisponible."}},"security":[{"BearerToken":[]}]}},"/accords/themes":{"get":{"tags":["Accords d'entreprise (accords)"],"summary":"Consulter la nomenclature des thèmes ACCO","description":"Retourne les codes à utiliser, plutôt que les libellés, dans le filtre `theme`.","operationId":"themes_accords_themes_get","responses":{"200":{"description":"Liste des codes thématiques utilisables pour filtrer les accords.","content":{"application/json":{"schema":{"title":"Response Themes Accords Themes Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service ACCO en amont."},"503":{"description":"Service des accords d'entreprise temporairement indisponible."}},"security":[{"BearerToken":[]}]}},"/accords/statistics":{"get":{"tags":["Accords d'entreprise (accords)"],"summary":"Obtenir des statistiques documentaires sur les accords","description":"Retourne les répartitions par année, nature et qualité de texte.\n\nCes agrégats décrivent les documents, pas les montants contenus dans les accords.","operationId":"statistiques_documentaires_accords_statistics_get","security":[{"BearerToken":[]}],"parameters":[{"name":"idcc","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Un ou plusieurs codes IDCC séparés par des virgules.","title":"Idcc"},"description":"Un ou plusieurs codes IDCC séparés par des virgules."},{"name":"theme","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Un ou plusieurs codes numériques ACCO séparés par des virgules ; voir `/accords/themes`.","title":"Theme"},"description":"Un ou plusieurs codes numériques ACCO séparés par des virgules ; voir `/accords/themes`."},{"name":"include_missing_idcc","in":"query","required":false,"schema":{"type":"boolean","description":"Avec un filtre `idcc`, inclure également les accords sans IDCC renseigné.","default":false,"title":"Include Missing Idcc"},"description":"Avec un filtre `idcc`, inclure également les accords sans IDCC renseigné."}],"responses":{"200":{"description":"Répartition des accords par année, nature et qualité de texte.","content":{"application/json":{"schema":{"title":"Response Statistiques Documentaires Accords Statistics Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service ACCO en amont."},"503":{"description":"Service des accords d'entreprise temporairement indisponible."},"422":{"description":"Valeur de filtre invalide."}}}},"/accords/stats":{"get":{"tags":["Accords d'entreprise (accords)"],"summary":"Consulter la couverture du corpus ACCO","description":"Retourne la volumétrie, les principaux IDCC et `couverture_semantique`.","operationId":"statut_corpus_accords_stats_get","responses":{"200":{"description":"Volumétrie, principaux IDCC et couverture de la recherche sémantique.","content":{"application/json":{"schema":{"title":"Response Statut Corpus Accords Stats Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service ACCO en amont."},"503":{"description":"Service des accords d'entreprise temporairement indisponible."}},"security":[{"BearerToken":[]}]}},"/accords/{accord_id}":{"get":{"tags":["Accords d'entreprise (accords)"],"summary":"Consulter un accord d'entreprise","description":"Retourne les métadonnées, signataires, thèmes et texte de l'accord.\n\n`date_fin=null` indique une durée indéterminée. Avec `max_chars`,\n`texte_tronque` signale la coupe et `text_len` conserve la longueur complète.","operationId":"consulter_accord_accords__accord_id__get","security":[{"BearerToken":[]}],"parameters":[{"name":"accord_id","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":200,"description":"Identifiant de l'accord, par exemple `T08618060029`.","title":"Accord Id"},"description":"Identifiant de l'accord, par exemple `T08618060029`."},{"name":"max_chars","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":100000,"minimum":100},{"type":"null"}],"description":"Nombre maximal de caractères retournés dans `text`. `text_len` conserve la longueur du texte complet.","title":"Max Chars"},"description":"Nombre maximal de caractères retournés dans `text`. `text_len` conserve la longueur du texte complet."}],"responses":{"200":{"description":"Métadonnées, signataires, thèmes et texte de l'accord.","content":{"application/json":{"schema":{"title":"Response Consulter Accord Accords  Accord Id  Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service ACCO en amont."},"503":{"description":"Service des accords d'entreprise temporairement indisponible."},"404":{"description":"Accord introuvable."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/pfds/fonds":{"get":{"tags":["Petits fonds (pfds)"],"summary":"Lister les fonds documentaires disponibles","description":"Retourne les valeurs acceptées par le paramètre de chemin `fond`.","operationId":"lister_fonds_pfds_fonds_get","responses":{"200":{"description":"Identifiants des fonds accessibles par les autres routes PFDS.","content":{"application/json":{"schema":{"title":"Response Lister Fonds Pfds Fonds Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service documentaire en amont."},"503":{"description":"Service documentaire temporairement indisponible."}},"security":[{"BearerToken":[]}]}},"/pfds/{fond}/search":{"get":{"tags":["Petits fonds (pfds)"],"summary":"Rechercher dans un fonds documentaire","description":"Retourne une liste non paginée avec identifiant, métadonnées, extrait et score.\n\nEn cas de 503 en mode `hybrid`, l'appel peut être réessayé en recherche\nlexicale avec `mode=bm25`.","operationId":"rechercher_pfds__fond__search_get","security":[{"BearerToken":[]}],"parameters":[{"name":"fond","in":"path","required":true,"schema":{"type":"string","description":"Identifiant du fonds : `cnil` pour les délibérations CNIL ou `constit` pour les décisions du Conseil constitutionnel.","title":"Fond"},"description":"Identifiant du fonds : `cnil` pour les délibérations CNIL ou `constit` pour les décisions du Conseil constitutionnel."},{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Termes recherchés dans le titre et le texte des documents.","title":"Q"},"description":"Termes recherchés dans le titre et le texte des documents."},{"name":"mode","in":"query","required":false,"schema":{"type":"string","pattern":"^(bm25|hybrid)$","description":"Méthode de recherche : `bm25` effectue une recherche lexicale par mots-clés ; `hybrid` y ajoute une recherche par proximité sémantique.","default":"bm25","title":"Mode"},"description":"Méthode de recherche : `bm25` effectue une recherche lexicale par mots-clés ; `hybrid` y ajoute une recherche par proximité sémantique."},{"name":"alpha","in":"query","required":false,"schema":{"type":"number","maximum":1.0,"minimum":0.0,"description":"Poids de la composante sémantique en mode `hybrid`, de 0 à 1.","default":0.5,"title":"Alpha"},"description":"Poids de la composante sémantique en mode `hybrid`, de 0 à 1."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Nombre maximal de documents retournés.","default":20,"title":"Limit"},"description":"Nombre maximal de documents retournés."},{"name":"filters","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Objet JSON encodé dans la chaîne de requête. Filtres CNIL : `nature`, `etat_juridique`, `date_debut`, `date_fin`. Filtres Conseil constitutionnel : `nature`, `solution`, `date_debut`, `date_fin`. Les facettes acceptent une liste de valeurs et les dates utilisent le format `AAAA-MM-JJ`. Exemple : `{\"nature\":[\"QPC\"],\"date_debut\":\"2020-01-01\"}`.","title":"Filters"},"description":"Objet JSON encodé dans la chaîne de requête. Filtres CNIL : `nature`, `etat_juridique`, `date_debut`, `date_fin`. Filtres Conseil constitutionnel : `nature`, `solution`, `date_debut`, `date_fin`. Les facettes acceptent une liste de valeurs et les dates utilisent le format `AAAA-MM-JJ`. Exemple : `{\"nature\":[\"QPC\"],\"date_debut\":\"2020-01-01\"}`."}],"responses":{"200":{"description":"Liste de documents classés par pertinence.","content":{"application/json":{"schema":{"title":"Response Rechercher Pfds  Fond  Search Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service documentaire en amont."},"503":{"description":"Recherche sémantique temporairement indisponible ; la recherche lexicale reste accessible avec `mode=bm25`."},"404":{"description":"Fonds inconnu ou non disponible."},"422":{"description":"Requête, mode ou filtre invalide."}}}},"/pfds/{fond}/doc/{doc_id}":{"get":{"tags":["Petits fonds (pfds)"],"summary":"Consulter un document","description":"Retourne le texte complet, ses métadonnées et l'éventuelle URL Légifrance.","operationId":"consulter_document_pfds__fond__doc__doc_id__get","security":[{"BearerToken":[]}],"parameters":[{"name":"fond","in":"path","required":true,"schema":{"type":"string","description":"Identifiant du fonds : `cnil` pour les délibérations CNIL ou `constit` pour les décisions du Conseil constitutionnel.","title":"Fond"},"description":"Identifiant du fonds : `cnil` pour les délibérations CNIL ou `constit` pour les décisions du Conseil constitutionnel."},{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","description":"Identifiant `id` retourné par la recherche dans le même fonds.","title":"Doc Id"},"description":"Identifiant `id` retourné par la recherche dans le même fonds."}],"responses":{"200":{"description":"Texte intégral et métadonnées du document.","content":{"application/json":{"schema":{"title":"Response Consulter Document Pfds  Fond  Doc  Doc Id  Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service documentaire en amont."},"503":{"description":"Service documentaire temporairement indisponible."},"404":{"description":"Fonds ou document introuvable."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/pfds/{fond}/stats":{"get":{"tags":["Petits fonds (pfds)"],"summary":"Consulter la couverture d'un fonds","description":"Retourne les statistiques utiles pour contrôler le périmètre et la fraîcheur du fonds.","operationId":"statistiques_pfds__fond__stats_get","security":[{"BearerToken":[]}],"parameters":[{"name":"fond","in":"path","required":true,"schema":{"type":"string","description":"Identifiant du fonds : `cnil` pour les délibérations CNIL ou `constit` pour les décisions du Conseil constitutionnel.","title":"Fond"},"description":"Identifiant du fonds : `cnil` pour les délibérations CNIL ou `constit` pour les décisions du Conseil constitutionnel."}],"responses":{"200":{"description":"Volumétrie et couverture d'indexation du fonds demandé.","content":{"application/json":{"schema":{"title":"Response Statistiques Pfds  Fond  Stats Get"}}}},"401":{"description":"Token Bearer absent ou invalide."},"403":{"description":"Token valide ne disposant pas du scope `api`."},"429":{"description":"Quota mensuel atteint ; consulter les en-têtes `X-Quota-*`."},"502":{"description":"Erreur retournée par le service documentaire en amont."},"503":{"description":"Service documentaire temporairement indisponible."},"404":{"description":"Fonds inconnu ou non disponible."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"BearerToken":{"type":"http","description":"Token openlegi (le même que pour les serveurs MCP), envoyé en `Authorization: Bearer <token>`. Requiert le scope `api`.","scheme":"bearer"}}},"servers":[{"url":"/api/v1"}]}