---
title: "Get stories from your agents"
method: GET
path: "/alerts"
tags: ["Feed"]
---

# Get stories from your agents

`GET /alerts`

## Request

- Base URL: `https://api.agentic-news.ai`
- URL: `https://api.agentic-news.ai/alerts`
- Auth: HTTP bearer

Returns story matches from your monitoring agents with full cluster data, AI-generated hooks, and read state. Filter by agent using `watchId`, sort by date/score/watch name, and paginate. Only shows validated matches (accepted or borderline).

## Query parameters

- `watchId` string
- `limit` integer
- `offset` integer
- `sortBy` 'article-date' | 'match-date' | 'score' | 'watch-name'
- `readFilter` 'all' | 'read' | 'unread'
- `minThreshold` integer
- `skipCount` 'true' | 'false'

## Response `200`

Default Response

- object
  - `alerts` object[]
    - `id` string
    - `cluster` object
      - `id` string
      - `canonical` object, nullable
        - `id` string
        - `title` string
        - `url` string
        - `publisher` string
        - `publishedAt` string
      - `itemCount` integer
      - `entities` string[]: Entity names (backward-compatible)
      - `structuredEntities` object[]: Structured entity data with names, types, and optional URLs
        - `name` string
        - `type` 'company' | 'product' | 'person' | 'organization' | 'technology' | 'location' | 'unknown'
        - `url` string: Entity website URL (when available)
      - `topics` string[]
      - `createdAt` string
      - `isRead` boolean
      - `lensStatus` string
      - `lensGeneratedAt` string, nullable
      - `lensError` string, nullable
      - `collectionIds` string[]
      - `hook` string, nullable
      - `preview` string, nullable
    - `watch` object
      - `id` string
      - `kind` string, nullable
      - `name` string
      - `description` string, nullable
    - `score` number: Raw match score (0.0-1.0)
    - `matchQuality` integer: Match quality (0-100), maps to the agent's quality threshold
    - `verdict` string, nullable
    - `verdictReasoning` string, nullable: Stage-1 Devil's-Advocate verdict explanation, suitable for surfacing as 'Why I picked this' on a card.
    - `digestWorthy` boolean
    - `reasons` string[]
    - `createdAt` string
  - `total` integer, nullable
  - `hasMore` boolean
  - `offset` integer
  - `limit` integer
  - `currentThreshold` integer
  - `nextTier` object, nullable: Next quality tier suggestion, or null
  - `hasReadHistory` boolean: Whether the user has any read history
  - `lastReadAt` string, nullable: ISO time of the user's most recent story read, or null
  - `serverNow` string: Server clock at response time; compare lastReadAt against THIS, never the browser's clock
  - `validating` boolean: True if matches are still being validated by LLM

## Other responses

- `500`: Default Response

---

[API](https://skmtc.dev/agentic-news/apis/agentic-news-api.md) · [All operations](https://skmtc.dev/agentic-news/apis/agentic-news-api/llms.txt) · [OpenAPI document](https://skmtc.dev/agentic-news/apis/agentic-news-api/revisions/02fe31decff9?raw)
