{"openapi":"3.1.0","info":{"title":"eTruck Range API","version":"1.0.0","description":"Physikalische E-LKW-Reichweiten- und Machbarkeitssimulation. Auth: Bearer API-Key (etr_live_… / etr_test_…). Abrechnung pro erfolgreicher Simulation."},"servers":[{"url":"https://etruck.srv920009.hstgr.cloud/v1"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"Simulation":{"type":"object","required":["vehicleId","environment","segments"],"properties":{"vehicleId":{"type":"string","example":"mercedes-eactros-600"},"batterySoh":{"type":"number","default":0.9},"environment":{"type":"object","properties":{"temperatureC":{"type":"number","default":15},"weather":{"type":"string","default":"trocken"}}},"traffic":{"type":"string","default":"normal"},"profile":{"type":"string","default":"fernverkehr"},"segments":{"type":"array","items":{"type":"object","required":["distanceKm","baseSpeedKmh","massKg"],"properties":{"distanceKm":{"type":"number"},"baseSpeedKmh":{"type":"number"},"massKg":{"type":"number"},"uphillM":{"type":"number","default":0},"downhillM":{"type":"number","default":0},"roadSplit":{"type":"object","properties":{"autobahnKm":{"type":"number"},"bundesstrasseKm":{"type":"number"},"landstrasseKm":{"type":"number"},"stadtKm":{"type":"number"}}},"hubCount":{"type":"integer","default":0}}},"minItems":1,"maxItems":50}}},"SimulationResult":{"type":"object","properties":{"verdict":{"type":"string"},"feasible":{"type":"boolean"},"finalSocPct":{"type":"number"},"totalDistanceKm":{"type":"number"},"totalConsumptionKwh":{"type":"number"},"kwhPerKm":{"type":"number"},"modelVersion":{"type":"string"}}}}},"paths":{"/simulations":{"post":{"summary":"Einzelsimulation (1 Unit)","description":"Rechnet eine Tour. Idempotency-Key-Header unterstützt.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Simulation"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/SimulationResult"}}}}}},"402":{"description":"Kontingent erschöpft"},"429":{"description":"Rate-Limit"}}}},"/simulations/batch":{"post":{"summary":"Batch (bis 100 Items, Abrechnung je erfolgreichem Item)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Simulation"},"maxItems":100}}}}}},"responses":{"200":{"description":"OK"}}}},"/vehicles":{"get":{"summary":"Fahrzeugkatalog","responses":{"200":{"description":"OK"}}}},"/usage":{"get":{"summary":"Verbrauchtes/verbleibendes Kontingent","responses":{"200":{"description":"OK"}}}},"/health":{"get":{"summary":"Liveness + Modellversion","security":[],"responses":{"200":{"description":"OK"}}}}}}