API REST · OpenAPI 3.0.3
Interroger le corpus OpenCaseLaw depuis n'importe quel langage
Points de recherche publics pour la recherche, le graphe de citations, les lois et les exports. Ces points sont gratuits, sans clé API et compatibles CORS. Ils utilisent le même backend que MCP et la recherche web. La spécification complète de l’application contient aussi d’autres fonctions.
Automatiser la recherche depuis un terminal
Installez le client léger avec pipx ou uv. Enregistrez des résultats bornés, récupérez les considérants exacts, résolvez des listes de citations et conservez les sources. Le client est publié sur PyPI sous le nom opencaselaw-cli.
pipx install opencaselaw-cli # or: uv tool install opencaselaw-cli ocl --help ocl bundle create 'missbräuchliche Kündigung Rachekündigung' \ --max-results 5 --law OR:336 --out research-bundle
Guide CLI : pipelines, dossiers de sources et résolution de citations →
Démarrage — rechercher dans le corpus
curl -s "https://mcp.opencaselaw.ch/api/decisions?q=Mietrecht+K%C3%BCndigung&limit=5"
Renvoie :
{
"total": 1006,
"total_is_lower_bound": false,
"returned": 5,
"results": [
{ "decision_id": "bge_BGE_140_III_86", "court": "bge",
"decision_date": "2014-04-15", "language": "de",
"title": "Mietrecht; …", "regeste": "…",
"citation_string_de": "BGE 140 III 86", "canonical_url": "https://mcp.opencaselaw.ch/entscheid/…" },
…
],
"limit": 5, "offset": 0, "has_more": true, "next_offset": 5
}
Vérifiez total_is_lower_bound avant de considérer total comme exact. Suivez next_offset tant que has_more est vrai. Une recherche par pertinence peut épuiser son ensemble limité de candidats avant de renvoyer tous les résultats : has_more: false ne prouve pas une recherche exhaustive. Les filtres restreignent la sélection ; pour analyser le corpus entier, utilisez le téléchargement Parquet.
Démarrage — consulter un article
curl -s "https://mcp.opencaselaw.ch/api/laws/OR?article=41"
{
"sr_number": "220",
"abbreviation": "OR",
"title": "Bundesgesetz vom 30. März 1911 …",
"consolidation_date": "2026-01-01",
"language": "de",
"articles": [
{ "article_num": "41", "heading": null,
"text": "1 Wer einem andern widerrechtlich Schaden zufügt, …" }
]
}
Les noms sont reconnus en DE/FR/IT, sans égard à la casse, aux points et aux espaces (Cst, OPP2, o.p.p. 2) ; les traités sous leur nom usuel (Pacte II, CDE, CVIM) et les anciennes dénominations (OJ → LTF, avec une note) sont résolus par la table CC0 law_aliases.json ; les actes cantonaux portent leur canton dans l'un ou l'autre ordre : /api/laws/LCP/GE.
Paramètres courants
| Paramètre | Utilisé par | Notes |
|---|---|---|
| q | tous les points de recherche | Requête en texte libre ; la recherche de décisions accepte query et q. Opérateurs booléens (AND, OR, NOT), expressions exactes, numéros de dossier et références BGE. Les résultats par pertinence forment un ensemble limité ; vérifiez la pagination et les indications de borne inférieure. |
| query | tous les points de recherche | Requête en texte libre. Sur /decisions, un query non vide prime sur q. Consultez les paramètres de chaque point de terminaison. |
| limit | partout | Les valeurs par défaut et maxima dépendent du point de terminaison. La recherche de décisions peut réduire le détail ou la taille des pages. Pilotez la pagination avec le nombre renvoyé et les champs de continuation, non avec la limite demandée. |
| offset | /decisions · /citations/{decision_id} | Décalage de pagination, si pris en charge. Suivez next_offset ; les listes de citations indiquent la continuation dans chaque direction. |
| language | /decisions | de / fr / it. Filtre par langue de la décision. |
| canton | /decisions · /laws/search | Code cantonal à deux lettres (ZH, BE, …) ou CH pour le fédéral. |
| court | /decisions | Clé du tribunal (bger, bvger, ge_gerichte, …). Voir /courts. |
| jurisdiction | /laws/search | all, federal ou cantonal. |
| article | /laws/{abbreviation} | Numéro d'article (p. ex. 41, 266l). |
Référence des points de terminaison
- GET/api/decisionsRechercher des décisions. Renvoie des résultats paginés avec chaînes de citation + URL canoniques.
- GET/api/decisions/{decision_id}Récupérer une décision unique avec le texte intégral.
- GET/api/decisions/{decision_id}/export.docxExporter en document Word (citation, regeste, considérants structurés).
- GET/api/decisions/{decision_id}/export.bibEntrée BibTeX pour bibliographies LaTeX.
- GET/api/decisions/{decision_id}/export.risEnregistrement RIS pour Zotero / EndNote / Mendeley.
- GET/api/decisions/{decision_id}/export.pdfRéédition PDF de la décision.
- GET/api/case-brief/{case}Fiche structurée : faits · raisonnement · lois · autorité · liés.
- GET/api/structure/{decision_id}État de fait + considérants (paragraphes) + dispositif + regeste.
- GET/api/erwaegung/{decision_id}/{e_number}Unité de citation suisse verbatim (p. ex.
2.3). - GET/api/regeste/{decision_id}Texte officiel du regeste du TF / TAF.
- GET/api/citations/{decision_id}Les deux directions : ce qui est cité + ce qui cite.
- GET/api/appeal-chain/{decision_id}Historique procédural à travers les instances.
- GET/api/leading-casesDécisions classées par autorité pour une loi / un thème.
- GET/api/citeConstruire une chaîne de citation formatée par le serveur.
- GET/api/laws/searchFTS5 fédérée sur les articles fédéraux + cantonaux. Renvoie des extraits.
- GET/api/laws/{abbreviation}Article unique par abréviation (OR, ZGB, StGB, …).
- GET/api/legislation/searchRecherche dans le catalogue LexFind (33 000+ actes fédéraux + cantonaux).
- GET/api/legislation/{lexfind_id}Enregistrement législatif unique.
- GET/api/legislation/changesModifications du droit fédéral récentes et à venir.
- GET/api/doctrineTexte de loi + BGE classés + chronologie doctrinale + extrait de commentaire.
- GET/api/materialienMessages du Conseil fédéral — intention législative.
- GET/api/materialien/{law_code}Travaux préparatoires pour une loi donnée.
- GET/api/amendment-refRésoudre les motifs « Art. X (version révisée Y) ».
- GET/api/commentaries/searchRechercher des extraits OnlineKommentar + OpenLegalCommentary.
- GET/api/commentaries/{abbreviation}Index du commentaire pour une loi (OR, ZGB, …).
- GET/api/exam-questionVrai schéma de faits BGE comme cas pratique avec analyse masquée.
- GET/api/mock-decisionDécision fictive (recherche uniquement) à partir de faits + jurisprudence + lois.
- POST/api/attestAuditer un projet de réponse — vérifie chaque BGE / art. / chaîne citée par rapport au corpus avant qu'elle ne quitte le serveur. Certifie les citations, passages cités et références légales du projet lui-même ; ne certifie pas qu'aucune autorité pertinente ne manque.
- GET/api/courtsLister les 121 tribunaux (fédéraux, régulatoires, internationaux, cantonaux).
- GET/api/statisticsStatistiques agrégées — corpus, graphe de citations, lois, langues.
- GET/api/scraper-healthStatut du dernier passage par source (alimente /coverage).
- GET/api/atom/{court}.xmlFlux Atom — les 50 dernières décisions par tribunal.
La spécification de l’application décrit les routes déployées ; la couverture des schémas de réponse varie. Cette version source ajoute un sous-ensemble public typé à /api/research/openapi.json. Il sera disponible après déploiement ; voir les notes du contrat.
Limites de débit
Limité en douceur au niveau nginx pour protéger les workers en amont. Cadencez vos lots à ≤ 5 requêtes/seconde par IP. Pour un débit supérieur, exécutez la pile localement — instructions complètes dans le README (~65 Go de disque, ~30 min d'installation).