{"openapi":"3.1.0","info":{"title":"Steam Game Idea Evaluator API","version":"1.0.0","description":"Submit a structured game pitch; receive a ReportPayload naming 8–12 real comparables, a Crowded/Contested/Open verdict, and a net-revenue range with labeled confidence bands. Every figure is an estimate with method + confidence. Game data comes from Steam; this service is not affiliated with or endorsed by Valve or Steam, and all data and estimates are provided \"as is\" without warranty. Terms and privacy: /legal"},"servers":[{"url":"https://evaluator.example","description":"Production"}],"components":{"securitySchemes":{"bearerKey":{"type":"http","scheme":"bearer","description":"Admin-issued sk_live_ key"}},"schemas":{"PitchInput":{"type":"object","required":["primaryGenre","tags","mechanics","theme","priceUsd","scope","comparables"],"properties":{"primaryGenre":{"type":"string"},"tags":{"type":"array","items":{"type":"string"},"maxItems":5},"theme":{"type":"string"},"mechanics":{"type":"string"},"priceUsd":{"type":"number","minimum":0},"scope":{"type":"string","enum":["solo","small-team","funded"]},"comparables":{"type":"array","items":{"type":"integer"},"maxItems":5}}},"EstimateRange":{"type":"object","required":["low","mid","high","method","confidence"],"properties":{"low":{"type":"number"},"mid":{"type":"number"},"high":{"type":"number"},"method":{"type":"string"},"confidence":{"type":"string","enum":["low","medium","high"]}}},"Comparable":{"type":"object","required":["appId","name","releaseDate","price","reviewCount","estimatedRevenue"],"properties":{"appId":{"type":"integer"},"name":{"type":"string"},"releaseDate":{"type":"string","nullable":true},"price":{"type":"number","nullable":true},"reviewCount":{"type":"integer"},"estimatedRevenue":{"$ref":"#/components/schemas/EstimateRange"},"userSupplied":{"type":"boolean"}}},"ReportPayload":{"type":"object","required":["schemaVersion","pitchHash","generatedAt","verdict","market","comparables","revenueExpectation","riskFlags","recommendations"],"properties":{"schemaVersion":{"type":"integer","const":1},"pitchHash":{"type":"string"},"generatedAt":{"type":"string","format":"date-time"},"matcher":{"type":"string","description":"Versioned id of the comparable-ranking function, e.g. tag-jaccard:v1"},"verdict":{"type":"object","required":["band","rationale"],"properties":{"band":{"type":"string","enum":["Crowded","Contested","Open"]},"rationale":{"type":"string"}}},"market":{"type":"object","required":["gameCount","releaseTrend","totalRevenue","medianRevenue"],"properties":{"gameCount":{"type":"integer"},"releaseTrend":{"type":"string","enum":["growing","flat","declining"]},"totalRevenue":{"$ref":"#/components/schemas/EstimateRange"},"medianRevenue":{"$ref":"#/components/schemas/EstimateRange"},"saturation":{"type":"object","description":"Shares over the same games as gameCount (a sample of tracked Steam games).","required":["recentShare","topDecileShare"],"properties":{"recentShare":{"type":"number","minimum":0,"maximum":1,"description":"Share released in the last 12 months."},"topDecileShare":{"type":"number","minimum":0,"maximum":1,"description":"Share of estimated net revenue earned by the top 10% of games."}}}}},"comparables":{"type":"array","items":{"$ref":"#/components/schemas/Comparable"}},"revenueExpectation":{"$ref":"#/components/schemas/EstimateRange"},"riskFlags":{"type":"array","items":{"type":"string"}},"recommendations":{"type":"array","items":{"type":"string"}}}}}},"paths":{"/report/{pitchHash}":{"get":{"summary":"Fetch a cached report by pitch hash (send Accept: application/json)","parameters":[{"name":"pitchHash","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Report payload","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportPayload"}}}},"404":{"description":"No cached report for this hash"}}}},"/api/report":{"post":{"summary":"Evaluate a pitch → ReportPayload","security":[{"bearerKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PitchInput"}}}},"responses":{"200":{"description":"Report payload","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportPayload"}}}},"401":{"description":"Missing or invalid API key"},"429":{"description":"Rate limited","headers":{"X-RateLimit-Reset":{"schema":{"type":"string"}}}}}}}}}