{"openapi":"3.1.0","info":{"title":"Veritas API","description":"Remote Interview Integrity & Authenticity Platform — signal analysis backend.","version":"0.1.0"},"paths":{"/api/health":{"get":{"summary":"Health","operationId":"health_api_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/challenge":{"post":{"summary":"Issue Challenge","operationId":"issue_challenge_api_challenge_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Challenge"}}}}}}},"/api/session/{session_id}/review":{"post":{"summary":"Submit Review","operationId":"submit_review_api_session__session_id__review_post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/session/{session_id}":{"get":{"summary":"Get Session","operationId":"get_session_api_session__session_id__get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sessions":{"get":{"summary":"List Sessions","operationId":"list_sessions_api_sessions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/analyze":{"post":{"summary":"Analyze","operationId":"analyze_api_analyze_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_analyze_api_analyze_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyzeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AnalyzeResponse":{"properties":{"report":{"$ref":"#/components/schemas/TrustReport"}},"type":"object","required":["report"],"title":"AnalyzeResponse"},"Body_analyze_api_analyze_post":{"properties":{"video":{"type":"string","format":"binary","title":"Video"},"challenge_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Challenge Id"},"challenge_offset_s":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Challenge Offset S"}},"type":"object","required":["video"],"title":"Body_analyze_api_analyze_post"},"Challenge":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","enum":["turn_head","nod","blink_sequence","shake_head"],"title":"Type"},"instruction":{"type":"string","title":"Instruction"},"window_seconds":{"type":"number","title":"Window Seconds","description":"How long the subject has to complete the challenge"}},"type":"object","required":["id","type","instruction","window_seconds"],"title":"Challenge"},"Evidence":{"properties":{"signal":{"type":"string","title":"Signal"},"timestamp_s":{"type":"number","title":"Timestamp S"},"label":{"type":"string","title":"Label"},"detail":{"type":"string","title":"Detail"},"severity":{"type":"string","enum":["info","notice","warning","critical"],"title":"Severity"},"frame_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Frame Index"}},"type":"object","required":["signal","timestamp_s","label","detail","severity"],"title":"Evidence"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ReviewRequest":{"properties":{"decision":{"type":"string","title":"Decision"},"note":{"type":"string","title":"Note","default":""}},"type":"object","required":["decision"],"title":"ReviewRequest"},"SignalResult":{"properties":{"signal_id":{"type":"string","title":"Signal Id"},"display_name":{"type":"string","title":"Display Name"},"status":{"type":"string","enum":["nominal","review","flagged","inconclusive"],"title":"Status"},"score":{"type":"number","maximum":100.0,"minimum":0.0,"title":"Score","description":"0 = maximally suspicious, 100 = maximally consistent with a genuine live subject"},"confidence":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Confidence","description":"How much weight this signal's score deserves, based on data quality (e.g. face-detection rate)"},"summary":{"type":"string","title":"Summary"},"evidence":{"items":{"$ref":"#/components/schemas/Evidence"},"type":"array","title":"Evidence","default":[]},"metrics":{"type":"object","title":"Metrics","default":{}}},"type":"object","required":["signal_id","display_name","status","score","confidence","summary"],"title":"SignalResult"},"TrustReport":{"properties":{"session_id":{"type":"string","title":"Session Id"},"duration_s":{"type":"number","title":"Duration S"},"frames_analyzed":{"type":"integer","title":"Frames Analyzed"},"face_detection_rate":{"type":"number","title":"Face Detection Rate"},"overall_score":{"type":"number","maximum":100.0,"minimum":0.0,"title":"Overall Score"},"overall_status":{"type":"string","enum":["nominal","review","flagged","inconclusive"],"title":"Overall Status"},"overall_confidence":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Overall Confidence"},"headline":{"type":"string","title":"Headline"},"signals":{"items":{"$ref":"#/components/schemas/SignalResult"},"type":"array","title":"Signals"},"timeline_evidence":{"items":{"$ref":"#/components/schemas/Evidence"},"type":"array","title":"Timeline Evidence"},"recommendation":{"type":"string","title":"Recommendation"},"disclaimer":{"type":"string","title":"Disclaimer"}},"type":"object","required":["session_id","duration_s","frames_analyzed","face_detection_rate","overall_score","overall_status","overall_confidence","headline","signals","timeline_evidence","recommendation","disclaimer"],"title":"TrustReport"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}