{"openapi":"3.1.0","info":{"title":"MWTPro Playground","version":"1.0.0","description":"USD aluminum market references and illustrative material + entered conversion can costs. Inspect freshness and provenance; never label example or user-supplied prices as live. No scrap credit, freight or taxes unless included in conversion."},"servers":[{"url":"https://www.mwtpro.com"}],"paths":{"/api/prices/current":{"get":{"operationId":"getCurrentAluminumPrices","summary":"Latest market reference with component provenance; USD per metric tonne","responses":{"200":{"description":"Prices, row date, freshness, and component observation timestamps","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"string","format":"date"},"lme":{"$ref":"#/components/schemas/Price"},"mwp":{"$ref":"#/components/schemas/Price"},"mwtp":{"$ref":"#/components/schemas/Price"},"freshness":{"type":"object","additionalProperties":true},"provenance":{"type":"object","additionalProperties":true}}}}}},"404":{"description":"Request failed","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"429":{"description":"Request failed","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"500":{"description":"Request failed","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}},"/api/playground/history":{"get":{"operationId":"getMarketReplay","summary":"Up to 252 market observations, ascending ISO dates, USD per metric tonne","responses":{"200":{"description":"Replay rows and component provenance","content":{"application/json":{"schema":{"type":"object","properties":{"quotes":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","format":"date"},"lme":{"type":"number"},"mwp":{"type":"number"},"mwtp":{"type":"number"},"provenance":{"type":"object","additionalProperties":true}}}}}}}}},"429":{"description":"Request failed","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"503":{"description":"Request failed","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}},"/api/playground/quote":{"get":{"operationId":"calculateCanCost","summary":"Calculate a user-supplied scenario and return an editable playground URL","parameters":[{"name":"lme","in":"query","required":true,"description":"LME USD per metric tonne. Required; fetch /api/prices/current for latest reference.","schema":{"type":"number","minimum":0,"maximum":50000}},{"name":"mwp","in":"query","required":true,"description":"Midwest premium USD per metric tonne. Required.","schema":{"type":"number","minimum":0,"maximum":50000}},{"name":"weight","in":"query","required":false,"description":"Body + end finished grams; default is an illustrative example.","schema":{"default":14,"type":"number","minimum":1,"maximum":200}},{"name":"yield","in":"query","required":false,"description":"Finished / purchased weight percent, without scrap credit; example default.","schema":{"default":95,"type":"number","minimum":50,"maximum":100}},{"name":"conversion","in":"query","required":false,"description":"USD conversion cost per 1,000 cans.","schema":{"default":0,"type":"number","minimum":0,"maximum":10000}},{"name":"quantity","in":"query","required":false,"description":"Integer can count.","schema":{"default":1000000,"type":"integer","minimum":1,"maximum":1000000000}}],"responses":{"200":{"description":"Validated inputs, units, unrounded cost results, assumptions and playgroundUrl","content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","const":"user-supplied-scenario"},"inputs":{"$ref":"#/components/schemas/Scenario"},"inputUnits":{"type":"object","additionalProperties":{"type":"string"}},"result":{"type":"object","properties":{"mwtpUsdPerMetricTonne":{"type":"number"},"purchasedGramsPerCan":{"type":"number"},"metalUsdPerCan":{"type":"number"},"conversionUsdPerCan":{"type":"number"},"totalUsdPerCan":{"type":"number"},"totalUsdPerThousand":{"type":"number"},"orderUsd":{"type":"number"},"purchasedMetricTonnes":{"type":"number"}}},"assumptions":{"type":"string"},"playgroundUrl":{"type":"string","format":"uri"}}}}}},"400":{"description":"Request failed","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"429":{"description":"Request failed","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}}},"components":{"schemas":{"Scenario":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"lme":{"type":"number","minimum":0,"maximum":50000},"mwp":{"type":"number","minimum":0,"maximum":50000},"weight":{"default":14,"type":"number","minimum":1,"maximum":200},"yield":{"default":95,"type":"number","minimum":50,"maximum":100},"conversion":{"default":0,"type":"number","minimum":0,"maximum":10000},"quantity":{"default":1000000,"type":"integer","minimum":1,"maximum":1000000000}},"required":["lme","mwp","weight","yield","conversion","quantity"],"additionalProperties":false},"Price":{"type":"object","properties":{"price":{"type":"number","description":"USD per metric tonne"},"change":{"type":"number"},"changePercent":{"type":"number"}}}}}}