Resolve
Resolve a batch of citations — norms AND decisions — or say honestly why not.
added the decision half. Until it, an Aktenzeichen or an ECLI came back unsupported, so the Open Assistant's citation gate could existence-check the statutes a model cited and nothing else: decisions were shown to the reader without a verified check mark even when the corpus held them.
THE SHAPE IS ADDITIVE. Every key an existing consumer reads is unchanged and every norm citation resolves exactly as before (test_resolve_cases_1001.py pins both). New keys:
citation_kind norm | ecli | docket | fundstelle — which sort of identifier we read the input as. Named citation_kind and not kind because a norm result's kind is already the norm's own ref kind ('para'/'art'); this is the same collision law_status was given a distinct name for in, resolved the same way. case the decision, on a resolved decision citation preview its Leitsatz or opening text, ODbL notice attached candidates on ambiguous — every decision the citation can mean reason/note on a miss: the machine-readable class and the human sentence
/1016/1029 add four more, all on a resolved NORM result, all additive:
subdivisions the subdivision chain as written, values as lists — see _resolved_norm. sub is unchanged next to it. sub_text the FULL text of the cited Absätze, never truncated text_truncated whether text is the 300-character stub or the whole thing norms on an enumeration ('§§ 4, 7 KSchG'), every member, with enumeration naming the refs and any the corpus lacks
…plus one request field, include: text swaps a norm's stub for its full text, leitsatz swaps a decision's 294-character preview for the whole Leitsatz. Both default OFF, so a caller that sends what it always sent receives what it always received.
reason is the agent API's ResolveResult enum verbatim (not_in_corpus / outside_coverage / unparseable / ambiguous), so the specced /agent/v1/resolve is a re-shape of this payload rather than a second opinion about the same corpus.
status: "attested" is the fifth value and the newest. It means: the corpus does NOT hold this Aktenzeichen, and decisions the corpus DOES hold prove it exists anyway by citing it — "echt, Text nicht geführt". Before this key such a docket answered not_in_corpus, which an agent verifying a citation reads as "invented", and for the up to 204,384 dockets our own decisions cite twice or more that reading is wrong. ("Up to": that count is the nightly rollup's, and the answer is decided on the live citers still addressable now, which is the smaller number.)
It is a kind of MISS: there is no case and no preview, because no decision is being handed over, and reason stays not_in_corpus, because the corpus really was asked and really does not have it. A consumer branching only on reason therefore behaves exactly as it did. What rides along is the evidence:
{"status": "attested",
"citation_kind": "docket",
"reason": "not_in_corpus",
"citers": 7, # decisions of ours citing it, LIVE count
"court_hint": "BGH", # INFERRED from how the citations name it
"decided_hint": "1995-11-08", # INFERRED, may be null
"attested_by": [{"doknr", "court", "decided", "aktenzeichen", "url"}, …],
"sources": [{"source", "url", "court", "decided", "matched_on",
"full_text_available"}, …],
"note": "Kein Volltext … die Existenz … ist durch 7 zitierende
Entscheidungen des Bestands belegt."}
attested_by is at most five citing decisions, each addressable, so the claim can be checked rather than believed; citers is the true total beside it. The hints are read off citation prose and are leads, not metadata — the same field with the same caveat /v1/case's known_missing body carries, and the same record behind it. The threshold is two citers: one mention shares one text's typos, two independent ones are evidence about the world.
sources is /v1/case's field of the same name and the same rows: the OFFICIAL, free sources we matched to this docket, full_text_available marking the ones that carry the decision's text. [] when we have found it nowhere. Saying "we do not hold this text" while knowing where it is published would be a worse answer than the one this status replaced.
A DOCKET DECIDED INSIDE A JOINED JUDGMENT IS NOT ATTESTED, IT IS RESOLVED. The Court of Justice hands one judgment down under several case numbers and EUR-Lex catalogs it under the first, so C-403/01 names a decision we serve — under C-397/01. Those come back resolved with matched_by: "joined_case", the lead's own case payload, and a joined_with object naming the lead and quoting the evidence for the relation. That is the same answer /v1/case gives (as status: "joined_with") and the same answer already gives for the joined dockets stored as comma lists.
Aktenzeichen only. case_missing is keyed by docket, so an ECLI and a Fundstelle have nothing to look up and those branches are unchanged.
A decision citation is classified BEFORE the norm parser runs — see caseresolve.classify for why that order is the safe one and not the risky one.
Request
- Base URL: https://recht.nulegal.eu (the document declares no server; this is the origin it was published from)
- URL: https://recht.nulegal.eu/v1/resolve
- Auth: none declared
Request body
Response
Successful Response
Changes
No recorded changes to this operation across all 1 revision of this API.