{"openapi":"3.1.0","info":{"title":"KleipData Portal API","version":"0.1.0","description":"Internal API for the KleipData customer portal. Phase 1B — service shell only."},"components":{"schemas":{}},"paths":{"/":{"get":{"summary":"Service root","tags":["system"],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"status":{"type":"string"},"version":{"type":"string"},"docs":{"type":"string"}},"required":["name","status","version","docs"]}}}}}}},"/health":{"get":{"summary":"Health probe","tags":["system"],"description":"Readiness probe. Verifies PostgreSQL and Valkey connectivity. Returns 503 if either is down.","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["ok","degraded"]},"service":{"type":"string"},"version":{"type":"string"},"checks":{"type":"object","properties":{"postgres":{"type":"boolean"},"valkey":{"type":"boolean"}},"required":["postgres","valkey"]},"time":{"type":"string","format":"date-time"}},"required":["status","service","version","checks","time"]}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["ok","degraded"]},"service":{"type":"string"},"version":{"type":"string"},"checks":{"type":"object","properties":{"postgres":{"type":"boolean"},"valkey":{"type":"boolean"}},"required":["postgres","valkey"]},"time":{"type":"string","format":"date-time"}},"required":["status","service","version","checks","time"]}}}}}}}},"servers":[{"url":"https://api.kleipdata.co.uk"}],"tags":[{"name":"system","description":"Service metadata and probes"}]}