kvasir.legal
Hukuki yapay zekanızı doğrulanabilir Alman, Avusturya, İsviçre ve AB hukukuna dayandırın — alıntıları kaynak ve hassas derin bağlantılarla çözümleyin, arayın ve doğrulayın. 440 binden fazla yasa maddesi, Claude ve ChatGPT'de etkileşimli uygulamalar.
Dokümantasyon
Grounding API
Verifiable law
for your AI.
German, Austrian, Swiss and EU law as one canonical object per legal entity — norms, statutes, court decisions — with provenance, sub-units addressable down to the sentence, ready-made citations and the citation graph. Model-agnostic: call it over REST, or plug it into any agent as anMCP tool. You bring the reasoning; we bring the ground truth.
Base URL https://kvasir.legal · questions? [email protected] · new to grounding? Why legal AI needs a grounding layer →
Getting access. The API is in invite-only beta. Already have a kvasir account? Create a key in your dashboard →
Request access
Connect in 60 seconds
One endpoint — https://kvasir.legal/mcp — plugs kvasir into the AI you already work with. Your assistant then searches, resolves and verifies citations against the live corpus instead of answering from memory.
ChatGPT. Settings → Connectors → Advanced → Developer mode → add MCP server https://kvasir.legal/mcp with header X-API-Key → enable it in your chat's tools.
Claude — no key needed. Settings → Connectors → Add custom connector → paste https://kvasir.legal/mcp → sign in with your kvasir account → done. All six tools appear in every chat.
Microsoft 365 Copilot. Available firm-wide via Copilot Studio: your IT admin adds https://kvasir.legal/mcp once as a custom MCP action (API key asX-API-Key) — every lawyer in the tenant can then use it in Copilot chats.
Perplexity. On plans with connector support: Settings → Connectors → add an MCP connector with URL https://kvasir.legal/mcp and yourX-API-Key.
Le Chat (Mistral). Settings → Connectors → add MCP connector → URL https://kvasir.legal/mcp + X-API-Key.
Developer tools & agents. Claude Desktop (claude_desktop_config.json via mcp-remote), GitHub Copilot in VS Code (.vscode/mcp.json, OAuth automatic), Cursor and any MCP-capable agent: streamable-HTTP, URL https://kvasir.legal/mcp, header X-API-Key: kvk_… — or plain REST (interactive reference).
Authentication
Try it without a key: resolve, search andobject work keyless in sandbox mode — 20 requests per day, no signup. Just call them:
curl "https://kvasir.legal/api/v1/resolve?cite=§ 242 Abs. 1 BGB"
For real use, send an API key as a header (either form works):
X-API-Key: kvk_your_key
Authorization: Bearer kvk_your_key
Unauthenticated requests get 401. The machine-readable contract is public at/api/v1/schema (no key needed).
Connecting from Claude or another MCP client? Just addhttps://kvasir.legal/mcp as a connector — you'll be walked through anOAuth sign-in with your kvasir account instead of pasting a key. Keys and OAuth work side by side; both count against the same tier.
Quickstart
No key, no signup — this works right now (sandbox, 20/day):
With a key, fetch the full object:
curl -H "X-API-Key: kvk_…" \
"https://kvasir.legal/api/v1/object/norm:bund:BGB:242?include=all"
{
"uri": "norm:bund:BGB:242",
"canonical_uri": "norm:bund:BGB:242",
"kind": "norm",
"exists": true,
"identity": { "title": "§ 242 BGB", "subtitle": "Bundesrecht", "href": "/bgb/242" },
"provenance": { "quelle": "bund", "source": "gesetze-im-internet.de", "derived": false, "version": "" },
"content": { "label": "§ 242", "plain_text": "Der Schuldner ist verpflichtet …", "html": "…" },
"units": [
{ "path": "a1", "unit": "abs", "label": "1",
"text": "…", "citation": "§ 242 Abs. 1 BGB", "deeplink": "/bgb/242#a1" }
],
"relations": { "in": [ … cited-by … ], "out": [ … cites … ] }
}
Object URIs
Every legal object is addressed by a stable URI:
| Kind | URI | Example |
|---|---|---|
| Norm | norm:{quelle}:{kuerzel}:{norm_id} | norm:bund:BGB:242 |
| Statute | gesetz:{quelle}:{kuerzel} | gesetz:bund:BGB |
| Decision | dec:{quelle}:{source_id|celex} | dec:eu:62019CJ0311 |
| Concept | concept:{scheme}:{slug} | concept:eu:data-protection |
| Norm version | normversion:{id} | normversion:1234 |
quelle ∈ bund (federal), by (Bavaria), eu. Norm URIs are tolerant: norm:bund:BGB:242 resolves the same object as the raw slug; the response's canonical_uri gives the clean form.
Endpoints
Prefer clicking around? Try the interactive API reference. Building with an LLM? Point it at /llms.txt.
GET/api/v1/resolve?cite=§ 242 Abs. 1 BGB
Citation in, object out. Parses free-text citations (Art. 6 Abs. 1 lit. f DSGVO,C-311/18) — no URI grammar needed. Returns the pinpoint sub-unit and did-you-mean suggestions when something doesn't resolve.
POST/api/v1/verify — { "citations": [ … ≤200 ] } or { "text": "…" }
The hallucination check. Verify every citation in a drafted answer in one call: per-citation verified/unresolved status, canonical URI, source and pinpoint unit.
GET/api/v1/object/<uri>?include=…
One object. include is comma-separated; see below.
POST/api/v1/objects — { "uris": [ … ≤100 ], "include": "content" }
Batch-resolve many URIs in one call — e.g. to ground every citation in a draft at once.
GET/api/v1/search?q=…&kinds=norm,decision&quellen=bund,by,eu&limit=20&offset=0
Free-text search → ranked hits [{uri, kind, title, snippet, score}]. Filter by type (kinds: statutes vs case law) and jurisdiction (quellen) so every result slot counts. Paginates via offset.
GET/api/v1/schema — the contract, machine-readable (public).
GET/api/v1/openapi.json — full OpenAPI 3.1 spec (public). Import into Postman or generate a client SDK.
The include parameter
| Value | Adds |
|---|---|
| content | Full text + html + metadata (default). |
| units | Addressable sub-units with exact text, citation & deeplink — norm = paragraph/number/letter down to the individual sentence and half-sentence (a1.ba, a2.s1, a2.n3.h2), decision = Randnummer (r17). Fidelity-validated: only sub-units whose text verifies against the full text are returned; units_confidence reports the pass rate. |
| versions | A norm's earlier wordings as normversion: URIs (where tracked). |
| children | On a statute (gesetz:): the full table of contents — every norm as [{uri, label, section_path}] in order. Ask "which sections does the BDSG have?" in one call. |
| relations | Citation graph: what cites it / what it cites, instances, concepts. |
| authority | PageRank-style authority score within the graph. |
| all | Everything above. |
Use it as an MCP tool
Any MCP client calls the layer natively — endpoint https://kvasir.legal/mcp (OAuth or X-API-Key). Six tools:
| Tool | What it does |
|---|---|
| resolve_citation | Citation string → verifiable object + pinpoint unit. The preferred entry point. |
| verify_citations | Batch hallucination check (≤200) — run over every drafted answer. |
| search_legal | Semantic + full-text search → ranked canonical URIs. |
| get_legal_object | One URI → object with provenance, units, versions, relations. |
| get_legal_objects | Batch resolve (≤100 URIs). |
| legal_uri_grammar | URI scheme reference for constructing URIs. |
Rate limits & errors
Errors are JSON: { "error": "…" }.401 = missing/invalid key · 429 = rate limit or monthly quota exceeded ·exists:false means the URI matched nothing (not a server error). Per-key limits are set when your key is issued.