{"openapi":"3.0.3","info":{"title":"Analytics24 Engine API","version":"1.1.0","description":"Live equity scanner payload, per-ticker cards, and OHLCV history. Read-only public tier. Component scores are normalized 0–100 (same numbers as the desk UI). Educational research only — not investment advice.","contact":{"name":"Analytics24 desk","url":"https://www.analytics24.com/contact"}},"servers":[{"url":"https://www.analytics24.com"}],"paths":{"/api/engine/payload":{"get":{"summary":"Full live desk payload","description":"Scanner rows, briefs, markets, backtests — the object the public site renders.","responses":{"200":{"description":"OK","content":{"application/json":{"example":{"srows":[{"ticker":"MO","composite":90,"action":"WATCH","price":74.66,"change_5d":4.3,"gates":{"price":true,"catalyst":true,"flow":false,"risk":true},"components":{"rsi":54,"macd":71,"squeeze":74,"atr":28,"cmf":61,"volume":5,"momentum":84,"relStr":70},"verdict":"THIN","demotion":"WATCH: risk gate failed (R:R 0.8:1 < 1:1)","rr":0.8,"generated_at":"2026-07-21T15:09:10.771Z","engine_version":"4.8.2","source":"analytics24-engine","docs":"https://www.analytics24.com/developers"}],"briefs":[],"builtAt":"2026-07-21T15:09:10.771Z"}}}}}}},"/v1/scan/{ticker}":{"get":{"summary":"Per-ticker public scan card","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","example":"AAPL"},"description":"Equity ticker symbol"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ticker":{"type":"string","example":"AAPL"},"composite":{"type":"integer","minimum":0,"maximum":100,"description":"0–100 composite score"},"action":{"type":"string","enum":["ENTRY","WATCH","WAIT","PASS"]},"price":{"type":"number","description":"Last price (rounded)"},"change_5d":{"type":"number","description":"5-session % change"},"gates":{"type":"object","properties":{"price":{"type":"boolean"},"catalyst":{"type":"boolean"},"flow":{"type":"boolean"},"risk":{"type":"boolean"}}},"components":{"type":"object","description":"Eight normalized 0–100 component scores (same as the desk UI)","properties":{"rsi":{"type":"integer"},"macd":{"type":"integer"},"squeeze":{"type":"integer"},"atr":{"type":"integer"},"cmf":{"type":"integer"},"volume":{"type":"integer"},"momentum":{"type":"integer"},"relStr":{"type":"integer"}}},"verdict":{"type":"string","nullable":true},"demotion":{"type":"string","nullable":true,"description":"Plain-language reason when action is not ENTRY (which gate failed and why)"},"edge_score":{"type":"integer","nullable":true},"rr":{"type":"number","nullable":true,"description":"Reward:risk ratio (e.g. 1.2)"},"generated_at":{"type":"string","format":"date-time"},"engine_version":{"type":"string","description":"Semver of scoring / gate rules that produced this card"},"source":{"type":"string"},"docs":{"type":"string"}}},"example":{"ticker":"MO","composite":90,"action":"WATCH","price":74.66,"change_5d":4.3,"gates":{"price":true,"catalyst":true,"flow":false,"risk":true},"components":{"rsi":54,"macd":71,"squeeze":74,"atr":28,"cmf":61,"volume":5,"momentum":84,"relStr":70},"verdict":"THIN","demotion":"WATCH: risk gate failed (R:R 0.8:1 < 1:1)","rr":0.8,"generated_at":"2026-07-21T15:09:10.771Z","engine_version":"4.8.2","source":"analytics24-engine","docs":"https://www.analytics24.com/developers"}}}},"404":{"description":"Ticker not in universe","content":{"application/json":{"example":{"error":"not_in_universe","ticker":"INVALID"}}}}}}},"/api/engine/history":{"get":{"summary":"OHLCV bars for dive charts","parameters":[{"name":"ticker","in":"query","required":true,"schema":{"type":"string","example":"AAPL"}},{"name":"range","in":"query","schema":{"type":"string","example":"3mo","enum":["1mo","3mo","6mo","1y"]}}],"responses":{"200":{"description":"Array of OHLCV bars"}}}},"/api/engine/health":{"get":{"summary":"Snapshot age, row count, scanner connectivity","responses":{"200":{"description":"OK"}}}},"/api/engine/scan":{"get":{"summary":"Raw scanner rows (full universe)","responses":{"200":{"description":"OK"}}}},"/api/engine/ticker":{"get":{"summary":"On-demand row enrich for deep-dive routes","parameters":[{"name":"ticker","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"}}}},"/api/engine/universe":{"get":{"summary":"Full ticker list scanned by the engine","responses":{"200":{"description":"OK"}}}},"/api/openapi":{"get":{"summary":"This OpenAPI 3.0 document","responses":{"200":{"description":"OK"}}}},"/api/alerts/subscribe":{"post":{"summary":"Queue ticker alert","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"ticker":{"type":"string"},"email":{"type":"string","format":"email"}},"required":["ticker"]}}}},"responses":{"200":{"description":"Queued"}}}}},"components":{"schemas":{"ScanCard":{"type":"object","properties":{"ticker":{"type":"string","example":"AAPL"},"composite":{"type":"integer","minimum":0,"maximum":100,"description":"0–100 composite score"},"action":{"type":"string","enum":["ENTRY","WATCH","WAIT","PASS"]},"price":{"type":"number","description":"Last price (rounded)"},"change_5d":{"type":"number","description":"5-session % change"},"gates":{"type":"object","properties":{"price":{"type":"boolean"},"catalyst":{"type":"boolean"},"flow":{"type":"boolean"},"risk":{"type":"boolean"}}},"components":{"type":"object","description":"Eight normalized 0–100 component scores (same as the desk UI)","properties":{"rsi":{"type":"integer"},"macd":{"type":"integer"},"squeeze":{"type":"integer"},"atr":{"type":"integer"},"cmf":{"type":"integer"},"volume":{"type":"integer"},"momentum":{"type":"integer"},"relStr":{"type":"integer"}}},"verdict":{"type":"string","nullable":true},"demotion":{"type":"string","nullable":true,"description":"Plain-language reason when action is not ENTRY (which gate failed and why)"},"edge_score":{"type":"integer","nullable":true},"rr":{"type":"number","nullable":true,"description":"Reward:risk ratio (e.g. 1.2)"},"generated_at":{"type":"string","format":"date-time"},"engine_version":{"type":"string","description":"Semver of scoring / gate rules that produced this card"},"source":{"type":"string"},"docs":{"type":"string"}}}}}}