---
title: "List recent public AI items"
method: GET
path: "/api/v1/items"
---

# List recent public AI items

`GET /api/v1/items`

## Request

- Base URL: `https://lawhot.news`
- URL: `https://lawhot.news/api/v1/items`
- Auth: none declared

Start here for feeds, widgets and 'what is new' views. Covers the last 7 days only. Send If-None-Match and you get a 304 with an empty body whenever nothing changed. To follow new items, page back with cursor only until you reach an id you already have. Do not use this to maintain a complete local copy of the selected set: it is windowed, so anything older than 7 days silently falls out. Use /api/v1/selected/snapshot plus /api/v1/selected/changes for that.

## Query parameters

- `mode` 'selected' | 'all'
- `category` string: Current values: legislation, cases, industry, legal-tech, practice, opinion.
- `window` '24h' | '7d'
- `by` 'timeline' | 'published'
- `q` string
- `limit` integer
- `cursor` string

## Headers

- `User-Agent` string
- `If-None-Match` string

## Response `200`

OK

- ItemsResponse
  - `schemaVersion` unknown, required
  - `query` object, required
    - `mode` 'selected' | 'all', required
    - `category` string, nullable, required: Current values: legislation, cases, industry, legal-tech, practice, opinion. Clients must tolerate future string values.
    - `window` '24h' | '7d', required
    - `q` string, nullable, required
    - `by` 'timeline' | 'published', required
    - `ordering` 'timelineDesc' | 'publishedAtDesc', required
  - `items` Item[], required
    - `id` string, required
    - `title` string, required
    - `originalTitle` string, nullable, required
    - `summary` string, nullable, required
    - `source` object, required
      - `name` string, required
    - `links` object, required
      - `aihot` string, uri, required
      - `original` string, uri, required
    - `publishedAt` string, date-time, nullable, required
    - `discoveredAt` string, date-time, required
    - `category` string, nullable, required: Current values: legislation, cases, industry, legal-tech, practice, opinion. Clients must tolerate future string values.
    - `score` number, nullable, required
    - `selected` boolean, required
    - `reason` string, nullable: Reader-facing recommendation reason, the same text shown as 推荐理由 on the website. Always present on /api/v1/items; null when the item is not selected or has no reader-facing reason. Selected snapshot and changes do not include this field yet.
    - `attribution` Attribution: Machine-readable LAWHOT provenance for traceability. Retain it where technically feasible. Attribution alone is not authorization; see the public terms.
      - `name` string, required
      - `url` string, uri, required
  - `page` Page, required
    - `count` integer, required: Number of records in this page.
    - `hasMore` boolean, required
    - `nextCursor` string, nullable, required: Opaque; only reuse with the same query.

## Other responses

- `304`: Not Modified
- `400`: Machine-readable problem response.
- `403`: Machine-readable problem response.
- `405`: Machine-readable problem response.
- `429`: Machine-readable problem response.
- `503`: Machine-readable problem response.

---

[API](https://skmtc.dev/lawhot/apis/lawhot-public-api.md) · [All operations](https://skmtc.dev/lawhot/apis/lawhot-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/lawhot/apis/lawhot-public-api/revisions/33d44f2964aa?raw)
