Rechtspraak
2 routes under /api/rechtspraak.
POST/api/rechtspraak
Query Dutch case law (Rechtspraak) citation networks directly from PostgreSQL (`rs_document`, `rs_edge`, `rs_document_text`). Same response envelope as `/api/network` — the frontend graph code targets either with minimal branching — with extra filters unlocked by the migrated schema (typed appeal relations, publication-date windows, opendata status, BWB-resource and journal-abbr lookups). All parameters are wrapped inside an `arguments` object in the request body.
Request parameters (inside arguments)
| Field | Type | Notes |
|---|---|---|
degreesSource | int | Required. 0 to 5. Levels to traverse incoming citations (cited_by). |
degreesTarget | int | Required. 0 to 5. Levels to traverse outgoing citations (cites). |
eclis | string[] | Optional. ECLI identifiers. When supplied alone, the endpoint uses an ECLI fast path that bypasses the full builder. |
keywords | string[] | Optional. Full-text terms; searches the summary and the fulltext_tsv GIN index. Multi-word entries use phraseto_tsquery. |
articles | string | Optional. Article reference query string; matched against summary, legal_provisions, and fulltext. |
selectedLaws | string[] | Optional. Law items in format "BWBx123|456" (bwb_id|bwb_label_id). Resolved to an ECLI whitelist via LIDO. |
selectedLawsIntersect | boolean | Optional. If true, require all selected laws (AND). Default: false (OR). |
docTypes | string[] | Optional. "DEC" (Uitspraak) and/or "OPI" (Conclusie). |
instances | string[] | Optional. Court instances (e.g. "Hoge Raad", "Raad van State"). |
domains | string[] | Optional. Domain labels. Matched against the domains TEXT[] column via && overlap (GIN-friendly). |
procedureTypes | string[] | Optional. rs_document.procedure_type (e.g. "Cassatie", "Hoger beroep"). |
languages | string[] | Optional. rs_document.language (e.g. "nl"). |
jurisdictionCountries | string[] | Optional. rs_document.jurisdiction_country. |
zaaknummers | string[] | Optional. Docket numbers; substring-matched against rs_document.zaaknummer. |
bwbResources | string[] | Optional. Filter via rs_document_law_reference.bwb_resource. |
journalAbbrs | string[] | Optional. Journal abbreviations (e.g. "NJ", "AB"); filter via rs_document_publication. |
relationTypes | string[] | Optional. Restrict edges to these rs_edge.relation_type values (e.g. "cassatie", "hogerBeroep"). |
edgeSources | string[] | Optional. Restrict edges to these rs_edge.source tags (e.g. "body-cite", "formal-relation", "replaces"). |
includeDepublicated | string | Optional. "public" (default), "depublicated", or "all". Filters on rs_document.opendata_status. |
dateStart | string | Optional. YYYY-MM-DD. Lower bound on date_decision. Defaults to 1900-01-01. |
dateEnd | string | Optional. YYYY-MM-DD. Upper bound on date_decision. Must not be in the future. |
datePublishedStart | string | Optional. YYYY-MM-DD. Lower bound on rs_document.date_published. |
datePublishedEnd | string | Optional. YYYY-MM-DD. Upper bound on rs_document.date_published. |
attributesToFetch | string | Optional. "ALL", "ID", "MINIMAL", "NETWORKSTATS", "QUERYHANDLER", "KEYWORDSEARCH", "ARTICLESEARCH". |
onlyCaseIds | boolean | Optional. If true, return only ECLI identifiers without full case data. |
isSubgraph | boolean | Optional. If true, only return edges between the supplied eclis. |
pageSize | int | Optional. 1 to 1000 when cursor pagination is requested. |
cursor | string | Optional. Opaque cursor token from a previous response. |
engine / dataSources | any | Optional. Accepted as no-ops for compatibility with /api/network request bodies. The endpoint always reads from rs_*. |
Response node fields (nodes[].data)
| Field | Description |
|---|---|
isResult | "True" for direct search results, "False" for expanded citation nodes. |
ecli | ECLI identifier. |
date_decision | Decision date (ISO). |
date_published | Publication date (ISO). |
date_issued / date_modified | Issue / modification timestamps from the source XML. |
document_type | "Uitspraak" or "Conclusie". |
instance | Court instance. |
domains | Array of legal domain strings. Synthetic "<top>-Algemeen/Overig/Niet-gelabeld" leaves are rendered for parity with the legacy /api/network response. |
jurisdiction_country | e.g. "NL". |
procedure_type | Procedure type (e.g. "Cassatie"). |
zaaknummer | Docket number. |
summary | Case summary text. |
legal_provisions | Array of statute labels aggregated from rs_v_document_legal_provisions (mixes source-faithful opschrift values with canonical formal labels). |
vindplaatsen / subject_uris | Publication metadata and subject taxonomy URIs from the source XML. |
opendata_status | "public" or "depublicated". |
cites | Array of cited ECLI identifiers (from rs_edge). |
cited_by | Array of ECLI identifiers citing this case (from rs_edge). |
url_publication | Link to the original publication. |
Response edge fields (edges[])
| Field | Description |
|---|---|
source / target | Endpoint ECLIs. |
relation_type | Optional typed-relation label (e.g. "cassatie", "hogerBeroep"). |
edge_source | Provenance: "body-cite", "formal-relation", or "replaces". |
Examples
Exact ECLI (fast path)
{ "arguments": { "eclis": ["ECLI:NL:HR:2020:1097"], "degreesSource": 0, "degreesTarget": 0 } }
Typed-edge filter
{ "arguments": { "eclis": ["ECLI:NL:HR:2020:1097"], "degreesSource": 1, "degreesTarget": 1, "relationTypes": ["cassatie", "hogerBeroep"], "edgeSources": ["formal-relation"] } }
Publication-date window + BWB filter
{ "arguments": { "bwbResources": ["BWBR0001840"], "datePublishedStart": "2020-01-01", "datePublishedEnd": "2020-12-31", "docTypes": ["DEC"], "degreesSource": 0, "degreesTarget": 0, "pageSize": 50 } }
Response
{ "nodes": [ { "id": "ECLI:NL:HR:2020:1097", "data": { "isResult": "True", "ecli": "ECLI:NL:HR:2020:1097", "date_decision": "2020-06-23", "date_published": "2020-06-23", "document_type": "Uitspraak", "instance": "Hoge Raad", "domains": ["Strafrecht", "Strafrecht-Algemeen/Overig/Niet-gelabeld"], "jurisdiction_country": "NL", "procedure_type": "Cassatie", "opendata_status": "public", "cites": ["ECLI:NL:HR:2018:..."], "cited_by": ["ECLI:NL:RBAMS:2021:..."], "url_publication": "https://uitspraken.rechtspraak.nl/..." } } ], "edges": [ { "id": "ECLI:NL:HR:2020:1097_ECLI:NL:HR:2018:...", "source": "ECLI:NL:HR:2020:1097", "target": "ECLI:NL:HR:2018:...", "relation_type": "cassatie", "edge_source": "formal-relation" } ], "message": "", "limits": { "queryResultLimit": 10000, "responseNodeLimit": 5000, "responseEdgeLimit": 30000, "pageSizeDefault": 1000, "pageSizeMax": 1000 }, "graph": { "paginationRequested": false, "graphComplete": true, "statisticsSafe": true, "partialReasons": [] } }
POST/api/rechtspraak/text
Fetch full-text Rechtspraak judgments by ECLI from the migrated PostgreSQL `rs_document_text` table. Sibling of `/api/network/text` but reads from Postgres instead of Elasticsearch. Supports single or batch retrieval. Use JSON body.
Parameters
| Field | Type | Notes |
|---|---|---|
ecli | string | string[] | Required. String or array in JSON body. Max 200 ECLIs per request. |
Response fields
| Field | Description |
|---|---|
ecli | The requested ECLI identifier. |
full_text | Complete judgment text from rs_document_text.fulltext. May be null when no text is stored. |
full_text_available | Boolean flag indicating whether full text is present. |
- Single ECLI returns one object; multiple ECLIs return an array of objects. ECLIs without an
rs_documentrow are silently dropped from the array response (single-ECLI form returns404). - When
full_textisnull, the entry also includes amessagefield explaining the absence.
Examples
POST (single)
{ "ecli": "ECLI:NL:HR:2020:1097" }
POST (batch)
{ "ecli": [ "ECLI:NL:HR:2020:1097", "ECLI:NL:PHR:2020:739" ] }
Response (single)
{ "ecli": "ECLI:NL:HR:2020:1097", "full_text": "HOGE RAAD DER NEDERLANDEN\nSTRAFKAMER\n...", "full_text_available": true }
Response (no text)
{ "ecli": "ECLI:NL:HR:2020:1097", "full_text": null, "full_text_available": false, "message": "Full text not available for this ECLI." }