{
  "openapi": "3.1.1",
  "info": {
    "title": "LADEINDEX",
    "description": "Zuverlaessigkeit oeffentlicher Ladepunkte in Europa.\n\nDie Zahlen dieser Schnittstelle stammen aus den nach Art. 20 AFIR offengelegten Daten der nationalen Zugangspunkte. Jede Antwort mit Daten traegt die Lizenzangabe der Quelle; sie ist weiterzugeben.\n\nZum Ausprobieren gibt es die Sandbox: Ein Schluessel der Art TEST liefert feste Beispieldaten statt echter, und jede solche Antwort traegt die Kopfzeile X-Ladeindex-Sandbox. Welcher Betreiber dort gilt, sagt /api/v1/wer-bin-ich.",
    "version": "v1"
  },
  "servers": [
    {
      "url": "https://api.ladeindex.com/"
    }
  ],
  "paths": {
    "/health/live": {
      "get": {
        "tags": [
          "Ladeindex.Api"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/health/ready": {
      "get": {
        "tags": [
          "Ladeindex.Api"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/version": {
      "get": {
        "tags": [
          "Ladeindex.Api"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/kacheln/{z}/{x}/{y}.mvt": {
      "get": {
        "tags": [
          "Ladeindex.Api"
        ],
        "summary": "Vektorkachel im MVT-Format",
        "parameters": [
          {
            "name": "z",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "x",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "y",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/karte/ausdehnung": {
      "get": {
        "tags": [
          "Ladeindex.Api"
        ],
        "summary": "Umschliessendes Rechteck aller Ladeeinrichtungen",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/einrichtungen": {
      "get": {
        "tags": [
          "Ladeindex.Api"
        ],
        "summary": "Ladeeinrichtungen suchen und blaettern",
        "parameters": [
          {
            "name": "suche",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "land",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "versatz",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32"
            }
          },
          {
            "name": "anzahl",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32"
            }
          },
          {
            "name": "format",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/einrichtungen/{id}": {
      "get": {
        "tags": [
          "Ladeindex.Api"
        ],
        "summary": "Eine Ladeeinrichtung samt ihren Ladepunkten",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/bericht/{jahr}": {
      "get": {
        "tags": [
          "Ladeindex.Api"
        ],
        "summary": "Jahresbericht",
        "parameters": [
          {
            "name": "jahr",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/transparenz": {
      "get": {
        "tags": [
          "Ladeindex.Api"
        ],
        "summary": "Transparenz-Changelog",
        "parameters": [
          {
            "name": "sprache",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/siegel/{id}/bild.svg": {
      "get": {
        "tags": [
          "Ladeindex.Api"
        ],
        "summary": "Siegel als einbettbares Bild",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "sprache",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/siegel/{id}": {
      "get": {
        "tags": [
          "Ladeindex.Api"
        ],
        "summary": "Siegel live pruefen",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/oberflaeche/anmeldung": {
      "get": {
        "tags": [
          "Ladeindex.Api"
        ],
        "summary": "Anmeldeeinstellungen des Portals",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/oberflaeche/einstellungen": {
      "get": {
        "tags": [
          "Ladeindex.Api"
        ],
        "summary": "Einstellungen der oeffentlichen Oberflaeche",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/meldungen/aufgabe": {
      "get": {
        "tags": [
          "Ladeindex.Api"
        ],
        "summary": "Rechennachweis-Aufgabe holen",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/meldungen": {
      "post": {
        "tags": [
          "Ladeindex.Api"
        ],
        "summary": "Eine Beobachtung melden, ohne Konto",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MeldungEingang"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/monitor/ueberblick": {
      "get": {
        "tags": [
          "Ladeindex.Api"
        ],
        "summary": "Kennzahlen je Quelle, ohne Betreibernamen",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/monitor/anschlussfaehigkeit/{quellenCode}": {
      "get": {
        "tags": [
          "Ladeindex.Api"
        ],
        "summary": "Wie viele Betreiber sind an dynamische Statusdaten anschlussfaehig",
        "parameters": [
          {
            "name": "quellenCode",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/monitor/{quellenCode}/betreiber/{betreiberId}": {
      "get": {
        "tags": [
          "Ladeindex.Api"
        ],
        "summary": "Qualitaetswerte eines Betreibers samt Rang",
        "parameters": [
          {
            "name": "quellenCode",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "betreiberId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/portal/betreiber": {
      "get": {
        "tags": [
          "Ladeindex.Api"
        ],
        "summary": "Eigene Betreiber-Zuordnungen",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "Ladeindex.Api"
        ],
        "summary": "Betreiber-Zuordnung beantragen",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ZuordnungAntrag"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/portal/feed/{betreiberId}": {
      "get": {
        "tags": [
          "Ladeindex.Api"
        ],
        "summary": "Datenqualitaet des eigenen Feeds",
        "parameters": [
          {
            "name": "betreiberId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/portal/siegel/{betreiberId}": {
      "get": {
        "tags": [
          "Ladeindex.Api"
        ],
        "summary": "Eigenes Siegel samt Einbettungsadressen",
        "parameters": [
          {
            "name": "betreiberId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/portal/schluessel": {
      "get": {
        "tags": [
          "Ladeindex.Api"
        ],
        "summary": "Eigene API-Schluessel",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "Ladeindex.Api"
        ],
        "summary": "API-Schluessel erzeugen",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SchluesselAntrag"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/portal/schluessel/{id}/widerrufen": {
      "post": {
        "tags": [
          "Ladeindex.Api"
        ],
        "summary": "API-Schluessel widerrufen",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WiderrufAntrag"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/portal/team": {
      "get": {
        "tags": [
          "Ladeindex.Api"
        ],
        "summary": "Team des eigenen Zugangs",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/portal/team/{mitgliedId}/rolle": {
      "post": {
        "tags": [
          "Ladeindex.Api"
        ],
        "summary": "Rolle eines Mitglieds aendern",
        "parameters": [
          {
            "name": "mitgliedId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RollenAntrag"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/portal/team/{mitgliedId}/aktiv": {
      "post": {
        "tags": [
          "Ladeindex.Api"
        ],
        "summary": "Zugang eines Mitglieds abschalten oder zulassen",
        "parameters": [
          {
            "name": "mitgliedId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AktivAntrag"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/portal/team/einladungen": {
      "post": {
        "tags": [
          "Ladeindex.Api"
        ],
        "summary": "Jemanden ins Team einladen",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EinladungsAntrag"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/portal/team/einladungen/{einladungId}": {
      "delete": {
        "tags": [
          "Ladeindex.Api"
        ],
        "summary": "Einladung zuruecknehmen",
        "parameters": [
          {
            "name": "einladungId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/portal/beitritt": {
      "get": {
        "tags": [
          "Ladeindex.Api"
        ],
        "summary": "Offene Einladung zur eigenen Adresse",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "Ladeindex.Api"
        ],
        "summary": "Einladung annehmen",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/portal/berichte": {
      "get": {
        "tags": [
          "Ladeindex.Api"
        ],
        "summary": "Eigene Report-Vormerkungen",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "Ladeindex.Api"
        ],
        "summary": "Standort-Report vormerken",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Bestellwunsch"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/portal/berichte/{id}/zurueckziehen": {
      "post": {
        "tags": [
          "Ladeindex.Api"
        ],
        "summary": "Vormerkung zuruecknehmen",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/portal/protokoll": {
      "get": {
        "tags": [
          "Ladeindex.Api"
        ],
        "summary": "Audit-Log des eigenen Zugangs",
        "parameters": [
          {
            "name": "vor",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/export/einrichtungen.csv": {
      "get": {
        "tags": [
          "Ladeindex.Api"
        ],
        "summary": "Katalog als CSV",
        "parameters": [
          {
            "name": "land",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/export/einrichtungen.geojson": {
      "get": {
        "tags": [
          "Ladeindex.Api"
        ],
        "summary": "Katalog als GeoJSON",
        "parameters": [
          {
            "name": "land",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/oberflaeche/recht": {
      "get": {
        "tags": [
          "Ladeindex.Api"
        ],
        "summary": "Pflichtangaben fuer Impressum und Datenschutzerklaerung",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/.well-known/security.txt": {
      "get": {
        "tags": [
          "Ladeindex.Api"
        ],
        "summary": "Kontakt fuer Sicherheitsmeldungen (RFC 9116)",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/wer-bin-ich": {
      "get": {
        "tags": [
          "Ladeindex.Api"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "AktivAntrag": {
        "required": [
          "aktiv"
        ],
        "type": "object",
        "properties": {
          "aktiv": {
            "type": "boolean"
          }
        }
      },
      "Bestellwunsch": {
        "required": [
          "bezeichnung",
          "adresse",
          "landCode",
          "notiz",
          "breite",
          "laenge"
        ],
        "type": "object",
        "properties": {
          "bezeichnung": {
            "type": [
              "null",
              "string"
            ]
          },
          "adresse": {
            "type": [
              "null",
              "string"
            ]
          },
          "landCode": {
            "type": [
              "null",
              "string"
            ]
          },
          "notiz": {
            "type": [
              "null",
              "string"
            ]
          },
          "breite": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          },
          "laenge": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          }
        }
      },
      "EinladungsAntrag": {
        "required": [
          "email",
          "rolle"
        ],
        "type": "object",
        "properties": {
          "email": {
            "type": [
              "null",
              "string"
            ]
          },
          "rolle": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "MeldungEingang": {
        "required": [
          "einrichtungId",
          "ladepunkt",
          "art",
          "bemerkung",
          "beobachtetAm",
          "vorgabe",
          "loesung"
        ],
        "type": "object",
        "properties": {
          "einrichtungId": {
            "type": "string",
            "format": "uuid"
          },
          "ladepunkt": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "null",
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "art": {
            "type": "string"
          },
          "bemerkung": {
            "type": [
              "null",
              "string"
            ]
          },
          "beobachtetAm": {
            "type": "string",
            "format": "date-time"
          },
          "vorgabe": {
            "type": "string"
          },
          "loesung": {
            "type": "string"
          }
        }
      },
      "RollenAntrag": {
        "required": [
          "rolle"
        ],
        "type": "object",
        "properties": {
          "rolle": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "SchluesselAntrag": {
        "required": [
          "bezeichnung",
          "art"
        ],
        "type": "object",
        "properties": {
          "bezeichnung": {
            "type": [
              "null",
              "string"
            ]
          },
          "art": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "WiderrufAntrag": {
        "required": [
          "grund"
        ],
        "type": "object",
        "properties": {
          "grund": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "ZuordnungAntrag": {
        "required": [
          "betreiberId",
          "beleg"
        ],
        "type": "object",
        "properties": {
          "betreiberId": {
            "type": "string",
            "format": "uuid"
          },
          "beleg": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      }
    }
  },
  "tags": [
    {
      "name": "Ladeindex.Api"
    }
  ]
}