{"version":"v1","basePath":"/api/v1","scope":"public-user","notes":["Admin endpoints are intentionally omitted.","Paginated article endpoints clamp limit to 50 or lower.","Authenticated endpoints require a Supabase Bearer access token."],"endpoints":[{"method":"GET","path":"/api/v1","auth":"none","summary":"Machine-readable catalog for public and user REST endpoints."},{"method":"GET","path":"/api/v1/announcement","auth":"none","summary":"Current public announcement banner settings."},{"method":"GET","path":"/api/v1/articles","auth":"none","summary":"Public processed articles from active sources.","query":["page","limit<=50","source","source_category","source_ids","category","sort","since","date=YYYY-MM-DD","date_from=YYYY-MM-DD","date_to=YYYY-MM-DD","q<=200 chars","admin_picks=1"]},{"method":"GET","path":"/api/v1/articles/search","auth":"none","summary":"Search public articles by keyword, source prefix, and tags.","query":["q<=200 chars","page","limit<=50","sort=relevance|latest"]},{"method":"GET","path":"/api/v1/articles/:id","auth":"none","summary":"Public article detail for a processed article from an active source."},{"method":"GET","path":"/api/v1/articles/:id/related","auth":"none","summary":"Related public articles by shared tags and source fallback."},{"method":"POST","path":"/api/v1/articles/:id/view","auth":"user","summary":"Record an authenticated article view."},{"method":"GET","path":"/api/v1/articles/trending","auth":"none","summary":"Recent high-score public articles.","query":["limit<=50"]},{"method":"GET","path":"/api/v1/articles/weekly-top","auth":"none","summary":"Top public articles from the last week by view count.","query":["limit<=50"]},{"method":"GET","path":"/api/v1/releases/latest","auth":"none","summary":"Latest GitHub release article per release source."},{"method":"GET","path":"/api/v1/releases","auth":"none","summary":"GitHub release targets. targetKey returns target detail; versionId selects a release version.","query":["page","limit<=200","q","targetKey","versionId"]},{"method":"GET","path":"/api/v1/source-categories","auth":"none","summary":"Source category list."},{"method":"GET","path":"/api/v1/sources","auth":"none","summary":"Active public sources grouped by category."},{"method":"POST","path":"/api/v1/suggestions","auth":"user","summary":"Submit a source suggestion for admin review.","body":["name<=200 chars","url<=2000 chars","reason<=4000 chars"]},{"method":"GET","path":"/api/v1/tags","auth":"none","summary":"Popular public tags grouped by entity type.","query":["max_per_type<=100"]},{"method":"GET","path":"/api/v1/tags/:slug/articles","auth":"none","summary":"Public articles for a tag slug.","query":["page","limit<=50"]},{"method":"GET","path":"/api/v1/trending/github","auth":"none","summary":"GitHub trending repositories via GitHub API.","query":["language","since=daily|weekly","limit<=30"]},{"method":"GET","path":"/api/v1/trending/huggingface","auth":"none","summary":"Trending Hugging Face models via Hugging Face API.","query":["pipeline","limit<=30"]}]}