Bundesrecht. Beta

Suche nach Entscheiden des Bundesgerichts und Bundesstrafgerichts sowie nach allen Bundeserlassen aus Fedlex
API-Dokumentation

Judic stellt eine öffentliche RESTful API zur Verfügung. Die dokumentierten Endpunkte liefern JSON zurück und benötigen keine Authentifizierung. Basis-URL: https://judic.ch.

Die API befindet sich im Beta-Stadium. Änderungen an der Struktur sind möglich; die Versionierung (/api/v1/) schützt vor Breaking Changes in zukünftigen Versionen.

Betriebshinweise

Die Flask-App setzt keine applikationsseitigen CORS- oder Rate-Limit-Header. Falls eine Installation solche Regeln über Reverse Proxy oder Hosting-Infrastruktur ergänzt, sind sie nicht Teil dieses API-Vertrags.

Caching

Antworten enthalten Cache-Control-Header, die Clients und Proxies das Zwischenspeichern erlauben:

EndpointCache-Control
/api/v1/entscheidepublic, max-age=120 (2 Minuten)
/api/v1/entscheid/<decision_id>public, max-age=3600 (1 Stunde)
/api/v1/entscheid/<decision_id>/metadatapublic, max-age=3600 (1 Stunde)
/api/v1/statspublic, max-age=300 (5 Minuten)

GET /api/v1/gesetz/<identifier>

Übersicht zu einem Bundeserlass. identifier ist eine SR-Nummer (z. B. 311.0) oder eine bekannte Abkürzung aus fedlex_mapping.json (z. B. StGB).

Detailendpunkte: /structure?lang=de, /<article>, /<article>/wortlaut?lang=de, /<article>/cited-by, /<article>/materialien, /<article>/kommentar, /<article>/historie und /<article>/leading-cases. lang akzeptiert de, fr oder it.
EndpointBeschreibung
/api/v1/gesetz/311.0Metadaten, Fedlex-URLs und meistzitierte Artikel.
/api/v1/gesetz/311.0/structure?lang=deGliederung aus lokalem Fedlex-XML; Fallback auf OpenCaseLaw-Artikelliste.
/api/v1/gesetz/311.0/9/wortlaut?lang=deArtikelwortlaut aus Fedlex-Akoma-Ntoso; Fallback auf OpenCaseLaw.
/api/v1/gesetz/311.0/9/cited-by?limit=20&offset=0Entscheide, die den Artikel zitieren; gespeist aus decision_law_refs.

Beispiel-Anfragen

GET https://judic.ch/api/v1/gesetz/311.0
GET https://judic.ch/api/v1/gesetz/StGB/9/wortlaut?lang=de
GET https://judic.ch/api/v1/gesetz/311.0/9/cited-by?limit=20&sort=pub_date&order=desc

GET /api/v1/entscheide

Paginierte Liste der Bundesgerichtsentscheide, filterbar nach Sachgebiet, Erledigung und Veröffentlichungsdatum.

ParameterTypStandardBeschreibung
limitInteger20Einträge pro Seite (max. 500)
offsetInteger0Offset für Paginierung
fromYYYY-MM-DDVeröffentlichungsdatum >=
toYYYY-MM-DDVeröffentlichungsdatum <=
sachgebietStringTeilstring-Suche, case-insensitiv
erledigungStringTeilstring-Suche (z.B. Abweisung)
keywordStringMehrfach möglich, Themen-/Sachgebiet-Match
spracheDE/FR/ITMehrfach möglich
richter1/3/5Mehrfach möglich (Anzahl Richter)
sortStringpub_datepub_date oder decision_date
orderStringdescdesc oder asc

Beispiel-Anfragen

GET https://judic.ch/api/v1/entscheide?limit=5
GET https://judic.ch/api/v1/entscheide?sachgebiet=strafrecht&erledigung=Abweisung&limit=10
GET https://judic.ch/api/v1/entscheide?from=2025-01-01&to=2025-03-31&offset=20
GET https://judic.ch/api/v1/entscheide?sprache=DE&sprache=FR&richter=5

Antwort-Struktur

{
  "data": [
    {
      "reference": "8C_388/2024",
      "decision_date": "2024-11-15",
      "pub_date": "2025-01-08",
      "sachgebiet": "Öffentliches Recht",
      "themen": "Sozialversicherung; AHV; Beiträge",
      "erledigung": "Abweisung",
      "sprache": "DE",
      "anzahl_richter": 3,
      "ref": "bger_8C_388_2024",
      "api_url": "/api/v1/entscheid/bger_8C_388_2024",
      "viewer_url": "/entscheid/bger_8C_388_2024"
    }
  ],
  "meta": {
    "total": 1842,
    "limit": 5,
    "offset": 0,
    "returned": 5
  }
}

GET /api/v1/entscheid/<decision_id>

Vollständiges strukturiertes JSON eines einzelnen Entscheids: Metadaten, Besetzung, Vorinstanz, Regesten und der strukturierte Entscheidstext.

Referenz-Format — Präfix + normalisierte Referenz:
BGer: 1C_195/2026bger_1C_195_2026
BGE: 150 IV 462bge_150_iv_462
BStGer: SK.2025.23bstger_SK.2025.23 (Punkte bleiben erhalten)

Beispiel-Anfrage

GET https://judic.ch/api/v1/entscheid/bger_8C_388_2024

Antwort-Struktur (gekürzt)

{
  "meta": {
    "reference": "8C_388/2024",
    "date": "2024-11-15",
    "sprache": "DE",
    "abteilung": "I. sozialrechtliche Abteilung",
    "gegenstand": "AHV (Beiträge)",
    "erledigung": "Abweisung",
    "anzahl_richter": 3
  },
  "sachverhalt": { "abschnitte": [ ... ] },
  "erwaegungen": { "abschnitte": [ ... ] },
  "dispositiv": { "raw": "...", "punkte": [ ... ] },
  "referenzen": {
    "bge_zitiert": [{ "ref": "141 III 433", "url": "...", "linked": true }],
    "bger_zitiert": ["8C_100/2023"],
    "gesetze": [{ "text": "Art. 42 BGG", "url": "..." }]
  }
}

GET /api/v1/entscheid/<decision_id>/metadata

Gleiche Struktur wie /api/v1/entscheid/<decision_id>, aber ohne Volltext (abschnitte). Ideal für Listen und Vorschauen.

Beispiel-Anfrage

GET https://judic.ch/api/v1/entscheid/bger_8C_388_2024/metadata

GET /api/v1/stats

Statistiken über den Datenbankbestand: Gesamtanzahl Entscheide, Anzahl mit vollständigem Text, Datumsbereich und letzte Veröffentlichung.

Beispiel-Anfrage

GET https://judic.ch/api/v1/stats

Antwort

{
  "total_decisions": 18420,
  "with_full_text": 3241,
  "decision_date_range": {
    "earliest": "2000-01-15",
    "latest": "2026-04-17"
  },
  "last_published": "2026-04-19"
}

Best Practices

curl Beispiele

curl "https://judic.ch/api/v1/entscheide?limit=25&offset=0"
curl "https://judic.ch/api/v1/entscheide?from=2026-01-01&erledigung=Abweisung&sprache=DE"
curl "https://judic.ch/api/v1/entscheid/bger_8C_388_2024/metadata"

fetch Beispiel (Browser/Node)

const res = await fetch("https://judic.ch/api/v1/entscheide?limit=10");
if (!res.ok) {
  throw new Error(`Judic API ${res.status}`);
}
const payload = await res.json();
console.log(payload.meta, payload.data);