> ## Documentation Index
> Fetch the complete documentation index at: https://docs.casebyte.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Daily summaries

> Read recent Casebyte Daily summaries for news and video integrations.

Use your existing API key to read completed Casebyte Daily summaries. These
endpoints use the same authentication, rate limits and error envelope as case
search. Call them from your server and keep your API key out of browser code.

## Active seven-day window

Both endpoints restrict results to **today and the preceding six calendar days
in Asia/Hong\_Kong**, inclusive. The window advances at midnight HKT (UTC+08:00).
For example, on 28 September 2026 it includes 22–28 September: from
`2026-09-22T00:00:00+08:00` up to, but excluding, `2026-09-29T00:00:00+08:00`.
Weekends and public holidays count. This is not seven working days or a trailing
168-hour interval.

`publish_date` and the `date` filter mean the Hong Kong calendar day of the
case's stored **publication timestamp**, exactly as on Daily. They do not mean
the judgment date, summary generation date, or last update date. A late summary
appears only while its case's publication day is still active. Unlike the website's
landing-page default, this API does not roll back to a working day before 10 a.m.

Every successful response includes `window.start`, `window.end` and
`window.timezone`. Supplying an out-of-window `date` returns `400 date_out_of_window`. An individual lookup outside the window returns `404 summary_not_found`, as does an unknown case or one without a completed non-empty
summary. No matching list results is a successful `200` with `results: []`.

## List and filter

```bash theme={null}
# All active days; defaults to 20 results (maximum 100 per page).
curl 'https://api.casebyte.ai/v1/daily/summaries?limit=20' \
  -H "Authorization: Bearer $CASEBYTE_API_KEY"

# Replace the date with a day in the current active window.
curl -G 'https://api.casebyte.ai/v1/daily/summaries' \
  -H "Authorization: Bearer $CASEBYTE_API_KEY" \
  --data-urlencode 'date=2026-09-28' \
  --data-urlencode 'area_of_law=Criminal'
```

Combine `date` and `area_of_law` to apply both filters. Supply one area label;
matching ignores casing and surrounding spaces. Do not split labels on commas:
`Wills, probate and succession` is one label. Invalid labels return
`400 invalid_area_of_law` with the full taxonomy in `error.details.allowed`.
Daily's Non-Refoulement classification takes precedence over the stored area.

Results are deduplicated by `case_id`, newest publication day first, then
`case_id` ascending within a day. `total` is the count after both filters and
before pagination. Use `limit` (1–100, default 20), `offset` (0–10000, default 0)
and `has_more` to retrieve subsequent pages. The feed is live; new or updated
summaries can change pagination. Deduplicate by `case_id` when polling, and
refresh active dates if you need updates to existing summaries. Repeat or
unknown query parameters return `400 invalid_query`.

```typescript theme={null}
// Run server-side. The caller supplies a key from its secret manager.
async function readDailySummaries(apiKey: string, date?: string) {
  const summaries = new Map<string, unknown>();
  let offset = 0;
  while (true) {
    const params = new URLSearchParams({ limit: "100", offset: String(offset) });
    if (date) params.set("date", date);
    const response = await fetch(`https://api.casebyte.ai/v1/daily/summaries?${params}`, {
      headers: { Authorization: `Bearer ${apiKey}` },
    });
    if (!response.ok) throw new Error(`${response.status}: ${await response.text()}`);
    const page = await response.json();
    for (const summary of page.results) summaries.set(summary.case_id, summary);
    if (!page.has_more) return [...summaries.values()];
    offset += page.results.length;
  }
}
```

## Retrieve a particular summary

```typescript theme={null}
const identifier = "[2026] HKCFI 123"; // Or a case_id from the list response.
const response = await fetch(
  `https://api.casebyte.ai/v1/daily/summaries/${encodeURIComponent(identifier)}`,
  { headers: { Authorization: `Bearer ${process.env.CASEBYTE_API_KEY}` } },
);
if (!response.ok) throw new Error(`${response.status}: ${await response.text()}`);
const summary = await response.json();
```

Only canonical `COURT_YEAR_NUMBER` IDs and `[YEAR] COURT NUMBER` citations are
accepted here. URL-encode the entire identifier. Action numbers and IDs with a
trailing DIS suffix are not accepted. `matched_by` tells you which form resolved.
The example identifiers are illustrative; copy an active ID or citation from the
list response when testing.

## Content for your integration

`summary` is plain text without paragraph citations. `case_name`, `court`,
`neutral_citation`, `action_numbers`, `area_of_law`, `area_of_law_subtype` and
`catchwords` provide context. Optional metadata can be null. `casebyte_url`
links to the case.

The [API reference](https://docs.casebyte.ai/api-reference/introduction.md) describes every response field.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.