{"openapi":"3.1.0","info":{"title":"Eigenstromkompass API","version":"2.0.0","description":"Free News/MCP: 60 requests/minute, 1000/day UTC. Separate free calculations: 30/minute, 300/day UTC. Paid network keys have contracted quotas. MCP batches count each operation."},"servers":[{"url":"https://eigenstromkompass.de"}],"x-language":"de","x-mcp-tools":["latest_news","get_article","calculate_solar"],"paths":{"/api/calculate":{"get":{"summary":"Domain calculators and schemas","security":[],"responses":{"200":{"description":"Free calculator definitions"},"429":{"description":"Quota exhausted; observe Retry-After"}}},"post":{"summary":"Free calculation, available in preview: 30/minute, 300/UTC day","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","additionalProperties":false,"required":["calculator","inputs"],"properties":{"calculator":{"const":"solar"},"inputs":{"type":"object","properties":{"kwp":{"type":"number","minimum":0,"maximum":10000,"description":"Anlagenleistung (kWp)"},"yieldPerKwp":{"type":"number","minimum":0,"maximum":3000,"description":"Angenommener Jahresertrag (kWh/kWp)"},"selfConsumptionPercent":{"type":"number","minimum":0,"maximum":100,"description":"Angenommener Eigenverbrauchsanteil (%)"},"annualUseKwh":{"type":"number","minimum":0,"maximum":100000000,"description":"Eigener Jahresverbrauch (kWh)"},"purchasePrice":{"type":"number","minimum":0,"maximum":100,"description":"Vermiedener Bezugspreis (€/kWh)"},"exportPrice":{"type":"number","minimum":0,"maximum":100,"description":"Eingegebener Einspeisepreis (€/kWh)"}},"required":["kwp","yieldPerKwp","selfConsumptionPercent","annualUseKwh","purchasePrice","exportPrice"],"additionalProperties":false}}}]}}}},"responses":{"200":{"description":"Inputs, assumptions, formula and numeric results"},"400":{"description":"Invalid input or JSON"},"413":{"description":"Body exceeds 20000 bytes"},"429":{"description":"Quota exhausted; observe Retry-After"},"503":{"description":"Quota storage temporarily unavailable"}}}},"/api/news":{"get":{"summary":"Published article summaries","parameters":[{"name":"portal","in":"query","schema":{"type":"string"}},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"scope","in":"query","description":"network requires a paid key","schema":{"type":"string","enum":["site","network"],"default":"site"}}],"security":[{},{"apiKey":[]}],"responses":{"200":{"description":"Published source-linked JSON result"},"401":{"description":"Invalid or revoked key"},"429":{"description":"Quota exhausted; observe Retry-After"},"503":{"description":"Public service disabled"}}}},"/api/mcp":{"post":{"summary":"Stateless MCP JSON-RPC","security":[{},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","required":["jsonrpc","method"],"properties":{"jsonrpc":{"const":"2.0"},"id":{"type":["string","number"]},"method":{"type":"string"},"params":{"type":"object"}}},{"type":"array","minItems":1,"maxItems":20,"items":{"type":"object"}}]}}}},"responses":{"200":{"description":"Published source-linked JSON result"},"401":{"description":"Invalid or revoked key"},"429":{"description":"Quota exhausted; observe Retry-After"},"503":{"description":"Public service disabled"}}}}},"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","description":"Network API key; not an admin token"}}}}