---
title: "Research Pack"
method: POST
path: "/research-pack"
tags: ["research"]
---

# Research Pack

`POST /research-pack`

## Request

- Base URL: `https://api.casenode.ai`
- URL: `https://api.casenode.ai/research-pack`
- Auth: none declared

Assemble a structured, LLM-ready research pack.

Applies filters to scope the corpus, then finds the most-cited
authorities within that scope, grouped by type (case law, legislation,
procedural rules). Includes usage example paragraphs and test elements.

No LLM is used to build the pack — it's pure SQL on the citation graph.

## Request body

- ResearchPackRequest
  - `query` string
  - `filters` SearchFilter[]
    - `field` 'domain' | 'court' | 'respondent' | 'claimant' | 'cites' | 'mentions' | 'judge' | 'year_from' | 'year_to' | 'case_id' | 'disposition' | 'judgment_status' | 'appeal_from' | 'cited_by_min' | 'jurisdiction' | 'topic' | 'ids', required: Filter field — see FILTER_FIELD_HELP in the API schema for values.
    - `value` string: Single value. Omit when `values` is given.
    - `values` string[], nullable: Alternative spellings of ONE entity, OR'd together. Use for unconsolidated party/judge names. Omit for single-value filters; when given, `value` is ignored and set to the first entry. An exclude filter with several values excludes ALL of them.
    - `match` 'strict' | 'exclude'
    - `prec` 'exact' | 'fuzzy', nullable: Text precision for phrase fields (mentions/party/judge): 'exact' = the value must appear contiguously, 'fuzzy' = its significant words must all appear, in any order. Defaults to 'fuzzy' for party and judge names and 'exact' everywhere else.
  - `filter_blocks` FilterBlock[], nullable
    - `query` string
    - `filters` SearchFilter[]
      - `field` 'domain' | 'court' | 'respondent' | 'claimant' | 'cites' | 'mentions' | 'judge' | 'year_from' | 'year_to' | 'case_id' | 'disposition' | 'judgment_status' | 'appeal_from' | 'cited_by_min' | 'jurisdiction' | 'topic' | 'ids', required: Filter field — see FILTER_FIELD_HELP in the API schema for values.
      - `value` string: Single value. Omit when `values` is given.
      - `values` string[], nullable: Alternative spellings of ONE entity, OR'd together. Use for unconsolidated party/judge names. Omit for single-value filters; when given, `value` is ignored and set to the first entry. An exclude filter with several values excludes ALL of them.
      - `match` 'strict' | 'exclude'
      - `prec` 'exact' | 'fuzzy', nullable: Text precision for phrase fields (mentions/party/judge): 'exact' = the value must appear contiguously, 'fuzzy' = its significant words must all appear, in any order. Defaults to 'fuzzy' for party and judge names and 'exact' everywhere else.
  - `top_authorities` integer
  - `examples_per_authority` integer
  - `target_court` string, nullable
  - `sort` 'relevance' | 'citations' | 'date': Which authorities each list holds, with the options /search takes: 'relevance' (the ones cases in scope cite most), 'citations' (the most cited across the corpus, of those cited in scope), 'date' (the newest). `cited_by_count` in the response stays the in-scope count.
  - `cited_by_min` integer, nullable: Only return authorities cited at least this many times across the corpus. A `cited_by_min` filter narrows the cases analysed instead, like every filter here.

## Response `200`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/casenode/apis/casenode-api.md) · [All operations](https://skmtc.dev/casenode/apis/casenode-api/llms.txt) · [OpenAPI document](https://skmtc.dev/casenode/apis/casenode-api/revisions/5b2883d19661?raw)
