{"ok":true,"schema":"bykaranteli.public-manifest.v1","generated_at":"2026-08-09T20:51:22.668Z","endpoints":[{"path":"/api/v1/public/health","method":"GET","auth":"none","description":"Uptime probe with DB reachability + last signal eval freshness.","cache_seconds":10,"params":{}},{"path":"/api/v1/public/manifest","method":"GET","auth":"none","description":"This document. Self-describing index of public endpoints.","cache_seconds":300,"params":{}},{"path":"/api/v1/public/sitemap.json","method":"GET","auth":"none","description":"JSON mirror of /sitemap.xml · same URLs, machine-friendly shape.","cache_seconds":300,"params":{}},{"path":"/api/v1/public/leaderboard","method":"GET","auth":"none","description":"Top strategies by composite score. Optional 1-90 day sparkline.","cache_seconds":60,"params":{"window":"1-365 (days). Default 90.","top":"1-100 (rows). Default 15.","sparkline_days":"1-90 (days). Off by default."}},{"path":"/api/v1/public/strategies/[name]","method":"GET","auth":"none","description":"Per-strategy detail: stats, daily equity, top symbols, recent signals.","cache_seconds":60,"params":{"window":"1-365 (days). Default 90.","recent":"1-50 (rows). Default 20.","top_symbols":"1-50 (rows). Default 10."}},{"path":"/api/v1/public/symbols/[symbol]","method":"GET","auth":"none","description":"Per-symbol detail: stats, daily equity, recent signals.","cache_seconds":60,"params":{"window":"1-365 (days). Default 90.","recent":"1-50 (rows). Default 20."}},{"path":"/api/v1/public/ideas","method":"GET","auth":"none","description":"Member-published trade ideas (opt-in profiles only).","cache_seconds":60,"params":{"sort":"hot | new. Default new.","symbol":"Filter by symbol (uppercase).","limit":"1-100. Default 50.","since_days":"1-365."}},{"path":"/api/v1/public/series","method":"GET","auth":"none","description":"Published course series with course counts.","cache_seconds":60,"params":{"q":"Search by series title (max 64 chars).","limit":"1-100. Default 50."}},{"path":"/api/v1/public/profiles/[handle]","method":"GET","auth":"none","description":"Public profile aggregate: mentor, follow counts, perf, ideas, courses, series.","cache_seconds":60,"params":{}},{"path":"/api/v1/public/me","method":"GET","auth":"Bearer (api key)","description":"Same shape as /profiles/[handle] but for the API key owner. Requires public_profile_enabled.","cache_seconds":0,"params":{}}],"rss_feeds":[{"path":"/feed.xml","description":"RSS · most recent closed signals across all symbols."},{"path":"/symbols/[symbol]/feed.xml","description":"RSS · closed signals for a specific symbol."},{"path":"/strategies/[strategy]/feed.xml","description":"RSS · closed signals for a specific strategy."}],"conventions":{"cache_header":"All cached endpoints set Cache-Control: public, max-age=N, s-maxage=N (CDN-safe).","rate_limit":"Public endpoints have no per-IP rate limit. Bearer-auth /api/v1/me/* and /api/v1/public/me limit at 60 req/min/key.","auth":"Bearer token in Authorization header, or ?api_key= / ?token= for clients that can't set headers (calendar feeds).","error_shape":"{ ok: false, error: '', message?: '' } with appropriate HTTP status."}}