Skip to main content
Glama

Search Decisions

search_decisions
Read-onlyIdempotent

Search decisions by meaning and keywords combined. Returns a shortlist: title, url, an overview (aiSummary: AI-written summary of what the decision is about, a machine paraphrase never quotable as the court's words; or snippet: the verbatim passage where your keywords matched) and metadata; get_decision reads the full text. Put constraints in the structured filters (jurisdiction, dates, articles, codes), keep the query for the legal issue. Values within one filter are OR'd; different filters are AND'd. The response carries a facets block: per filter name, a map of filter value to decision count under the current query. Reuse those keys verbatim to refine. Hit metadata fields carry the same tokens under the same names: a hit's seat, legalDomain or solution passes back verbatim into the matching filter.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
modeNo'auto' is the right choice in almost all cases, it picks the regime from the query shape. auto: combines meaning and keyword matching on plain queries; switches to keyword-only when the query contains ET / OU / SAUF or quoted phrases. lexical: force keyword-only matching. Every term becomes required and nothing recovers a miss, so it fits a string you expect word for word (a consecrated formula, the direction of a holding, a party named in the text) and an empty answer is then an answer. reference: force the lookup by identity, on the docket number, the case name, or the court and the date. semantic: force the meaning+keyword hybrid even on quoted or operator queries (where auto would fall back to keyword-only).auto
seatNoRestrict to one or more seats, as a dotted path from the court type down to the room: "CA" (a whole type), "CA.PARIS" and "TJ.BORDEAUX" (one court), "CC.C1_CIVILE", "CA.PARIS.P5.C3", "TJ.LYON.SOCIALE", "TJ.PARIS.REFERES", "TA.MARSEILLE.C5" (one room). A path matches itself and everything below it, so start at the type and go deeper. Types: TJ (tribunal judiciaire), CA (cour d'appel), CC (Cour de cassation), TCOM (tribunal des activités économiques), TA (tribunal administratif), CAA (cour administrative d'appel), CE (Conseil d'État), CNDA (asylum), CONSTIT (Conseil constitutionnel), TC (Tribunal des conflits), CNIL (sanctions), CEDH and CJUE (European courts). Take the paths from facets.seat.
sortNoResult ordering. Use 'relevance' (default) unless the user wants chronological order.relevance
limitNoMaximum number of results (default 10).
queryYesFrench query, the primary input. Two regimes, pick the right tool for the job: (a) Natural language or descriptive keywords for legal-issue searches; the engine handles synonyms and reformulations. Examples: « responsabilité hôpital infection nosocomiale » ; « étranger malade soins inaccessibles dans son pays d'origine » ; « licenciement discrimination syndicale charge de la preuve ». (b) Quoted exact phrases and ET / OU / SAUF operators for a named entity (company, municipality, person), a precise legal formula, or the direction of a holding: semantic matching ignores negations (« n'est pas X » ranks like « est X »), and only an exact phrase targets which way the court ruled. Examples: « "Société Générale" » ; « "commune de Saint-Denis" SAUF Réunion » ; « "force majeure" ET épidémie ». Using operators or quotes switches the engine to keyword-only matching for the whole query (no synonyms), so do not mix the two regimes.
officeNoFilter by specialised judge/office (JLD, JAF, JCP, JEX, juge des enfants, premier président, magistrat désigné). Absent value = ordinary bench.
date_toNoLatest decision date, inclusive (YYYY-MM-DD).
solutionNoFilter by the ruling of the operative part (référentiel solution). REJET / IRRECEVABILITE / DESISTEMENT / NON_LIEU_A_STATUER are procedural or negative endings; CONFIRMATION / INFIRMATION* / REFORMATION are appeal outcomes; CASSATION* is cassation-specific; ANNULATION covers administrative annulment; SATISFACTION_TOTALE / SATISFACTION_PARTIELLE cover first-instance civil rulings granting the claim.
ai_rerankNoWhen enabled (default), reorders results by actual relevance to the query using an LLM reranker. Keep on for agentic use, shortlist quality is significantly higher. Cost: a few seconds of extra latency. Disable only for high-rate exploratory searches where latency matters more than ranking quality.
date_fromNoEarliest decision date, inclusive (YYYY-MM-DD).
procedureNoFilter by procedural track (référés, QPC, EU referral, révision, tierce opposition…). Absent value = ordinary contentious procedure.
publicationNoFilter by publication, at the grain the Cour de cassation itself uses (any-of, membership is multiple: a decision matches every value whose code it carries). Judicial order: PUBLIE_RAPPORT (annual report, the strongest signal), PUBLIE_BULLETIN, LETTRE_CHAMBRE, COMMUNIQUE, INEDIT_BULLETIN. Administrative order: PUBLIE_LEBON, MENTIONNE_LEBON, INEDIT_LEBON. Lower courts carry no publication statement and match no value.
legal_domainNoFilter by legal domain (curated domain tree): 9 roots and their leaves (e.g. CIVIL_DROIT_LOCATIF). Selecting a root also matches all its leaves.
legal_articleNoRestrict to decisions citing a specific article of a specific code, as a composite key "<instrument>|<article>" where <instrument> is a slug or an exact text name, resolved like legal_instrument (e.g. "code-civil|1240", "code-de-justice-administrative|L761-1"). The instrument prefix is required: the same article number exists in several codes.
legal_instrumentNoRestrict to decisions citing one or more given codes or statutes. Accepts a slug from facets.legal_instrument (e.g. "code-civil") or an exact text name resolved server-side (e.g. "Code civil").

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
hitsYes
queryYes
totalYes
facetsNo
pinnedNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / seat / description
      Previous value: -"Restrict to one or more seats, as a dotted path from the court type down to the room: \"CA\" (a whole type), \"CA.PARIS\" and \"TJ.BORDEAUX\" (one court), \"CC.SOCIALE\", \"CA.PARIS.P5.C3\", \"TJ.LYON.SOCIALE\", \"TJ.PARIS.REFERES\", \"TA.MARSEILLE.C5\" (one room). A path matches itself and everything below it, so start at the type and go deeper. Types: TJ (tribunal judiciaire), CA (cour d'appel), CC (Cour de cassation), TCOM (tribunal des activités économiques), TA (tribunal administratif), CAA (cour administrative d'appel), CE (Conseil d'État), CNDA (asylum), CONSTIT (Conseil constitutionnel), TC (Tribunal des conflits), CNIL (sanctions), CEDH and CJUE (European courts). Take the paths from facets.seat."New value: +"Restrict to one or more seats, as a dotted path from the court type down to the room: \"CA\" (a whole type), \"CA.PARIS\" and \"TJ.BORDEAUX\" (one court), \"CC.C1_CIVILE\", \"CA.PARIS.P5.C3\", \"TJ.LYON.SOCIALE\", \"TJ.PARIS.REFERES\", \"TA.MARSEILLE.C5\" (one room). A path matches itself and everything below it, so start at the type and go deeper. Types: TJ (tribunal judiciaire), CA (cour d'appel), CC (Cour de cassation), TCOM (tribunal des activités économiques), TA (tribunal administratif), CAA (cour administrative d'appel), CE (Conseil d'État), CNDA (asylum), CONSTIT (Conseil constitutionnel), TC (Tribunal des conflits), CNIL (sanctions), CEDH and CJUE (European courts). Take the paths from facets.seat."
  2. Changed2 schema fields changed
    • changedInput schema / properties / mode / description
      Previous value: -"'auto' is the right choice in almost all cases, it picks the regime from the query shape. auto: combines meaning and keyword matching on plain queries; switches to keyword-only when the query contains ET / OU / SAUF or quoted phrases. lexical: force keyword-only matching. Every term becomes required and nothing recovers a miss, so it fits a string you expect word for word (a consecrated formula, the direction of a holding, a party named in the text) and an empty answer is then an answer. semantic: force the meaning+keyword hybrid even on quoted or operator queries (where auto would fall back to keyword-only)."New value: +"'auto' is the right choice in almost all cases, it picks the regime from the query shape. auto: combines meaning and keyword matching on plain queries; switches to keyword-only when the query contains ET / OU / SAUF or quoted phrases. lexical: force keyword-only matching. Every term becomes required and nothing recovers a miss, so it fits a string you expect word for word (a consecrated formula, the direction of a holding, a party named in the text) and an empty answer is then an answer. reference: force the lookup by identity, on the docket number, the case name, or the court and the date. semantic: force the meaning+keyword hybrid even on quoted or operator queries (where auto would fall back to keyword-only)."
    • changedInput schema / properties / mode / enum
      Previous value: -[
      -  "auto",
      -  "lexical",
      -  "semantic"
      -]New value: +[
      +  "auto",
      +  "lexical",
      +  "semantic",
      +  "reference"
      +]
  3. Changed8 schema fields changed
    • removedInput schema / properties / jurisdiction_code
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "items": {
      -        "maxLength": 40,
      -        "type": "string"
      -      },
      -      "maxItems": 10,
      -      "type": "array"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "Restrict to one or more precise court units by referential code. Code shapes: \"cc\" (Cour de cassation), \"ce\" (Conseil d'État), \"cnda\", \"cedh\", \"cjue\"; \"ca_<city>\", \"caa_<city>\", \"ta_<city>\", \"tj_<city>\", \"tcom_<city>\" (e.g. \"ca_paris\", \"ta_marseille\", \"tj_paris\", \"tcom_lyon\"). When unsure, guess with the city name in the code: the error names the nearest valid ones. Each code is a court; a room inside it is reached with seat, which also expresses this filter as a path."
      -}
    • removedInput schema / properties / jurisdiction_type
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "items": {
      -        "enum": [
      -          "TA",
      -          "CAA",
      -          "CE",
      -          "CONSTIT",
      -          "TC",
      -          "CC",
      -          "CA",
      -          "TJ",
      -          "TCOM",
      -          "CEDH",
      -          "CJUE",
      -          "CNDA",
      -          "CNIL"
      -        ],
      -        "type": "string"
      -      },
      -      "type": "array"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "Restrict to one or more court categories: TJ (tribunal judiciaire), CA (cour d'appel), CC (Cour de cassation), TCOM (tribunal des activités économiques), TA (tribunal administratif), CAA (cour administrative d'appel), CE (Conseil d'État), CNDA (asylum), CONSTIT (Conseil constitutionnel), TC (Tribunal des conflits), CNIL (sanctions), CEDH and CJUE (European courts)."
      -}
    • changedInput schema / properties / seat / description
      Previous value: -"Restrict to one or more seats, as a dotted path from the court type down to the room: \"CC\", \"CC.SOCIALE\", \"CA.PARIS\", \"CA.PARIS.P5.C3\". A path matches itself and everything below it, so this one filter also covers what jurisdiction_type and jurisdiction_code express. Take the paths from facets.seat."New value: +"Restrict to one or more seats, as a dotted path from the court type down to the room: \"CA\" (a whole type), \"CA.PARIS\" and \"TJ.BORDEAUX\" (one court), \"CC.SOCIALE\", \"CA.PARIS.P5.C3\", \"TJ.LYON.SOCIALE\", \"TJ.PARIS.REFERES\", \"TA.MARSEILLE.C5\" (one room). A path matches itself and everything below it, so start at the type and go deeper. Types: TJ (tribunal judiciaire), CA (cour d'appel), CC (Cour de cassation), TCOM (tribunal des activités économiques), TA (tribunal administratif), CAA (cour administrative d'appel), CE (Conseil d'État), CNDA (asylum), CONSTIT (Conseil constitutionnel), TC (Tribunal des conflits), CNIL (sanctions), CEDH and CJUE (European courts). Take the paths from facets.seat."
    • removedOutput schema / properties / filterRewritten
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null
      -}
    • addedOutput schema / properties / hits / items / properties / citedArticles
      Added value: +{
      +  "additionalProperties": {
      +    "items": {
      +      "type": "string"
      +    },
      +    "type": "array"
      +  },
      +  "type": "object"
      +}
    • removedOutput schema / properties / hits / items / properties / jurisdictionCode
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null
      -}
    • removedOutput schema / properties / hits / items / properties / jurisdictionType
      Removed value: -{
      -  "type": "string"
      -}
    • changedOutput schema / properties / hits / items / required
      Previous value: -[
      -  "title",
      -  "url",
      -  "chars",
      -  "jurisdictionType"
      -]New value: +[
      +  "title",
      +  "url",
      +  "chars"
      +]
  4. Changed18 schema fields changed
    • removedInput schema / properties / chamber
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "items": {
      -        "maxLength": 60,
      -        "type": "string"
      -      },
      -      "maxItems": 10,
      -      "type": "array"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "Restrict to one or more chambers, as a composite key \"<court>|<chamber>\" where <court> is a jurisdiction_code (e.g. \"ca_paris|C3\", \"cc|C2\", \"cc|SOCIALE\"). The court prefix is required: a chamber key names a different chamber in each court, \"C1\" alone existing in about 200 of them. The chamber part is slots joined by a dot, in the order they render: tag P (pôle), SC (section holding chambers), C (chambre), S (section), L (lettered section), Q (sous-sections réunies) or R (chambres réunies), then its number or letter. So \"P5.C6\" is pôle 5, 6e chambre, \"C5.LA\" section A of the 5th, \"CD\" chambre D, \"R3-8\" chambres 3/8 réunies (numbers in a reunited list always ascending). A chamber that no coordinate positions is keyed by what it judges instead (\"cc|SOCIALE\", \"cc|CRIMINELLE\"). facets.chamber lists the pairs present, and only once jurisdiction_code narrows the search to one or more courts."
      -}
    • changedInput schema / properties / jurisdiction_code / description
      Previous value: -"Restrict to one or more precise court units by referential code. Code shapes: \"cc\" (Cour de cassation), \"ce\" (Conseil d'État), \"cnda\", \"cedh\", \"cjue\"; \"ca_<city>\", \"caa_<city>\", \"ta_<city>\", \"tj_<city>\", \"tcom_<city>\" (e.g. \"ca_paris\", \"ta_marseille\", \"tj_paris\", \"tcom_lyon\"). When unsure, guess with the city name in the code: the error names the nearest valid ones. Each code is a court; the chamber inside it is a separate filter (see chamber); use jurisdiction_type for the broad category."New value: +"Restrict to one or more precise court units by referential code. Code shapes: \"cc\" (Cour de cassation), \"ce\" (Conseil d'État), \"cnda\", \"cedh\", \"cjue\"; \"ca_<city>\", \"caa_<city>\", \"ta_<city>\", \"tj_<city>\", \"tcom_<city>\" (e.g. \"ca_paris\", \"ta_marseille\", \"tj_paris\", \"tcom_lyon\"). When unsure, guess with the city name in the code: the error names the nearest valid ones. Each code is a court; a room inside it is reached with seat, which also expresses this filter as a path."
    • changedInput schema / properties / mode / description
      Previous value: -"'auto' is the right choice in almost all cases, it picks the regime from the query shape. auto: combines meaning and keyword matching on plain queries; switches to keyword-only when the query contains ET / OU / SAUF or quoted phrases. lexical: force keyword-only matching. Every term becomes required and nothing recovers a miss, so it fits a string you expect word for word (a consecrated formula, the direction of a holding, a party named in the text) and an empty answer is then an answer. Never for a docket number or a decision name, which auto resolves by exact key. semantic: force the meaning+keyword hybrid even on quoted or operator queries (where auto would fall back to keyword-only). Naming a mode, like adding ET / OU / SAUF, also keeps a docket number inside an ordinary query instead of resolving it alone."New value: +"'auto' is the right choice in almost all cases, it picks the regime from the query shape. auto: combines meaning and keyword matching on plain queries; switches to keyword-only when the query contains ET / OU / SAUF or quoted phrases. lexical: force keyword-only matching. Every term becomes required and nothing recovers a miss, so it fits a string you expect word for word (a consecrated formula, the direction of a holding, a party named in the text) and an empty answer is then an answer. semantic: force the meaning+keyword hybrid even on quoted or operator queries (where auto would fall back to keyword-only)."
    • changedInput schema / properties / publication / anyOf
      Previous value: -[
      -  {
      -    "items": {
      -      "enum": [
      -        "PUBLIE_BULLETIN",
      -        "PUBLIE_RAPPORT",
      -        "LETTRE_CHAMBRE",
      -        "COMMUNIQUE",
      -        "INEDIT_BULLETIN",
      -        "PUBLIE_LEBON",
      -        "MENTIONNE_LEBON",
      -        "INEDIT_LEBON"
      -      ],
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "items": {
      +      "enum": [
      +        "PUBLIE_RAPPORT",
      +        "PUBLIE_BULLETIN",
      +        "LETTRE_CHAMBRE",
      +        "COMMUNIQUE",
      +        "INEDIT_BULLETIN",
      +        "PUBLIE_LEBON",
      +        "MENTIONNE_LEBON",
      +        "INEDIT_LEBON"
      +      ],
      +      "type": "string"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / publication / description
      Previous value: -"Filter by publication, at the grain the Cour de cassation itself uses (any-of, membership is multiple: a decision matches every value whose code it carries). Judicial order: PUBLIE_BULLETIN, PUBLIE_RAPPORT (annual report, the strongest signal), LETTRE_CHAMBRE, COMMUNIQUE, INEDIT_BULLETIN. Administrative order: PUBLIE_LEBON, MENTIONNE_LEBON, INEDIT_LEBON. Lower courts carry no publication statement and match no value."New value: +"Filter by publication, at the grain the Cour de cassation itself uses (any-of, membership is multiple: a decision matches every value whose code it carries). Judicial order: PUBLIE_RAPPORT (annual report, the strongest signal), PUBLIE_BULLETIN, LETTRE_CHAMBRE, COMMUNIQUE, INEDIT_BULLETIN. Administrative order: PUBLIE_LEBON, MENTIONNE_LEBON, INEDIT_LEBON. Lower courts carry no publication statement and match no value."
    • changedInput schema / properties / query / description
      Previous value: -"French query, the primary input. Two regimes, pick the right tool for the job: (a) Natural language or descriptive keywords for legal-issue searches; the engine handles synonyms and reformulations. Examples: « responsabilité hôpital infection nosocomiale » ; « étranger malade soins inaccessibles dans son pays d'origine » ; « licenciement discrimination syndicale charge de la preuve ». (b) Quoted exact phrases and ET / OU / SAUF operators for a named entity (company, municipality, person), a precise legal formula, or the direction of a holding: semantic matching ignores negations (« n'est pas X » ranks like « est X »), and only an exact phrase targets which way the court ruled. Examples: « \"Société Générale\" » ; « \"commune de Saint-Denis\" SAUF Réunion » ; « \"force majeure\" ET épidémie ». Using operators or quotes switches the engine to keyword-only matching for the whole query (no synonyms), so do not mix the two regimes: a quoted phrase followed by free words requires every one of them in the same decision. (c) A docket number or a decision name takes neither quotes nor operators: « 21PA01295 », « n° 19-20.682 », « arrêt Danthony » are matched by an exact key, whatever the spelling, and quoting them only costs the recovery that catches a miss."New value: +"French query, the primary input. Two regimes, pick the right tool for the job: (a) Natural language or descriptive keywords for legal-issue searches; the engine handles synonyms and reformulations. Examples: « responsabilité hôpital infection nosocomiale » ; « étranger malade soins inaccessibles dans son pays d'origine » ; « licenciement discrimination syndicale charge de la preuve ». (b) Quoted exact phrases and ET / OU / SAUF operators for a named entity (company, municipality, person), a precise legal formula, or the direction of a holding: semantic matching ignores negations (« n'est pas X » ranks like « est X »), and only an exact phrase targets which way the court ruled. Examples: « \"Société Générale\" » ; « \"commune de Saint-Denis\" SAUF Réunion » ; « \"force majeure\" ET épidémie ». Using operators or quotes switches the engine to keyword-only matching for the whole query (no synonyms), so do not mix the two regimes."
    • addedInput schema / properties / seat
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "maxLength": 60,
      +        "type": "string"
      +      },
      +      "maxItems": 10,
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Restrict to one or more seats, as a dotted path from the court type down to the room: \"CC\", \"CC.SOCIALE\", \"CA.PARIS\", \"CA.PARIS.P5.C3\". A path matches itself and everything below it, so this one filter also covers what jurisdiction_type and jurisdiction_code express. Take the paths from facets.seat."
      +}
    • removedOutput schema / properties / facets / description
      Removed value: -"Per filter name, a map of filter value to decision count under the current query (jurisdiction_type, jurisdiction_code, chamber, office, legal_domain, solution, procedure, publication, date_lecture_year, legal_instrument). Reuse keys verbatim as filter values. jurisdiction_code is capped to the top 15 courts (other_courts counts the rest) and legal_instrument to the top 10 statutes. chamber appears only under a jurisdiction_code filter, and then lists every formation of the selected courts."
    • removedOutput schema / properties / filterRewritten / description
      Removed value: -"A filter of the call was retired and rewritten: what was asked, what was searched, and the filter to use instead. The hits answer the rewritten call."
    • removedOutput schema / properties / hits / items / description
      Removed value: -"Metadata fields carry search_decisions filter tokens: each field matches the filter of the same name (jurisdictionType → jurisdiction_type, legalDomain → legal_domain…) and its value passes back verbatim to filter."
    • removedOutput schema / properties / hits / items / properties / aiSummary / description
      Removed value: -"AI-written summary of what the decision is about (semantic search), a machine paraphrase, NEVER the court's words: nothing in it is quotable. Exactly one of aiSummary/snippet is served per hit."
    • removedOutput schema / properties / hits / items / properties / chamber
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "Chamber that heard the case, as \"<court>|<chamber>\", reusable verbatim as the chamber filter."
      -}
    • removedOutput schema / properties / hits / items / properties / officialUrl / description
      Removed value: -"The decision on its official publisher: legifrance.gouv.fr, courdecassation.fr, opendata.justice-administrative.fr, conseil-constitutionnel.fr, hudoc, eur-lex. Cite this when the deliverable requires the authoritative source; `url` is the LibreJustice page. Absent when the publisher exposes no per-decision permalink."
    • removedOutput schema / properties / hits / items / properties / publication / description
      Removed value: -"Publication values carried, reusable verbatim as the publication filter."
    • addedOutput schema / properties / hits / items / properties / seat
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • removedOutput schema / properties / hits / items / properties / snippet / description
      Removed value: -"Verbatim passage of the decision text where the query terms matched (keyword search). Exactly one of aiSummary/snippet is served per hit."
    • addedOutput schema / properties / pinned
      Added value: +{
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "title": {
      +        "type": "string"
      +      },
      +      "url": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "title",
      +      "url"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • removedOutput schema / properties / total / description
      Removed value: -"Decisions matched under the current filters, the whole set and not the served window: `hits` is one page of it, and `facets` counts that same set. Keyword matching is an OR bag over the query tokens, so a long query matches a large share of the corpus: narrow with filters (court, dates, chamber) rather than with more words for the number to count something."
  5. Changed6 schema fields changed
    • changedInput schema / properties / ai_rerank / description
      Previous value: -"When enabled (default), reorders results by actual relevance to the query using an LLM reranker. Keep on for agentic use — shortlist quality is significantly higher. Cost: a few seconds of extra latency. Disable only for high-rate exploratory searches where latency matters more than ranking quality."New value: +"When enabled (default), reorders results by actual relevance to the query using an LLM reranker. Keep on for agentic use, shortlist quality is significantly higher. Cost: a few seconds of extra latency. Disable only for high-rate exploratory searches where latency matters more than ranking quality."
    • changedInput schema / properties / legal_article / description
      Previous value: -"Restrict to decisions citing a specific article of a specific code, as a composite key \"<instrument>|<article>\" where <instrument> is a slug or an exact text name, resolved like legal_instrument (e.g. \"code-civil|1240\", \"code-de-justice-administrative|L761-1\"). The instrument prefix is required — the same article number exists in several codes."New value: +"Restrict to decisions citing a specific article of a specific code, as a composite key \"<instrument>|<article>\" where <instrument> is a slug or an exact text name, resolved like legal_instrument (e.g. \"code-civil|1240\", \"code-de-justice-administrative|L761-1\"). The instrument prefix is required: the same article number exists in several codes."
    • changedInput schema / properties / limit / description
      Previous value: -"Maximum number of results (default 10). Above 20 the window is clamped, not refused."New value: +"Maximum number of results (default 10)."
    • changedInput schema / properties / mode / description
      Previous value: -"'auto' is the right choice in almost all cases — it picks the regime from the query shape. auto: combines meaning and keyword matching on plain queries; switches to keyword-only when the query contains ET / OU / SAUF or quoted phrases. lexical: force keyword-only matching. Every term becomes required and nothing recovers a miss, so it fits a string you expect word for word (a consecrated formula, the direction of a holding, a party named in the text) and an empty answer is then an answer. Never for a docket number or a decision name, which auto resolves by exact key. semantic: force the meaning+keyword hybrid even on quoted or operator queries (where auto would fall back to keyword-only). Naming a mode, like adding ET / OU / SAUF, also keeps a docket number inside an ordinary query instead of resolving it alone."New value: +"'auto' is the right choice in almost all cases, it picks the regime from the query shape. auto: combines meaning and keyword matching on plain queries; switches to keyword-only when the query contains ET / OU / SAUF or quoted phrases. lexical: force keyword-only matching. Every term becomes required and nothing recovers a miss, so it fits a string you expect word for word (a consecrated formula, the direction of a holding, a party named in the text) and an empty answer is then an answer. Never for a docket number or a decision name, which auto resolves by exact key. semantic: force the meaning+keyword hybrid even on quoted or operator queries (where auto would fall back to keyword-only). Naming a mode, like adding ET / OU / SAUF, also keeps a docket number inside an ordinary query instead of resolving it alone."
    • changedInput schema / properties / query / description
      Previous value: -"French query, the primary input. Two regimes — pick the right tool for the job: (a) Natural language or descriptive keywords for legal-issue searches; the engine handles synonyms and reformulations. Examples: « responsabilité hôpital infection nosocomiale » ; « étranger malade soins inaccessibles dans son pays d'origine » ; « licenciement discrimination syndicale charge de la preuve ». (b) Quoted exact phrases and ET / OU / SAUF operators for a named entity (company, municipality, person), a precise legal formula, or the direction of a holding: semantic matching ignores negations (« n'est pas X » ranks like « est X »), and only an exact phrase targets which way the court ruled. Examples: « \"Société Générale\" » ; « \"commune de Saint-Denis\" SAUF Réunion » ; « \"force majeure\" ET épidémie ». Using operators or quotes switches the engine to keyword-only matching for the whole query (no synonyms), so do not mix the two regimes: a quoted phrase followed by free words requires every one of them in the same decision. (c) A docket number or a decision name takes neither quotes nor operators: « 21PA01295 », « n° 19-20.682 », « arrêt Danthony » are matched by an exact key, whatever the spelling, and quoting them only costs the recovery that catches a miss."New value: +"French query, the primary input. Two regimes, pick the right tool for the job: (a) Natural language or descriptive keywords for legal-issue searches; the engine handles synonyms and reformulations. Examples: « responsabilité hôpital infection nosocomiale » ; « étranger malade soins inaccessibles dans son pays d'origine » ; « licenciement discrimination syndicale charge de la preuve ». (b) Quoted exact phrases and ET / OU / SAUF operators for a named entity (company, municipality, person), a precise legal formula, or the direction of a holding: semantic matching ignores negations (« n'est pas X » ranks like « est X »), and only an exact phrase targets which way the court ruled. Examples: « \"Société Générale\" » ; « \"commune de Saint-Denis\" SAUF Réunion » ; « \"force majeure\" ET épidémie ». Using operators or quotes switches the engine to keyword-only matching for the whole query (no synonyms), so do not mix the two regimes: a quoted phrase followed by free words requires every one of them in the same decision. (c) A docket number or a decision name takes neither quotes nor operators: « 21PA01295 », « n° 19-20.682 », « arrêt Danthony » are matched by an exact key, whatever the spelling, and quoting them only costs the recovery that catches a miss."
    • changedOutput schema / properties / hits / items / properties / aiSummary / description
      Previous value: -"AI-written summary of what the decision is about (semantic search) — a machine paraphrase, NEVER the court's words: nothing in it is quotable. Exactly one of aiSummary/snippet is served per hit."New value: +"AI-written summary of what the decision is about (semantic search), a machine paraphrase, NEVER the court's words: nothing in it is quotable. Exactly one of aiSummary/snippet is served per hit."
  6. Changed6 schema fields changed
    • changedInput schema / properties / chamber / description
      Previous value: -"Restrict to one or more chambers, as a composite key \"<court>|<chamber>\" where <court> is a jurisdiction_code (e.g. \"ca_paris|C3\", \"cc|C2\", \"cc|SOCIALE\"). The court prefix is required: a chamber key names a different chamber in each court, \"C1\" alone existing in about 200 of them. The chamber part reads as slots joined by a dot, in the order they render: \"P5\" (pôle 5), \"SC4\" (4e section, which contains chambers), \"C6\" (6e chambre), \"CD\" (chambre D), \"C4-7\" (chambre 4-7), \"S1\" (1re section), \"LB\" (section B), \"Q1-4\" (sous-sections 1/4 réunies), \"R3-8\" (chambres 3/8 réunies), numbers in a reunited list always ascending. So \"P5.C6\" is pôle 5, 6e chambre and \"C5.LA\" is section A of the 5th. A chamber that no coordinate positions is named by what it judges, and the key is that bare name, as at the Cour de cassation whose social and criminal chambers carry no number (\"cc|SOCIALE\", \"cc|CRIMINELLE\"). facets.chamber lists the pairs present in the current result set, and only once jurisdiction_code narrows it to one or more courts: a chamber key is meaningless outside its court, so search for the court first and read its formations from the answer."New value: +"Restrict to one or more chambers, as a composite key \"<court>|<chamber>\" where <court> is a jurisdiction_code (e.g. \"ca_paris|C3\", \"cc|C2\", \"cc|SOCIALE\"). The court prefix is required: a chamber key names a different chamber in each court, \"C1\" alone existing in about 200 of them. The chamber part is slots joined by a dot, in the order they render: tag P (pôle), SC (section holding chambers), C (chambre), S (section), L (lettered section), Q (sous-sections réunies) or R (chambres réunies), then its number or letter. So \"P5.C6\" is pôle 5, 6e chambre, \"C5.LA\" section A of the 5th, \"CD\" chambre D, \"R3-8\" chambres 3/8 réunies (numbers in a reunited list always ascending). A chamber that no coordinate positions is keyed by what it judges instead (\"cc|SOCIALE\", \"cc|CRIMINELLE\"). facets.chamber lists the pairs present, and only once jurisdiction_code narrows the search to one or more courts."
    • changedInput schema / properties / limit / description
      Previous value: -"How many results to come back with. Keep the default of 10: the reranker has already put the best first, and each extra hit spends caller context on a preview that must not be quoted. Above 20 the window is clamped to 20, not refused."New value: +"Maximum number of results (default 10). Above 20 the window is clamped, not refused."
    • changedInput schema / properties / mode / description
      Previous value: -"'auto' is the right choice in almost all cases — it picks the regime from the query shape. auto: combines meaning and keyword matching on plain queries; switches to keyword-only when the query contains ET / OU / SAUF or quoted phrases. lexical: force keyword-only matching. Every term becomes required and nothing recovers a miss, so it fits a string you expect word for word (a consecrated formula, the direction of a holding, a party named in the text) and an empty answer is then an answer. Never for a docket number or a decision name, which auto resolves by exact key. semantic: force the meaning+keyword hybrid even on quoted or operator queries (where auto would fall back to keyword-only)."New value: +"'auto' is the right choice in almost all cases — it picks the regime from the query shape. auto: combines meaning and keyword matching on plain queries; switches to keyword-only when the query contains ET / OU / SAUF or quoted phrases. lexical: force keyword-only matching. Every term becomes required and nothing recovers a miss, so it fits a string you expect word for word (a consecrated formula, the direction of a holding, a party named in the text) and an empty answer is then an answer. Never for a docket number or a decision name, which auto resolves by exact key. semantic: force the meaning+keyword hybrid even on quoted or operator queries (where auto would fall back to keyword-only). Naming a mode, like adding ET / OU / SAUF, also keeps a docket number inside an ordinary query instead of resolving it alone."
    • removedOutput schema / properties / absentReference
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "Docket number asked for and not found: the hits below carry another number. Absent from the corpus when absentScope is null, absent from that scope only otherwise."
      -}
    • removedOutput schema / properties / absentScope
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "Court and year the call pinned around absentReference, when no decision carrying that number satisfies them: the number exists elsewhere in the corpus. Drop or widen that filter to reach it."
      -}
    • changedOutput schema / properties / facets / description
      Previous value: -"Per filter name, a map of filter value to decision count under the current query (jurisdiction_type, jurisdiction_code, chamber, office, legal_domain, solution, procedure, publication, date_lecture_year, legal_instrument). Reuse keys verbatim as filter values. jurisdiction_code is capped to the top 15 courts (other_courts counts the rest) and legal_instrument to the top 10 statutes. chamber appears only under a jurisdiction_code filter, and then lists every formation of the selected courts: search once for the court, once more for the chamber."New value: +"Per filter name, a map of filter value to decision count under the current query (jurisdiction_type, jurisdiction_code, chamber, office, legal_domain, solution, procedure, publication, date_lecture_year, legal_instrument). Reuse keys verbatim as filter values. jurisdiction_code is capped to the top 15 courts (other_courts counts the rest) and legal_instrument to the top 10 statutes. chamber appears only under a jurisdiction_code filter, and then lists every formation of the selected courts."
  7. Changed3 schema fields changed
    • changedInput schema / properties / chamber / description
      Previous value: -"Restrict to one or more chambers, as a composite key \"<court>|<chamber>\" where <court> is a jurisdiction_code (e.g. \"ca_paris|CH:3\", \"cc|CH:2\", \"cc|MAT:SOCIALE\"). The court prefix is required: a chamber key names a different chamber in each court, \"CH:1\" alone existing in about 200 of them. The chamber part is what names the chamber inside its own court: its position in the organisation chart when it has one, \"CH:2\" (2e chambre), \"CH:5.A\" (section A of the 5th), \"P:1-11\" (pôle 1, 11e chambre), \"CHC:4-7\" (chambre 4-7), \"S:8\" (8e section), \"SS:3\" (3e sous-section), \"SSR:1-4\" and \"CHR:3-8\" (reunited, numbers always ascending); its specialisation otherwise, prefixed \"MAT:\", as at the Cour de cassation whose social and criminal chambers carry no number (\"cc|MAT:SOCIALE\", \"cc|MAT:CRIMINELLE\"). facets.chamber lists the pairs present in the current result set."New value: +"Restrict to one or more chambers, as a composite key \"<court>|<chamber>\" where <court> is a jurisdiction_code (e.g. \"ca_paris|C3\", \"cc|C2\", \"cc|SOCIALE\"). The court prefix is required: a chamber key names a different chamber in each court, \"C1\" alone existing in about 200 of them. The chamber part reads as slots joined by a dot, in the order they render: \"P5\" (pôle 5), \"SC4\" (4e section, which contains chambers), \"C6\" (6e chambre), \"CD\" (chambre D), \"C4-7\" (chambre 4-7), \"S1\" (1re section), \"LB\" (section B), \"Q1-4\" (sous-sections 1/4 réunies), \"R3-8\" (chambres 3/8 réunies), numbers in a reunited list always ascending. So \"P5.C6\" is pôle 5, 6e chambre and \"C5.LA\" is section A of the 5th. A chamber that no coordinate positions is named by what it judges, and the key is that bare name, as at the Cour de cassation whose social and criminal chambers carry no number (\"cc|SOCIALE\", \"cc|CRIMINELLE\"). facets.chamber lists the pairs present in the current result set, and only once jurisdiction_code narrows it to one or more courts: a chamber key is meaningless outside its court, so search for the court first and read its formations from the answer."
    • changedInput schema / properties / limit / description
      Previous value: -"Maximum number of results (1–20, default 10)."New value: +"How many results to come back with. Keep the default of 10: the reranker has already put the best first, and each extra hit spends caller context on a preview that must not be quoted. Above 20 the window is clamped to 20, not refused."
    • changedOutput schema / properties / facets / description
      Previous value: -"Per filter name, a map of filter value to decision count under the current query (jurisdiction_type, jurisdiction_code, chamber, office, legal_domain, solution, procedure, publication, date_lecture_year, legal_instrument). Reuse keys verbatim as filter values. jurisdiction_code is capped to the top 15 courts (other_courts counts the rest), chamber to the top 15 chambers (other_chambers), legal_instrument to the top 10 statutes."New value: +"Per filter name, a map of filter value to decision count under the current query (jurisdiction_type, jurisdiction_code, chamber, office, legal_domain, solution, procedure, publication, date_lecture_year, legal_instrument). Reuse keys verbatim as filter values. jurisdiction_code is capped to the top 15 courts (other_courts counts the rest) and legal_instrument to the top 10 statutes. chamber appears only under a jurisdiction_code filter, and then lists every formation of the selected courts: search once for the court, once more for the chamber."
  8. Changed4 schema fields changed
    • changedInput schema / properties / mode / description
      Previous value: -"'auto' is the right choice in almost all cases — it picks the regime from the query shape. auto: combines meaning and keyword matching on plain queries; switches to keyword-only when the query contains ET / OU / SAUF or quoted phrases. lexical: force keyword-only matching. The right choice when searching for a named entity (company, municipality, person), a precise legal formula, or an exact quote — cuts semantic noise. semantic: force the meaning+keyword hybrid even on quoted or operator queries (where auto would fall back to keyword-only)."New value: +"'auto' is the right choice in almost all cases — it picks the regime from the query shape. auto: combines meaning and keyword matching on plain queries; switches to keyword-only when the query contains ET / OU / SAUF or quoted phrases. lexical: force keyword-only matching. Every term becomes required and nothing recovers a miss, so it fits a string you expect word for word (a consecrated formula, the direction of a holding, a party named in the text) and an empty answer is then an answer. Never for a docket number or a decision name, which auto resolves by exact key. semantic: force the meaning+keyword hybrid even on quoted or operator queries (where auto would fall back to keyword-only)."
    • changedInput schema / properties / query / description
      Previous value: -"French query, the primary input. Two regimes — pick the right tool for the job: (a) Natural language or descriptive keywords for legal-issue searches; the engine handles synonyms and reformulations. Examples: « responsabilité hôpital infection nosocomiale » ; « étranger malade soins inaccessibles dans son pays d'origine » ; « licenciement discrimination syndicale charge de la preuve ». (b) Quoted exact phrases and ET / OU / SAUF operators for a named entity (company, municipality, person), a precise legal formula, or the direction of a holding: semantic matching ignores negations (« n'est pas X » ranks like « est X »), and only an exact phrase targets which way the court ruled. Examples: « \"Société Générale\" » ; « \"commune de Saint-Denis\" SAUF Réunion » ; « \"force majeure\" ET épidémie ». Using operators or quotes switches the engine to keyword-only matching for the whole query (no synonyms), so do not mix the two regimes."New value: +"French query, the primary input. Two regimes — pick the right tool for the job: (a) Natural language or descriptive keywords for legal-issue searches; the engine handles synonyms and reformulations. Examples: « responsabilité hôpital infection nosocomiale » ; « étranger malade soins inaccessibles dans son pays d'origine » ; « licenciement discrimination syndicale charge de la preuve ». (b) Quoted exact phrases and ET / OU / SAUF operators for a named entity (company, municipality, person), a precise legal formula, or the direction of a holding: semantic matching ignores negations (« n'est pas X » ranks like « est X »), and only an exact phrase targets which way the court ruled. Examples: « \"Société Générale\" » ; « \"commune de Saint-Denis\" SAUF Réunion » ; « \"force majeure\" ET épidémie ». Using operators or quotes switches the engine to keyword-only matching for the whole query (no synonyms), so do not mix the two regimes: a quoted phrase followed by free words requires every one of them in the same decision. (c) A docket number or a decision name takes neither quotes nor operators: « 21PA01295 », « n° 19-20.682 », « arrêt Danthony » are matched by an exact key, whatever the spelling, and quoting them only costs the recovery that catches a miss."
    • changedOutput schema / properties / absentReference / description
      Previous value: -"Docket number asked for and absent from the corpus: the hits below carry another number."New value: +"Docket number asked for and not found: the hits below carry another number. Absent from the corpus when absentScope is null, absent from that scope only otherwise."
    • addedOutput schema / properties / absentScope
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Court and year the call pinned around absentReference, when no decision carrying that number satisfies them: the number exists elsewhere in the corpus. Drop or widen that filter to reach it."
      +}
  9. Changed2 schema fields changed
    • addedOutput schema / properties / total
      Added value: +{
      +  "description": "Decisions matched under the current filters, the whole set and not the served window: `hits` is one page of it, and `facets` counts that same set. Keyword matching is an OR bag over the query tokens, so a long query matches a large share of the corpus: narrow with filters (court, dates, chamber) rather than with more words for the number to count something.",
      +  "type": "integer"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "query",
      -  "hits"
      -]New value: +[
      +  "query",
      +  "total",
      +  "hits"
      +]
  10. Changed1 schema field changed
    • changedInput schema / properties / office / anyOf
      Previous value: -[
      -  {
      -    "items": {
      -      "enum": [
      -        "JLD",
      -        "JAF",
      -        "JCP",
      -        "JEX",
      -        "JUGE_ENFANTS",
      -        "PREMIER_PRESIDENT",
      -        "MAGISTRAT_DESIGNE"
      -      ],
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "items": {
      +      "enum": [
      +        "JLD",
      +        "JAF",
      +        "JCP",
      +        "JEX",
      +        "JUGE_ENFANTS",
      +        "PREMIER_PRESIDENT",
      +        "MAGISTRAT_DESIGNE",
      +        "PRESIDENT_SECTION_CONTENTIEUX",
      +        "JUGE_EXPROPRIATION"
      +      ],
      +      "type": "string"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  11. Changed5 schema fields changed
    • changedInput schema / properties / jurisdiction_code / description
      Previous value: -"Restrict to one or more precise court units by referential code. Code shapes: \"cc\" (Cour de cassation), \"ce\" (Conseil d'État), \"cnda\", \"cedh\", \"cjue\"; \"ca_<city>\", \"caa_<city>\", \"ta_<city>\", \"tj_<city>\", \"tcom_<city>\" (e.g. \"ca_paris\", \"ta_marseille\", \"tj_paris\", \"tcom_lyon\"). When unsure, guess with the city name in the code: the error names the nearest valid ones. Each code is a court; the chamber inside it is a separate filter (see chamber and matiere); use jurisdiction_type for the broad category."New value: +"Restrict to one or more precise court units by referential code. Code shapes: \"cc\" (Cour de cassation), \"ce\" (Conseil d'État), \"cnda\", \"cedh\", \"cjue\"; \"ca_<city>\", \"caa_<city>\", \"ta_<city>\", \"tj_<city>\", \"tcom_<city>\" (e.g. \"ca_paris\", \"ta_marseille\", \"tj_paris\", \"tcom_lyon\"). When unsure, guess with the city name in the code: the error names the nearest valid ones. Each code is a court; the chamber inside it is a separate filter (see chamber); use jurisdiction_type for the broad category."
    • removedInput schema / properties / matiere
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "items": {
      -        "enum": [
      -          "BAUX",
      -          "CIVI",
      -          "CIVILE",
      -          "COMMERCIALE",
      -          "CONSEIL",
      -          "CONSTRUCTION",
      -          "COPROPRIETE",
      -          "CORRECTIONNELLE",
      -          "CRIMINELLE",
      -          "DALO",
      -          "ETRANGERS",
      -          "EXPROPRIATION",
      -          "FAMILLE",
      -          "INSTRUCTION",
      -          "MINEURS",
      -          "NATIONALITE",
      -          "PROCEDURES_COLLECTIVES",
      -          "PROTECTION_SOCIALE",
      -          "PROXIMITE",
      -          "PRUD_HOMALE",
      -          "SOCIALE",
      -          "SURENDETTEMENT",
      -          "TERRES",
      -          "URGENCES"
      -        ],
      -        "type": "string"
      -      },
      -      "maxItems": 10,
      -      "type": "array"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "Filter by subject matter (any-of, uniform across orders): the contentieux the case belongs to, read off the chamber that heard it, independent of the court itself. Pairs with office for the single-judge formations. Where a court names its chambers instead of numbering them, this says the same thing as chamber does (\"cc|MAT:SOCIALE\"), matiere being the one that crosses courts. A general matiere covers its specialities: \"CIVILE\" also returns BAUX, COPROPRIETE and FAMILLE, while a speciality returns itself alone."
      -}
    • changedOutput schema / properties / facets / description
      Previous value: -"Per filter name, a map of filter value to decision count under the current query (jurisdiction_type, jurisdiction_code, matiere, chamber, office, legal_domain, solution, procedure, publication, date_lecture_year, legal_instrument). Reuse keys verbatim as filter values. jurisdiction_code is capped to the top 15 courts (other_courts counts the rest), chamber to the top 15 chambers (other_chambers), legal_instrument to the top 10 statutes."New value: +"Per filter name, a map of filter value to decision count under the current query (jurisdiction_type, jurisdiction_code, chamber, office, legal_domain, solution, procedure, publication, date_lecture_year, legal_instrument). Reuse keys verbatim as filter values. jurisdiction_code is capped to the top 15 courts (other_courts counts the rest), chamber to the top 15 chambers (other_chambers), legal_instrument to the top 10 statutes."
    • addedOutput schema / properties / filterRewritten
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "A filter of the call was retired and rewritten: what was asked, what was searched, and the filter to use instead. The hits answer the rewritten call."
      +}
    • removedOutput schema / properties / hits / items / properties / matiere
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null
      -}
  12. Changed2 schema fields changed
    • changedInput schema / properties / matiere / description
      Previous value: -"Filter by subject matter (any-of, uniform across orders): the contentieux the case belongs to, read off the chamber that heard it, independent of the court itself. Pairs with office for the single-judge formations. Where a court names its chambers instead of numbering them, this says the same thing as chamber does (\"cc|MAT:SOCIALE\"), matiere being the one that crosses courts."New value: +"Filter by subject matter (any-of, uniform across orders): the contentieux the case belongs to, read off the chamber that heard it, independent of the court itself. Pairs with office for the single-judge formations. Where a court names its chambers instead of numbering them, this says the same thing as chamber does (\"cc|MAT:SOCIALE\"), matiere being the one that crosses courts. A general matiere covers its specialities: \"CIVILE\" also returns BAUX, COPROPRIETE and FAMILLE, while a speciality returns itself alone."
    • changedOutput schema / properties / facets / description
      Previous value: -"Per filter name, a map of filter value to decision count under the current query (jurisdiction_type, jurisdiction_code, matiere, chamber, office, legal_domain, solution, publication, date_lecture_year, legal_instrument). Reuse keys verbatim as filter values. jurisdiction_code is capped to the top 15 courts (other_courts counts the rest), chamber to the top 15 chambers (other_chambers), legal_instrument to the top 10 statutes."New value: +"Per filter name, a map of filter value to decision count under the current query (jurisdiction_type, jurisdiction_code, matiere, chamber, office, legal_domain, solution, procedure, publication, date_lecture_year, legal_instrument). Reuse keys verbatim as filter values. jurisdiction_code is capped to the top 15 courts (other_courts counts the rest), chamber to the top 15 chambers (other_chambers), legal_instrument to the top 10 statutes."
  13. Changed5 schema fields changed
    • changedInput schema / properties / chamber / description
      Previous value: -"Restrict to one or more benches, as a composite key \"<court>|<bench>\" where <court> is a jurisdiction_code (e.g. \"ca_paris|CH:3\", \"cc|CH:2\"). The court prefix is required: a bench key names a different bench in each court, \"CH:1\" alone existing in about 200 of them. The bench part is a position in the court's own organisation chart, not a subject (that is matiere): \"CH:2\" (2e chambre), \"CH:5.A\" (section A of the 5th), \"P:1-11\" (pôle 1, 11e chambre), \"CHC:4-7\" (chambre 4-7), \"S:8\" (8e section), \"SS:3\" (3e sous-section), \"SSR:1-4\" and \"CHR:3-8\" (reunited, numbers always ascending). facets.chamber lists the pairs present in the current result set."New value: +"Restrict to one or more chambers, as a composite key \"<court>|<chamber>\" where <court> is a jurisdiction_code (e.g. \"ca_paris|CH:3\", \"cc|CH:2\", \"cc|MAT:SOCIALE\"). The court prefix is required: a chamber key names a different chamber in each court, \"CH:1\" alone existing in about 200 of them. The chamber part is what names the chamber inside its own court: its position in the organisation chart when it has one, \"CH:2\" (2e chambre), \"CH:5.A\" (section A of the 5th), \"P:1-11\" (pôle 1, 11e chambre), \"CHC:4-7\" (chambre 4-7), \"S:8\" (8e section), \"SS:3\" (3e sous-section), \"SSR:1-4\" and \"CHR:3-8\" (reunited, numbers always ascending); its specialisation otherwise, prefixed \"MAT:\", as at the Cour de cassation whose social and criminal chambers carry no number (\"cc|MAT:SOCIALE\", \"cc|MAT:CRIMINELLE\"). facets.chamber lists the pairs present in the current result set."
    • changedInput schema / properties / jurisdiction_code / description
      Previous value: -"Restrict to one or more precise court units by referential code. Code shapes: \"cc\" (Cour de cassation), \"ce\" (Conseil d'État), \"cnda\", \"cedh\", \"cjue\"; \"ca_<city>\", \"caa_<city>\", \"ta_<city>\", \"tj_<city>\", \"tcom_<city>\" (e.g. \"ca_paris\", \"ta_marseille\", \"tj_paris\", \"tcom_lyon\"). When unsure, guess with the city name in the code: the error names the nearest valid ones. Each code is a court; the bench is a separate axis (see chamber and matiere); use jurisdiction_type for the broad category."New value: +"Restrict to one or more precise court units by referential code. Code shapes: \"cc\" (Cour de cassation), \"ce\" (Conseil d'État), \"cnda\", \"cedh\", \"cjue\"; \"ca_<city>\", \"caa_<city>\", \"ta_<city>\", \"tj_<city>\", \"tcom_<city>\" (e.g. \"ca_paris\", \"ta_marseille\", \"tj_paris\", \"tcom_lyon\"). When unsure, guess with the city name in the code: the error names the nearest valid ones. Each code is a court; the chamber inside it is a separate filter (see chamber and matiere); use jurisdiction_type for the broad category."
    • changedInput schema / properties / matiere / description
      Previous value: -"Filter by subject matter (any-of, uniform across orders): the contentieux the case belongs to, read off the bench that heard it, independent of the court itself. Pairs with office for the single-judge benches, and with chamber for the bench itself."New value: +"Filter by subject matter (any-of, uniform across orders): the contentieux the case belongs to, read off the chamber that heard it, independent of the court itself. Pairs with office for the single-judge formations. Where a court names its chambers instead of numbering them, this says the same thing as chamber does (\"cc|MAT:SOCIALE\"), matiere being the one that crosses courts."
    • changedOutput schema / properties / facets / description
      Previous value: -"Per filter name, a map of filter value to decision count under the current query (jurisdiction_type, jurisdiction_code, matiere, chamber, office, legal_domain, solution, publication, date_lecture_year, legal_instrument). Reuse keys verbatim as filter values. jurisdiction_code is capped to the top 15 courts (other_courts counts the rest), chamber to the top 15 benches (other_benches), legal_instrument to the top 10 statutes."New value: +"Per filter name, a map of filter value to decision count under the current query (jurisdiction_type, jurisdiction_code, matiere, chamber, office, legal_domain, solution, publication, date_lecture_year, legal_instrument). Reuse keys verbatim as filter values. jurisdiction_code is capped to the top 15 courts (other_courts counts the rest), chamber to the top 15 chambers (other_chambers), legal_instrument to the top 10 statutes."
    • changedOutput schema / properties / hits / items / properties / chamber / description
      Previous value: -"Bench that heard the case, as \"<court>|<bench>\", reusable verbatim as the chamber filter."New value: +"Chamber that heard the case, as \"<court>|<chamber>\", reusable verbatim as the chamber filter."
  14. Changed4 schema fields changed
    • changedInput schema / properties / chamber / anyOf
      Previous value: -[
      -  {
      -    "items": {
      -      "maxLength": 20,
      -      "type": "string"
      -    },
      -    "maxItems": 10,
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "items": {
      +      "maxLength": 60,
      +      "type": "string"
      +    },
      +    "maxItems": 10,
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / chamber / description
      Previous value: -"Restrict to one or more benches by their factual key: the position in the court's own organisation chart, not a subject (that is matiere). Key shapes: \"CH:2\" (2e chambre), \"CH:5.A\" (section A of the 5th), \"P:1-11\" (pôle 1, 11e chambre), \"CHC:4-7\" (chambre 4-7), \"S:8\" (8e section), \"SS:3\" (3e sous-section), \"SSR:1-4\" and \"CHR:3-8\" (reunited, numbers always ascending). The same key means a different bench in each court, so pair it with jurisdiction_code; facets.chamber lists the keys present in the current result set with their labels."New value: +"Restrict to one or more benches, as a composite key \"<court>|<bench>\" where <court> is a jurisdiction_code (e.g. \"ca_paris|CH:3\", \"cc|CH:2\"). The court prefix is required: a bench key names a different bench in each court, \"CH:1\" alone existing in about 200 of them. The bench part is a position in the court's own organisation chart, not a subject (that is matiere): \"CH:2\" (2e chambre), \"CH:5.A\" (section A of the 5th), \"P:1-11\" (pôle 1, 11e chambre), \"CHC:4-7\" (chambre 4-7), \"S:8\" (8e section), \"SS:3\" (3e sous-section), \"SSR:1-4\" and \"CHR:3-8\" (reunited, numbers always ascending). facets.chamber lists the pairs present in the current result set."
    • changedOutput schema / properties / facets / description
      Previous value: -"Per filter name, a map of filter value to decision count under the current query (jurisdiction_type, jurisdiction_code, matiere, chamber, office, legal_domain, solution, publication, date_lecture_year, legal_instrument). Reuse keys verbatim as filter values. jurisdiction_code is capped to the top 15 courts (other_courts counts the rest), legal_instrument to the top 10 statutes."New value: +"Per filter name, a map of filter value to decision count under the current query (jurisdiction_type, jurisdiction_code, matiere, chamber, office, legal_domain, solution, publication, date_lecture_year, legal_instrument). Reuse keys verbatim as filter values. jurisdiction_code is capped to the top 15 courts (other_courts counts the rest), chamber to the top 15 benches (other_benches), legal_instrument to the top 10 statutes."
    • changedOutput schema / properties / hits / items / properties / chamber / description
      Previous value: -"Factual bench key, reusable verbatim as the chamber filter."New value: +"Bench that heard the case, as \"<court>|<bench>\", reusable verbatim as the chamber filter."
  15. Changed6 schema fields changed
    • addedOutput schema / properties / absentReference
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Docket number asked for and absent from the corpus: the hits below carry another number."
      +}
    • removedOutput schema / properties / hits / items / properties / publication / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / properties / hits / items / properties / publication / default
      Removed value: -null
    • addedOutput schema / properties / hits / items / properties / publication / description
      Added value: +"Publication values carried, reusable verbatim as the publication filter."
    • addedOutput schema / properties / hits / items / properties / publication / items
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / hits / items / properties / publication / type
      Added value: +"array"
  16. Changed7 schema fields changed
    • changedInput schema / properties / chamber / anyOf
      Previous value: -[
      -  {
      -    "items": {
      -      "enum": [
      -        "BAUX",
      -        "CIVI",
      -        "CIVILE",
      -        "COMMERCIALE",
      -        "CONSEIL",
      -        "CONSTRUCTION",
      -        "COPROPRIETE",
      -        "CORRECTIONNELLE",
      -        "CRIMINELLE",
      -        "DALO",
      -        "ETRANGERS",
      -        "EXPROPRIATION",
      -        "FAMILLE",
      -        "INSTRUCTION",
      -        "MINEURS",
      -        "NATIONALITE",
      -        "PROCEDURES_COLLECTIVES",
      -        "PROTECTION_SOCIALE",
      -        "PROXIMITE",
      -        "PRUD_HOMALE",
      -        "SOCIALE",
      -        "SURENDETTEMENT",
      -        "TERRES",
      -        "URGENCES"
      -      ],
      -      "type": "string"
      -    },
      -    "maxItems": 10,
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "items": {
      +      "maxLength": 20,
      +      "type": "string"
      +    },
      +    "maxItems": 10,
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / chamber / description
      Previous value: -"Filter by chamber category (any-of, uniform across orders): the specialised bench that heard the case, independent of the court itself. Pairs with office for the single-judge benches."New value: +"Restrict to one or more benches by their factual key: the position in the court's own organisation chart, not a subject (that is matiere). Key shapes: \"CH:2\" (2e chambre), \"CH:5.A\" (section A of the 5th), \"P:1-11\" (pôle 1, 11e chambre), \"CHC:4-7\" (chambre 4-7), \"S:8\" (8e section), \"SS:3\" (3e sous-section), \"SSR:1-4\" and \"CHR:3-8\" (reunited, numbers always ascending). The same key means a different bench in each court, so pair it with jurisdiction_code; facets.chamber lists the keys present in the current result set with their labels."
    • changedInput schema / properties / jurisdiction_code / description
      Previous value: -"Restrict to one or more precise court units by referential code. Code shapes: \"cc\" (Cour de cassation), \"ce\" (Conseil d'État), \"cnda\", \"cedh\", \"cjue\"; \"ca_<city>\", \"caa_<city>\", \"ta_<city>\", \"tj_<city>\", \"tcom_<city>\" (e.g. \"ca_paris\", \"ta_marseille\", \"tj_paris\", \"tcom_lyon\"). When unsure, guess with the city name in the code — the error names the nearest valid ones. Each code is a court; the chamber is a separate axis (see chamber); use jurisdiction_type for the broad category."New value: +"Restrict to one or more precise court units by referential code. Code shapes: \"cc\" (Cour de cassation), \"ce\" (Conseil d'État), \"cnda\", \"cedh\", \"cjue\"; \"ca_<city>\", \"caa_<city>\", \"ta_<city>\", \"tj_<city>\", \"tcom_<city>\" (e.g. \"ca_paris\", \"ta_marseille\", \"tj_paris\", \"tcom_lyon\"). When unsure, guess with the city name in the code: the error names the nearest valid ones. Each code is a court; the bench is a separate axis (see chamber and matiere); use jurisdiction_type for the broad category."
    • addedInput schema / properties / matiere
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "enum": [
      +          "BAUX",
      +          "CIVI",
      +          "CIVILE",
      +          "COMMERCIALE",
      +          "CONSEIL",
      +          "CONSTRUCTION",
      +          "COPROPRIETE",
      +          "CORRECTIONNELLE",
      +          "CRIMINELLE",
      +          "DALO",
      +          "ETRANGERS",
      +          "EXPROPRIATION",
      +          "FAMILLE",
      +          "INSTRUCTION",
      +          "MINEURS",
      +          "NATIONALITE",
      +          "PROCEDURES_COLLECTIVES",
      +          "PROTECTION_SOCIALE",
      +          "PROXIMITE",
      +          "PRUD_HOMALE",
      +          "SOCIALE",
      +          "SURENDETTEMENT",
      +          "TERRES",
      +          "URGENCES"
      +        ],
      +        "type": "string"
      +      },
      +      "maxItems": 10,
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Filter by subject matter (any-of, uniform across orders): the contentieux the case belongs to, read off the bench that heard it, independent of the court itself. Pairs with office for the single-judge benches, and with chamber for the bench itself."
      +}
    • changedOutput schema / properties / facets / description
      Previous value: -"Per filter name, a map of filter value to decision count under the current query (jurisdiction_type, jurisdiction_code, chamber, office, legal_domain, solution, publication, date_lecture_year, legal_instrument). Reuse keys verbatim as filter values. jurisdiction_code is capped to the top 15 courts (other_courts counts the rest), legal_instrument to the top 10 statutes."New value: +"Per filter name, a map of filter value to decision count under the current query (jurisdiction_type, jurisdiction_code, matiere, chamber, office, legal_domain, solution, publication, date_lecture_year, legal_instrument). Reuse keys verbatim as filter values. jurisdiction_code is capped to the top 15 courts (other_courts counts the rest), legal_instrument to the top 10 statutes."
    • addedOutput schema / properties / hits / items / properties / chamber / description
      Added value: +"Factual bench key, reusable verbatim as the chamber filter."
    • addedOutput schema / properties / hits / items / properties / matiere
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
  17. Changed7 schema fields changed
    • changedInput schema / properties / chamber / anyOf
      Previous value: -[
      -  {
      -    "items": {
      -      "maxLength": 40,
      -      "type": "string"
      -    },
      -    "maxItems": 10,
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "items": {
      +      "enum": [
      +        "BAUX",
      +        "CIVI",
      +        "CIVILE",
      +        "COMMERCIALE",
      +        "CONSEIL",
      +        "CONSTRUCTION",
      +        "COPROPRIETE",
      +        "CORRECTIONNELLE",
      +        "CRIMINELLE",
      +        "DALO",
      +        "ETRANGERS",
      +        "EXPROPRIATION",
      +        "FAMILLE",
      +        "INSTRUCTION",
      +        "MINEURS",
      +        "NATIONALITE",
      +        "PROCEDURES_COLLECTIVES",
      +        "PROTECTION_SOCIALE",
      +        "PROXIMITE",
      +        "PRUD_HOMALE",
      +        "SOCIALE",
      +        "SURENDETTEMENT",
      +        "TERRES",
      +        "URGENCES"
      +      ],
      +      "type": "string"
      +    },
      +    "maxItems": 10,
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / chamber / description
      Previous value: -"Filter by chamber category (any-of, uniform across orders, e.g. \"CIVILE\", \"SOCIALE\", \"COMMERCIALE\", \"PROCEDURES_COLLECTIVES\", \"ETRANGERS\", \"PROTECTION_SOCIALE\", \"INSTRUCTION\"). Codes come from the chamber facet of a previous search."New value: +"Filter by chamber category (any-of, uniform across orders): the specialised bench that heard the case, independent of the court itself. Pairs with office for the single-judge benches."
    • changedInput schema / properties / publication / anyOf
      Previous value: -[
      -  {
      -    "items": {
      -      "enum": [
      -        "PUBLIE_BULLETIN",
      -        "INEDIT_BULLETIN",
      -        "PUBLIE_LEBON",
      -        "MENTIONNE_LEBON",
      -        "INEDIT_LEBON",
      -        "AUTRE"
      -      ],
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "items": {
      +      "enum": [
      +        "PUBLIE_BULLETIN",
      +        "PUBLIE_RAPPORT",
      +        "LETTRE_CHAMBRE",
      +        "COMMUNIQUE",
      +        "INEDIT_BULLETIN",
      +        "PUBLIE_LEBON",
      +        "MENTIONNE_LEBON",
      +        "INEDIT_LEBON"
      +      ],
      +      "type": "string"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / publication / description
      Previous value: -"Filter by publication level (any-of, référentiel publication): PUBLIE_BULLETIN / INEDIT_BULLETIN (Cour de cassation), PUBLIE_LEBON / MENTIONNE_LEBON / INEDIT_LEBON (administrative), AUTRE (no publication statement in the source)."New value: +"Filter by publication, at the grain the Cour de cassation itself uses (any-of, membership is multiple: a decision matches every value whose code it carries). Judicial order: PUBLIE_BULLETIN, PUBLIE_RAPPORT (annual report, the strongest signal), LETTRE_CHAMBRE, COMMUNIQUE, INEDIT_BULLETIN. Administrative order: PUBLIE_LEBON, MENTIONNE_LEBON, INEDIT_LEBON. Lower courts carry no publication statement and match no value."
    • removedInput schema / properties / significance
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "items": {
      -        "enum": [
      -          "MAJEURE",
      -          "IMPORTANTE",
      -          "LIMITEE",
      -          "INDETERMINEE"
      -        ],
      -        "type": "string"
      -      },
      -      "type": "array"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "Filter by jurisprudential significance (any-of), derived from publication codes at strongest rank: MAJEURE (rapport annuel / recueil Lebon), IMPORTANTE (bulletin, tables du Lebon, lettres de chambre, communiqués), LIMITEE (unpublished), INDETERMINEE (no publication statement — lower courts, European courts)."
      -}
    • changedOutput schema / properties / facets / description
      Previous value: -"Per filter name, a map of filter value to decision count under the current query (jurisdiction_type, jurisdiction_code, chamber, office, legal_domain, solution, significance, publication, date_lecture_year, legal_instrument). Reuse keys verbatim as filter values. jurisdiction_code is capped to the top 15 courts (other_courts counts the rest), legal_instrument to the top 10 statutes."New value: +"Per filter name, a map of filter value to decision count under the current query (jurisdiction_type, jurisdiction_code, chamber, office, legal_domain, solution, publication, date_lecture_year, legal_instrument). Reuse keys verbatim as filter values. jurisdiction_code is capped to the top 15 courts (other_courts counts the rest), legal_instrument to the top 10 statutes."
    • addedOutput schema / properties / hits / items / properties / officialUrl
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "The decision on its official publisher: legifrance.gouv.fr, courdecassation.fr, opendata.justice-administrative.fr, conseil-constitutionnel.fr, hudoc, eur-lex. Cite this when the deliverable requires the authoritative source; `url` is the LibreJustice page. Absent when the publisher exposes no per-decision permalink."
      +}
  18. Changed4 schema fields changed
    • changedInput schema / properties / ai_rerank / description
      Previous value: -"When enabled (default), reorders results by actual relevance to the query using an LLM reranker (cf. ADR 0041). Keep on for agentic use — shortlist quality is significantly higher. Cost: a few seconds of extra latency. Disable only for high-rate exploratory searches where latency matters more than ranking quality."New value: +"When enabled (default), reorders results by actual relevance to the query using an LLM reranker. Keep on for agentic use — shortlist quality is significantly higher. Cost: a few seconds of extra latency. Disable only for high-rate exploratory searches where latency matters more than ranking quality."
    • changedInput schema / properties / legal_domain / description
      Previous value: -"Filter by legal domain (curated domain tree, ADR 0146): 9 roots and their leaves (e.g. CIVIL_DROIT_LOCATIF). Selecting a root also matches all its leaves."New value: +"Filter by legal domain (curated domain tree): 9 roots and their leaves (e.g. CIVIL_DROIT_LOCATIF). Selecting a root also matches all its leaves."
    • changedInput schema / properties / significance / description
      Previous value: -"Filter by jurisprudential significance (any-of, ADR 0167), derived from publication codes at strongest rank: MAJEURE (rapport annuel / recueil Lebon), IMPORTANTE (bulletin, tables du Lebon, lettres de chambre, communiqués), LIMITEE (unpublished), INDETERMINEE (no publication statement — lower courts, European courts)."New value: +"Filter by jurisprudential significance (any-of), derived from publication codes at strongest rank: MAJEURE (rapport annuel / recueil Lebon), IMPORTANTE (bulletin, tables du Lebon, lettres de chambre, communiqués), LIMITEE (unpublished), INDETERMINEE (no publication statement — lower courts, European courts)."
    • changedInput schema / properties / solution / description
      Previous value: -"Filter by the ruling of the operative part (référentiel solution, ADR 0146). REJET / IRRECEVABILITE / DESISTEMENT / NON_LIEU_A_STATUER are procedural or negative endings; CONFIRMATION / INFIRMATION* / REFORMATION are appeal outcomes; CASSATION* is cassation-specific; ANNULATION covers administrative annulment; SATISFACTION_TOTALE / SATISFACTION_PARTIELLE cover first-instance civil rulings granting the claim."New value: +"Filter by the ruling of the operative part (référentiel solution). REJET / IRRECEVABILITE / DESISTEMENT / NON_LIEU_A_STATUER are procedural or negative endings; CONFIRMATION / INFIRMATION* / REFORMATION are appeal outcomes; CASSATION* is cassation-specific; ANNULATION covers administrative annulment; SATISFACTION_TOTALE / SATISFACTION_PARTIELLE cover first-instance civil rulings granting the claim."
  19. Changed1 schema field changed
    • changedInput schema / properties / chamber / description
      Previous value: -"Filter by chamber category (any-of, uniform across orders, e.g. \"CIVILE\", \"SOCIALE\", \"COMMERCIALE\", \"CRIMINELLE\", \"ETRANGERS\", \"PRUD_HOMALE\", \"INSTRUCTION\"). Codes come from the chamber facet of a previous search."New value: +"Filter by chamber category (any-of, uniform across orders, e.g. \"CIVILE\", \"SOCIALE\", \"COMMERCIALE\", \"PROCEDURES_COLLECTIVES\", \"ETRANGERS\", \"PROTECTION_SOCIALE\", \"INSTRUCTION\"). Codes come from the chamber facet of a previous search."
  20. Changed4 schema fields changed
    • changedInput schema / properties / chamber / description
      Previous value: -"Filter by chamber category (any-of, uniform across orders, e.g. \"CIVILE\", \"SOCIALE\", \"COMMERCIALE\", \"CRIMINELLE\", \"ETRANGERS\", \"PRUD_HOMALE\", \"INSTRUCTION\"). Codes come from the chamber facet of a previous search; an unknown code fails listing the valid codes."New value: +"Filter by chamber category (any-of, uniform across orders, e.g. \"CIVILE\", \"SOCIALE\", \"COMMERCIALE\", \"CRIMINELLE\", \"ETRANGERS\", \"PRUD_HOMALE\", \"INSTRUCTION\"). Codes come from the chamber facet of a previous search."
    • changedInput schema / properties / jurisdiction_code / description
      Previous value: -"Restrict to one or more precise court units by referential code. Code shapes: \"cc\" (Cour de cassation), \"ce\" (Conseil d'État), \"cnda\", \"cedh\", \"cjue\"; \"ca_<city>\", \"caa_<city>\", \"ta_<city>\", \"tj_<city>\", \"tcom_<city>\" (e.g. \"ca_paris\", \"ta_marseille\", \"tj_paris\", \"tcom_lyon\"). An unknown code fails listing the nearest valid codes; when unsure, guess with the city name in the code and let the error correct you. Each code is a court; the chamber is a separate axis (see chamber); use jurisdiction_type for the broad category."New value: +"Restrict to one or more precise court units by referential code. Code shapes: \"cc\" (Cour de cassation), \"ce\" (Conseil d'État), \"cnda\", \"cedh\", \"cjue\"; \"ca_<city>\", \"caa_<city>\", \"ta_<city>\", \"tj_<city>\", \"tcom_<city>\" (e.g. \"ca_paris\", \"ta_marseille\", \"tj_paris\", \"tcom_lyon\"). When unsure, guess with the city name in the code — the error names the nearest valid ones. Each code is a court; the chamber is a separate axis (see chamber); use jurisdiction_type for the broad category."
    • changedInput schema / properties / legal_domain / description
      Previous value: -"Filter by legal domain (Doctrine-aligned tree, ADR 0146): 9 roots (CIVIL, COMMERCIAL, PUBLIC, SOCIAL, FISCAL, PROPRIETE_INTELLECTUELLE, EUROPEEN, CRIMINEL, CONSTITUTIONNEL) and their leaves (e.g. CIVIL_DROIT_LOCATIF). Selecting a root also matches all its leaves."New value: +"Filter by legal domain (curated domain tree, ADR 0146): 9 roots and their leaves (e.g. CIVIL_DROIT_LOCATIF). Selecting a root also matches all its leaves."
    • changedInput schema / properties / legal_instrument / description
      Previous value: -"Restrict to decisions citing one or more given codes or statutes. Accepts a slug from facets.legal_instrument (e.g. \"code-civil\") or an exact text name resolved server-side (e.g. \"Code civil\"); an unknown value fails listing the closest slugs with their titles, typos included."New value: +"Restrict to decisions citing one or more given codes or statutes. Accepts a slug from facets.legal_instrument (e.g. \"code-civil\") or an exact text name resolved server-side (e.g. \"Code civil\")."
  21. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Annotations cover safety (readOnly, idempotent, non-destructive), so the description carries a lower burden, but it still adds significant behavioral detail: aiSummary is a machine paraphrase never quotable as the court's words, snippet is verbatim; filters are OR'd within a filter and AND'd across filters; facets expose counts and keys to reuse verbatim; and mode behavior is disclosed (semantic matching ignores negations, quoted phrases switch to keyword-only). No contradiction with annotations exists.

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 dense but well-structured: it opens with the core action, then the return payload, then usage guidance, then filter/facet behavior. Each sentence adds distinct information, with no filler or tautology. It is long, but given 15 parameters and the complexity of the query regimes, the length is justified.

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?

Given the rich input schema, output schema, and safety annotations, the description covers everything an agent needs for correct invocation: query-regime rules, mode selection, filter semantics, facet reuse, reranker tradeoffs, and routing to get_decision for full text. Nothing essential is missing.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds meaningful cross-parameter semantics beyond the individual schema entries: the OR/AND filter composition rule, the instruction to reuse facet keys verbatim, and the symmetry between hit metadata fields and matching filters. This provides extra value without needing to restate every parameter.

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 leads with a specific verb and resource: 'Search decisions by meaning and keywords combined.' It explicitly names the return shortlist (title, url, overview, metadata) and distinguishes itself from the sibling get_decision, which 'reads the full text.' This leaves no ambiguity about what the tool does or how it differs from its siblings.

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

Usage Guidelines4/5

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

The description gives clear usage context: keep the query for the legal issue, put constraints in structured filters, and use get_decision for full text. It also provides strong mode-selection guidance ('auto' is right in almost all cases) and explains when to force lexical or reference modes. It does not explicitly mention search_legal_texts as an alternative, but the decision-focused scope and schema make the intended use clear.

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.