{"openapi":"3.1.0","info":{"title":"Mietspiegel Potsdam API","version":"1.9.0","description":"JSON-API zur Einordnung von Mietwohnungen nach dem qualifizierten Mietspiegel Potsdam (2026, Archiv 2024). Keine Rechtsberatung. MCP: POST /mcp (Streamable HTTP, ohne Auth); Discovery: /.well-known/mcp.json."},"servers":[{"url":"https://mietspiegelrechner-potsdam.de"}],"paths":{"/api/v1/schema":{"get":{"operationId":"getSchema","summary":"Gültige Eingabewerte","description":"Liefert baualter, klassifikation (je Baualter) und orientierungshilfe-IDs inkl. Suchbegriffe. Empfohlener erster Schritt im Agent-Workflow.","parameters":[{"name":"version","in":"query","description":"Mietspiegel-Datenjahr; ohne Parameter werden beide Versionen geliefert.","schema":{"type":"string","enum":["2024","2026"]},"required":false,"example":"2026"},{"name":"city","in":"query","description":"Optional; nur \"potsdam\", die Stadt dieses Servers. Eine andere Stadt beantwortet er mit 400 invalid_city und nennt deren Host.","schema":{"type":"string","enum":["potsdam"],"default":"potsdam"},"required":false,"example":"potsdam"}],"responses":{"200":{"description":"Schema mit meta-Envelope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchemaEnvelope"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/examples":{"get":{"operationId":"getExamples","summary":"Beispiel-Requests und -Responses","description":"Fertige Request/Response-Paare für typische Fälle. Nützlich zum Testen und als Vorlage für Agenten.","parameters":[{"name":"version","in":"query","description":"Nur Beispiele für diese Mietspiegel-Version.","schema":{"type":"string","enum":["2024","2026"]},"required":false,"example":"2026"},{"name":"city","in":"query","description":"Optional; nur \"potsdam\", die Stadt dieses Servers. Eine andere Stadt beantwortet er mit 400 invalid_city und nennt deren Host.","schema":{"type":"string","enum":["potsdam"],"default":"potsdam"},"required":false,"example":"potsdam"}],"responses":{"200":{"description":"Beispiele mit meta-Envelope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExamplesEnvelope"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/calculate":{"post":{"operationId":"calculate","summary":"Mietspiegel-Einordnung berechnen","description":"Berechnet Mietspanne, optional Kaltmieten-Vergleich und Orientierungshilfe-Einordnung. Rate-Limit: 60 Anfragen/Minute/IP.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculateRequest"}}}},"responses":{"200":{"description":"Berechnungsergebnis mit meta-Envelope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculateEnvelope"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/mieterhoehung":{"post":{"operationId":"checkMieterhoehung","summary":"Mieterhöhung prüfen (§ 558 BGB)","description":"Vergleicht eine geforderte Miete mit dem Mietspiegel Potsdam und mit den beiden Grenzen aus § 558 BGB: der ortsüblichen Vergleichsmiete und der Kappungsgrenze. Stellt zusätzlich die beiden gesetzlichen Fristen den Datumsangaben gegenüber. Rate-Limit: 60 Anfragen/Minute/IP.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MieterhoehungRequest"}}}},"responses":{"200":{"description":"Prüfergebnis mit meta-Envelope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MieterhoehungEnvelope"}}}},"400":{"description":"Ungültige Eingabe; error.code ist einer von: invalid_body, invalid_city, invalid_version, invalid_wohnflaeche, invalid_baualter, invalid_klassifikation, invalid_kaltmiete, invalid_date, invalid_modernisierung","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}},"429":{"$ref":"#/components/responses/RateLimited"}}}}},"components":{"responses":{"ValidationError":{"description":"Ungültige Eingabe","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}},"RateLimited":{"description":"Mehr als 60 Anfragen pro Minute"}},"schemas":{"ApiMeta":{"type":"object","description":"Metadaten zu jeder erfolgreichen v1-Response.","properties":{"softwareVersion":{"type":"string","description":"Software-Version aus package.json.","example":"1.9.0"},"dataVersion":{"type":"string","description":"Mietspiegel-Datenjahr der Berechnung.","example":"2026"},"updated":{"type":"string","format":"date","description":"Datum der letzten inhaltlichen Aktualisierung.","example":"2026-08-13"}},"required":["softwareVersion","dataVersion","updated"]},"ApiErrorBody":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Maschinenlesbarer Fehlercode (z. B. invalid_klassifikation).","example":"invalid_klassifikation"},"message":{"type":"string","description":"Kurze Fehlerbeschreibung.","example":"Invalid klassifikation for baualter \"1949 bis 1970\""},"validBaualter":{"type":"array","items":{"type":"string"},"description":"Gültige baualter-Werte bei invalid_baualter."},"validKlassifikation":{"type":"array","items":{"type":"string"},"description":"Gültige klassifikation-Werte bei invalid_klassifikation."},"validVersions":{"type":"array","items":{"type":"string"},"description":"Gültige version-Werte bei invalid_version.","example":["2024","2026"]},"baualter":{"type":"string","description":"Betroffenes baualter bei invalid_klassifikation."},"field":{"type":"string","description":"Betroffenes Feld bei invalid_kaltmiete oder invalid_date (POST /api/v1/mieterhoehung)."},"unknownFields":{"type":"array","items":{"type":"string"},"description":"Unbekannte Felder bei invalid_body (POST /api/v1/calculate und POST /api/v1/mieterhoehung)."}},"required":["code","message"]}}},"CalculateRequest":{"type":"object","description":"Die Angaben der Mietspiegel-Einordnung. Unbekannte Felder werden abgelehnt.","additionalProperties":false,"required":["wohnflaeche","baualter","klassifikation"],"properties":{"version":{"type":"string","enum":["2024","2026"],"default":"2026","description":"Mietspiegel-Datenjahr; Standard ist 2026.","example":"2026"},"wohnflaeche":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Wohnfläche in m².","example":55},"baualter":{"type":"string","description":"Baualtersklasse; gültige Werte über GET /api/v1/schema.","example":"1949 bis 1970"},"klassifikation":{"type":"string","description":"Energieeffizienzklasse (2026) oder Sanierungszustand (2024); abhängig von baualter.","example":"D, E, F, G, kein Energieausweis"},"orientierungshilfe":{"type":"object","additionalProperties":{"type":"boolean"},"description":"Optional: Orientierungshilfe-Merkmal-ID → true/false; IDs über GET /api/v1/schema.","example":{"bad-fenster":true}},"kaltmiete":{"type":"number","minimum":0,"nullable":true,"description":"Optional: Nettokaltmiete in €/Monat zum Vergleich mit der Mietspanne.","example":400},"city":{"type":"string","enum":["potsdam"],"default":"potsdam","description":"Optional; nur \"potsdam\", die Stadt dieses Servers. Eine andere Stadt beantwortet er mit 400 invalid_city und nennt deren Host.","example":"potsdam"}}},"Mietspanne":{"type":"object","description":"Ortsübliche Mietspanne in €/m².","properties":{"unterwert_euro_pro_qm":{"type":"number","description":"Unterwert der ortsüblichen Vergleichsmiete in €/m².","example":5.85},"mittelwert_euro_pro_qm":{"type":"number","description":"Mittelwert der ortsüblichen Vergleichsmiete in €/m².","example":6.49},"oberwert_euro_pro_qm":{"type":"number","description":"Oberwert der ortsüblichen Vergleichsmiete in €/m².","example":7.21}},"required":["unterwert_euro_pro_qm","mittelwert_euro_pro_qm","oberwert_euro_pro_qm"]},"Einordnung":{"type":"object","description":"Vergleich der angegebenen Kaltmiete mit der Mietspanne.","properties":{"typ":{"type":"string","enum":["unterhalb_der_spanne","innerhalb_der_spanne","oberhalb_der_spanne"],"description":"Maschinenlesbare Einordnung der Kaltmiete relativ zur Spanne.","example":"oberhalb_der_spanne"},"erklaerung":{"type":"string","description":"Verständliche Erklärung der Einordnung in deutscher Sprache.","example":"Die angegebene Kaltmiete liegt über der ortsüblichen Vergleichsmiete."},"kaltmiete_euro_pro_qm":{"type":"number","description":"Berechnete Kaltmiete in €/m² (kaltmiete / wohnflaeche).","example":7.27}},"required":["typ","erklaerung","kaltmiete_euro_pro_qm"]},"OrientierungshilfeEinordnung":{"type":"object","description":"Vorgeschlagene Einordnung auf Basis der Orientierungshilfe-Merkmale.","properties":{"vorgeschlagen_euro_pro_qm":{"type":"number","description":"Vorgeschlagener Wert in €/m² innerhalb der Mietspanne.","example":6.6772},"erklaerung":{"type":"string","description":"Erklärung der Orientierungshilfe-Einordnung.","example":"Vorgeschlagene Einordnung auf Basis der gewählten Orientierungshilfe-Merkmale."}},"required":["vorgeschlagen_euro_pro_qm","erklaerung"]},"CalculateResult":{"type":"object","properties":{"version":{"type":"string","description":"Verwendetes Mietspiegel-Datenjahr.","example":"2026"},"mietspanne":{"allOf":[{"$ref":"#/components/schemas/Mietspanne"}],"nullable":true,"description":"Ortsübliche Mietspanne; null wenn keine Tabellenwerte vorliegen."},"einordnung":{"allOf":[{"$ref":"#/components/schemas/Einordnung"}],"nullable":true,"description":"Kaltmieten-Vergleich; nur gesetzt wenn kaltmiete im Request angegeben."},"orientierungshilfe_einordnung":{"allOf":[{"$ref":"#/components/schemas/OrientierungshilfeEinordnung"}],"nullable":true,"description":"Orientierungshilfe-Vorschlag; nur gesetzt wenn Merkmale mit Punkten gewählt."},"emptyMessage":{"type":"string","description":"Hinweis wenn keine Tabellenwerte für die Kombination existieren."}}},"CalculateEnvelope":{"type":"object","properties":{"meta":{"$ref":"#/components/schemas/ApiMeta"},"data":{"$ref":"#/components/schemas/CalculateResult"}}},"VersionSchema":{"type":"object","description":"Gültige Eingabewerte für eine Mietspiegel-Version.","properties":{"version":{"type":"string","example":"2026"},"year":{"type":"number","example":2026},"klassifikationField":{"type":"string","description":"Bezeichnung des Klassifikationsfelds (Energieeffizienzklasse o. ä.)."},"baualter":{"type":"array","items":{"type":"string"},"description":"Gültige Baualtersklassen."},"klassifikationByBaualter":{"type":"array","description":"Gültige klassifikation-Werte je baualter."},"orientierungshilfe":{"type":"array","description":"Orientierungshilfe-Merkmale mit id, label, keywords."},"mieterhoehung":{"$ref":"#/components/schemas/MieterhoehungSchema"}}},"SchemaData":{"type":"object","description":"Schema-Daten; entweder eine Version oder beide unter versions.","properties":{"versions":{"type":"object","properties":{"2024":{"$ref":"#/components/schemas/VersionSchema"},"2026":{"$ref":"#/components/schemas/VersionSchema"}}}}},"SchemaEnvelope":{"type":"object","properties":{"meta":{"$ref":"#/components/schemas/ApiMeta"},"data":{"$ref":"#/components/schemas/SchemaData"}}},"ApiExample":{"type":"object","properties":{"name":{"type":"string","description":"Bezeichnung des Beispielfalls.","example":"Mietspiegel 2026 – Standard"},"request":{"$ref":"#/components/schemas/CalculateRequest"},"response":{"$ref":"#/components/schemas/CalculateResult"}}},"ExamplesData":{"type":"object","properties":{"examples":{"type":"array","items":{"$ref":"#/components/schemas/ApiExample"}},"mieterhoehung":{"type":"array","description":"Request/Response-Paare für POST /api/v1/mieterhoehung.","items":{"$ref":"#/components/schemas/MieterhoehungExample"}}}},"ExamplesEnvelope":{"type":"object","properties":{"meta":{"$ref":"#/components/schemas/ApiMeta"},"data":{"$ref":"#/components/schemas/ExamplesData"}}},"MieterhoehungRequest":{"type":"object","description":"Die Angaben des Mieterhöhungsrechners. Unbekannte Felder werden abgelehnt.","additionalProperties":false,"required":["wohnflaeche","baualter","klassifikation","geforderteKaltmiete"],"properties":{"version":{"type":"string","enum":["2024","2026"],"default":"2026","description":"Mietspiegel-Ausgabe; Standard 2026","example":"2026"},"wohnflaeche":{"type":"number","exclusiveMinimum":0,"description":"Wohnfläche in m²","example":55},"baualter":{"type":"string","description":"Baujahr: Baualtersklasse, exakt aus dem Schema","example":"1949 bis 1970"},"geforderteKaltmiete":{"type":"number","exclusiveMinimum":0,"description":"Geforderte Nettokaltmiete (€/Monat)","example":375},"aktuelleKaltmiete":{"type":["number","null"],"minimum":0,"description":"Aktuelle Nettokaltmiete (€/Monat). Optional. Zeigt, um wie viel die Miete steigen soll – und grenzt die Kappungsgrenze ein, wenn die Kaltmiete von vor 3 Jahren fehlt.","example":340},"kaltmieteVorDreiJahren":{"type":["number","null"],"minimum":0,"description":"Nettokaltmiete vor drei Jahren (€/Monat). Grundlage der Kappungsgrenze. Ohne diese Angabe bleibt der Punkt ungeprüft.","example":330},"letzteMieterhoehung":{"type":["string","null"],"format":"date","description":"Letzte Mieterhöhung (JJJJ-MM-TT). Nur Erhöhungen zählen. Eine Mietminderung setzt die Fristen nicht zurück.","example":"2024-05-01"},"zugang":{"type":["string","null"],"format":"date","description":"Schreiben zugegangen am (JJJJ-MM-TT). Das Datum, an dem Sie das Erhöhungsverlangen erhalten haben.","example":"2026-09-15"},"wirksamAb":{"type":["string","null"],"format":"date","description":"Erhöhung soll wirksam werden zum (JJJJ-MM-TT)","example":"2026-12-01"},"enthaeltModernisierung":{"type":"boolean","default":false,"description":"Die Erhöhung enthält eine Modernisierungs- oder Betriebskostenumlage. Solche Erhöhungen werden auf die Kappungsgrenze nicht angerechnet.","example":false},"klassifikation":{"type":"string","description":"Exakter Klassifikations-String aus dem Schema (je baualter)","example":"D, E, F, G, kein Energieausweis"},"datumDesSchreibens":{"type":["string","null"],"format":"date","description":"Datum des Schreibens (JJJJ-MM-TT). Das Datum, unter dem die Vermieterseite das Verlangen erklärt hat – meist oben im Schreiben. Es zeigt, welche Ausgabe des Mietspiegels damals galt.","example":"2026-09-01"},"city":{"type":"string","enum":["potsdam"],"default":"potsdam","description":"Optional; nur \"potsdam\", die Stadt dieses Servers. Eine andere Stadt beantwortet er mit 400 invalid_city und nennt deren Host.","example":"potsdam"}}},"Pruefpunkt":{"type":"object","description":"Ein Prüfpunkt mit Status und Erklärung.","required":["id","titel","status","erklaerung","rechtsgrundlage"],"properties":{"id":{"type":"string","enum":["vergleichsmiete","kappungsgrenze","jahressperrfrist","sperrfrist"]},"titel":{"type":"string"},"status":{"type":"string","enum":["eingehalten","überschritten","nicht prüfbar"]},"erklaerung":{"type":"string"},"rechtsgrundlage":{"type":"string","example":"§ 558 Abs. 3 BGB"}}},"Obergrenze":{"type":"object","description":"Die niedrigere der beiden Grenzen (ortsübliche Vergleichsmiete, Kappungsgrenze), wo beide bestimmbar sind.","required":["euro_pro_monat","quelle","erklaerung"],"properties":{"euro_pro_monat":{"type":"number"},"quelle":{"type":"string","enum":["vergleichsmiete","kappungsgrenze"]},"erklaerung":{"type":"string"}}},"MieterhoehungResult":{"type":"object","required":["version","mietspanne","pruefpunkte","obergrenze","differenz","ausgabe_hinweis","hinweise"],"properties":{"version":{"type":"string","example":"2026"},"mietspanne":{"oneOf":[{"$ref":"#/components/schemas/Mietspanne"},{"type":"null"}]},"pruefpunkte":{"type":"array","items":{"$ref":"#/components/schemas/Pruefpunkt"}},"obergrenze":{"oneOf":[{"$ref":"#/components/schemas/Obergrenze"},{"type":"null"}]},"differenz":{"type":["string","null"],"description":"Wie weit die geforderte über der aktuellen Kaltmiete liegt; null ohne aktuelleKaltmiete."},"ausgabe_hinweis":{"type":["string","null"],"description":"Welche Ausgabe zum Datum des Schreibens (oder zum Zugang) galt; null, wenn es die verglichene ist."},"hinweise":{"type":"object","description":"Hinweise zum Ergebnis: keine Rechtsberatung, Stand der Verordnungsangaben.","properties":{"rechtsberatung":{"type":"string"},"kappungsgrenze":{"type":"string"}}}},"example":{"version":"2026","mietspanne":{"unterwert_euro_pro_qm":5.85,"mittelwert_euro_pro_qm":6.49,"oberwert_euro_pro_qm":7.21},"pruefpunkte":[{"id":"vergleichsmiete","titel":"Ortsübliche Vergleichsmiete","status":"eingehalten","erklaerung":"Die geforderte Miete liegt innerhalb der Mietspiegelspanne (bis 396,55 € bei 55 m²).","rechtsgrundlage":"§ 558 BGB"},{"id":"kappungsgrenze","titel":"Kappungsgrenze (15 % in 3 Jahren)","status":"eingehalten","erklaerung":"Ausgehend von 330,00 € wären bis 379,50 € möglich.","rechtsgrundlage":"§ 558 Abs. 3 BGB"},{"id":"jahressperrfrist","titel":"Jahressperrfrist","status":"eingehalten","erklaerung":"Zwischen der letzten Mieterhöhung und dem Zugang des Schreibens liegen 28 Monate (nötig: 12).","rechtsgrundlage":"§ 558 Abs. 1 Satz 2 BGB"},{"id":"sperrfrist","titel":"15-Monats-Frist","status":"eingehalten","erklaerung":"Zum geplanten Termin wäre die Miete 31 Monate unverändert (nötig: 15).","rechtsgrundlage":"§ 558 Abs. 1 Satz 1 BGB"}],"obergrenze":{"euro_pro_monat":379.5,"quelle":"kappungsgrenze","erklaerung":"Rechnerisch am niedrigsten liegt die Grenze aus der Kappungsgrenze: 379,50 € pro Monat. Beide Grenzen müssen eingehalten sein, maßgeblich ist deshalb die niedrigere. Ob sie im Einzelfall so gilt, ist damit nicht gesagt."},"differenz":"Die geforderte Miete liegt 35,00 € über der aktuellen Kaltmiete von 340,00 € – ein Anstieg um 10,29 %.","ausgabe_hinweis":null,"hinweise":{"rechtsberatung":"Dies ist keine Rechtsprüfung. Der Rechner vergleicht Ihre Angaben mit dem Mietspiegel und mit den gesetzlichen Grenzen – er sagt nicht, ob eine Mieterhöhung wirksam ist. Ob sie es ist, hängt zusätzlich von Form, Begründung, Vertragsinhalt und Einzelfallumständen ab. Prüfen Sie jedes Ergebnis unabhängig nach und holen Sie vor einer Entscheidung Rechtsberatung ein.","kappungsgrenze":"Stand der Verordnungsangaben: 13. August 2026. Beide Verordnungen des Landes Brandenburg sind befristet und werden regelmäßig neu erlassen. Die hier genannten Werte geben den geprüften Stand wieder – ob sie zum Zeitpunkt Ihres Mietverhältnisses noch gelten, richtet sich nach der jeweils aktuellen Verordnung."}}},"MieterhoehungEnvelope":{"type":"object","properties":{"meta":{"$ref":"#/components/schemas/ApiMeta"},"data":{"$ref":"#/components/schemas/MieterhoehungResult"}}},"MieterhoehungSchema":{"type":"object","description":"POST /api/v1/mieterhoehung: Pflichtfelder, Felder mit Beschreibung, Status und Prüfpunkte.","properties":{"endpoint":{"type":"string","example":"POST /api/v1/mieterhoehung"},"pflichtfelder":{"type":"array","items":{"type":"string"}},"felder":{"type":"object","additionalProperties":{"type":"string"}},"status":{"type":"array","items":{"type":"string"},"example":["eingehalten","überschritten","nicht prüfbar"]},"pruefpunkte":{"type":"array","items":{"type":"string"},"example":["vergleichsmiete","kappungsgrenze","jahressperrfrist","sperrfrist"]}}},"MieterhoehungExample":{"type":"object","properties":{"name":{"type":"string"},"request":{"$ref":"#/components/schemas/MieterhoehungRequest"},"response":{"$ref":"#/components/schemas/MieterhoehungResult"}}}}}}