Documentation développeur

Intégrez SmartLawyer
dans votre application.

API REST et protocole MCP. Accédez à 1 million d'arrêts, au Legal Graph et aux 128 000 articles de loi depuis Python, Node.js ou n'importe quel client HTTP.

⚡ Démarrage rapide

Votre première requête
en moins de 2 minutes.

Obtenez votre clé API, lancez une recherche, récupérez une fiche. Tout est REST — aucune dépendance requise.

1
Obtenez votre clé API
Connectez-vous sur smartlawyer.ai/settings → Paramètres → Générer une clé API. Elle commence par sk-sl-
2
Lancez une recherche
bash
curl -X POST https://smartlawyer.ai/api/search \
  -H "X-API-Key: sk-sl-votre-cle" \
  -H "Content-Type: application/json" \
  -d '{"query": "clause de non-concurrence faute grave", "limit": 5}'
3
Récupérez une fiche complète
bash
curl https://smartlawyer.ai/api/fiche/22-18.295 \
  -H "X-API-Key: sk-sl-votre-cle"
🔐 Authentification

Trois méthodes
d'authentification.

Passez votre clé API via header, query param ou Bearer token. La priorité est dans cet ordre.

bash
# 1. Header X-API-Key (recommandé)
curl -H "X-API-Key: sk-sl-votre-cle" ...

# 2. Query parameter (Claude.ai custom connector)
https://mcp.smartlawyer.ai/mcp?api_key=sk-sl-votre-cle

# 3. Bearer token (OAuth)
curl -H "Authorization: Bearer sk-sl-votre-cle" ...
💡 Pour les connecteurs Claude.ai, utilisez le format ?api_key= directement dans l'URL MCP — c'est la méthode la plus simple.
🐍 Python

Intégration MCP
avec Python.

Utilisez le SDK MCP officiel pour connecter SmartLawyer à votre agent Python. Compatible LangChain, LlamaIndex, smolagents et tout framework utilisant MCP.

1
Installer le SDK MCP
bash
pip install mcp
2
Connexion et liste des tools
Python — connexion MCP
import asyncio
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client

MCP_URL = "https://mcp.smartlawyer.ai/mcp?api_key=sk-sl-votre-cle"

async def main():
    async with streamablehttp_client(MCP_URL) as (read, write, _):
        async with ClientSession(read, write) as session:
            await session.initialize()

            # Lister les 13 tools disponibles
            tools = await session.list_tools()
            for tool in tools.tools:
                print(f"- {tool.name}: {tool.description[:60]}...")

asyncio.run(main())
3
Recherche sémantique
python
async def recherche_jurisprudence(session, query: str):
    result = await session.call_tool(
        "search_jurisprudences",
        arguments={{
            "query": query,
            "domaine": "droit social",
            "limit": 10,
            "include_graph": True,
        }}
    )
    import json
    data = json.loads(result.content[0].text)
    for arr in data.get("results", []):
        print(f"[{{arr['score']:.2f}}] {{arr['number']}} — {{arr.get('probleme_droit', '')[:80]}}")
4
Vérifier la validité d'un arrêt
python
async def verifier_validite(session, numero: str):
    result = await session.call_tool(
        "superseded_chain",
        arguments={{"identifier": numero}}
    )
    import json
    data = json.loads(result.content[0].text)
    if data["is_valid"]:
        print(f"✓ Arrêt {{numero}} toujours valide")
    else:
        print(f"✗ Renversé — chaîne: {{len(data.get('chain', []))}} arrêts")
        for step in data.get("chain", []):
            print(f"  → {{step['number']}} ({{step['date'][:10]}})")
🔗 Compatible avec smolagents (Hugging Face), LangChain (via MCPToolkit) et LlamaIndex. Consultez la documentation de chaque framework pour l'intégration MCP.
🟨 Node.js / TypeScript

Intégration MCP
avec Node.js.

Utilisez le SDK MCP officiel TypeScript. Compatible avec tous les frameworks Node.js et les runtimes Deno / Bun.

1
Installer le SDK
bash
npm install @modelcontextprotocol/sdk
2
Connexion et recherche
TypeScript
import {{ Client }} from "@modelcontextprotocol/sdk/client/index.js";
import {{ StreamableHTTPClientTransport }} from "@modelcontextprotocol/sdk/client/streamableHttp.js";

const API_KEY = "sk-sl-votre-cle";
const MCP_URL = `https://mcp.smartlawyer.ai/mcp?api_key=${{API_KEY}}`;

const client = new Client({{ name: "mon-app", version: "1.0.0" }});
const transport = new StreamableHTTPClientTransport(new URL(MCP_URL));

await client.connect(transport);

// Recherche sémantique
const result = await client.callTool({{
  name: "search_jurisprudences",
  arguments: {{
    query: "responsabilité civile du notaire défaut de conseil",
    domaine: "droit civil",
    limit: 5,
  }},
}});

const data = JSON.parse(result.content[0].text);
console.log(`${{data.total}} décisions trouvées`);
data.results.forEach(arr => {{
  console.log(`[${{arr.score.toFixed(2)}}] ${{arr.number}} — ${{arr.probleme_droit?.slice(0, 80)}}`);
}});

await client.close();
3
Legal Graph d'un arrêt
typescript
const graphResult = await client.callTool({{
  name: "get_legal_graph",
  arguments: {{ identifier: "22-18.295" }},
}});

const graph = JSON.parse(graphResult.content[0].text);
console.log(`Arrêt valide: ${{graph.is_valid}}`);
console.log(`Citations reçues: ${{graph.cited_by_count}}`);
graph.qualified_citations?.forEach(c => {{
  console.log(`  → ${{c.type}}: ${{c.number}}`);
}});
📋 Fiches & Legal Graph

Fiche complète
et navigation dans le graphe.

Récupérez une fiche par numéro de pourvoi, ECLI ou UUID. Naviguez dans le Legal Graph : citations reçues, lignée procédurale, revirements.

Python — fiches & graphe
# Fiche complète
resp = httpx.get(
    "https://smartlawyer.ai/api/fiche/22-18.295",
    headers={{"X-API-Key": "sk-sl-votre-cle"}}
)
fiche = resp.json()
print(fiche["probleme_droit"])    # Question tranchée par la Cour
print(fiche["solution"])          # Cassation / Rejet / ...
print(fiche["is_valid"])          # True / False

# Vérifier si un arrêt a été renversé
resp = httpx.get(
    "https://smartlawyer.ai/api/fiche/17-19.860/superseded",
    headers={{"X-API-Key": "sk-sl-votre-cle"}}
)
chain = resp.json()
print(f"Valide: {{chain['is_valid']}}, chaîne: {{len(chain.get('chain', []))}} arrêts")

# Citations reçues (qui cite cet arrêt ?)
resp = httpx.get(
    "https://smartlawyer.ai/api/fiche/16-22.224/cited-by?limit=20",
    headers={{"X-API-Key": "sk-sl-votre-cle"}}
)
cited = resp.json()
print(f"Cité par {{cited['total']}} décisions, importance_score: {{cited['importance_score']}}")
TypeScript — fiche & lignée
// Node.js — fiche + Legal Graph
const headers = {{ "X-API-Key": "sk-sl-votre-cle" }};

const fiche = await fetch(
  "https://smartlawyer.ai/api/fiche/22-18.295",
  {{ headers }}
).then(r => r.json());

console.log(fiche.probleme_droit);

// Lignée procédurale complète
const lineage = await fetch(
  "https://smartlawyer.ai/api/fiche/22-18.295/lineage",
  {{ headers }}
).then(r => r.json());

lineage.steps?.forEach(step => {{
  console.log(`${{step.stage}}: ${{step.juridiction}} (${{step.date?.slice(0,10)}})`);
}});
📖 Articles de loi

128 000+ articles
de tous les codes français.

Recherche sémantique ou accès direct par code et numéro. Texte intégral en vigueur avec métadonnées Légifrance.

Python — articles de loi
# Recherche sémantique d'articles
resp = httpx.post(
    "https://smartlawyer.ai/api/articles/search",
    headers={{"X-API-Key": "sk-sl-votre-cle"}},
    json={{
        "query": "obligation de sécurité employeur accident travail",
        "code": "Code du travail",
        "limit": 5,
    }}
)
articles = resp.json()
for art in articles.get("results", []):
    print(f"{{art['code']}} {{art['numero']}}: {{art['titre']}}")

# Accès direct à un article
resp = httpx.get(
    "https://smartlawyer.ai/api/article?code=Code+du+travail&article=L1235-3",
    headers={{"X-API-Key": "sk-sl-votre-cle"}}
)
article = resp.json()
print(article["texte"])  # Texte intégral en vigueur

# Toutes les décisions citant un article
resp = httpx.post(
    "https://smartlawyer.ai/api/search-by-article",
    headers={{"X-API-Key": "sk-sl-votre-cle"}},
    json={{"code": "travail", "article": "L1235-3", "limit": 20}}
)
print(f"{{resp.json()['total']}} décisions citent L1235-3")
⚠️ Codes d'erreur

Réponses d'erreur
et comment les gérer.

Toutes les erreurs retournent un JSON avec un champ error.

Code HTTPSignificationSolution
401Clé API manquanteAjoutez le header X-API-Key
403Clé API invalide ou expiréeRégénérez votre clé sur smartlawyer.ai/settings
404Arrêt ou article non trouvéVérifiez le numéro de pourvoi ou l'ECLI
422Paramètre invalideVérifiez les valeurs avec get_filters_tool
429Quota dépasséAttendez ou passez à un abonnement supérieur
500Erreur serveurRéessayez ou contactez contact@smartlawyer.ai
python
import httpx

try:
    resp = httpx.get(
        "https://smartlawyer.ai/api/fiche/NUMERO-INVALIDE",
        headers={{"X-API-Key": "sk-sl-votre-cle"}}
    )
    resp.raise_for_status()
    data = resp.json()
except httpx.HTTPStatusError as e:
    print(f"Erreur {{e.response.status_code}}: {{e.response.json().get('detail')}}")
📊 Limites & quotas

Limites d'utilisation
par niveau d'accès.

Les quotas s'appliquent par clé API et se réinitialisent quotidiennement.

NiveauRecherches / jourRésultats maxMCP
Sans compte310
Compte gratuit510
Abonné (4,99 €/mois)Illimité20
⚠️ La limite de 20 résultats par requête est fixe quel que soit le niveau. Pour paginer, utilisez les filtres (date, domaine, juridiction) pour affiner vos requêtes.
Une question technique ?
Notre équipe répond sous 24h aux questions d'intégration.
Nous contacter →