Skip to main content
Glama

Get EU Document

eurlex_get_document
Read-onlyIdempotent

Fetch the metadata and full text of an EU act or case-law record by CELEX number, ELI URI, or work URI. Returns structured metadata (title, date, type, author institution, Advocates General, legal basis, EuroVoc subjects, in-force status and, for an act not in force, its repealing acts, end of validity, or pending entry into force; for case law, the ECLI and the formation, referring court, subject matter, and case reference parsed from the title) plus the body as HTML, Markdown, or Formex4 XML, defaulting to English with automatic fallback. Every body returned in one call is capped at 100,000 characters — paged and full windows page onward with offset/limit; use outline: true for a heading map and select to pull specific articles, chapters, recitals, or annexes of an act, or the headed sections and operative part of a judgment or order, reading a selected section on its own from the offset and chars in selected_sections.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum characters to return in this window ("paged" mode only; select ignores it). Default 25000, max 100000. Follow has_more and the returned offsets until false to reconstruct the complete body.
formatNoContent format: "html" for the act text as served by EUR-Lex (default), "markdown" for that HTML converted to clean Markdown server-side, or "xml" for Formex4 structured XML.html
offsetNoCharacter offset into the body where the returned window starts ("paged" mode only). Page forward by setting offset = content_offset + content_chars_returned from the previous call. Offsets are format-specific: an offset is only valid against the same format it was measured in — keep format constant when paging.
selectNoReturn only the text of specific sections by type and number, instead of a raw character window (Roman and Arabic numbers are equivalent; a number may carry an English kind word or one in the language served, e.g. "Article 5", "Artikel 5", "5. cikk"). For case law, select headed sections by position or the operative part. Sections are located in the body of the requested format, so pair select with the same format used for any outline. A section inside another selected section (an article in a selected chapter) is returned once, within the enclosing one. A section that cannot be located — including a number that appears only in text an amending act inserts into another act — is reported in selection.missed with no wrong text returned. offset and limit do not apply: the joined sections are capped at 100000 characters with no continuation, and each section stays readable on its own from its offset and chars in selected_sections. Ignored when outline is true or in content_mode "metadata_only".
eli_uriNoWork-level ELI URI of the act to fetch (e.g. http://data.europa.eu/eli/reg/2016/679, with or without the /oj suffix). Provide exactly one of celex_number, eli_uri, or work_uri.
outlineNoReturn a structural outline of the act — chapters, sections, articles, annexes, and the preamble's recitals as a heading list, each with its character offset — instead of body text. The recitals appear as one entry spanning the run (e.g. "Recitals 1–173") at the first recital's offset unless include_recitals is true. Headings of text an amending act inserts into another act are not listed. For case law, the outline lists each top-level section heading ("Legal context", "Costs") and, for a judgment or order, the operative part (the ruling). Read a section by paging with its offset, keeping the same format: outline offsets are measured in the requested format's body and land in the wrong place under any other format. Ignores offset/limit and select; no detectable structure returns an empty outline. Not applied in content_mode "metadata_only".
resolveNoWhich version to serve. "as_requested" (default) returns the exact CELEX requested; "current_consolidated" serves the newest consolidated version in effect of the requested act — or, for a consolidated CELEX, of its base act — echoing the request in requested_celex, and is a no-op when none exists (with a notice when the act's only consolidated versions are dated in the future). Either way, is_superseded / current_consolidated_celex / consolidated_as_of describe the text served.as_requested
languageNoOne of the 24 supported two-letter EUR-Lex language codes (e.g. EN, FR, DE), accepted case-insensitively and normalized to uppercase. Defaults to EN, and falls back to EN if the requested language is unavailable.EN
work_uriNoCELLAR work resource URI to fetch (e.g. http://publications.europa.eu/resource/cellar/3e485e15-11bd-11e6-ba9a-01aa75ed71a1) — the form returned by eurlex_lookup_celex, eurlex_get_relations, and eurlex_search_documents. A work carrying several CELEX numbers (a national implementing measure, one per directive it was notified against) is served under its lowest, with a notice giving the count; each names the same document, so pass celex_number to serve a specific one. Provide exactly one of celex_number, eli_uri, or work_uri.
celex_numberNoCELEX number of the act to fetch (e.g. 32016R0679 for GDPR). Provide exactly one of celex_number, eli_uri, or work_uri.
content_modeNoHow much of the body to return. "paged" (default) returns an offset/limit window; "full" requests from the start and returns at most 100000 characters with continuation metadata when more exists; "metadata_only" skips the content fetch. offset and limit apply only to "paged".paged
include_recitalsNoList every recital as its own outline entry, with its own offset, instead of one entry for the run. Applies only when outline is true; select reaches a single recital either way.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
capNoMaximum body characters allowed in the window.
dateNoDocument date in ISO 8601 format (YYYY-MM-DD).
ecliNoEuropean Case Law Identifier of a case-law record (e.g. "ECLI:EU:C:2014:317"), as eurlex_lookup_celex reports it: the work's own, or the lowest another work holding the same CELEX records. Absent for legislation.
errorNoPresent when the call failed. Absent on success.
shownNoNumber of body characters returned.
titleNoDocument title in the language the body is served in (see language), or in English when CELLAR records no title in that language. Case law is titled in English whatever the language, parsed from its English CELLAR title: the parties (e.g. "Google Spain SL and Google Inc. v Agencia Española de Protección de Datos (AEPD) and Mario Costeja González."), or the court/AG descriptor when the case names none, with the rest in formation, referring_court, subject_matter, and case_reference, when the parser places the title whole; otherwise the raw "#"-delimited English title, or the served language's raw title when there is no English one. Absent for some older works and judgments.
noticeNoHow to retrieve the remaining document content; when a work_uri carries several CELEX numbers, how many it carries and which one was served; and, when no consolidated version is in effect yet, that the consolidated text served does not apply yet, or that resolve "current_consolidated" served the base act.
contentNoBody content of the act in the requested format and language. In "paged" mode this is the requested window; in "full" mode it starts at zero; under select it is the matched sections joined in document order, each source character once — a section inside another selected section (an article in a selected chapter) is carried inside the enclosing one. Every one is capped at 100000 characters. Omitted in "metadata_only" mode, when the window is empty, or when content is unavailable.
outlineNoStructural outline of the act. Present only when outline is true; an empty array means no structure was detected.
has_moreNoTrue when body content exists beyond the returned contiguous window. Continue in "paged" mode with offset = content_offset + content_chars_returned until false. Always false in "metadata_only" mode, and always false for outline and select responses, where that recipe cannot resume across disjoint slices — a cut selection is disclosed through the truncated enrichment instead.
in_forceNoWhether the act is currently in force — for a consolidated text, whether its base act is. When false, repealed_by, entry_into_force, and end_of_validity give the reason where CELLAR records one: an explicit repeal, an entry into force still ahead, or an end of validity — past for an expired act, possibly still ahead for one not yet in force. Some acts not in force carry none of them.
languageNoLanguage code of the returned content.
work_uriNoCELLAR work URI.
formationNoCase law: the formation that decided, from the title's leading segment, verbatim (e.g. "Grand Chamber"), or "President", "Vice-President", or "President of the Second Chamber" for an order issued by that office. Absent when the title names none.
selectionNoOutcome of a structural selection. Present only when select was used; content holds the matched sections joined in document order, a nested section's text once inside its enclosing section, capped at 100000 characters. When the cap cuts the join, a trailing matched section may be partly or wholly absent from content — read selected_sections for each one's own address.
truncatedNoTrue when the returned body window was capped.
legal_basisNoLegal basis acts for this work — for a consolidated text, its base act's. Absent when none are recorded.
repealed_byNoCELEX numbers of the acts that explicitly repeal this one, the relation eurlex_get_relations names repealed_by (implicit repeals are listed there as implicitly_repealed_by). Present only when in_force is false; for a consolidated text, its base act's.
celex_numberNoConfirmed CELEX number for the retrieved work.
content_modeNoContent mode applied to this response: "metadata_only", "paged", or "full".
is_supersededNoWhether a newer consolidated version (an unofficial reading aid merging later amendments) than the text served is in effect, so this text may lack those amendments. False when the text served is the newest consolidated version in effect, or a consolidated version dated after it that does not apply yet. Not a repeal/replacement signal — the base act remains the law and may still be in force (see in_force). Present whenever the act has a consolidated version in effect; absent otherwise.
resource_typeNoHuman-readable document type label (e.g. "Regulation", "Directive"). Absent for some older works.
base_act_celexNoCELEX of the base act a consolidated text consolidates (e.g. 32024R1689), linked through CELLAR rather than derived from the consolidated CELEX. Its authors, in-force status, legal basis, and EuroVoc subjects are reported here in place of the consolidation's own. Absent for a base act, and for a consolidated text whose base act is unlinked or carries no CELEX.
case_referenceNoCase law: the case reference from the title (e.g. "Case C-131/12.").
content_formatNoFormat of the returned content: "html", "markdown", or "xml".
content_offsetNoCharacter offset where the returned contiguous window begins. Present in "paged" and "full" modes. Absent for outline and select responses, whose content is not a contiguous span — read selected_sections for each matched section's own offset.
content_statusNoBody resolution status: "not_requested" for metadata-only calls, "available" when a body was resolved, or "unavailable" after ordinary resolution attempts returned no usable body.
subject_matterNoCase law: the subject-matter keyword list from the title (e.g. "Personal data – Protection of individuals …").
end_of_validityNoDate (YYYY-MM-DD) the act's validity ends or ended: past for an expired act, and possibly in the future for one not yet in force (read it with entry_into_force), so on its own it does not mean the act expired. Present only when in_force is false and CELLAR records an actual date rather than its open-ended 9999-12-31; for a consolidated text, its base act's.
referring_courtNoCase law: the national court that referred a preliminary ruling, from the title (e.g. "Audiencia Nacional"). Absent on direct actions and appeals.
requested_celexNoThe originally requested CELEX, echoed when resolve "current_consolidated" served a different consolidated version. celex_number holds the CELEX actually served. Absent when the served work is the one requested.
entry_into_forceNoEarliest entry-into-force date (YYYY-MM-DD) of an act not yet in force. Present only when in_force is false and that date is after today (UTC); for a consolidated text, its base act's.
eurovoc_subjectsNoEuroVoc subject classifications — for a consolidated text, its base act's. Absent when none are recorded.
advocates_generalNoAdvocates General who delivered this case-law record, by surname as CELLAR records it (e.g. ["Jääskinen"]), sorted. A few Opinions of the Court list several. Absent for legislation and for case law with none recorded.
content_availableNoWhether body content was fetched from EUR-Lex. False in "metadata_only" mode (no fetch attempted) — use content_mode to distinguish "not requested" from "unavailable upstream".
language_fallbackNoHuman-readable note explaining the fallback that occurred (e.g. "Requested FR content unavailable; returned EN"). Present only when a fallback happened.
selected_sectionsNoSource address of each distinct section the selection located, in document order. Present only when select was used. A section nested inside another selected section keeps its own entry, though its text appears in content only once, inside the enclosing section. A selection is a set of slices, not a contiguous window, so these addresses — not content_offset — are how a caller navigates one; every section stays individually reachable even when the cap cut its text.
author_institutionNoPrimary (first) author, by the English label of its CELLAR authority code: an EU institution or body (e.g. "European Parliament", "Court of Justice", "European Union"), a member state on a national implementing measure (e.g. "Netherlands"), an MEP by surname on a parliamentary question (e.g. "VAN MIERT"), "Provisional data" for a consolidated text with no linked base act, or for a national-court decision the deciding court (e.g. "Supremo Tribunal de Justiça"). A code with no English label shows the last segment of its code. Each label is accepted by the author_institution filter of eurlex_search_documents. For co-legislated acts, prefer author_institutions for the complete set. For a consolidated text, the base act's (see base_act_celex). Absent when not recorded, and for an AG opinion whose only recorded author is the Advocate General.
consolidated_as_ofNoConsolidation date of current_consolidated_celex in ISO 8601 (YYYY-MM-DD). Present whenever is_superseded is.
requested_languageNoOriginally requested language code when English fallback changed the effective language reported in language.
structure_detectedNoWhether any structure was parsed from the body. Present when outline or select was used; false means no detectable chapter/article/annex structure, or for case law no section heading or operative part — read it via offset/limit or content_mode "full".
author_institutionsNoAll authors, labelled as in author_institution and listed once each, for acts adopted by more than one body (e.g. ["European Parliament", "Council of the European Union"]) or signed by several states. Advocates General appear in advocates_general instead. For a consolidated text, the base act's. Absent when none recorded.
content_chars_totalNoTotal character length of the full document body. Present when content was fetched and available; use with content_offset to page through the entire act.
content_chars_returnedNoNumber of body characters returned in this response (equals content length). Present when a body was fetched and available.
current_consolidated_celexNoCELEX of the act's newest consolidated version in effect (e.g. 02014R0833-20260424) — fetch it with eurlex_get_document, or pass resolve "current_consolidated". A consolidation dated in the future is never this version. Present whenever is_superseded is.
content_unavailability_reasonNoWhy content_status is "unavailable": no representation exists, the upstream request failed, or a multipart Formex body could not be assembled completely.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed20 schema fields changed
    • changedInput schema / properties / outline / description
      Previous value: -"Return a structural outline of the act — chapters, sections, articles, annexes, and the preamble's recitals as a heading list, each with its character offset — instead of body text. The recitals appear as one entry spanning the run (e.g. \"Recitals 1–173\") at the first recital's offset unless include_recitals is true. Headings of text an amending act inserts into another act are not listed. Read a section by paging with its offset, keeping the same format: outline offsets are measured in the requested format's body and land in the wrong place under any other format. Ignores offset/limit and select; no detectable structure returns an empty outline. Not applied in content_mode \"metadata_only\"."New value: +"Return a structural outline of the act — chapters, sections, articles, annexes, and the preamble's recitals as a heading list, each with its character offset — instead of body text. The recitals appear as one entry spanning the run (e.g. \"Recitals 1–173\") at the first recital's offset unless include_recitals is true. Headings of text an amending act inserts into another act are not listed. For case law, the outline lists each top-level section heading (\"Legal context\", \"Costs\") and, for a judgment or order, the operative part (the ruling). Read a section by paging with its offset, keeping the same format: outline offsets are measured in the requested format's body and land in the wrong place under any other format. Ignores offset/limit and select; no detectable structure returns an empty outline. Not applied in content_mode \"metadata_only\"."
    • changedInput schema / properties / select / description
      Previous value: -"Return only the text of specific sections by type and number, instead of a raw character window (Roman and Arabic numbers are equivalent; a number may carry an English kind word or one in the language served, e.g. \"Article 5\", \"Artikel 5\", \"5. cikk\"). Sections are located in the body of the requested format, so pair select with the same format used for any outline. A section inside another selected section (an article in a selected chapter) is returned once, within the enclosing one. A section that cannot be located — including a number that appears only in text an amending act inserts into another act — is reported in selection.missed with no wrong text returned. offset and limit do not apply: the joined sections are capped at 100000 characters with no continuation, and each section stays readable on its own from its offset and chars in selected_sections. Ignored when outline is true or in content_mode \"metadata_only\"."New value: +"Return only the text of specific sections by type and number, instead of a raw character window (Roman and Arabic numbers are equivalent; a number may carry an English kind word or one in the language served, e.g. \"Article 5\", \"Artikel 5\", \"5. cikk\"). For case law, select headed sections by position or the operative part. Sections are located in the body of the requested format, so pair select with the same format used for any outline. A section inside another selected section (an article in a selected chapter) is returned once, within the enclosing one. A section that cannot be located — including a number that appears only in text an amending act inserts into another act — is reported in selection.missed with no wrong text returned. offset and limit do not apply: the joined sections are capped at 100000 characters with no continuation, and each section stays readable on its own from its offset and chars in selected_sections. Ignored when outline is true or in content_mode \"metadata_only\"."
    • addedInput schema / properties / select / properties / headings
      Added value: +{
      +  "description": "Case law: comma-separated positions of section headings, as numbered in the outline, e.g. \"2\" or \"1,4\". A section runs to the next heading or the operative part.",
      +  "type": "string"
      +}
    • addedInput schema / properties / select / properties / operative_part
      Added value: +{
      +  "description": "Case law: true to return a judgment's or order's operative part (the ruling) to the end of the body: from its opening words (\"On those grounds, …\") in a modern body, from the \"Operative part\" section in a legacy one.",
      +  "type": "boolean"
      +}
    • changedOutput schema / properties / author_institution / description
      Previous value: -"Human-readable name of the primary (first) originating institution — an EU institution (e.g. \"European Parliament\", \"Court of Justice\"), or for a national-court decision the deciding court (e.g. \"Supremo Tribunal de Justiça\"). For co-legislated acts, prefer author_institutions for the complete set. For a consolidated text, the base act's (see base_act_celex). Absent when not recorded, and for an AG opinion whose only recorded author is the Advocate General."New value: +"Primary (first) author, by the English label of its CELLAR authority code: an EU institution or body (e.g. \"European Parliament\", \"Court of Justice\", \"European Union\"), a member state on a national implementing measure (e.g. \"Netherlands\"), an MEP by surname on a parliamentary question (e.g. \"VAN MIERT\"), \"Provisional data\" for a consolidated text with no linked base act, or for a national-court decision the deciding court (e.g. \"Supremo Tribunal de Justiça\"). A code with no English label shows the last segment of its code. Each label is accepted by the author_institution filter of eurlex_search_documents. For co-legislated acts, prefer author_institutions for the complete set. For a consolidated text, the base act's (see base_act_celex). Absent when not recorded, and for an AG opinion whose only recorded author is the Advocate General."
    • changedOutput schema / properties / author_institutions / description
      Previous value: -"All originating institutions, for acts adopted by more than one body (e.g. [\"European Parliament\", \"Council of the EU\"]). Institutions only: an Advocate General appears in advocates_general. For a consolidated text, the base act's. Absent when none recorded."New value: +"All authors, labelled as in author_institution and listed once each, for acts adopted by more than one body (e.g. [\"European Parliament\", \"Council of the European Union\"]) or signed by several states. Advocates General appear in advocates_general instead. For a consolidated text, the base act's. Absent when none recorded."
    • changedOutput schema / properties / author_institutions / items / description
      Previous value: -"Human-readable institution name."New value: +"Author label, as in author_institution."
    • addedOutput schema / properties / case_reference
      Added value: +{
      +  "description": "Case law: the case reference from the title (e.g. \"Case C-131/12.\").",
      +  "type": "string"
      +}
    • addedOutput schema / properties / ecli
      Added value: +{
      +  "description": "European Case Law Identifier of a case-law record (e.g. \"ECLI:EU:C:2014:317\"), as eurlex_lookup_celex reports it: the work's own, or the lowest another work holding the same CELEX records. Absent for legislation.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / formation
      Added value: +{
      +  "description": "Case law: the formation that decided, from the title's leading segment, verbatim (e.g. \"Grand Chamber\"), or \"President\", \"Vice-President\", or \"President of the Second Chamber\" for an order issued by that office. Absent when the title names none.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / outline / items / properties / kind / description
      Previous value: -"Structural unit kind: \"chapter\", \"section\", \"article\", \"annex\", or \"recital\"."New value: +"Structural unit kind: \"chapter\", \"section\", \"article\", \"annex\", or \"recital\" in an act; \"heading\" or \"operative_part\" in case law."
    • changedOutput schema / properties / outline / items / properties / label / description
      Previous value: -"Human label in English whatever the language and format, e.g. \"Article 17\", \"CHAPTER IV\", \"Recitals 1–173\" — the form selection.matched reports; only an xml article with no number to read keeps its own heading text."New value: +"Human label in English whatever the language and format, e.g. \"Article 17\", \"CHAPTER IV\", \"Recitals 1–173\" — the form selection.matched reports; only an xml article with no number to read keeps its own heading text. A case-law heading keeps its text as served (e.g. \"Legal context\", \"Sur les dépens\"); the operative part is \"Operative part\"."
    • changedOutput schema / properties / outline / items / properties / number / description
      Previous value: -"Numbering token, the same in every language (e.g. \"17\", \"6A\", \"IV\" — Roman numerals in Latin letters, French \"premier\" as \"1\"); empty for a lone unnumbered annex. A recital entry covering a run reads as a range, first–last (e.g. \"1–173\"), unless include_recitals is true."New value: +"Numbering token, the same in every language (e.g. \"17\", \"6A\", \"IV\" — Roman numerals in Latin letters, French \"premier\" as \"1\"); empty for a lone unnumbered annex. A recital entry covering a run reads as a range, first–last (e.g. \"1–173\"), unless include_recitals is true. A case-law heading is numbered by its 1-based position, the number select.headings takes; empty for the operative part."
    • addedOutput schema / properties / referring_court
      Added value: +{
      +  "description": "Case law: the national court that referred a preliminary ruling, from the title (e.g. \"Audiencia Nacional\"). Absent on direct actions and appeals.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / selected_sections / items / properties / label / description
      Previous value: -"Section label in English whatever the language and format, e.g. \"Article 17\"."New value: +"Section label as in the outline, e.g. \"Article 17\", or a case-law heading's served text."
    • changedOutput schema / properties / selection / properties / matched / description
      Previous value: -"Labels of the sections located in the body, in document order — in English whatever the language and format, as in the outline."New value: +"Labels of the sections located in the body, in document order, as in the outline — in English whatever the language and format, except a case-law heading, which keeps its text as served."
    • changedOutput schema / properties / selection / properties / requested / description
      Previous value: -"Section descriptors requested, in English whatever the language, e.g. [\"Article 17\", \"CHAPTER IV\"]."New value: +"Section descriptors requested, in English whatever the language, e.g. [\"Article 17\", \"CHAPTER IV\"], or [\"Heading 2\", \"Operative part\"] for case law."
    • changedOutput schema / properties / structure_detected / description
      Previous value: -"Whether any act structure was parsed from the body. Present when outline or select was used; false means no detectable chapter/article/annex structure — read it via offset/limit or content_mode \"full\"."New value: +"Whether any structure was parsed from the body. Present when outline or select was used; false means no detectable chapter/article/annex structure, or for case law no section heading or operative part — read it via offset/limit or content_mode \"full\"."
    • addedOutput schema / properties / subject_matter
      Added value: +{
      +  "description": "Case law: the subject-matter keyword list from the title (e.g. \"Personal data – Protection of individuals …\").",
      +  "type": "string"
      +}
    • changedOutput schema / properties / title / description
      Previous value: -"Document title in the requested language (absent for some older works and judgments)."New value: +"Document title in the language the body is served in (see language), or in English when CELLAR records no title in that language. Case law is titled in English whatever the language, parsed from its English CELLAR title: the parties (e.g. \"Google Spain SL and Google Inc. v Agencia Española de Protección de Datos (AEPD) and Mario Costeja González.\"), or the court/AG descriptor when the case names none, with the rest in formation, referring_court, subject_matter, and case_reference, when the parser places the title whole; otherwise the raw \"#\"-delimited English title, or the served language's raw title when there is no English one. Absent for some older works and judgments."
  2. Changed9 schema fields changed
    • addedInput schema / properties / include_recitals
      Added value: +{
      +  "default": false,
      +  "description": "List every recital as its own outline entry, with its own offset, instead of one entry for the run. Applies only when outline is true; select reaches a single recital either way.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / limit / description
      Previous value: -"Maximum characters to return in this window (\"paged\" mode only). Default 25000, max 100000. Follow has_more and the returned offsets until false to reconstruct the complete body."New value: +"Maximum characters to return in this window (\"paged\" mode only; select ignores it). Default 25000, max 100000. Follow has_more and the returned offsets until false to reconstruct the complete body."
    • changedInput schema / properties / outline / description
      Previous value: -"Return a structural outline of the act — chapters, sections, articles, annexes, and recitals as a heading list, each with its character offset — instead of body text. Read a section by paging with its offset, keeping the same format: outline offsets are measured in the requested format's body and land in the wrong place under any other format. Ignores offset/limit and select; no detectable structure returns an empty outline. Not applied in content_mode \"metadata_only\"."New value: +"Return a structural outline of the act — chapters, sections, articles, annexes, and the preamble's recitals as a heading list, each with its character offset — instead of body text. The recitals appear as one entry spanning the run (e.g. \"Recitals 1–173\") at the first recital's offset unless include_recitals is true. Headings of text an amending act inserts into another act are not listed. Read a section by paging with its offset, keeping the same format: outline offsets are measured in the requested format's body and land in the wrong place under any other format. Ignores offset/limit and select; no detectable structure returns an empty outline. Not applied in content_mode \"metadata_only\"."
    • changedInput schema / properties / select / description
      Previous value: -"Return only the text of specific sections by type and number, instead of a raw character window (Roman and Arabic numbers are equivalent). Sections are located in the body of the requested format, so pair select with the same format used for any outline. A section inside another selected section (an article in a selected chapter) is returned once, within the enclosing one. A section that cannot be located is reported in selection.missed with no wrong text returned. Ignored when outline is true or in content_mode \"metadata_only\"."New value: +"Return only the text of specific sections by type and number, instead of a raw character window (Roman and Arabic numbers are equivalent; a number may carry an English kind word or one in the language served, e.g. \"Article 5\", \"Artikel 5\", \"5. cikk\"). Sections are located in the body of the requested format, so pair select with the same format used for any outline. A section inside another selected section (an article in a selected chapter) is returned once, within the enclosing one. A section that cannot be located — including a number that appears only in text an amending act inserts into another act — is reported in selection.missed with no wrong text returned. offset and limit do not apply: the joined sections are capped at 100000 characters with no continuation, and each section stays readable on its own from its offset and chars in selected_sections. Ignored when outline is true or in content_mode \"metadata_only\"."
    • changedOutput schema / properties / outline / items / properties / label / description
      Previous value: -"Human label, e.g. \"Article 17\", \"CHAPTER IV\"."New value: +"Human label in English whatever the language and format, e.g. \"Article 17\", \"CHAPTER IV\", \"Recitals 1–173\" — the form selection.matched reports; only an xml article with no number to read keeps its own heading text."
    • changedOutput schema / properties / outline / items / properties / number / description
      Previous value: -"Numbering token as rendered (e.g. \"17\", \"IV\"); empty for a lone unnumbered annex."New value: +"Numbering token, the same in every language (e.g. \"17\", \"6A\", \"IV\" — Roman numerals in Latin letters, French \"premier\" as \"1\"); empty for a lone unnumbered annex. A recital entry covering a run reads as a range, first–last (e.g. \"1–173\"), unless include_recitals is true."
    • changedOutput schema / properties / selected_sections / items / properties / label / description
      Previous value: -"Section descriptor, e.g. \"Article 17\"."New value: +"Section label in English whatever the language and format, e.g. \"Article 17\"."
    • changedOutput schema / properties / selection / properties / matched / description
      Previous value: -"Section descriptors located in the body, in document order."New value: +"Labels of the sections located in the body, in document order — in English whatever the language and format, as in the outline."
    • changedOutput schema / properties / selection / properties / requested / description
      Previous value: -"Section descriptors requested, e.g. [\"Article 17\", \"CHAPTER IV\"]."New value: +"Section descriptors requested, in English whatever the language, e.g. [\"Article 17\", \"CHAPTER IV\"]."
  3. Changed16 schema fields changed
    • changedInput schema / properties / resolve / description
      Previous value: -"Which version to serve for a base act with newer consolidated versions. \"as_requested\" (default) returns the exact CELEX requested; \"current_consolidated\" serves the newest consolidated version instead (echoing the request in requested_celex), a no-op when none exists. Either way, is_superseded / current_consolidated_celex / consolidated_as_of flag a stale base act."New value: +"Which version to serve. \"as_requested\" (default) returns the exact CELEX requested; \"current_consolidated\" serves the newest consolidated version in effect of the requested act — or, for a consolidated CELEX, of its base act — echoing the request in requested_celex, and is a no-op when none exists (with a notice when the act's only consolidated versions are dated in the future). Either way, is_superseded / current_consolidated_celex / consolidated_as_of describe the text served."
    • changedInput schema / properties / work_uri / description
      Previous value: -"CELLAR work resource URI to fetch (e.g. http://publications.europa.eu/resource/cellar/3e485e15-11bd-11e6-ba9a-01aa75ed71a1) — the form returned by eurlex_lookup_celex, eurlex_get_relations, and eurlex_search_documents. Provide exactly one of celex_number, eli_uri, or work_uri."New value: +"CELLAR work resource URI to fetch (e.g. http://publications.europa.eu/resource/cellar/3e485e15-11bd-11e6-ba9a-01aa75ed71a1) — the form returned by eurlex_lookup_celex, eurlex_get_relations, and eurlex_search_documents. A work carrying several CELEX numbers (a national implementing measure, one per directive it was notified against) is served under its lowest, with a notice giving the count; each names the same document, so pass celex_number to serve a specific one. Provide exactly one of celex_number, eli_uri, or work_uri."
    • changedOutput schema / properties / author_institution / description
      Previous value: -"Human-readable name of the primary (first) originating institution — an EU institution (e.g. \"European Parliament\", \"Court of Justice\"), or for a national-court decision the deciding court (e.g. \"Supremo Tribunal de Justiça\"). For co-legislated acts, prefer author_institutions for the complete set. Absent when not recorded, and for an AG opinion whose only recorded author is the Advocate General."New value: +"Human-readable name of the primary (first) originating institution — an EU institution (e.g. \"European Parliament\", \"Court of Justice\"), or for a national-court decision the deciding court (e.g. \"Supremo Tribunal de Justiça\"). For co-legislated acts, prefer author_institutions for the complete set. For a consolidated text, the base act's (see base_act_celex). Absent when not recorded, and for an AG opinion whose only recorded author is the Advocate General."
    • changedOutput schema / properties / author_institutions / description
      Previous value: -"All originating institutions, for acts adopted by more than one body (e.g. [\"European Parliament\", \"Council of the EU\"]). Institutions only: an Advocate General appears in advocates_general. Absent when none recorded."New value: +"All originating institutions, for acts adopted by more than one body (e.g. [\"European Parliament\", \"Council of the EU\"]). Institutions only: an Advocate General appears in advocates_general. For a consolidated text, the base act's. Absent when none recorded."
    • addedOutput schema / properties / base_act_celex
      Added value: +{
      +  "description": "CELEX of the base act a consolidated text consolidates (e.g. 32024R1689), linked through CELLAR rather than derived from the consolidated CELEX. Its authors, in-force status, legal basis, and EuroVoc subjects are reported here in place of the consolidation's own. Absent for a base act, and for a consolidated text whose base act is unlinked or carries no CELEX.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / consolidated_as_of / description
      Previous value: -"Consolidation date of current_consolidated_celex in ISO 8601 (YYYY-MM-DD). Present only when is_superseded is true."New value: +"Consolidation date of current_consolidated_celex in ISO 8601 (YYYY-MM-DD). Present whenever is_superseded is."
    • changedOutput schema / properties / current_consolidated_celex / description
      Previous value: -"CELEX of the newest consolidated version of the requested base act (e.g. 02014R0833-20260424) — fetch it with eurlex_get_document, or pass resolve \"current_consolidated\". Present only when is_superseded is true."New value: +"CELEX of the act's newest consolidated version in effect (e.g. 02014R0833-20260424) — fetch it with eurlex_get_document, or pass resolve \"current_consolidated\". A consolidation dated in the future is never this version. Present whenever is_superseded is."
    • addedOutput schema / properties / end_of_validity
      Added value: +{
      +  "description": "Date (YYYY-MM-DD) the act's validity ends or ended: past for an expired act, and possibly in the future for one not yet in force (read it with entry_into_force), so on its own it does not mean the act expired. Present only when in_force is false and CELLAR records an actual date rather than its open-ended 9999-12-31; for a consolidated text, its base act's.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / entry_into_force
      Added value: +{
      +  "description": "Earliest entry-into-force date (YYYY-MM-DD) of an act not yet in force. Present only when in_force is false and that date is after today (UTC); for a consolidated text, its base act's.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / eurovoc_subjects / description
      Previous value: -"EuroVoc subject classifications. Absent when none are recorded."New value: +"EuroVoc subject classifications — for a consolidated text, its base act's. Absent when none are recorded."
    • changedOutput schema / properties / in_force / description
      Previous value: -"Whether the act is currently in force."New value: +"Whether the act is currently in force — for a consolidated text, whether its base act is. When false, repealed_by, entry_into_force, and end_of_validity give the reason where CELLAR records one: an explicit repeal, an entry into force still ahead, or an end of validity — past for an expired act, possibly still ahead for one not yet in force. Some acts not in force carry none of them."
    • changedOutput schema / properties / is_superseded / description
      Previous value: -"True when a newer consolidated version of the requested base act exists (an unofficial reading aid merging later amendments), so the returned text may not include those amendments. Not a repeal/replacement signal — the base act remains the law and may still be in force (see in_force). Absent when the act has no consolidated version, or is itself one."New value: +"Whether a newer consolidated version (an unofficial reading aid merging later amendments) than the text served is in effect, so this text may lack those amendments. False when the text served is the newest consolidated version in effect, or a consolidated version dated after it that does not apply yet. Not a repeal/replacement signal — the base act remains the law and may still be in force (see in_force). Present whenever the act has a consolidated version in effect; absent otherwise."
    • changedOutput schema / properties / legal_basis / description
      Previous value: -"Legal basis acts for this work. Absent when none are recorded."New value: +"Legal basis acts for this work — for a consolidated text, its base act's. Absent when none are recorded."
    • changedOutput schema / properties / notice / description
      Previous value: -"How to retrieve the remaining document content."New value: +"How to retrieve the remaining document content; when a work_uri carries several CELEX numbers, how many it carries and which one was served; and, when no consolidated version is in effect yet, that the consolidated text served does not apply yet, or that resolve \"current_consolidated\" served the base act."
    • addedOutput schema / properties / repealed_by
      Added value: +{
      +  "description": "CELEX numbers of the acts that explicitly repeal this one, the relation eurlex_get_relations names repealed_by (implicit repeals are listed there as implicitly_repealed_by). Present only when in_force is false; for a consolidated text, its base act's.",
      +  "items": {
      +    "description": "CELEX number of a repealing act.",
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / requested_celex / description
      Previous value: -"The originally requested CELEX, echoed when resolve \"current_consolidated\" served a different (consolidated) work. celex_number holds the CELEX actually served. Absent when the served work is the one requested."New value: +"The originally requested CELEX, echoed when resolve \"current_consolidated\" served a different consolidated version. celex_number holds the CELEX actually served. Absent when the served work is the one requested."
  4. Changed4 schema fields changed
    • addedOutput schema / properties / advocates_general
      Added value: +{
      +  "description": "Advocates General who delivered this case-law record, by surname as CELLAR records it (e.g. [\"Jääskinen\"]), sorted. A few Opinions of the Court list several. Absent for legislation and for case law with none recorded.",
      +  "items": {
      +    "description": "Advocate General surname, as CELLAR records it.",
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / author_institution / description
      Previous value: -"Human-readable name of the primary (first) originating EU institution (e.g. \"European Parliament\", \"Council of the EU\"). For co-legislated acts, prefer author_institutions for the complete set. Absent when not recorded."New value: +"Human-readable name of the primary (first) originating institution — an EU institution (e.g. \"European Parliament\", \"Court of Justice\"), or for a national-court decision the deciding court (e.g. \"Supremo Tribunal de Justiça\"). For co-legislated acts, prefer author_institutions for the complete set. Absent when not recorded, and for an AG opinion whose only recorded author is the Advocate General."
    • changedOutput schema / properties / author_institutions / description
      Previous value: -"All originating EU institutions, for co-legislated acts adopted by more than one body (e.g. [\"European Parliament\", \"Council of the EU\"]). Absent when none recorded."New value: +"All originating institutions, for acts adopted by more than one body (e.g. [\"European Parliament\", \"Council of the EU\"]). Institutions only: an Advocate General appears in advocates_general. Absent when none recorded."
    • changedOutput schema / properties / author_institutions / items / description
      Previous value: -"Human-readable EU institution name."New value: +"Human-readable institution name."
  5. Changed4 schema fields changed
    • changedInput schema / properties / select / description
      Previous value: -"Return only the text of specific sections by type and number, instead of a raw character window (Roman and Arabic numbers are equivalent). Sections are located in the body of the requested format, so pair select with the same format used for any outline. A section that cannot be located is reported in selection.missed with no wrong text returned. Ignored when outline is true or in content_mode \"metadata_only\"."New value: +"Return only the text of specific sections by type and number, instead of a raw character window (Roman and Arabic numbers are equivalent). Sections are located in the body of the requested format, so pair select with the same format used for any outline. A section inside another selected section (an article in a selected chapter) is returned once, within the enclosing one. A section that cannot be located is reported in selection.missed with no wrong text returned. Ignored when outline is true or in content_mode \"metadata_only\"."
    • changedOutput schema / properties / content / description
      Previous value: -"Body content of the act in the requested format and language. In \"paged\" mode this is the requested window; in \"full\" mode it starts at zero; under select it is the matched sections joined in document order. Every one is capped at 100000 characters. Omitted in \"metadata_only\" mode, when the window is empty, or when content is unavailable."New value: +"Body content of the act in the requested format and language. In \"paged\" mode this is the requested window; in \"full\" mode it starts at zero; under select it is the matched sections joined in document order, each source character once — a section inside another selected section (an article in a selected chapter) is carried inside the enclosing one. Every one is capped at 100000 characters. Omitted in \"metadata_only\" mode, when the window is empty, or when content is unavailable."
    • changedOutput schema / properties / selected_sections / description
      Previous value: -"Source address of each section the selection sliced, in document order. Present only when select was used. A selection is a set of disjoint slices, not a contiguous window, so these addresses — not content_offset — are how a caller navigates one; every section stays individually reachable even when the cap cut its text."New value: +"Source address of each distinct section the selection located, in document order. Present only when select was used. A section nested inside another selected section keeps its own entry, though its text appears in content only once, inside the enclosing section. A selection is a set of slices, not a contiguous window, so these addresses — not content_offset — are how a caller navigates one; every section stays individually reachable even when the cap cut its text."
    • changedOutput schema / properties / selection / description
      Previous value: -"Outcome of a structural selection. Present only when select was used; content holds the matched sections joined in document order, capped at 100000 characters. When the cap cuts the join, a trailing matched section may be partly or wholly absent from content — read selected_sections for each one's own address."New value: +"Outcome of a structural selection. Present only when select was used; content holds the matched sections joined in document order, a nested section's text once inside its enclosing section, capped at 100000 characters. When the cap cuts the join, a trailing matched section may be partly or wholly absent from content — read selected_sections for each one's own address."
  6. Changed6 schema fields changed
    • changedOutput schema / properties / content / description
      Previous value: -"Body content of the act in the requested format and language. In \"paged\" mode this is the requested window; in \"full\" mode it starts at zero and is capped at 100000 characters. Omitted in \"metadata_only\" mode, when the window is empty, or when content is unavailable."New value: +"Body content of the act in the requested format and language. In \"paged\" mode this is the requested window; in \"full\" mode it starts at zero; under select it is the matched sections joined in document order. Every one is capped at 100000 characters. Omitted in \"metadata_only\" mode, when the window is empty, or when content is unavailable."
    • changedOutput schema / properties / content_offset / description
      Previous value: -"Character offset where the returned content window begins. Present when a body was fetched and available."New value: +"Character offset where the returned contiguous window begins. Present in \"paged\" and \"full\" modes. Absent for outline and select responses, whose content is not a contiguous span — read selected_sections for each matched section's own offset."
    • changedOutput schema / properties / has_more / description
      Previous value: -"True when body content exists beyond the returned window. Continue in \"paged\" mode with offset = content_offset + content_chars_returned until false. Always false in \"metadata_only\" mode."New value: +"True when body content exists beyond the returned contiguous window. Continue in \"paged\" mode with offset = content_offset + content_chars_returned until false. Always false in \"metadata_only\" mode, and always false for outline and select responses, where that recipe cannot resume across disjoint slices — a cut selection is disclosed through the truncated enrichment instead."
    • addedOutput schema / properties / selected_sections
      Added value: +{
      +  "description": "Source address of each section the selection sliced, in document order. Present only when select was used. A selection is a set of disjoint slices, not a contiguous window, so these addresses — not content_offset — are how a caller navigates one; every section stays individually reachable even when the cap cut its text.",
      +  "items": {
      +    "additionalProperties": false,
      +    "description": "One selected section, addressable on its own through the paging floor.",
      +    "properties": {
      +      "chars": {
      +        "description": "Characters the section spans in the source body — pass as limit alongside offset to read exactly this section. A section longer than the maximum window is read by paging forward from offset instead.",
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      },
      +      "label": {
      +        "description": "Section descriptor, e.g. \"Article 17\".",
      +        "type": "string"
      +      },
      +      "offset": {
      +        "description": "Character offset of the section in the full body of the requested format — pass as offset in a paged call to read it.",
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "label",
      +      "offset",
      +      "chars"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / selection / description
      Previous value: -"Outcome of a structural selection. Present only when select was used; content holds the matched sections joined in document order."New value: +"Outcome of a structural selection. Present only when select was used; content holds the matched sections joined in document order, capped at 100000 characters. When the cap cuts the join, a trailing matched section may be partly or wholly absent from content — read selected_sections for each one's own address."
    • changedOutput schema / properties / selection / properties / matched / description
      Previous value: -"Section descriptors found and returned in content, in document order."New value: +"Section descriptors located in the body, in document order."
  7. Changed12 schema fields changed
    • changedOutput schema / properties / eurovoc_subjects / description
      Previous value: -"EuroVoc subject classifications."New value: +"EuroVoc subject classifications. Absent when none are recorded."
    • addedOutput schema / properties / eurovoc_subjects / items / additionalProperties
      Added value: +false
    • changedOutput schema / properties / eurovoc_subjects / items / description
      Previous value: -"EuroVoc concept URI."New value: +"An EuroVoc subject: its concept URI plus its preferred label when available."
    • addedOutput schema / properties / eurovoc_subjects / items / properties
      Added value: +{
      +  "concept_uri": {
      +    "description": "EuroVoc concept URI (http://eurovoc.europa.eu/{id}), the exact value the eurovoc_concept filter of eurlex_search_documents accepts.",
      +    "type": "string"
      +  },
      +  "label": {
      +    "description": "EuroVoc preferred label in the requested language. Absent when the concept has no label in that language.",
      +    "type": "string"
      +  }
      +}
    • addedOutput schema / properties / eurovoc_subjects / items / required
      Added value: +[
      +  "concept_uri"
      +]
    • changedOutput schema / properties / eurovoc_subjects / items / type
      Previous value: -"string"New value: +"object"
    • changedOutput schema / properties / legal_basis / description
      Previous value: -"Legal basis acts for this work."New value: +"Legal basis acts for this work. Absent when none are recorded."
    • addedOutput schema / properties / legal_basis / items / additionalProperties
      Added value: +false
    • changedOutput schema / properties / legal_basis / items / description
      Previous value: -"CELEX number or URI of a legal basis act."New value: +"A legal basis act: its CELLAR work URI plus its CELEX number when recorded."
    • addedOutput schema / properties / legal_basis / items / properties
      Added value: +{
      +  "celex_number": {
      +    "description": "CELEX number of the legal basis act (e.g. 12012E016 for TFEU Article 16). Absent when CELLAR records no CELEX for the work.",
      +    "type": "string"
      +  },
      +  "work_uri": {
      +    "description": "CELLAR work URI of the legal basis act. When celex_number is present, pass either as work_uri or celex_number to eurlex_get_document to fetch that act; a basis with no CELEX is a CELLAR reference that may not resolve to a fetchable work.",
      +    "type": "string"
      +  }
      +}
    • addedOutput schema / properties / legal_basis / items / required
      Added value: +[
      +  "work_uri"
      +]
    • changedOutput schema / properties / legal_basis / items / type
      Previous value: -"string"New value: +"object"
  8. Changed2 schema fields changed
    • addedInput schema / properties / celex_number / anyOf
      Added value: +[
      +  {
      +    "const": "",
      +    "type": "string"
      +  },
      +  {
      +    "description": "CELEX number of the act (e.g. 32016R0679 for GDPR). Surrounding whitespace is trimmed and the value is uppercased before validation.",
      +    "pattern": "^[0-9A-Z][0-9A-Z()/_-]{5,}$",
      +    "type": "string"
      +  }
      +]
    • removedInput schema / properties / celex_number / type
      Removed value: -"string"
  9. Changed12 schema fields changed
    • changedInput schema / properties / content_mode / description
      Previous value: -"How much of the body to return. \"paged\" (default) returns a bounded character window (see offset/limit); \"full\" returns the entire body in one call (large acts can be hundreds of KB); \"metadata_only\" skips the content fetch. offset and limit apply only to \"paged\"."New value: +"How much of the body to return. \"paged\" (default) returns an offset/limit window; \"full\" requests from the start and returns at most 100000 characters with continuation metadata when more exists; \"metadata_only\" skips the content fetch. offset and limit apply only to \"paged\"."
    • changedInput schema / properties / language / description
      Previous value: -"Language code for document content (ISO 639-1 uppercase, e.g. EN, FR, DE). Defaults to EN, and falls back to EN if the requested language is unavailable."New value: +"One of the 24 supported two-letter EUR-Lex language codes (e.g. EN, FR, DE), accepted case-insensitively and normalized to uppercase. Defaults to EN, and falls back to EN if the requested language is unavailable."
    • changedInput schema / properties / language / pattern
      Previous value: -"^[A-Za-z]{2,3}$"New value: +"^(?:[Ee][Nn]|[Ff][Rr]|[Dd][Ee]|[Ee][Ss]|[Ii][Tt]|[Pp][Ll]|[Pp][Tt]|[Nn][Ll]|[Cc][Ss]|[Dd][Aa]|[Ee][Ll]|[Ee][Tt]|[Ff][Ii]|[Hh][Uu]|[Ll][Tt]|[Ll][Vv]|[Mm][Tt]|[Rr][Oo]|[Ss][Kk]|[Ss][Ll]|[Ss][Vv]|[Bb][Gg]|[Hh][Rr]|[Gg][Aa])$"
    • changedInput schema / properties / limit / description
      Previous value: -"Maximum characters to return in this window (\"paged\" mode only). Default 25000, max 100000. For the entire body in one response, use content_mode \"full\"."New value: +"Maximum characters to return in this window (\"paged\" mode only). Default 25000, max 100000. Follow has_more and the returned offsets until false to reconstruct the complete body."
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "not": {
      -      "required": [
      -        "error"
      -      ]
      -    },
      -    "required": [
      -      "celex_number",
      -      "content_mode",
      -      "content_available",
      -      "has_more",
      -      "language",
      -      "content_format"
      -    ]
      -  },
      -  {
      -    "required": [
      -      "error"
      -    ]
      -  }
      -]New value: +[
      +  {
      +    "not": {
      +      "required": [
      +        "error"
      +      ]
      +    },
      +    "required": [
      +      "celex_number",
      +      "content_mode",
      +      "content_available",
      +      "content_status",
      +      "has_more",
      +      "language",
      +      "content_format"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "error"
      +    ]
      +  }
      +]
    • changedOutput schema / properties / content / description
      Previous value: -"Body content of the act in the requested format and language. In \"paged\" mode a character window (see content_offset / content_chars_returned / has_more); in \"full\" mode the entire body; omitted in \"metadata_only\" mode, when the window is empty, or when content is unavailable."New value: +"Body content of the act in the requested format and language. In \"paged\" mode this is the requested window; in \"full\" mode it starts at zero and is capped at 100000 characters. Omitted in \"metadata_only\" mode, when the window is empty, or when content is unavailable."
    • addedOutput schema / properties / content_status
      Added value: +{
      +  "description": "Body resolution status: \"not_requested\" for metadata-only calls, \"available\" when a body was resolved, or \"unavailable\" after ordinary resolution attempts returned no usable body.",
      +  "enum": [
      +    "not_requested",
      +    "available",
      +    "unavailable"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / content_unavailability_reason
      Added value: +{
      +  "description": "Why content_status is \"unavailable\": no representation exists, the upstream request failed, or a multipart Formex body could not be assembled completely.",
      +  "enum": [
      +    "no_representation",
      +    "upstream_failure",
      +    "multipart_incomplete"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_identifier_args`: None of celex_number, eli_uri, or work_uri was provided, or more than one was. `not_found`: The CELEX, ELI, or work URI resolves to no fetchable work — the work is absent from the corpus, or the CELLAR work carries no CELEX number. `language_unavailable`: Requested language has no content in EUR-Lex after fallback to English also failed. `content_fetch_failed`: EUR-Lex content API returned non-200 after language fallback attempts. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_identifier_args`: None of celex_number, eli_uri, or work_uri was provided, or more than one was. `not_found`: The CELEX, ELI, or work URI resolves to no fetchable work — the work is absent from the corpus, or the CELLAR work carries no CELEX number. `content_challenge`: The primary content response is an AWS WAF bot-challenge interstitial rather than legal text. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / error / properties / data / properties / reason / examples
      Previous value: -[
      -  "invalid_identifier_args",
      -  "not_found",
      -  "language_unavailable",
      -  "content_fetch_failed"
      -]New value: +[
      +  "invalid_identifier_args",
      +  "not_found",
      +  "content_challenge"
      +]
    • changedOutput schema / properties / has_more / description
      Previous value: -"True when body content exists beyond the returned window. Page forward with offset = content_offset + content_chars_returned, or request content_mode \"full\". Always false in \"metadata_only\" mode."New value: +"True when body content exists beyond the returned window. Continue in \"paged\" mode with offset = content_offset + content_chars_returned until false. Always false in \"metadata_only\" mode."
    • addedOutput schema / properties / requested_language
      Added value: +{
      +  "description": "Originally requested language code when English fallback changed the effective language reported in language.",
      +  "type": "string"
      +}
  10. Changed10 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedInput schema / additionalProperties
      Added value: +false
    • changedOutput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedOutput schema / anyOf
      Added value: +[
      +  {
      +    "not": {
      +      "required": [
      +        "error"
      +      ]
      +    },
      +    "required": [
      +      "celex_number",
      +      "content_mode",
      +      "content_available",
      +      "has_more",
      +      "language",
      +      "content_format"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "error"
      +    ]
      +  }
      +]
    • addedOutput schema / properties / cap
      Added value: +{
      +  "description": "Maximum body characters allowed in the window.",
      +  "maximum": 9007199254740991,
      +  "minimum": -9007199254740991,
      +  "type": "integer"
      +}
    • addedOutput schema / properties / error
      Added value: +{
      +  "additionalProperties": {},
      +  "description": "Present when the call failed. Absent on success.",
      +  "properties": {
      +    "code": {
      +      "description": "JSON-RPC error code for this failure.",
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "data": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "reason": {
      +          "description": "Machine-readable failure mode. Declared by this tool: `invalid_identifier_args`: None of celex_number, eli_uri, or work_uri was provided, or more than one was. `not_found`: The CELEX, ELI, or work URI resolves to no fetchable work — the work is absent from the corpus, or the CELLAR work carries no CELEX number. `language_unavailable`: Requested language has no content in EUR-Lex after fallback to English also failed. `content_fetch_failed`: EUR-Lex content API returned non-200 after language fallback attempts. Other values are possible when a failure originates below the handler.",
      +          "examples": [
      +            "invalid_identifier_args",
      +            "not_found",
      +            "language_unavailable",
      +            "content_fetch_failed"
      +          ],
      +          "type": "string"
      +        },
      +        "recovery": {
      +          "additionalProperties": {},
      +          "description": "Actionable next step for the caller.",
      +          "properties": {
      +            "hint": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "hint"
      +          ],
      +          "type": "object"
      +        },
      +        "retryable": {
      +          "description": "Whether retrying may succeed.",
      +          "type": "boolean"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "message": {
      +      "description": "Human-readable description of what went wrong.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "code",
      +    "message"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / notice
      Added value: +{
      +  "description": "How to retrieve the remaining document content.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / shown
      Added value: +{
      +  "description": "Number of body characters returned.",
      +  "maximum": 9007199254740991,
      +  "minimum": -9007199254740991,
      +  "type": "integer"
      +}
    • addedOutput schema / properties / truncated
      Added value: +{
      +  "description": "True when the returned body window was capped.",
      +  "type": "boolean"
      +}
    • removedOutput schema / required
      Removed value: -[
      -  "celex_number",
      -  "content_mode",
      -  "content_available",
      -  "has_more",
      -  "language",
      -  "content_format"
      -]
  11. Changed4 schema fields changed
    • changedInput schema / properties / offset / description
      Previous value: -"Character offset into the body where the returned window starts (\"paged\" mode only). Page forward by setting offset = content_offset + content_chars_returned from the previous call."New value: +"Character offset into the body where the returned window starts (\"paged\" mode only). Page forward by setting offset = content_offset + content_chars_returned from the previous call. Offsets are format-specific: an offset is only valid against the same format it was measured in — keep format constant when paging."
    • changedInput schema / properties / outline / description
      Previous value: -"Return a structural outline of the act — chapters, sections, articles, annexes, and recitals as a heading list, each with its character offset — instead of body text. Read a section by paging with its offset. Ignores offset/limit and select; no detectable structure returns an empty outline. Not applied in content_mode \"metadata_only\"."New value: +"Return a structural outline of the act — chapters, sections, articles, annexes, and recitals as a heading list, each with its character offset — instead of body text. Read a section by paging with its offset, keeping the same format: outline offsets are measured in the requested format's body and land in the wrong place under any other format. Ignores offset/limit and select; no detectable structure returns an empty outline. Not applied in content_mode \"metadata_only\"."
    • changedInput schema / properties / select / description
      Previous value: -"Return only the text of specific sections by type and number, instead of a raw character window (Roman and Arabic numbers are equivalent). A section that cannot be located is reported in selection.missed with no wrong text returned. Ignored when outline is true or in content_mode \"metadata_only\"."New value: +"Return only the text of specific sections by type and number, instead of a raw character window (Roman and Arabic numbers are equivalent). Sections are located in the body of the requested format, so pair select with the same format used for any outline. A section that cannot be located is reported in selection.missed with no wrong text returned. Ignored when outline is true or in content_mode \"metadata_only\"."
    • changedOutput schema / properties / is_superseded / description
      Previous value: -"True when the requested work is a base act with a newer consolidated version available — the returned text may be outdated. Absent when the act has no consolidated version, or is itself one."New value: +"True when a newer consolidated version of the requested base act exists (an unofficial reading aid merging later amendments), so the returned text may not include those amendments. Not a repeal/replacement signal — the base act remains the law and may still be in force (see in_force). Absent when the act has no consolidated version, or is itself one."
  12. Changed16 schema fields changed
    • changedInput schema / properties / content_mode / description
      Previous value: -"How much of the document body to return. \"paged\" (default) returns a bounded character window — see offset/limit; \"full\" returns the entire body in one call (large acts can be hundreds of KB); \"metadata_only\" returns metadata with no body and skips the content fetch. offset and limit apply only to \"paged\"."New value: +"How much of the body to return. \"paged\" (default) returns a bounded character window (see offset/limit); \"full\" returns the entire body in one call (large acts can be hundreds of KB); \"metadata_only\" skips the content fetch. offset and limit apply only to \"paged\"."
    • changedInput schema / properties / eli_uri / description
      Previous value: -"Work-level ELI URI of the act to fetch, resolved to its CELLAR work (e.g. http://data.europa.eu/eli/reg/2016/679, with or without the /oj suffix). Provide exactly one of celex_number, eli_uri, or work_uri."New value: +"Work-level ELI URI of the act to fetch (e.g. http://data.europa.eu/eli/reg/2016/679, with or without the /oj suffix). Provide exactly one of celex_number, eli_uri, or work_uri."
    • changedInput schema / properties / format / description
      Previous value: -"Content format: \"html\" for the act text as served by EUR-Lex (default); \"markdown\" for that HTML converted to clean Markdown server-side (recitals and numbered points as readable text, genuine data tables as GFM); \"xml\" for Formex4 XML structured format."New value: +"Content format: \"html\" for the act text as served by EUR-Lex (default), \"markdown\" for that HTML converted to clean Markdown server-side, or \"xml\" for Formex4 structured XML."
    • changedInput schema / properties / language / description
      Previous value: -"Language code for document content (ISO 639-1 uppercase, e.g. EN, FR, DE). Defaults to EN. Falls back to EN if the requested language is unavailable."New value: +"Language code for document content (ISO 639-1 uppercase, e.g. EN, FR, DE). Defaults to EN, and falls back to EN if the requested language is unavailable."
    • changedInput schema / properties / limit / description
      Previous value: -"Maximum characters of body content to return in this window (\"paged\" mode only). Default 25000, max 100000. For the entire body in one response, use content_mode \"full\" instead of a large limit."New value: +"Maximum characters to return in this window (\"paged\" mode only). Default 25000, max 100000. For the entire body in one response, use content_mode \"full\"."
    • changedInput schema / properties / offset / description
      Previous value: -"Character offset into the full document body where the returned window starts (\"paged\" mode only). Page forward by setting offset = content_offset + content_chars_returned from the previous call."New value: +"Character offset into the body where the returned window starts (\"paged\" mode only). Page forward by setting offset = content_offset + content_chars_returned from the previous call."
    • changedInput schema / properties / outline / description
      Previous value: -"Return a structural outline of the act — the detected chapters, sections, articles, annexes, and recitals as a heading list, each with its character offset into the body of the requested format — instead of body text. Use it to see what sections exist, then read one by paging (content_mode \"paged\") with its offset. Ignores offset/limit and select. An act with no detectable structure (e.g. case law) returns an empty outline, never an error. Not applied in content_mode \"metadata_only\"."New value: +"Return a structural outline of the act — chapters, sections, articles, annexes, and recitals as a heading list, each with its character offset — instead of body text. Read a section by paging with its offset. Ignores offset/limit and select; no detectable structure returns an empty outline. Not applied in content_mode \"metadata_only\"."
    • changedInput schema / properties / resolve / description
      Previous value: -"Which version to serve for a base act that has newer consolidated versions. \"as_requested\" (default) returns the exact CELEX requested — for a base act, the as-enacted text. \"current_consolidated\" transparently serves the newest consolidated version instead when one exists, reporting the served CELEX in celex_number and the originally requested CELEX in requested_celex; a no-op when no newer consolidated version exists. Regardless of this setting, is_superseded / current_consolidated_celex / consolidated_as_of flag a stale base act."New value: +"Which version to serve for a base act with newer consolidated versions. \"as_requested\" (default) returns the exact CELEX requested; \"current_consolidated\" serves the newest consolidated version instead (echoing the request in requested_celex), a no-op when none exists. Either way, is_superseded / current_consolidated_celex / consolidated_as_of flag a stale base act."
    • changedInput schema / properties / select / description
      Previous value: -"Return only the text of specific sections by type and number, instead of a raw character window. Roman and Arabic chapter/annex numbers are treated as equivalent. Applies on top of the requested format (html, markdown, xml). A section that cannot be located, or an act with no detectable structure, is reported in selection.missed with no wrong text returned — use offset/limit or content_mode \"full\" to read it. Ignored when outline is true or in content_mode \"metadata_only\"."New value: +"Return only the text of specific sections by type and number, instead of a raw character window (Roman and Arabic numbers are equivalent). A section that cannot be located is reported in selection.missed with no wrong text returned. Ignored when outline is true or in content_mode \"metadata_only\"."
    • changedInput schema / properties / work_uri / description
      Previous value: -"CELLAR work resource URI to fetch (e.g. http://publications.europa.eu/resource/cellar/3e485e15-11bd-11e6-ba9a-01aa75ed71a1) — the form returned by eurlex_lookup_celex, eurlex_get_relations, and eurlex_search_documents. Dereferenced to its CELEX, then fetched by the same flow. Provide exactly one of celex_number, eli_uri, or work_uri."New value: +"CELLAR work resource URI to fetch (e.g. http://publications.europa.eu/resource/cellar/3e485e15-11bd-11e6-ba9a-01aa75ed71a1) — the form returned by eurlex_lookup_celex, eurlex_get_relations, and eurlex_search_documents. Provide exactly one of celex_number, eli_uri, or work_uri."
    • changedOutput schema / properties / author_institution / description
      Previous value: -"Human-readable name of the primary (first) originating EU institution (e.g. \"European Parliament\", \"Council of the EU\"). For co-legislated acts adopted by more than one body, prefer author_institutions for the complete set. Absent when not recorded."New value: +"Human-readable name of the primary (first) originating EU institution (e.g. \"European Parliament\", \"Council of the EU\"). For co-legislated acts, prefer author_institutions for the complete set. Absent when not recorded."
    • changedOutput schema / properties / author_institutions / description
      Previous value: -"All originating EU institutions, for co-legislated acts adopted by more than one body (e.g. [\"European Parliament\", \"Council of the EU\"] for an ordinary-legislative-procedure act). Absent when none recorded."New value: +"All originating EU institutions, for co-legislated acts adopted by more than one body (e.g. [\"European Parliament\", \"Council of the EU\"]). Absent when none recorded."
    • changedOutput schema / properties / content / description
      Previous value: -"Body content of the act in the requested format and language. In \"paged\" mode this is a character window (see content_offset / content_chars_returned / has_more); in \"full\" mode the entire body; omitted in \"metadata_only\" mode, when the window is empty (offset past the end), or when content is unavailable."New value: +"Body content of the act in the requested format and language. In \"paged\" mode a character window (see content_offset / content_chars_returned / has_more); in \"full\" mode the entire body; omitted in \"metadata_only\" mode, when the window is empty, or when content is unavailable."
    • changedOutput schema / properties / has_more / description
      Previous value: -"True when body content exists beyond the returned window. Page forward with offset = content_offset + content_chars_returned, or request content_mode \"full\" for the entire act in one call. Always false in \"metadata_only\" mode."New value: +"True when body content exists beyond the returned window. Page forward with offset = content_offset + content_chars_returned, or request content_mode \"full\". Always false in \"metadata_only\" mode."
    • changedOutput schema / properties / is_superseded / description
      Previous value: -"True when the requested work is a base act with a newer consolidated version available — the returned text may be outdated. Absent when the act has no consolidated version, or is itself a consolidated version."New value: +"True when the requested work is a base act with a newer consolidated version available — the returned text may be outdated. Absent when the act has no consolidated version, or is itself one."
    • changedOutput schema / properties / structure_detected / description
      Previous value: -"Whether any act structure was parsed from the body. Present when outline or select was used; false means the act has no detectable chapter/article/annex structure — read it via the paging floor (offset/limit or content_mode \"full\")."New value: +"Whether any act structure was parsed from the body. Present when outline or select was used; false means no detectable chapter/article/annex structure — read it via offset/limit or content_mode \"full\"."
  13. Changed10 schema fields changed
    • changedInput schema / properties / celex_number / description
      Previous value: -"CELEX number of the act to fetch (e.g. 32016R0679 for GDPR). Provide exactly one of celex_number or eli_uri."New value: +"CELEX number of the act to fetch (e.g. 32016R0679 for GDPR). Provide exactly one of celex_number, eli_uri, or work_uri."
    • changedInput schema / properties / eli_uri / description
      Previous value: -"Work-level ELI URI of the act to fetch, resolved to its CELLAR work (e.g. http://data.europa.eu/eli/reg/2016/679, with or without the /oj suffix). Provide exactly one of celex_number or eli_uri."New value: +"Work-level ELI URI of the act to fetch, resolved to its CELLAR work (e.g. http://data.europa.eu/eli/reg/2016/679, with or without the /oj suffix). Provide exactly one of celex_number, eli_uri, or work_uri."
    • addedInput schema / properties / resolve
      Added value: +{
      +  "default": "as_requested",
      +  "description": "Which version to serve for a base act that has newer consolidated versions. \"as_requested\" (default) returns the exact CELEX requested — for a base act, the as-enacted text. \"current_consolidated\" transparently serves the newest consolidated version instead when one exists, reporting the served CELEX in celex_number and the originally requested CELEX in requested_celex; a no-op when no newer consolidated version exists. Regardless of this setting, is_superseded / current_consolidated_celex / consolidated_as_of flag a stale base act.",
      +  "enum": [
      +    "as_requested",
      +    "current_consolidated"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / work_uri
      Added value: +{
      +  "description": "CELLAR work resource URI to fetch (e.g. http://publications.europa.eu/resource/cellar/3e485e15-11bd-11e6-ba9a-01aa75ed71a1) — the form returned by eurlex_lookup_celex, eurlex_get_relations, and eurlex_search_documents. Dereferenced to its CELEX, then fetched by the same flow. Provide exactly one of celex_number, eli_uri, or work_uri.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / author_institution / description
      Previous value: -"Human-readable name of the originating EU institution (e.g. \"European Parliament\", \"Council of the EU\"). Absent when not recorded."New value: +"Human-readable name of the primary (first) originating EU institution (e.g. \"European Parliament\", \"Council of the EU\"). For co-legislated acts adopted by more than one body, prefer author_institutions for the complete set. Absent when not recorded."
    • addedOutput schema / properties / author_institutions
      Added value: +{
      +  "description": "All originating EU institutions, for co-legislated acts adopted by more than one body (e.g. [\"European Parliament\", \"Council of the EU\"] for an ordinary-legislative-procedure act). Absent when none recorded.",
      +  "items": {
      +    "description": "Human-readable EU institution name.",
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / consolidated_as_of
      Added value: +{
      +  "description": "Consolidation date of current_consolidated_celex in ISO 8601 (YYYY-MM-DD). Present only when is_superseded is true.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / current_consolidated_celex
      Added value: +{
      +  "description": "CELEX of the newest consolidated version of the requested base act (e.g. 02014R0833-20260424) — fetch it with eurlex_get_document, or pass resolve \"current_consolidated\". Present only when is_superseded is true.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / is_superseded
      Added value: +{
      +  "description": "True when the requested work is a base act with a newer consolidated version available — the returned text may be outdated. Absent when the act has no consolidated version, or is itself a consolidated version.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / requested_celex
      Added value: +{
      +  "description": "The originally requested CELEX, echoed when resolve \"current_consolidated\" served a different (consolidated) work. celex_number holds the CELEX actually served. Absent when the served work is the one requested.",
      +  "type": "string"
      +}
  14. Changed5 schema fields changed
    • addedInput schema / properties / outline
      Added value: +{
      +  "default": false,
      +  "description": "Return a structural outline of the act — the detected chapters, sections, articles, annexes, and recitals as a heading list, each with its character offset into the body of the requested format — instead of body text. Use it to see what sections exist, then read one by paging (content_mode \"paged\") with its offset. Ignores offset/limit and select. An act with no detectable structure (e.g. case law) returns an empty outline, never an error. Not applied in content_mode \"metadata_only\".",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / select
      Added value: +{
      +  "description": "Return only the text of specific sections by type and number, instead of a raw character window. Roman and Arabic chapter/annex numbers are treated as equivalent. Applies on top of the requested format (html, markdown, xml). A section that cannot be located, or an act with no detectable structure, is reported in selection.missed with no wrong text returned — use offset/limit or content_mode \"full\" to read it. Ignored when outline is true or in content_mode \"metadata_only\".",
      +  "properties": {
      +    "annexes": {
      +      "description": "Comma-separated annex numbers or letters, e.g. \"I,II\".",
      +      "type": "string"
      +    },
      +    "articles": {
      +      "description": "Comma-separated article numbers, e.g. \"1,5,17\".",
      +      "type": "string"
      +    },
      +    "chapters": {
      +      "description": "Comma-separated chapter numbers, Roman or Arabic, e.g. \"I,IV\" or \"1,4\".",
      +      "type": "string"
      +    },
      +    "recitals": {
      +      "description": "Comma-separated recital numbers, e.g. \"1,10\".",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedOutput schema / properties / outline
      Added value: +{
      +  "description": "Structural outline of the act. Present only when outline is true; an empty array means no structure was detected.",
      +  "items": {
      +    "additionalProperties": false,
      +    "description": "One detected heading, addressable by its character offset into the body.",
      +    "properties": {
      +      "kind": {
      +        "description": "Structural unit kind: \"chapter\", \"section\", \"article\", \"annex\", or \"recital\".",
      +        "type": "string"
      +      },
      +      "label": {
      +        "description": "Human label, e.g. \"Article 17\", \"CHAPTER IV\".",
      +        "type": "string"
      +      },
      +      "number": {
      +        "description": "Numbering token as rendered (e.g. \"17\", \"IV\"); empty for a lone unnumbered annex.",
      +        "type": "string"
      +      },
      +      "offset": {
      +        "description": "Character offset of the heading in the full body of the requested format — pass as offset in a paged call to read from here.",
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      },
      +      "title": {
      +        "description": "Descriptive title where the act supplies one.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "kind",
      +      "number",
      +      "label",
      +      "offset"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / selection
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Outcome of a structural selection. Present only when select was used; content holds the matched sections joined in document order.",
      +  "properties": {
      +    "matched": {
      +      "description": "Section descriptors found and returned in content, in document order.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "missed": {
      +      "description": "Requested section descriptors that could not be located.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "requested": {
      +      "description": "Section descriptors requested, e.g. [\"Article 17\", \"CHAPTER IV\"].",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "requested",
      +    "matched",
      +    "missed"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / structure_detected
      Added value: +{
      +  "description": "Whether any act structure was parsed from the body. Present when outline or select was used; false means the act has no detectable chapter/article/annex structure — read it via the paging floor (offset/limit or content_mode \"full\").",
      +  "type": "boolean"
      +}
  15. Changed3 schema fields changed
    • changedInput schema / properties / format / description
      Previous value: -"Content format: \"html\" for readable HTML text (default), \"xml\" for Formex4 XML structured format."New value: +"Content format: \"html\" for the act text as served by EUR-Lex (default); \"markdown\" for that HTML converted to clean Markdown server-side (recitals and numbered points as readable text, genuine data tables as GFM); \"xml\" for Formex4 XML structured format."
    • changedInput schema / properties / format / enum
      Previous value: -[
      -  "html",
      -  "xml"
      -]New value: +[
      +  "html",
      +  "xml",
      +  "markdown"
      +]
    • changedOutput schema / properties / content_format / description
      Previous value: -"Format of the returned content: \"html\" or \"xml\"."New value: +"Format of the returned content: \"html\", \"markdown\", or \"xml\"."
  16. Changed11 schema fields changed
    • addedInput schema / properties / content_mode
      Added value: +{
      +  "default": "paged",
      +  "description": "How much of the document body to return. \"paged\" (default) returns a bounded character window — see offset/limit; \"full\" returns the entire body in one call (large acts can be hundreds of KB); \"metadata_only\" returns metadata with no body and skips the content fetch. offset and limit apply only to \"paged\".",
      +  "enum": [
      +    "metadata_only",
      +    "paged",
      +    "full"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / limit
      Added value: +{
      +  "default": 25000,
      +  "description": "Maximum characters of body content to return in this window (\"paged\" mode only). Default 25000, max 100000. For the entire body in one response, use content_mode \"full\" instead of a large limit.",
      +  "maximum": 100000,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / properties / offset
      Added value: +{
      +  "default": 0,
      +  "description": "Character offset into the full document body where the returned window starts (\"paged\" mode only). Page forward by setting offset = content_offset + content_chars_returned from the previous call.",
      +  "maximum": 9007199254740991,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • changedOutput schema / properties / content / description
      Previous value: -"Full text content of the act in the requested format and language."New value: +"Body content of the act in the requested format and language. In \"paged\" mode this is a character window (see content_offset / content_chars_returned / has_more); in \"full\" mode the entire body; omitted in \"metadata_only\" mode, when the window is empty (offset past the end), or when content is unavailable."
    • changedOutput schema / properties / content_available / description
      Previous value: -"Whether document content was successfully retrieved."New value: +"Whether body content was fetched from EUR-Lex. False in \"metadata_only\" mode (no fetch attempted) — use content_mode to distinguish \"not requested\" from \"unavailable upstream\"."
    • addedOutput schema / properties / content_chars_returned
      Added value: +{
      +  "description": "Number of body characters returned in this response (equals content length). Present when a body was fetched and available.",
      +  "maximum": 9007199254740991,
      +  "minimum": -9007199254740991,
      +  "type": "integer"
      +}
    • addedOutput schema / properties / content_chars_total
      Added value: +{
      +  "description": "Total character length of the full document body. Present when content was fetched and available; use with content_offset to page through the entire act.",
      +  "maximum": 9007199254740991,
      +  "minimum": -9007199254740991,
      +  "type": "integer"
      +}
    • addedOutput schema / properties / content_mode
      Added value: +{
      +  "description": "Content mode applied to this response: \"metadata_only\", \"paged\", or \"full\".",
      +  "type": "string"
      +}
    • addedOutput schema / properties / content_offset
      Added value: +{
      +  "description": "Character offset where the returned content window begins. Present when a body was fetched and available.",
      +  "maximum": 9007199254740991,
      +  "minimum": -9007199254740991,
      +  "type": "integer"
      +}
    • addedOutput schema / properties / has_more
      Added value: +{
      +  "description": "True when body content exists beyond the returned window. Page forward with offset = content_offset + content_chars_returned, or request content_mode \"full\" for the entire act in one call. Always false in \"metadata_only\" mode.",
      +  "type": "boolean"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "celex_number",
      -  "content_available",
      -  "language",
      -  "content_format"
      -]New value: +[
      +  "celex_number",
      +  "content_mode",
      +  "content_available",
      +  "has_more",
      +  "language",
      +  "content_format"
      +]
  17. Changed4 schema fields changed
    • changedInput schema / properties / celex_number / description
      Previous value: -"CELEX number of the act to fetch (e.g. 32016R0679 for GDPR). Preferred over eli_uri."New value: +"CELEX number of the act to fetch (e.g. 32016R0679 for GDPR). Provide exactly one of celex_number or eli_uri."
    • removedInput schema / properties / celex_number / minLength
      Removed value: -1
    • changedInput schema / properties / eli_uri / description
      Previous value: -"ELI URI as alternative to celex_number (e.g. http://data.europa.eu/eli/reg/2016/679/oj). Used only if celex_number is absent or empty."New value: +"Work-level ELI URI of the act to fetch, resolved to its CELLAR work (e.g. http://data.europa.eu/eli/reg/2016/679, with or without the /oj suffix). Provide exactly one of celex_number or eli_uri."
    • removedInput schema / required
      Removed value: -[
      -  "celex_number"
      -]
  18. First observed

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations provide only readOnlyHint, openWorldHint, and idempotentHint. The description goes far beyond by disclosing pagination behavior (100,000-character cap, offset/limit paging), format switching (HTML, Markdown, XML), language fallback to English, the select mechanism with missed section reporting, outline offset format-sensitivity, and resolve behavior for consolidated versions. It also explains edge cases like amending-act inserted text and future consolidated versions. This is comprehensive behavioral disclosure that substantially exceeds the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and then systematically covers metadata fields, body formats, pagination, select, outline, and resolve. Every sentence contains essential information, but the sheer length (a dense, single paragraph) makes it less concise than ideal. It could be broken into bullet points, but given the tool's complexity, the density is arguably appropriate. It earns a 4 rather than a 5 due to verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers every aspect an agent needs: input identifier alternatives, output metadata composition (including case-law-specific fields like ECLI and referring court), body format options, pagination and continuation, selective section retrieval, outline generation with offsets and recital handling, version resolution, language fallback, and edge cases. With 12 parameters, a nested select object, and an output schema, the description leaves nothing ambiguous about how to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

While the schema already documents all 12 parameters (100% coverage), the description adds meaningful semantics beyond the schema. For instance, it explains the exact paging arithmetic (offset = content_offset + content_chars_returned), clarifies that offsets are format-specific, details select's interaction with outline (ignored when outline is true), notes that offset/limit do not apply in select mode, and explains the resolve no-op conditions. These are operational details not present in the schema, enhancing an agent's correct invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb and resource: 'Fetch the metadata and full text of an EU act or case-law record by CELEX number, ELI URI, or work URI.' This unambiguously identifies what the tool does and its input identifiers. It also distinguishes itself from sibling tools like eurlex_search_documents (search) and eurlex_browse_subjects (subject browsing) by being the direct document retrieval tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states the key usage constraint 'Provide exactly one of celex_number, eli_uri, or work_uri' and notes that work_uri is the form returned by eurlex_lookup_celex, eurlex_get_relations, and eurlex_search_documents, implicitly connecting them. However, it does not explicitly advise when to prefer this tool over alternatives (e.g., 'use eurlex_search_documents when you need to discover documents; use this when you have a specific identifier'). The guidance is mostly about internal parameter usage, not comparison with siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.