Developers

The Lex API, for programs and AI agents

The answers this site's pages show come from one API, and the same answers are open to any program, over REST and over MCP, at this site's own address. It is free and anonymous: there is no key, no account and no paid plan. This page is generated from the operation registry and the schemas this release checks every request and answer against, so it lists what the server does.

Two ways in, one answer

REST: POST /api/v3/{operation}, with a JSON body that names the operation and its parameters, {"operation_id": "…", "parameters": {…}}. The path takes no query, and any other method gets only a failure below the envelope.

MCP: JSON-RPC messages sent by POST to https://law.soufien.lu/mcp, over the Streamable HTTP transport, protocol version 2025-06-18. The server answers initialize, ping, tools/list, tools/call; every registered operation is a tool of the same name, whose input schema is the parameters member of the operation's request schema.

Both give the same envelope for the same request: a tool call is turned into the REST request document and answered by the same code, and its result carries the envelope as its structured content. A refusal is an answer, not an error: REST sends it as a successful HTTP answer, and MCP as a tool result with isError: false; only the refusal of a request past its client's limit has another status over REST, given below.

Its answer to initialize carries instructions, which a client may hand its model, and ping is answered with an empty result. The instructions, as the server sends them:

Lex answers from the Luxembourg and EU legal texts this server holds, and every tool returns one Lex V3 envelope (lex-v3-envelope/1) as structuredContent, the same envelope the REST route POST /api/v3/{operation} returns. A refusal is an answer, not an error: its verdict is refuse, isError stays false, and its refusal names one code of the registry's closed twenty with the payload the registry fixes for that code; read the payload rather than retrying another way. A failure is never an envelope: a JSON-RPC message the server cannot carry out answers a JSON-RPC error (-32602 for invalid arguments, -32603 for a failure of the server's own), and an HTTP request the endpoint refuses or cannot answer answers an HTTP status with a problem document (application/problem+json). A Luxembourg state's date is the publisher's applicability date, or, where its date_role is entry_into_force, the act's entry into force, which is never an applicability date; an EU wording date is never an applicability date; the kinds are never merged. An absence in this server is not evidence that a law does not exist. Every envelope names the registry digest it is bound to (registry_sha256) and its context says how current the data is. Lex shows the published text of the law; it does not say whether or how it applies to anyone's situation and is not legal advice.

For example, the coverage report, asked with curl:

curl -X POST https://law.soufien.lu/api/v3/coverage \
  -H 'content-type: application/json' \
  -d '{"operation_id":"coverage","parameters":{}}'

The same over MCP, as a tools/call message:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "coverage",
    "arguments": {}
  }
}

A client that speaks Streamable HTTP is given the address https://law.soufien.lu/mcp; one that reads its servers from a JSON file, for example:

{
  "mcpServers": {
    "lex": {
      "type": "http",
      "url": "https://law.soufien.lu/mcp"
    }
  }
}

Asked of this server now

As it served this page, this server answered this request from the law it holds:

curl -X POST https://law.soufien.lu/api/v3/browse \
  -H 'content-type: application/json' \
  -d '{"operation_id":"browse","parameters":{"limit":1}}'

Its answer, whole:

{
  "context": {
    "commits": {
      "index_builder_source_commit": "98eef6c624df3779748a983cd56a5f664cd91b2b",
      "serving_runtime_source_commit": "7583e4d0032dd13dd980a05a0ebb0ec5dc1a2d87"
    },
    "freshness": {
      "channels": [
        {
          "age_days": 18,
          "lag_days": null,
          "lag_observations": 0,
          "newest_completed_observation": "2026-10-12T18:17:04Z",
          "publisher": "lu-legilux",
          "stale": false
        },
        {
          "age_days": 25,
          "lag_days": null,
          "lag_observations": 0,
          "newest_completed_observation": "2026-10-05T03:50:08Z",
          "publisher": "eu-eurlex",
          "stale": false
        }
      ],
      "index_built_at": "2026-10-12T18:17:05Z",
      "last_checked_against_publisher": null,
      "maximum_data_age_days": 30,
      "observed_at": "2026-10-31T02:32:44.8105491Z",
      "stale": false,
      "upstream_health": "stale"
    },
    "jurisdiction": "lu",
    "provisional": false,
    "publisher": "lu-legilux",
    "snapshot": {
      "snapshot_id": "corpus-a88d6f2c175b060c",
      "snapshot_sha256": "a88d6f2c175b060ce8b0b7898d41bd261956685e51c83655ee49a4daa1e391cf"
    },
    "status": "success",
    "timeline_semantics": "publisher_applicability"
  },
  "object_type": "envelope",
  "operation_id": "browse",
  "refusal": null,
  "registry_schema": "lex-v3-operation-registry/2",
  "registry_sha256": "627879b6718d746b944758378b9ea476919311a72857bcba0cb72e202fb70059",
  "request_ref": "http_8a8df60f3fe8e6f6e6f5555fd9dbb0914923e0363319025ee9b6b10fc8d7800f",
  "result": {
    "object_type": "work_record",
    "schema": "lex-v3-browse-result/1",
    "value": {
      "languages_held": [
        "eng",
        "fra"
      ],
      "limit": 1,
      "next_after": "code-civil",
      "not_held": [
        {
          "item": "publisher_universe",
          "reason": "how many works the publisher holds, or which of them this index lacks: the rows are what was admitted"
        },
        {
          "item": "titles",
          "reason": "titles are served by dossier and resolve; a row here names the work by its identifiers"
        },
        {
          "item": "legal_status",
          "reason": "no in-force fact is read here; status_on serves the publisher's force assertions per work"
        }
      ],
      "publisher": "lu-legilux",
      "requested_after": null,
      "requested_language": null,
      "requested_type": null,
      "scope": "the works this index holds, one row per work key in ordinal order, with the publisher identifiers and languages their states carry, the first and latest state dates, the state count and the publisher's document and resource types read verbatim from the index's fact table; a type filters to works whose typeDocument is exactly that IRI or ends exactly in /{type} (case-sensitive, no pattern); a language filters to works with a state in it; paged by work key",
      "verified_by": {
        "corpus_sha256": "a88d6f2c175b060ce8b0b7898d41bd261956685e51c83655ee49a4daa1e391cf",
        "index_sha256": "cb0cbe5991f8bd883bfd06c807f408727ab394c0bc261e9464727a729f2006db",
        "registry_sha256": "627879b6718d746b944758378b9ea476919311a72857bcba0cb72e202fb70059"
      },
      "works": [
        {
          "document_types": [
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20160901",
              "value": "http://data.legilux.public.lu/resource/authority/resource-type/CODE"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20170401",
              "value": "http://data.legilux.public.lu/resource/authority/resource-type/CODE"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20180401",
              "value": "http://data.legilux.public.lu/resource/authority/resource-type/CODE"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20180709",
              "value": "http://data.legilux.public.lu/resource/authority/resource-type/CODE"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20180916",
              "value": "http://data.legilux.public.lu/resource/authority/resource-type/CODE"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20200101",
              "value": "http://data.legilux.public.lu/resource/authority/resource-type/CODE"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20211226",
              "value": "http://data.legilux.public.lu/resource/authority/resource-type/CODE"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20220701",
              "value": "http://data.legilux.public.lu/resource/authority/resource-type/CODE"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20230201",
              "value": "http://data.legilux.public.lu/resource/authority/resource-type/CODE"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20230801",
              "value": "http://data.legilux.public.lu/resource/authority/resource-type/CODE"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20230822",
              "value": "http://data.legilux.public.lu/resource/authority/resource-type/CODE"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20230923",
              "value": "http://data.legilux.public.lu/resource/authority/resource-type/CODE"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20240801",
              "value": "http://data.legilux.public.lu/resource/authority/resource-type/CODE"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20241224",
              "value": "http://data.legilux.public.lu/resource/authority/resource-type/CODE"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20250420",
              "value": "http://data.legilux.public.lu/resource/authority/resource-type/CODE"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20251226",
              "value": "http://data.legilux.public.lu/resource/authority/resource-type/CODE"
            }
          ],
          "history_begins": "2016-09-01",
          "identifier": "/lu-legilux/code-civil",
          "languages": [
            "fra"
          ],
          "latest_applicability_date": "2025-12-26",
          "publisher_legal_resource_iris": [
            "http://data.legilux.public.lu/eli/etat/leg/code/civil/20160901",
            "http://data.legilux.public.lu/eli/etat/leg/code/civil/20170401",
            "http://data.legilux.public.lu/eli/etat/leg/code/civil/20180401",
            "http://data.legilux.public.lu/eli/etat/leg/code/civil/20180709",
            "http://data.legilux.public.lu/eli/etat/leg/code/civil/20180916",
            "http://data.legilux.public.lu/eli/etat/leg/code/civil/20200101",
            "http://data.legilux.public.lu/eli/etat/leg/code/civil/20211226",
            "http://data.legilux.public.lu/eli/etat/leg/code/civil/20220701",
            "http://data.legilux.public.lu/eli/etat/leg/code/civil/20230201",
            "http://data.legilux.public.lu/eli/etat/leg/code/civil/20230801",
            "http://data.legilux.public.lu/eli/etat/leg/code/civil/20230822",
            "http://data.legilux.public.lu/eli/etat/leg/code/civil/20230923",
            "http://data.legilux.public.lu/eli/etat/leg/code/civil/20240801",
            "http://data.legilux.public.lu/eli/etat/leg/code/civil/20241224",
            "http://data.legilux.public.lu/eli/etat/leg/code/civil/20250420",
            "http://data.legilux.public.lu/eli/etat/leg/code/civil/20251226"
          ],
          "publisher_work_iris": [
            "http://data.legilux.public.lu/eli/etat/leg/code/civil"
          ],
          "resource_types": [
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#ComplexWork"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Work"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20160901",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Code"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20160901",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Consolidation"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20160901",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#LegalResource"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20160901",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#NationalLegalResource"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20160901",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Work"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20170401",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Code"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20170401",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Consolidation"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20170401",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#LegalResource"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20170401",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#NationalLegalResource"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20170401",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Work"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20180401",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Code"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20180401",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Consolidation"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20180401",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#LegalResource"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20180401",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#NationalLegalResource"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20180401",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Work"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20180709",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Code"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20180709",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Consolidation"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20180709",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#LegalResource"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20180709",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#NationalLegalResource"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20180709",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Work"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20180916",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Code"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20180916",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Consolidation"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20180916",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#LegalResource"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20180916",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#NationalLegalResource"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20180916",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Work"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20200101",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Code"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20200101",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Consolidation"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20200101",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#LegalResource"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20200101",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#NationalLegalResource"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20200101",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Work"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20211226",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Code"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20211226",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Consolidation"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20211226",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#LegalResource"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20211226",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#NationalLegalResource"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20211226",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Work"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20220701",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Code"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20220701",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Consolidation"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20220701",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#LegalResource"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20220701",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#NationalLegalResource"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20220701",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Work"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20230201",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Code"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20230201",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Consolidation"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20230201",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#LegalResource"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20230201",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#NationalLegalResource"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20230201",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Work"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20230801",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Code"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20230801",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Consolidation"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20230801",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#LegalResource"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20230801",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#NationalLegalResource"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20230801",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Work"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20230822",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Code"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20230822",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Consolidation"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20230822",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#LegalResource"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20230822",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#NationalLegalResource"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20230822",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Work"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20230923",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Code"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20230923",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Consolidation"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20230923",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#LegalResource"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20230923",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#NationalLegalResource"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20230923",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Work"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20240801",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Code"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20240801",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Consolidation"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20240801",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#LegalResource"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20240801",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#NationalLegalResource"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20240801",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Work"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20241224",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Code"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20241224",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Consolidation"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20241224",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#LegalResource"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20241224",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#NationalLegalResource"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20241224",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Work"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20250420",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Code"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20250420",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Consolidation"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20250420",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#LegalResource"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20250420",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#NationalLegalResource"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20250420",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Work"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20251226",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Code"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20251226",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Consolidation"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20251226",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#LegalResource"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20251226",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#NationalLegalResource"
            },
            {
              "datatype_iri": null,
              "evidence_sha256": "b86525e5dc4a237ca540299fd1f122edc9d36abd74daae80f089bad03984cfed",
              "language_tag": null,
              "object_kind": "iri",
              "subject_iri": "http://data.legilux.public.lu/eli/etat/leg/code/civil/20251226",
              "value": "http://data.legilux.public.lu/resource/ontology/jolux#Work"
            }
          ],
          "state_count": 16,
          "work_key": "code-civil"
        }
      ]
    }
  },
  "schema": "lex-v3-envelope/1",
  "verdict": "answer",
  "version": "v3"
}

/lu-legilux/code-civil, the first act it holds, asked for its dossier over REST, then over MCP for its text on 2025-12-26, its latest version's date:

curl -X POST https://law.soufien.lu/api/v3/dossier \
  -H 'content-type: application/json' \
  -d '{"operation_id":"dossier","parameters":{"identifier":"/lu-legilux/code-civil"}}'
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "as_of",
    "arguments": {
      "identifier": "/lu-legilux/code-civil",
      "date": "2025-12-26",
      "language": "fra"
    }
  }
}

The operations

The registry lists 27 operations; this server serves 24 of them. Each gives its REST path, its MCP tool, its parameters as its request schema states them, the objects its answer carries, and its two schemas.

For an EU identifier, some served operations refuse with retrieval_mode_unavailable, naming the modes available; when an EU index is mounted, the coverage answer's operations.refused_for_eu lists them.

answer_drift

The past dated answers that a later publisher revision invalidated, found from the event log.

REST
POST /api/v3/answer_drift
MCP tool
answer_drift
Parameters
  • identifier (optional) {"type":"string","minLength":1,"pattern":"\\S"}
  • after (optional) {"type":"string","pattern":"^[0-9a-f]{64}:(0|[1-9][0-9]{0,17})$"}
  • limit (optional) {"type":"integer","minimum":1,"maximum":200}
Answer carries
answer_drift
Schemas
request (digest e495c3a1c494433880391ab9a165b5bb755a0db1134689fa84170fc57d2a4b51); answer (digest a0db799735cca3089896625a5f4e6e77a21ae78ecf1ce745af6c7d0297af3933)

article_history

One article of a Luxembourg act through the versions held: whether its wording changed from one to the next, and which versions do not carry it.

REST
POST /api/v3/article_history
MCP tool
article_history
Parameters
  • identifier (required) {"type":"string","minLength":1,"pattern":"\\S"}
  • anchor (required) {"type":"string","minLength":1,"pattern":"\\S"}
  • language (optional) {"type":"string","minLength":1,"pattern":"\\S"}
Answer carries
provision_history
Schemas
request (digest 720d2abf1baba65d625a9a9b5e05caa750e4923b164db4fb32459db7b9ceae0a); answer (digest 7da211639e99c092a9ad2e29cde90df8ba331f5b7fd08481bae2004b472aef47)

as_observed

The version of a Luxembourg act applicable on a date as one build of the event log held it, with that build's time as an upper bound on when it was observed.

REST
POST /api/v3/as_observed
MCP tool
as_observed
Parameters
  • identifier (required) {"type":"string","minLength":1,"pattern":"\\S"}
  • date (required) {"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2}$"}
  • language (optional) {"type":"string","minLength":1,"pattern":"\\S"}
  • snapshot (optional) {"type":"string","pattern":"^[0-9a-f]{64}$"}
  • at (optional) {"type":"string","minLength":1,"pattern":"\\S"}
Answer carries
quote, version_state
Schemas
request (digest 56140325c62f6637ca82eb9209c69f97cf457840652b2280abcea0df162e30aa); answer (digest 24ef7adcc72cd2e3309a696ba05984cc1235eea8f4149284f421202837ad9ba0)

as_of

The version of a Luxembourg act applicable on a date, with its articles; for an EU act, the wording that answers the date.

REST
POST /api/v3/as_of
MCP tool
as_of
Parameters
  • identifier (required) {"type":"string","minLength":1,"pattern":"\\S"}
  • date (required) {"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2}$"}
  • language (optional) {"type":"string","minLength":1,"pattern":"\\S"}
Answer carries
quote, version_state
Schemas
request (digest 9350f8bde3bee4ec39edde5744ce7ac6c701c4a3a9defbc7d35547abb22a0369); answer (digest 05994159da1e430d7bbb84e5560bb3fd916cd0ebbfb02a8167a06ba4ffa01d3f)

ask

The assistant, which is off: every question receives the presentation result that says so, naming the operations that answer from the law Lex holds. No model writes an answer.

REST
POST /api/v3/ask
MCP tool
ask
Parameters
  • question (required) {"type":"string","minLength":1,"pattern":"\\S"}
Answer carries
answer_dossier, handoff_card
Schemas
request (digest 4f0dd0cc8e670df5278e5b922d65a6c8034e98495ace15bd066c68de5734ca8e); answer (digest 22b865b95acf334541a922bfccf81ed56515c6518b798a57fdbf5c3df34a0902)

browse

The Luxembourg acts held, as one ordered and paged list, with their identifiers, languages, version dates and the publisher's document types.

REST
POST /api/v3/browse
MCP tool
browse
Parameters
  • type (optional) {"type":"string","minLength":1,"pattern":"\\S"}
  • language (optional) {"type":"string","minLength":1,"pattern":"\\S"}
  • limit (optional) {"type":"integer","minimum":1,"maximum":200}
  • after (optional) {"type":"string","minLength":1,"pattern":"\\S"}
Answer carries
classification, work_record
Schemas
request (digest 0d761cdc85621c29adbc4fe69baeb91ad4fd24f9c674918f36633cef764c22f5); answer (digest 494e439685ab102bb3b8e43dab69155319cdb4e7320dca260fc9bd469a89e968)

changes_in_period

The Luxembourg versions whose applicability begins in a period, for one act or across the index.

REST
POST /api/v3/changes_in_period
MCP tool
changes_in_period
Parameters
  • date_from (required) {"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2}$"}
  • date_to (required) {"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2}$"}
  • identifier (optional) {"type":"string","minLength":1,"pattern":"\\S"}
  • language (optional) {"type":"string","minLength":1,"pattern":"\\S"}
  • limit (optional) {"type":"integer","minimum":1,"maximum":200}
Answer carries
change_list
Schemas
request (digest c7566ef888416473241616a25f9082276cfee8cf55e79cb20471bb717e70e62e); answer (digest aadc32dfa3eb0752e3ed2463132d84c707c2ef353258c763aac732f2d787e451)

citation

The references the publisher wrote in the text of a Luxembourg version's articles.

REST
POST /api/v3/citation
MCP tool
citation
Parameters
  • identifier (required) {"type":"string","minLength":1,"pattern":"\\S"}
  • date (required) {"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2}$"}
  • language (optional) {"type":"string","minLength":1,"pattern":"\\S"}
  • anchor (optional) {"type":"string","minLength":1,"pattern":"\\S"}
  • limit (optional) {"type":"integer","minimum":1,"maximum":200}
  • after (optional) {"type":"string","minLength":1,"pattern":"\\S"}
Answer carries
relation_edge
Schemas
request (digest d449b6a2229219272b8c86a2ba4d6311f8c4373e9828e06795736f2bc10beb98); answer (digest c2f1fed1f1eb3dd3cc0687fdaf957004a3eeb505744515a9a807ece29f88d693)

cited_by

The references, in any Luxembourg version held, whose target is a given act.

REST
POST /api/v3/cited_by
MCP tool
cited_by
Parameters
  • identifier (required) {"type":"string","minLength":1,"pattern":"\\S"}
  • limit (optional) {"type":"integer","minimum":1,"maximum":200}
  • after (optional) {"type":"string","minLength":1,"pattern":"\\S"}
Answer carries
relation_edge
Schemas
request (digest eaac226bc1fb5a2ec4e41b1c108bf8e1249e10710d523db7e4b35d2c7b3b2446); answer (digest 84df4ca06e3639cc28ab1c4b366bf1e6817b7df4672cc044ef6c2006b249a7d7)

classification

The publisher's typed facts about a Luxembourg act, as the publisher states them: document type, legal value, responsible body, historical identifiers, publication and document dates.

REST
POST /api/v3/classification
MCP tool
classification
Parameters
  • identifier (required) {"type":"string","minLength":1,"pattern":"\\S"}
  • language (optional) {"type":"string","minLength":1,"pattern":"\\S"}
Answer carries
classification
Schemas
request (digest 1332eece87992d62bb879a968170a7e702287d92e04cfb0c5679a7452e3fbe67); answer (digest 6825319f9d8a3b7294a67525c9783eaa508ceba55529f0c5dbc9a93207185b86)

concepts

The concepts the Publications Office attaches to EU acts: EuroVoc descriptors, directory codes and subject matters.

Not served from data: a request to it is answered inside the envelope with the refusal retrieval_mode_unavailable, naming the mode asked, r5_concepts, and the modes this server serves; the data that would serve it: the concept data attached to EU works: EuroVoc descriptors, EU directory codes and subject matters as the Publications Office records them; the EU index holds none of them.

REST
POST /api/v3/concepts
MCP tool
concepts
Parameters
none
Answer carries
classification
Schemas
request (digest 9410abf9de9dbb92416c835fe7affb847089e29e55fe00564599a42e2d4e7a78); answer (digest 0eb176d38ce1ef50dc4c45dd49d4785260cfd47019b6c4d84fa3e06caf8611fb)

coverage

What this server holds and serves, counted from its index, and what it does not hold.

REST
POST /api/v3/coverage
MCP tool
coverage
Parameters
  • language (optional) {"type":"string","minLength":1,"pattern":"\\S"}
Answer carries
coverage_report
Schemas
request (digest 28dea1021d0bf557601dfa0f267836a692452c008a782a83b20d6b25864c86cf); answer (digest 3bd674e8ba9de2d844a6e065e57fcdffdc46bf061e2a5245daa32559a013547a)

diff

The article-by-article difference between the versions of a Luxembourg act applicable on two dates.

REST
POST /api/v3/diff
MCP tool
diff
Parameters
  • identifier (required) {"type":"string","minLength":1,"pattern":"\\S"}
  • date_from (required) {"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2}$"}
  • date_to (required) {"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2}$"}
  • language (optional) {"type":"string","minLength":1,"pattern":"\\S"}
  • page (optional) {"type":"integer","minimum":1,"maximum":100000}
Answer carries
diff
Schemas
request (digest d89037bb8d198df974341830d5b03c9a2c22e9382ed6c7613ca9c7842984b165); answer (digest d65408bbced98af39f506c68789a83ea616b409b6ba4b4c0d2e6beca0db600d0)

dossier

An act's record as the index holds it: a Luxembourg act's titles and versions, or an EU act's expressions.

REST
POST /api/v3/dossier
MCP tool
dossier
Parameters
  • identifier (required) {"type":"string","minLength":1,"pattern":"\\S"}
  • language (optional) {"type":"string","minLength":1,"pattern":"\\S"}
Answer carries
work_record
Schemas
request (digest 7690a2af695fb1e35a65498068489670f47cdf3a188583f2b338c7b3d76644b3); answer (digest 98c659452df3a954ff2a047c3daf4b1701eab7b4a38d1a12b074cd522c2fbaff)

events

The event log of what each build of the index found, polled by cursor and delivered at least once.

REST
POST /api/v3/events
MCP tool
events
Parameters
  • after (optional) {"type":"string","pattern":"^[0-9a-f]{64}:(0|[1-9][0-9]{0,17})$"}
  • limit (optional) {"type":"integer","minimum":1,"maximum":200}
  • event (optional) {"type":"string","enum":["first_sighting","resighted","metadata_revised","validity_revised","interval_closed","withdrawn_from_source","expression_added","file_replaced","relation_asserted","relation_retracted","future_state_scheduled","future_state_activated"]}
Answer carries
event
Schemas
request (digest 599ac3805812b36d0104954e526345b32f14d3c4de09636b30f823bd2ef77151); answer (digest 03ba57b7fd237d3f3be04856e90e3cd640e574105720e5efc0deb2f290185f66)

evidence_bundle

What quoting a version needs, a page at a time: each article's text with its digests, the version's permalink, sources and official identities, under the rights rule; for an EU act, the same for the wording that answers the date.

REST
POST /api/v3/evidence_bundle
MCP tool
evidence_bundle
Parameters
  • identifier (required) {"type":"string","minLength":1,"pattern":"\\S"}
  • date (required) {"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2}$"}
  • language (optional) {"type":"string","minLength":1,"pattern":"\\S"}
  • article (optional) {"type":"string","minLength":1,"pattern":"\\S"}
  • page (optional) {"type":"integer","minimum":1,"maximum":100000}
  • contents (optional) {"type":"boolean"}
Answer carries
evidence_bundle
Schemas
request (digest abee95ee3daed629ab52b2ba17c0a8b602f6148bc773410b1e02379659e63f66); answer (digest 744bdd0f235511e1fe2a32b5c030abf697f433436ca25a867968ec9e17af19f9)

in_force_on

The Luxembourg acts with a version applicable on a date.

REST
POST /api/v3/in_force_on
MCP tool
in_force_on
Parameters
  • date (required) {"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2}$"}
  • identifier (optional) {"type":"string","minLength":1,"pattern":"\\S"}
  • language (optional) {"type":"string","minLength":1,"pattern":"\\S"}
  • limit (optional) {"type":"integer","minimum":1,"maximum":200}
  • after_work_key (optional) {"type":"string","minLength":1,"pattern":"\\S"}
Answer carries
version_state
Schemas
request (digest e928f3ccaf1c3e4d6bcb8c63f04763a470cf0d2088a93cfb45c3db40f2634168); answer (digest 280e096deec459b7d0dc021812f1d581b18a4d41684d95a2f9330c005ef98aa2)

knowable_on

What a reader could have known on a date: each version's publication beside the time Lex observed it.

Not served from data: a request to it is answered inside the envelope with the refusal retrieval_mode_unavailable, naming the mode asked, r6_knowable_on, and the modes this server serves; the data that would serve it: each held state's publication date beside its observation time (observed_from), so a date is answered with what a reader could have known on it, never with the publisher's valid-from date; the observation times need each Luxembourg body's capture time in the corpus, which no build records yet: a build's time bounds observation only from above.

REST
POST /api/v3/knowable_on
MCP tool
knowable_on
Parameters
none
Answer carries
quote, version_state
Schemas
request (digest 5355eba4be398ff90b150998dbea9cf3c7f68af9ca7ee7cecadfb54a71582f31); answer (digest 387d33719c458459303c7622c25bfa60a52456c5063415663020ff1482f6588e)

manifestation

The publisher's manifestations of a Luxembourg act's expressions, with their formats and files, the one Lex retained marked with its digest.

REST
POST /api/v3/manifestation
MCP tool
manifestation
Parameters
  • identifier (required) {"type":"string","minLength":1,"pattern":"\\S"}
  • language (optional) {"type":"string","minLength":1,"pattern":"\\S"}
  • format (optional) {"type":"string","minLength":1,"pattern":"\\S"}
Answer carries
manifestation
Schemas
request (digest e0e5305872cb4de10d723e29d4868e98325b3dfecccd0b64acbf0e1904888463); answer (digest 4d56bf8f95a39118233f3bd0baadf5acc0258ec609702c0f66be81374aed72c3)

provenance

The sources, rule profiles and digests behind a Luxembourg version.

REST
POST /api/v3/provenance
MCP tool
provenance
Parameters
  • identifier (required) {"type":"string","minLength":1,"pattern":"\\S"}
  • date (required) {"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2}$"}
  • language (optional) {"type":"string","minLength":1,"pattern":"\\S"}
Answer carries
provenance_chain
Schemas
request (digest f8040326a99710dd428164e819cd87723079af9709445abca78c942b63a9f735); answer (digest e56a4fd3ece18702eafdd1fb8e3d6154266932c870d62f1eba9fcdc6060a4824)

relations

The references of a Luxembourg act in both directions, as one ordered and paged list.

REST
POST /api/v3/relations
MCP tool
relations
Parameters
  • identifier (required) {"type":"string","minLength":1,"pattern":"\\S"}
  • date (optional) {"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2}$"}
  • language (optional) {"type":"string","minLength":1,"pattern":"\\S"}
  • direction (optional) {"type":"string","minLength":1,"pattern":"\\S"}
  • limit (optional) {"type":"integer","minimum":1,"maximum":200}
  • after (optional) {"type":"string","minLength":1,"pattern":"\\S"}
Answer carries
relation_edge
Schemas
request (digest b5cfdff9ec0b979db84d74782ed00a6c1c486c9ca8fd92f944f59dbc0a456269); answer (digest 2835b8429d28a57572483d93e5f22bef61808ff83f4df49e2e5fd74893e64698)

resolve

The act and the expression that a Luxembourg identifier or a pinned permalink names.

REST
POST /api/v3/resolve
MCP tool
resolve
Parameters
  • identifier (required) {"type":"string","minLength":1,"pattern":"\\S"}
Answer carries
work_resolution
Schemas
request (digest 4ef49cdcb9a604c0c1bda8658472f2b20954239e7044cb56cbd95258b286291f); answer (digest 844c90e2165de4db270410d3e8871128085469123e3756e316a4ba02277341f8)

An exact reference opens its act; any other phrase is searched, with capitals and accents ignored, in the Luxembourg article text whose rights allow it, or in the wordings of one EU act named by its identifier.

REST
POST /api/v3/search
MCP tool
search
Parameters
  • query (required) {"type":"string","minLength":1,"maxLength":512,"pattern":"\\S"}
  • language (required) {"type":"string","minLength":1,"pattern":"\\S"}
  • date (optional) {"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2}$"}
  • identifier (optional) {"type":"string","minLength":1,"pattern":"\\S"}
  • mode (optional) {"type":"string","minLength":1,"pattern":"\\S"}
  • limit (optional) {"type":"integer","minimum":1,"maximum":200}
  • after (optional) {"type":"string","minLength":1,"pattern":"\\S"}
Answer carries
quote, work_record
Schemas
request (digest f77da1337030b1d7347e44dc6ea99a9e7721a2575aec1afca7ba87e28a45ca94); answer (digest e63aef0ec32c46e3fbbd1c855c611e16a669c17af76ef4fa72479710cd5783df)

status_on

The publisher's own statements on a Luxembourg act's entry into force and its end, word for word, beside the version applicable on a date.

REST
POST /api/v3/status_on
MCP tool
status_on
Parameters
  • identifier (required) {"type":"string","minLength":1,"pattern":"\\S"}
  • date (required) {"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2}$"}
  • language (optional) {"type":"string","minLength":1,"pattern":"\\S"}
Answer carries
version_state
Schemas
request (digest 6f0db7a80e56df5bdd53237e970c40d21499ff08b418d1790f429ec092d508f3); answer (digest 04dbdabe5b724642c84545439954c02725a94dd46376fae130bff42f4879767d)

timeline

Every version of a Luxembourg act held, in the publisher's order of applicability; for an EU act, every wording discovered, in order of date.

REST
POST /api/v3/timeline
MCP tool
timeline
Parameters
  • identifier (required) {"type":"string","minLength":1,"pattern":"\\S"}
  • language (optional) {"type":"string","minLength":1,"pattern":"\\S"}
Answer carries
timeline
Schemas
request (digest ec0ff5119f22ab5813195d877afb23a7cdb63de24c315340da928528f6f6496c); answer (digest 3e514ca04d65d83221e1126466a66544f2819aa9e8a3539f26ad460007da2db0)

transposition

The links between EU directives and the Luxembourg acts that transpose them, as each publisher asserts them.

Not served from data: a request to it is answered inside the envelope with the refusal retrieval_mode_unavailable, naming the mode asked, r4_transposition, and the modes this server serves; the data that would serve it: the transposition links: Legilux's transposes and draftTransposes assertions and the Publications Office's national implementing measures for Luxembourg, each kept as its publisher asserts it and never merged; neither is acquired.

REST
POST /api/v3/transposition
MCP tool
transposition
Parameters
none
Answer carries
relation_edge
Schemas
request (digest 72d898973fc8a96a7b33164d61f317b02397acf451cd0d03f01171aef3c7604e); answer (digest 970aa177451750ecc23d5ed8feffb3922e785f7a4bf5d41ac3766b9c8ee5355c)

verify

Checks a pinned permalink against the digest the index holds, or gives the current digests to pin.

REST
POST /api/v3/verify
MCP tool
verify
Parameters
  • identifier (required) {"type":"string","minLength":1,"pattern":"\\S"}
  • language (optional) {"type":"string","minLength":1,"pattern":"\\S"}
Answer carries
verification
Schemas
request (digest 655f3deeb9074c95961c3a64ffc0022c279f182924fb4732601abcad6a9c5b3d); answer (digest d315afd1f40d904d8ffbb2f1298fbbaf5a2703ef60aed6d471f5e97c8bf18b11)

The envelope

Every answer, over REST and over MCP, is one envelope, lex-v3-envelope/1 (digest d135633d801092e5b1d46c0a5c168f1354b1c0e5595d07372c23744dd0e7c255), with these members:

schema
The envelope's schema identity.
version
The platform's version.
object_type
The object's type: an envelope.
request_ref
An opaque reference to this one request, for the client's own use.
operation_id
The operation that answered.
registry_schema
The operation registry's schema identity.
registry_sha256
The digest of the operation registry this server runs.
context
What the answer was given from, below.
verdict
What kind of answer this is, below.
result
The answer's object, with its own schema and type, or null when the operation refuses.
refusal
The refusal, with its code and payload, or null when the operation answers.

Its context says what the answer was given from:

commits
The revisions of Lex's code that built the index, index_builder_source_commit (“Index built from”), and that serve the answer, serving_runtime_source_commit (“Service running”).
freshness
How current the data is: when the index was built, each publisher's newest complete collection with its age and lag, the maximum age allowed, and whether the data is older than that.
jurisdiction
The jurisdiction of the law answered: Luxembourg or the EU.
provisional
Whether the answer is provisional; this server always sends false.
publisher
The publisher whose law is answered.
snapshot
The corpus snapshot the index was derived from, by its identity and digest.
status
Whether the operation answered or refused.
timeline_semantics
How the answer's dates are to be read: publisher_applicability for Luxembourg, the dates from which the publisher states its versions are applicable; official_consolidation_state for the EU, the dates of the publisher's wordings.

Its verdict is one of the registry's closed set:

answer
The operation answered.
answer_with_enrichment
Reserved for the assistant, which is off; this server sends it for no answer.
point
The answer points elsewhere: what ask gives, since the assistant is off.
clarify
Reserved for the assistant, which is off; this server sends it for no answer.
refuse
The operation refused, with a typed refusal.
split
Reserved for the assistant, which is off; this server sends it for no answer.

registry_sha256 is 627879b6718d746b944758378b9ea476919311a72857bcba0cb72e202fb70059 for this release: the digest of the registry, which covers every operation, every schema's digest and every refusal code with the fields its payload must carry, so it changes whenever any of them changes. Each schema's identity ends in its version.

Refusals

When an operation cannot answer, it refuses with one of 20 codes, never with an empty answer: the envelope's verdict is refuse, its result is null, and its refusal, lex-v3-refusal/1 (digest 2705723884d22104188d9e9fe6673efc5a2563e4549af6f774dbadf974dc5c98), carries the code and a payload. The registry fixes the fields each code's payload must carry; a payload may carry more.

On this site's pages, a refusal's plain sentence comes first, and its code and payload follow it.

advice_boundary
The question asks for advice: Lex shows the text, and does not apply it to anyone's situation. Its payload carries descriptive_maximum, handoff, and is held to lex-v3-advice_boundary-payload/1 (digest 76fe0961f4734b99f12bdc81e623faa3648952e66b3bbe5e9fb82365a7f98d64).
ambiguous_identifier
The identifier names more than one act; the candidates are listed, and none is chosen. Its payload carries requested_identifier, candidates, and is held to lex-v3-ambiguous_identifier-payload/1 (digest f2ccba8567ad4c69b1a7247b0f05ab8e45dc1c164aac325d07d6307a532dff13).
ambiguous_version
More than one version covers the date and the publisher does not say which applies; each candidate is listed, and none is chosen. Its payload carries requested_date, candidates, and is held to lex-v3-ambiguous_version-payload/1 (digest 283beeada41bb31c342eb21262622add6a53b4dbc461ffaa7663254771a3f27e).
anchor_not_in_version
The index holds no article with that identifier in the version; the nearest article identifiers are given, and no text search is run in its place. Its payload carries requested_anchor, nearest_anchors, do_not_fall_back_to_full_text_search, and is held to lex-v3-anchor_not_in_version-payload/1 (digest c869995a2de63355e7bb745ee886dd986a613c7ef4643618fd7b9fe23c8edd19).
derivation_refused
Lex will not derive what was asked from the text it holds; the payload says what and why. Its payload carries derivation, reason, and is held to lex-v3-derivation_refused-payload/1 (digest 02c709e03d9ebb98fd3ed2d59d348c9556fc1130bff6cb2436877f1e93f7f1f3).
format_not_available
The format asked for is not offered for this answer; the formats offered are listed. Its payload carries requested_format, available_formats, and is held to lex-v3-format_not_available-payload/1 (digest 6212f923de42878063c1f5f19bd60db37dd324fd5f0b1d265e731c9e5effaf45).
identifier_unknown
No act the index holds has that identifier; the payload gives the official search and what would answer. Its payload carries requested_identifier, official_search_actions, what_would_answer, and is held to lex-v3-identifier_unknown-payload/1 (digest b44b428735377e8a80b87c3d2a36d5a7bf088963dad2e9ea09eb20bc02589363).
language_not_available
The text is not held in that language; the languages held are listed. Its payload carries requested_language, available_languages, and is held to lex-v3-language_not_available-payload/1 (digest 16cc301311ff4b00eb411787c41f6a350bff402312ae1b945be5ce9cbb59c193).
no_corpus_mounted
This server holds no law at the moment. Its payload carries required_corpus, and is held to lex-v3-no_corpus_mounted-payload/1 (digest f630698422967772f3856d9ba9316b3dbbc3dca0db0fa32982a1f3958637f24d).
no_version_for_date
No version the index holds covers the date; the payload gives the date its history begins and the nearest dates held before and after it. Its payload carries requested_date, history_begins, nearest_earlier, nearest_later, and is held to lex-v3-no_version_for_date-payload/1 (digest 96f500518a36236a9657373ddfbb30327dbcf48aff54019d832c4710878e370d).
not_transposable
Only a directive is transposed, and this instrument is not one; the payload says why. Its payload carries instrument_type, explanation, and is held to lex-v3-not_transposable-payload/1 (digest 889145a4c9e933214affde1a5a4241954d96ee51a7da7d68fd06e8664c1fb813).
out_of_corpus_scope
Lex does not hold the instrument, and the payload says why: it names the instrument, its official place, the reason and who to ask, an institution or an official service and never a person. Its payload carries requested_identifier, official_source, reason, who_to_ask, and is held to lex-v3-out_of_corpus_scope-payload/1 (digest 6b5f5a33e40ea970d5be326577fcba92139df76817bc4e8513c82eddff78b364).
pinned_digest_mismatch
The digest a permalink pins is not one Lex holds for that version; the payload gives the current digest and its permalink. Its payload carries requested_digest, current_digest, stable_coordinate, current_hash_pinned_url, and is held to lex-v3-pinned_digest_mismatch-payload/1 (digest 6564294c7ea4852a7ddaff9f9e27a7a2b8a2b1dceebbbbec1e0c9c268510675c).
profiles_differ
The two versions were read under different rule profiles, so they are not compared. Its payload carries left_profile, right_profile, and is held to lex-v3-profiles_differ-payload/1 (digest a6c2313b0f99f99b2c4467bd6f199f6c6398786a466852ffe32849d5cf2ce544).
rate_limited
Too many requests; the payload says when to ask again. Its payload carries retry_after, retryable, and is held to lex-v3-rate_limited-payload/1 (digest ea152733a9c0409d66202f140b7bbaf5b7b4ef7b902f49c8dbb1712b62e05445).
retrieval_mode_unavailable
The operation is not served in the mode asked: for an EU identifier, or not at all when no data serves it; the modes available are listed. Its payload carries requested_mode, available_modes, and is held to lex-v3-retrieval_mode_unavailable-payload/1 (digest a29b2e64c3b7596f39e68ed9bfbb4a1110fb4154ec9dcf67f176f1eaad835e46).
snapshot_unknown
The snapshot or the log the request names is not one this server holds; the payload says what would answer. Its payload carries snapshot_id, what_would_answer, and is held to lex-v3-snapshot_unknown-payload/1 (digest 5f3e77d337e5363322251ad1d28532ac2f9a014be7bfb1e2e19d8cce344cd087).
text_not_available
The publisher's file holds no text Lex can read, such as an annex given only as images; its official identity and source are given. Its payload carries official_identity, official_source, retained_transport_evidence, and is held to lex-v3-text_not_available-payload/1 (digest d3f8945228912c77fdcc27d8628fcce3dfb2934d8b7e4d36a64d80232a6efb39).
text_withheld
The licence of the text does not allow Lex to show it; its official link and digest are given. Its payload carries official_identity, official_link, content_sha256, and is held to lex-v3-text_withheld-payload/1 (digest 41cc8ebafcb63f15eb9d10391ca822fa2bf0555305bc9f3ef8a615b7c9addf73).
upstream_unreachable
A source Lex depends on could not be reached; the payload says whether to ask again. Its payload carries upstream, retryable, and is held to lex-v3-upstream_unreachable-payload/1 (digest 4477c1e18093ae11ccaa5a96b9506a5705559c84870cbe195099137d84768078).

What Lex never holds

An identifier that names one of these is refused with out_of_corpus_scope by every operation that takes one, before anything is looked up. The list, lex-v3-out-of-scope/1, names for each its official place and who to ask, an institution or an official service and never a person; each refusal names the list's digest, d473256c14a1c973b441567d9bf9802532347643b5b3f384704f9027b07a06b7.

Not listed yet: communal regulations, whose official place is each commune's own, and the decisions of Luxembourg's courts, which no identifier names exactly. Each still answers identifier_unknown.

An EU act outside the EU population this site holds, named by its CELEX, is refused with out_of_corpus_scope too, though it is on no list: whether an act is outside depends on the EU index the server mounts. The refusal names the rule that population follows, with the number of acts on its seed list, and gives the act's page on EUR-Lex as its official place; it names neither the out-of-scope list nor its digest.

Two answers that are not refusals

Failures below the envelope

A request the server cannot read or route gets no envelope: it is answered with a problem document, lex-v3-transport-problem/1, with an HTTP status and one of these codes. Unlike a refusal, it is not an answer about the law.

Quoting and citing

Every quoted article carries text_sha256, the digest of its text; body_sha256, the digest of the publisher's file it was read from; official_source, its official source; and article_permalink, which pins the publisher, the act, the date and digest of the version or EU wording, the language and the article: /{publisher}/{work}/{date}--{digest}/{language}/{article}.

verify checks a permalink's digest against the one the index holds, from what this server holds: it never asks the publisher.

Each release of Lex is signed. The keys that sign releases, each with its identity, role, validity and status, are published at https://law.soufien.lu/.well-known/lex-keys.json: check a release's signatures against that set, never only against the key the release carries.

On the reading page, an article is cited in three forms, “Usual citation”, “With its permalink” and “Evidence form”, and an export carries all three. In a document, cite the official text by its official reference.

Limits

There is no key and no account, and the server keeps no record of a request; for the per-client limit below, it counts requests in its working memory alone: see the privacy notice.

A request body is at most 1,048,576 bytes; a larger one is answered with request_too_large.

Lists are paged: limit sets a page's size, within the bounds each request schema states, and after continues from where the last page stopped.

Each client, known by its IP address, may send 60 API requests a minute, REST and MCP together, with at most 4 being answered at once. Past either limit, a request to an operation (over MCP, a tool call) is refused with rate_limited, which carries retry_after, the seconds to wait before asking again, as the Retry-After header does; over REST its status is 429. The service is small: send one request at a time and poll gently.

The pages the server renders itself have a budget of their own, 300 a minute for each client; past it, a page is sent as built, and the browser then asks the API for its answer. No page is refused.

Nothing is promised about availability: see the terms of use.

Following changes

events reads the log of what each build of the index found: when a log begins, one first_sighting event for each version held, then each later build's comparison events, each dated by its build, never by when it was observed. Poll it with after, the cursor the last answer gave as next_after, and limit, and filter it with event.

Delivery is at least once: the same cursor can answer the same events again, so a client keeps the last cursor and skips the events it has seen, by seq within log_id. There are no webhooks and no push: poll.

The events a log may hold: first_sighting, resighted, metadata_revised, validity_revised, interval_closed, withdrawn_from_source, expression_added, file_replaced, relation_asserted, relation_retracted, future_state_scheduled, future_state_activated.

A cursor matches ^[0-9a-f]{64}:(0|[1-9][0-9]{0,17})$.

answer_drift lists the past dated answers that a later publisher revision invalidated, found from the log's revising events.

The events answer states its own delivery, as the server sends it:

cursor polling, at least once: while this index is mounted a request with the same cursor answers the same events again, so a reader deduplicates by seq within log_id; next_after is always the cursor to poll next; a build chained to this one carries this log forward with the same numbers, so a cursor of this log reads on in its successor (log.ancestors lists the logs a log honours); a build not chained to this one starts a new log, under which a cursor of this log refuses snapshot_unknown; there is no push delivery and no subscription (Decision 93)

Replay guarantees

What a program can rely on when it asks again: the guarantees the specification names G1 to G5, each as this server supports it today. Each is held by a test of tests/Lex.V3.Ingest.Tests/V3ReplayGuaranteesTests.cs, named beside it, which runs the real API on test mounts.

G1: Versions are never rewritten
A version is named by the digest of its text. When a later build reads a publisher's file that has been replaced, the log records it as file_replaced; the version stays the same when the text is unchanged, and a new version is named only when the text changed. A permalink to the earlier version still verifies while a kept build holds its text, naming the version that replaced it. Test: AReplacedPublisherFileIsAFileReplacedEventAndANewVersionIdOnlyWhenItsTextChanged.
G2: The same request, the same bytes
On a server built from the same commit (context.commits.serving_runtime_source_commit), every served operation answers the same request, asked of the same snapshot, with the same canonical bytes, asked again later or of a byte copy of the mount, apart from what belongs to the request or to the moment it is answered. The request's own members are context.freshness.observed_at and request_ref. The moment's are each channel's data age and whether it is past the maximum, context.freshness.channels[].age_days and context.freshness.channels[].stale, and the envelope's context.freshness.stale, counted to the server's answer; and, when a search reads an exact reference that names no date, the date it is read at, today in Luxembourg (result.value.reference.recognised.date) if the search names none either, the version, or for an EU act the wording, that date selects, and the address the answer opens, the act's readable address or the permalink of that version or wording: a search date that is today's is no date given. A request past its client's limit is refused with rate_limited instead. The release is signed as a whole; an answer carries no signature of its own. Test: EveryServedOperationAnswersTheSameBytesFromTheSameSnapshotFromACopyOfItAndLater.
G3: Nothing is deleted from the log
Each build's events are the start of the next build's log, row for row. The code can keep earlier builds beside the one a server mounts, by a retention rule: every build listed as referenced by a published permalink, the last build of each day for 90 days and the first of each month. Lex does not keep them yet: the release this site serves holds only the build its server mounts. So a version the log names is re-verifiable only while a kept build holds its text, which today means the mounted build; one whose text no kept build holds is still named by the log, without its text, and a permalink to it no longer verifies. Test: NothingIsHardDeletedAcrossBuildsEveryEventIsCarriedAndEveryStateTheLogNamesStillVerifies.
G4: Answers as one build held them
as_observed answers what one build of the log held, named by its index digest, bounded by that build's time, which is an upper bound on when its texts were observed. No observation time is held, so a time is refused, and knowable_on, which needs one, is not served. Test: EverySnapshotTheLogNamesAnswersAsObservedWhatThatBuildAnsweredBoundedByItsBuildTime.
G5: Checked without Lex
The answers of evidence_bundle for a version, page by page, and the publisher's file are enough to check each article's text and to recompute the file's digest, each text digest, the digest of the article identities and the version's own digest, from the derivations provenance publishes. Each article's identity, the wording digest, the rule-profile digests and the receipt are not recomputable: the wording digest reads a token stream the answer does not carry, and the others' derivations are not published. Test: OneEvidenceBundleAndThePublisherFileAreEnoughToCheckItsTextAndRecomputeItsDerivedDigests.

How the API changes

Each schema's identity ends in its version, as lex-v3-envelope/1 does, and so does the registry's, lex-v3-operation-registry/2. A change that removes or renames a member, or changes what one means, raises that version; the envelope admits no member it does not list, so a new member of the envelope raises its version too.

An answer's object, and a refusal's payload, may gain members within a version: a program ignores the members it does not know. Within a version of the registry, a payload never loses a field the registry requires of its code.

Any change to an operation's definition, to a schema the registry names or to a refusal code changes the registry's digest, which every envelope carries: a program that keeps it learns of the change from the first answer after it. A fix to how an operation behaves that leaves its definition as it is keeps the digest, so the digest says when the contract changes, not when an answer does. The out-of-scope list is not part of the registry: every out_of_corpus_scope refusal the list decides names the list's identity, scope_list, and its digest, scope_list_sha256, which changes with any change to the list.

One member of the envelope names the registry's version, registry_schema: a new version of the registry changes the one value that member admits, and so the envelope's schema and its digest, without raising the envelope's own version. A program that holds the envelope's schema takes it again when the registry's version changes, and checks it against the digest the registry names.

The operations and the refusal codes are closed sets, changed only by a decision of the specification. An operation not served from data becomes served without a new version of the registry: its refusal gives way to answers.

There is no period of notice and no deprecation window: a change is published with the release that makes it, on this page and in the schemas it links.

Since , the registry, lex-v3-operation-registry/2, names each refusal code's payload schema and gives out_of_corpus_scope its reason and who to ask; lex-v3-operation-registry/1 named neither.

The schemas

Each schema is a JSON Schema document (https://json-schema.org/draft/2020-12/schema), served here byte for byte as the server holds it, with the digest of its bytes; when the server loads a schema, it checks that digest against the one the registry names.