{"service": "radar api", "auth": "Authorization: Bearer <token> | X-Token: <token> | ?token=", "endpoints": {"GET /healthz": "liveness", "GET /pending?limit=50": "unreviewed raw items, id ascending (JSON array); page: analyze a batch, POST /reviewed {max_id}, GET again until empty", "POST /ingest": "queue file {run:{...}, items:[...]} -> {ok, stored, duplicate, expired, invalid}", "POST /pick": "pick object or array -> [{result: stored|duplicate|invalid, id, topic_key}]", "POST /reviewed": "{max_id} -> {reviewed}", "GET /picks?status=new&day=YYYY-MM-DD": "list picks", "POST /mark": "{id, status: posted|dropped|new, note?} -> {updated}", "GET /sql?q=select ...": "read-only query, <=500 rows", "GET+?json=": "every POST endpoint also accepts GET with ?json=<urlencoded JSON body>"}, "pick_example": {"topic_key": "binance-launchpool-xyz-2026-09-06", "day": "2026-09-06", "slot": "21:00", "platform": "square", "title": "一句话题目", "why": "为什么值得发", "angle": "建议角度", "facts": [{"claim": "数字", "url": "https://…"}], "item_ids": [1, 2], "urls": ["https://…"], "score": 85, "created_by": "grokbot"}, "flow": "GET /pending?limit=50 -> read every item (kind x = peer posts or hot posts, kind ann = exchange announcements with body text) -> POST /pick for the 1-3 topics worth posting this hour -> POST /reviewed {max_id of the batch} -> repeat until /pending is empty", "hot": "items with tags containing 'hot' (crypto / stocks trending posts on X, stats = likes/reposts as reported) are ONLY for platform square or orbit (热点快评); never platform x", "docs": "docs/collection-contracts.md"}