Authentification
Toutes les routes /v1/* (sauf /v1/health) exigent une clé d'API passée dans l'en-tête X-API-Key. Les clés ont le préfixe bk_.
curl https://api.legifrance.dev/v1/article/777 \ -H "X-API-Key: bk_votre_cle"
Article par numéro
GET /v1/article/:num
Renvoie l'unique version d'un article en vigueur à une date. Sans asOf, la version en vigueur aujourd'hui.
| Paramètre | Type | Description |
|---|---|---|
| num | chemin | numéro de l'article (ex. 777) |
| asOf | query · option | date YYYY-MM-DD ; défaut = aujourd'hui |
| code | query · option | code visé ; défaut CGI |
{
"legiarti_id": "LEGIARTI000020549039",
"code": "CGI", "num": "777", "etat": "MODIFIE",
"date_debut": "2009-04-10", "date_fin": "2010-05-01",
"asOf": "2010-01-01", "version_label": "9.0",
"texte": "…", "url": "https://www.legifrance.gouv.fr/codes/article_lc/…",
"source": "Légifrance — Etalab 2.0"
}404 si aucune version n'est en vigueur à la date demandée (vacance de texte).
Recherche plein-texte
GET /v1/article
Recherche FTS5 (français, stemmée) restreinte par défaut aux versions en vigueur à asOf.
| Paramètre | Type | Description |
|---|---|---|
| q | query | requête (2–200 caractères) |
| asOf | query · option | date de validité ; défaut aujourd'hui |
| code | query · option | filtre par code |
| limit | query · option | 1–100 ; défaut 20 |
{
"total": 2, "asOf": "2026-06-04",
"results": [{ "legiarti_id": "LEGIARTI000033809289", "num": "784",
"extrait": "…<mark>donation</mark>…", "score": 8.4 }],
"source": "Légifrance — Etalab 2.0"
}Recherche sémantique
POST /v1/article/semantic
Recherche par le sens (embeddings), avec le même post-filtre temporel asOf. Corps JSON : query, topK (1–20), asOf?, code?.
curl -X POST https://api.legifrance.dev/v1/article/semantic \
-H "X-API-Key: bk_…" -H "Content-Type: application/json" \
-d '{"query":"abattement transmission entre vifs","topK":5}'Statut
GET /v1/health
Public, sans clé. Renvoie l'état du service.
Serveur MCP
Branche un assistant (Claude, ChatGPT, Cursor…) sur le droit en vigueur via le Model Context Protocol. Deux transports : HTTP (https://mcp.legifrance.dev/mcp) ou stdio (package npm).
{
"mcpServers": {
"legifrance": {
"command": "npx",
"args": ["@legifrance/mcp-server"],
"env": { "LEGIFRANCE_API_KEY": "bk_…" }
}
}
}Erreurs
- 401 — clé absente, inconnue ou révoquée
- 400 — requête invalide (ex. asOf mal formée)
- 404 — article ou version introuvable
- 429 / 402 — rate-limit / quota atteint
Le contrat complet est décrit dans /openapi.json (OpenAPI 3).