[ blog · use-case ]11 min read

Citatie-gefundeerde retrieval van Britse rechtspraak na Ayinde v Haringey

Sarah ChoyGepubliceerd op 3 mei 202611 min leestijd
Citatie-gefundeerde retrieval van Britse rechtspraak na Ayinde v Haringey

Ayinde v Haringey veranderde de rekensom voor Britse juridische AI van de ene op de andere dag. Een barrister haalde vijf nepzaken aan die door een LLM waren gegenereerd en werd doorverwezen naar de Bar Standards Board. Gehallucineerde citaties hebben nu tuchtrechtelijke gevolgen. Dit is de ontwikkelaarsgids voor het bouwen van citatie-gefundeerde retrieval van Britse rechtspraak — TNA Find Case Law, legislation.gov.uk, het parsen van neutrale citaties en hoe je het aansluit op een werkende agent.

TL;DR

  • Ayinde v Haringey [2025] EWHC 1383 (Admin) maakte van gehallucineerde jurisprudentiecitaties een tuchtrechtelijke kwestie, niet louter een kwaliteitsprobleem.
  • De voorwaarden van BAILII beperken programmatische bulktoegang; de Find Case Law-dienst van The National Archives is de legitieme API voor uitspraken van Engeland & Wales.
  • legislation.gov.uk heeft een stabiele Developer API met point-in-time-toegang — onmisbaar voor compliancewerk waar 'van kracht op 30 juni 2024' een echte query is.
  • De 'Hallucination-Free?'-studie van Stanford HAI toonde aan dat Westlaw en Lexis+ AI nog steeds 17–33% van de tijd hallucineren — citatiefundering is het architectonische antwoord, geen leverancierskeuze.
  • API Pick UK Legal Search verpakt semantische retrieval over rechtspraak en primaire wetgeving in één POST — 60 credits per aanroep.

De zaak die de rekensom veranderde

Op 6 juni 2025 sprak de Divisional Court van de King's Bench Division twee uitspraken uit in één beslissing — Ayinde v The London Borough of Haringey en Al-Haroun v Qatar National Bank QPSC, neutrale citatie [2025] EWHC 1383 (Admin). In beide gevallen had de raadsman stukken ingediend waarin autoriteiten werden aangehaald die niet bestonden; in Ayinde vijf verzonnen zaken. De rechtbank stelde een schending van beroepsplichten vast en verwees de beoefenaars respectievelijk naar de BSB en de SRA.

Binnen 48 uur had elke Britse legal-tech-roadmap een nieuw punt bovenaan staan: citatiefundering. Niet als een kwaliteitsdetail, maar als een regulatoire noodzaak. De 'Hallucination-Free?'-studie van Stanford HAI (Magesh et al., mei 2024) had al aangetoond dat de toonaangevende leverancierstools — Lexis+ AI, Westlaw AI — 17–33% van de tijd citaties hallucineren op benchmarkte queries. Ayinde maakte van die academische bevinding een complianceprobleem.

Voor ontwikkelaars die AI-functies inbouwen in Britse juridische producten is de architectonische les duidelijk: retrieval moet uit gezaghebbende bronnen komen, citaties moeten verifieerbaar zijn tegen de bron, en het systeem moet weigeren te antwoorden wanneer het een reactie niet kan funderen. Al het andere is een doorverwijzing naar een toezichthouder die op het punt staat te gebeuren.

Dit is de praktische ontwikkelaarsgids om dit goed te doen: welke API's je moet gebruiken, wat hun valkuilen zijn en hoe je ze aansluit op een werkende agent.

De gezaghebbende bronnen

1. National Archives Find Case Law

Beheerd door The National Archives (TNA). Dekt rechterlijke uitspraken sinds april 2003 van de High Court, Court of Appeal, UK Supreme Court, Privy Council en diverse tribunals. Documenten in de Akoma Ntoso (LegalDocML) XML-standaard. Openbare API op caselaw.nationalarchives.gov.uk; bulkdatafeed via een aan goedkeuring onderhevige aanvraag voor doeleinden van "computationele analyse".

Sterke punten: gezaghebbende bron voor de rechtspraak van Engeland & Wales, gestructureerde XML behoudt de structuur van de uitspraak (paragraafnummers, citaties, koppen), de voorwaarden van de Open Government Licence staan hergebruik met bronvermelding toe. Zwakke punten: beperkte dekking vóór 2003, aanvraag vereist voor de bulkfeed, LegalDocML is zwaar te parsen als je nog nooit juridische XML hebt aangeraakt.

2. Developer API van legislation.gov.uk

Beheerd door TNA. Dekt de Britse primaire wetgeving (Acts of Parliament), statutory instruments en de equivalenten voor Noord-Ierland / Schotland / Wales. Cruciaal is dat het point-in-time-queries ondersteunt: 'hoe zag deze bepaling eruit op 1 april 2018'.

Sterke punten: stabiel, goed gedocumenteerd, point-in-time-toegang, OGL-gelicentieerd. Zwakke punten: het schema (CLML) is een ding op zich; niet alle wijzigingen worden uniform door de tijd heen teruggevolgd; het model van de datum van inwerkingtreding kan je verrassen.

3. BAILII (alleen-lezen via het menselijke web)

Al lang bestaande aggregator van juridische informatie. Cruciaal voor rechtsgebieden en documenttypes die Find Case Law niet dekt (oudere uitspraken, Schots / Noord-Iers materiaal, sommige beslissingen van tribunals). Bulkscraping is beperkt door de voorwaarden van BAILII. Behandel het als een voor mensen leesbare reserve, niet als een API.

Semantisch zoeken in de Britse rechtspraak en primaire wetgeving in één POST-endpoint. JSON erin / JSON eruit, 60 credits per aanroep, alleen bij succes gefactureerd. Geeft titel, neutrale citatie, bron-URL en snippet terug, gerangschikt op semantische relevantie. Ontworpen voor tool calling door AI-agents.

Naast elkaar

Bronnen op het moment van schrijven. Bevestig de licentievoorwaarden bij TNA vóór een commerciële uitrol.
Find Case Lawlegislation.gov.ukAPI Pick UK Legal Search
DekkingE&W-rechtspraak sinds 2003Britse wetten + SIs, point-in-timeRechtspraak + wetgeving, semantisch
FormaatAkoma Ntoso XMLCLML XML + JSON / AtomJSON, snippet al voorgevormd
ZoekenTrefwoordTrefwoord + structureelSemantisch
AuthGeen voor het openbare deel; afgeschermde bulkfeedGeenx-api-key
LicentieOpen Government LicenceOpen Government LicenceAPI Pick TOS
GeschiktheidBron van waarheid van compliance-niveauWetten opzoeken, point-in-time-queriesRetrieval voor AI-agent, RAG-laag

De architectuur die Ayinde overleeft

De minimaal levensvatbare citatie-gefundeerde stack:

Question → [LLM agent]
              ↓ tool_use(uk_legal_search)
            [API Pick UK Legal Search] → ranked authorities
              ↓ tool_use(extract_urls)
            [API Pick URL Extract] → full judgment / statute body
              ↓ Agent reads, drafts answer
              ↓ Citation-required prompt rule
          Answer with [Neutral Citation, Section/Paragraph]
              ↓ Final verification pass
          Refuse if citation can't be matched in extracted text

De verificatiestap is waar de meeste teams falen. Het is niet genoeg om het model te vragen 'vermeld je bronnen' — je moet programmatisch verifiëren dat elke aangehaalde autoriteit voorkomt in de geëxtraheerde tekst. Als dat niet zo is, weiger het antwoord of leg het voor aan een menselijke toetsing.

Werkende code

import re, requests
from anthropic import Anthropic

KEY = "pk_yourkey"
client = Anthropic()

def fetch_tool(path: str) -> dict:
    return requests.get(f"https://www.apipick.com{path}/tool-schema").json()["claude"]

TOOLS = [
    fetch_tool("/api/search/uk-legal"),
    fetch_tool("/api/extract"),
]

SYSTEM = """You are a UK legal research assistant. You answer questions about
England & Wales case law and UK primary legislation using the tools available.

Rules — non-negotiable:

1. Use uk_legal_search to find authorities relevant to the question.
2. For authorities you intend to cite, use extract_urls to retrieve the
   full text. Do not cite anything you have not extracted.
3. Cite every legal proposition with a neutral citation in standard form:
   [YYYY] EWHC|EWCA|UKSC NNN (Court), §[paragraph] — for cases.
   Section N(M) of the [Act Name] YYYY — for statutes, with point-in-time
   noted if relevant.
4. If the search returned no relevant authority, or the relevant text was
   not extracted, say so explicitly: "I could not retrieve a sufficient
   authority for this question. Please escalate to qualified counsel."
   Do not infer from training-data knowledge.
5. Distinguish ratio from obiter where it matters. Note when an authority
   is first instance, appellate, or Supreme Court.
6. For legislation, default to the in-force version. State the date you used.
7. This output is informational retrieval, not legal advice."""

def call_tool(b):
    paths = {"uk_legal_search": "/api/search/uk-legal", "extract_urls": "/api/extract"}
    r = requests.post(
        f"https://www.apipick.com{paths[b.name]}",
        json=b.input,
        headers={"x-api-key": KEY},
        timeout=60,
    )
    return {"type": "tool_result", "tool_use_id": b.id,
            "content": r.text, "is_error": r.status_code != 200}

NEUTRAL_CITATION = re.compile(r"\[(\d{4})\]\s+(EWHC|EWCA|UKSC)\s+\d+")

def verify_citations(answer: str, extracted_text: str) -> list[str]:
    """Return list of citations in the answer that don't appear in extracted text."""
    cites = NEUTRAL_CITATION.findall(answer)
    return [
        f"[{year}] {court}" for year, court in cites
        if f"[{year}] {court}" not in extracted_text
    ]

def legal_research(question: str) -> str:
    msgs = [{"role": "user", "content": question}]
    extracted_buffer = ""

    while True:
        r = client.messages.create(
            model="claude-sonnet-4-6",
            max_tokens=4096,
            system=SYSTEM,
            tools=TOOLS,
            messages=msgs,
        )
        msgs.append({"role": "assistant", "content": r.content})

        if r.stop_reason == "end_turn":
            answer = "\n".join(b.text for b in r.content if b.type == "text")
            unverified = verify_citations(answer, extracted_buffer)
            if unverified:
                return (
                    "REFUSED: the answer cited authorities that were not retrieved. "
                    f"Unverified: {unverified}. Escalate to qualified counsel."
                )
            return answer

        if r.stop_reason == "tool_use":
            results = []
            for b in r.content:
                if b.type != "tool_use":
                    continue
                tr = call_tool(b)
                if b.name == "extract_urls":
                    extracted_buffer += tr["content"]
                results.append(tr)
            msgs.append({"role": "user", "content": results})

print(legal_research(
    "What is the test for breach of duty by a public authority "
    "post Roberts v Soldiers, Sailors, Airmen and Families Association?"
))

Drie dingen die deze code doet en die luie implementaties niet doen: (1) hij haalt de volledige tekst van elke aangehaalde autoriteit via extract op voordat hij erop vertrouwt, (2) hij verwerpt antwoorden waarvan de neutrale-citatiestrings niet daadwerkelijk in enige opgehaalde tekst voorkomen, (3) hij bakt de weigering 'Ik kon geen toereikende autoriteit ophalen' in de system prompt zodat het model een elegante uitweg heeft wanneer de retrieval mislukt.

Kostenplafond

Een typische juridische onderzoeksaanroep:

  • 1 zoekaanroep — 60 credits (~$0.06)
  • 1 extract-aanroep die 2–4 autoriteiten dekt — 4–8 credits (~$0.004–$0.008)
  • ~6.000 input- + 1.500 output-tokens van Claude — ~$0.05

Ronde cijfers: ~$0.12 per onderzocht antwoord met citaties. Bij 100 vragen/dag voor een klein intern juridisch team is dat $12/dag — ruim onder de kosten van welk commercieel legal-tech-abonnement dan ook, en jij houdt de controle over het audittrail.

Waar dit zich laat veralgemenen

Het architectonische patroon van 'citatiefundering' geldt niet alleen voor Britse rechtspraak — het is hetzelfde patroon dat RAG over SEC-filings betrouwbaar maakt voor investeringsdue diligence en dat een agent voor wetenschappelijke literatuur in staat stelt gehallucineerde paperreferenties te vermijden. Drie regels verenigen ze:

  • Eerst ophalen, dan genereren. Laat het model nooit een citatie produceren die niet in de opgehaalde context stond.
  • Verifieer deterministisch. Een regex over de geëxtraheerde tekst is goedkoop en vangt de meeste verzinsels.
  • Weiger op elegante wijze. Train de system prompt om "Ik kan niet betrouwbaar antwoorden" te zeggen voordat je het model traint om behulpzaam te zijn.

Ayinde was het moment waarop deze regels van 'goede engineeringpraktijk' overgingen in 'de enige manier om Britse juridische AI uit te brengen zonder je gebruikers voor de BSB te zetten'. API Pick UK Legal Search is de bouwsteen van de zoeklaag; de rest is aan jou om aan te sluiten.

Veelgestelde vragen

Wat is er precies gebeurd in Ayinde v Haringey?

In juni 2025 stelde de High Court (Ritchie J) vast dat de raadsman een skeleton argument had ingediend waarin vijf niet-bestaande, door een LLM gegenereerde zaken werden aangehaald, plus nog een verzonnen autoriteit door een aparte beoefenaar in Al-Haroun v Qatar National Bank. De uitspraken werden samen uitgesproken als Ayinde v Haringey & Al-Haroun v Qatar National Bank [2025] EWHC 1383 (Admin). De rechtbank verwees de beoefenaars naar respectievelijk de Bar Standards Board en de Solicitors Regulation Authority. De uitspraak is nu de standaardautoriteit die wordt aangehaald telkens als 'AI-hallucinatie in de juridische praktijk' in het Verenigd Koninkrijk ter sprake komt.

Mag ik BAILII scrapen?

Nee. De voorwaarden van BAILII beperken programmatische bulktoegang, en de exploitant is hier expliciet over geweest — zie de documentatie van het Transparency Project over het standpunt van BAILII. De legitieme route is de Find Case Law-dienst van The National Archives voor uitspraken van Engeland & Wales, die een openbare API heeft en een aparte, via aanvraag afgeschermde bulkdatafeed.

Wat is het verschil tussen Find Case Law en legislation.gov.uk?

Find Case Law (caselaw.nationalarchives.gov.uk) dekt rechterlijke uitspraken — de beslissingen van de EWHC, EWCA, UKSC en tribunals. legislation.gov.uk dekt primaire en secundaire wetgeving: Acts of Parliament, statutory instruments en (cruciaal voor compliancewerk) historische point-in-time-versies. Een volledige Britse juridische RAG-stack heeft beide nodig.

Waarom is point-in-time-wetgeving belangrijk voor AI-agents?

De meeste juridische vragen gaan over wat de wet was op een specifieke datum — de dag van een vermeende inbreuk, de datum waarop een contract werd getekend, het moment waarop een overheidsinstantie een besluit nam. Het teruggeven van de huidige versie van wetgeving levert verkeerde antwoorden op voor elke historische vraag. Endpoints in de stijl van /data.feed?type=ukpga&prospective=true van legislation.gov.uk lossen dit op. De meeste juridische AI-tools die data hallucineren falen omdat ze dit niet hebben aangesloten.

Geldt deze output als juridisch advies?

Nee. Output van welke retrieval-API dan ook (ook de onze) is informatieve retrieval, geen juridisch advies. Solicitors en barristers die in Engeland & Wales praktiseren, blijven gebonden aan de gedragsregels van de SRA / BSB. De architectuur die dit artikel beschrijft, is bedoeld om gekwalificeerde juridische toetsing te ondersteunen — niet te vervangen. Het Ayinde-precedent maakt dat onderscheid niet-onderhandelbaar.

API's gebruikt in dit artikel

Sarah Choy
Geschreven door
Sarah Choy
CEO, API Pick

Sarah Choy is de CEO van API Pick. Ze schrijft over het bouwen van productieklare API's voor AI-agents en LLM-workflows.