{"service":"andi-feed","endpoints":["/topics — live index of every topic/region/extended/group/tag feed (?format=json = machine-readable twin)","/health — {ok, version} unkeyed; add a key for groups/ledger/degraded credentials","/health/feeds — key required","/health/lanes — key required","/health/factchecks — key required; fact-check import status per source + estimated row count","/site-presence?days=90 — keyed JSON, {since, complete_from, sites}: per-site counts of curated-feed picks by month and bucket (for the reader nightly job)","/factchecks?q=<claim words>&lang=<code>&limit=10&days=<n>&site=<publisher domain> — keyed JSON, {query, count, results[]}: fact-checks (claim, claimant, rating, publisher, review date, language, license, linked sources, recorded publisher policy); any language unless lang is set","/rss","/rss/<groupId>?hours=48&limit=100&site=<domain>&lang=en&promo=exclude","/rss/tag/<tag>?hours=48&limit=100&site=<domain>&lang=en&promo=exclude","/rss/topic/<topicId|regionId|extendedTopicId|kindId>?hours=48&limit=100&site=<domain>&lang=en&promo=exclude","/rss…?q=<query> — BM25 relevance order instead of recency (never reranked)","/search?q=<query>&hours=72&limit=20&topic=<id>&group=<id>&lang=en&promo=exclude[&reranker=zerank-2|minilm][&summary=0|1] — JSON","/rerank?q=<query>… — same JSON, cross-encoder rerank ON by default (zerank-2, &reranker=minilm|none overrides)","&summary=1 on /search|/rerank|/top — adds ai_summary (pregen, or a fast fallback when none is stored yet); &summary=0 suppresses it entirely","&detail=full — serves the detailed \"complete record\" brief variant on feeds that generate one (startups and space today — the fullVariant rows in briefSchedule.js); falls back to the standard brief elsewhere","/top?limit=30 — JSON, editorially-ranked top stories snapshot (see_also/corroborated/score, ai_summary when available)","/rss/top, /embed/top, /ticker/top — the same snapshot ordering on the XML/HTML surfaces","/embed/<groupId>?hours=48&limit=20&lang=en&promo=exclude","/embed/tag/<tag>?hours=48&limit=20&lang=en&promo=exclude","/embed/topic/<topicId|regionId|extendedTopicId|kindId>?hours=48&limit=20&lang=en&promo=exclude","/embed/search?q=<query>&hours=72&limit=20&topic=<id>&group=<id>&lang=en&promo=exclude[&reranker=zerank-2|minilm][&summary=0|1] — HTML, async AI-summary loader shell (see /embed-fragment/search)","/embed/rerank?q=<query>… — same HTML embed, cross-encoder rerank ON by default","/embed-fragment/search, /embed-fragment/rerank — the JSON-free HTML fragment /embed/search|rerank's loader script fetches for the AI summary; 204 when none","/ticker/<groupId>?hours=24&limit=25&label=<text>&theme=light|dark&speed=60&lang=en&promo=exclude","/ticker/tag/<tag>?hours=24&limit=25&label=<text>&theme=light|dark&speed=60&lang=en&promo=exclude","/ticker/topic/<topicId|regionId|extendedTopicId|kindId>?hours=24&limit=25&label=<text>&theme=light|dark&speed=60&lang=en&promo=exclude","/ticker/search?q=<query>&hours=72&limit=20&topic=<id>&group=<id>&lang=en&promo=exclude[&reranker=zerank-2|minilm] — HTML ticker, no AI summary","/ticker/rerank?q=<query>… — same ticker, cross-encoder rerank ON by default","&promo=include — includes coupon/deal posts and buying guides (excluded by default)","&kind=exclude|include|only — press releases: hidden by default on /rss, /rss/topic/<id>, /search, /rerank, /embed and /ticker; shown on /rss/<groupId> and /rss/tag/<tag>; only=press releases alone","&order=chrono on /search|/rerank — BM25 matches, newest first, no rerank","&site=<domain> — host filter (the host or any subdomain); works on every read surface: /rss, /embed, /ticker, /search and /rerank","POST /render/embed — keyed; body {title, items[], options{heading}} → the same HTML as /embed","POST /render/ticker — keyed; body {title, items[], options{theme,speed,label}} → the same HTML as /ticker"],"auth":"key required (?key= or x-api-key)","version":"0.1.214"}