{
  "openapi":"3.1.0","info":{"title":"Soyetty Self-hosted Digital Teacher API","version":"0.1.0","description":"Public demo backed by self-hosted Qwen, CosyVoice and MuseTalk."},"servers":[{"url":"https://teacher.soyetty.com"}],
  "paths":{
    "/api/health":{"get":{"summary":"Runtime health","responses":{"200":{"description":"Healthy"}}}},
    "/api/agent":{"post":{"summary":"Run a teaching-agent turn","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["question"],"properties":{"question":{"type":"string","maxLength":2000},"provider":{"type":"string"},"mastery":{"type":"number"},"knowledge":{"type":"array","items":{"type":"object"}}}}}}},"responses":{"200":{"description":"Structured teaching action"}}}},
    "/api/tts":{"post":{"summary":"Synthesize self-hosted speech","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["text"],"properties":{"text":{"type":"string","maxLength":2000},"voiceProfileId":{"type":"string"}}}}}},"responses":{"200":{"description":"PCM WAV audio","content":{"audio/wav":{}}}}}},
    "/api/avatar/jobs":{"post":{"summary":"Create MuseTalk render job","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["audio"],"properties":{"audio":{"type":"string","format":"binary"}}}}}},"responses":{"202":{"description":"Queued job"}}}},
    "/api/avatar/jobs/{jobId}":{"get":{"summary":"Read render state","parameters":[{"name":"jobId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Job state"}}}},
    "/api/avatar/jobs/{jobId}/media":{"get":{"summary":"Download H.264/AAC MP4","parameters":[{"name":"jobId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Neural avatar video","content":{"video/mp4":{}}}}}}
  }
}
