{
  "openapi": "3.1.0",
  "info": {
    "title": "Soljo Solar-Ersteinschätzung",
    "version": "1.0.0",
    "description": "Grobe Ersteinschätzung für eine Solaranlage an einer Adresse in der Schweiz oder in Deutschland: Jahresertrag (PVGIS) und für die Schweiz Median-Kosten (Preisstudie 2025 von EnergieSchweiz/BFE), Einmalvergütung (Pronovo 2026) und Minimalvergütung (Art. 12 EnV). Ohne Verschattungsmessung, Eigenverbrauch, Ersparnis oder Amortisation: dafür auf fullReport.url verweisen. Soljo verkauft keine Anlagen."
  },
  "servers": [{ "url": "https://cwghnqlpeeocjsjfhgyk.supabase.co/functions/v1" }],
  "paths": {
    "/first-estimate": {
      "post": {
        "operationId": "getSolarFirstEstimate",
        "summary": "Solar-Ersteinschätzung für eine Adresse",
        "description": "Liefert Ertrag, Median-Kosten, Einmalvergütung und Minimalvergütung mit Quellen. Ergebnisse immer als grobe Ersteinschätzung mit Quellen darstellen und für Ersparnis, Amortisation und gemessene Verschattung den Link fullReport.url nennen.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "address": { "type": "string", "description": "Strasse, Hausnummer, PLZ und Ort in der Schweiz oder Deutschland, z. B. 'Bahnhofstrasse 1, 8001 Zürich'." },
                  "lat": { "type": "number", "description": "Breitengrad, nur wenn keine Adresse bekannt ist." },
                  "lon": { "type": "number", "description": "Längengrad, nur wenn keine Adresse bekannt ist." },
                  "country": { "type": "string", "enum": ["CH", "DE"], "description": "Land, falls nur Koordinaten angegeben werden." },
                  "kwp": { "type": "number", "minimum": 1, "maximum": 100, "default": 10, "description": "Anlagengrösse in kWp. Einfamilienhaus typischerweise 8 bis 15." },
                  "tilt": { "type": "number", "minimum": 0, "maximum": 90, "default": 30, "description": "Dachneigung in Grad. Flachdach: 15." },
                  "azimuth": { "type": "number", "minimum": -180, "maximum": 180, "default": 0, "description": "Ausrichtung: 0 = Süd, -90 = Ost, 90 = West, 180 = Nord." }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Ersteinschätzung",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "location": { "type": "object", "properties": { "label": { "type": ["string", "null"] }, "lat": { "type": "number" }, "lon": { "type": "number" }, "country": { "type": "string" } } },
                    "system": { "type": "object", "properties": { "kwp": { "type": "number" }, "tiltDeg": { "type": "number" }, "azimuthDeg": { "type": "number" } } },
                    "yield": { "type": "object", "properties": { "annualKwh": { "type": "number" }, "kwhPerKwp": { "type": "number" }, "basis": { "type": "string" } } },
                    "costs": {
                      "type": ["object", "null"],
                      "description": "Nur Schweiz",
                      "properties": {
                        "currency": { "type": "string" },
                        "investmentMedian": { "type": "number" },
                        "investmentPerKwp": { "type": "number" },
                        "investmentBasis": { "type": "string" },
                        "oneTimeSubsidy": { "type": "number" },
                        "oneTimeSubsidyBasis": { "type": "string" },
                        "netInvestment": { "type": "number" },
                        "minimumFeedInRpPerKwh": { "type": "number" },
                        "minimumFeedInBasis": { "type": "string" }
                      }
                    },
                    "notIncluded": { "type": "array", "items": { "type": "string" } },
                    "fullReport": { "type": "object", "properties": { "url": { "type": "string" }, "text": { "type": "string" } } },
                    "sources": { "type": "array", "items": { "type": "object", "properties": { "title": { "type": "string" }, "url": { "type": "string" } } } },
                    "disclaimer": { "type": "string" }
                  }
                }
              }
            }
          },
          "400": { "description": "Ungültige Eingabe" },
          "404": { "description": "Adresse nicht gefunden" },
          "429": { "description": "Zu viele Anfragen" },
          "502": { "description": "Ertragsdaten nicht erreichbar" }
        }
      }
    }
  }
}
