Newsreader

Query and manage the Omni Newsreader via its JSON API.

API Base URL

All endpoints are at https://beryllium.oryx-ide.ts.net/news/api/.

Endpoints

GET /api/articles?limit=N

Recent articles (default 50). Returns array:

[{"id": 123, "title": "...", "url": "...", "feed": "Feed Name",
  "content": "...", "publishedAt": "2026-...", "fetchedAt": "2026-..."}]

GET /api/article/:id

Single article by ID.

GET /api/topics

Topic clusters (grouped by shared phrases in titles). Returns array:

[{"label": "Topic Name", "articles": [...]}]

GET /api/search?q=QUERY

Full-text search across articles. Returns array of articles.

GET /api/feeds

List all subscribed feeds.

POST /api/feeds

Add a feed. JSON body: {"url": "https://example.com/feed.xml"}.

POST /api/ingest

Trigger feed ingestion. Returns summary of new/skipped/failed articles per feed.

GET /api/digest?hours=N

Generate a digest of recent articles (default 24h), grouped by topic clusters. Returns:

{"period": "daily", "totalArticles": 42, "from": "...", "to": "...",
 "topics": [{"label": "Topic Name", "articles": [{"title": "...", "url": "...", "feed": "...", "snippet": "..."}]}],
 "other": [...]}

Examples

# Get latest 10 articles
curl -s 'https://beryllium.oryx-ide.ts.net/news/api/articles?limit=10' | jq '.[].title'

# Search for articles about AI
curl -s 'https://beryllium.oryx-ide.ts.net/news/api/search?q=artificial+intelligence' | jq '.[].title'

# Get current topic clusters
curl -s 'https://beryllium.oryx-ide.ts.net/news/api/topics' | jq '.[].label'

# Add a new RSS feed
curl -s -X POST 'https://beryllium.oryx-ide.ts.net/news/api/feeds' \
  -H 'Content-Type: application/json' \
  -d '{"url": "https://example.com/rss.xml"}'

When to Use