{
  "openapi": "3.1.0",
  "info": {
    "title": "Ablago API",
    "version": "handbuch",
    "description": "Schnittstelle von Ablago, selbst gehostet. Anmeldung mit einem API-Schlüssel aus dem Profil: `Authorization: Bearer dms_…`. Ein Schlüssel hat höchstens die Rechte seines Benutzers; Schlüssel „nur lesen“ erlauben nur GET, Schlüssel „nur Zähler“ nur GET /ich/zaehler (alles andere 403). Diese Beschreibung entsteht aus der installierten Version.",
    "license": {
      "name": "Apache-2.0",
      "url": "https://www.apache.org/licenses/LICENSE-2.0"
    }
  },
  "servers": [
    {
      "url": "/api/v1"
    }
  ],
  "security": [
    {
      "apiSchluessel": []
    }
  ],
  "tags": [
    {
      "name": "Konto",
      "description": "Wer ist angemeldet"
    },
    {
      "name": "Ablage",
      "description": "Mappentypen lesen, Mappen anlegen, lesen, ändern, löschen"
    },
    {
      "name": "Dokumente",
      "description": "Dateien an Mappen"
    },
    {
      "name": "Werkbank",
      "description": "Nur mit dem Schlüssel eines Administrators"
    }
  ],
  "paths": {
    "/ich": {
      "get": {
        "tags": [
          "Konto"
        ],
        "summary": "Wer bin ich?",
        "description": "Benutzer und Rechte des verwendeten Schlüssels.",
        "operationId": "getIch",
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Ich"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/ich/zaehler": {
      "get": {
        "tags": [
          "Konto"
        ],
        "summary": "Zähler: neue Post, Zu erledigen, Fristen (nur Zahlen)",
        "description": "Nur Zahlen für den Benutzer des Schlüssels, in dessen Rechten – keine Titel, Namen, Absender oder Inhalte (#625). neuePost: Post im Stand „Neu“, deren „Für“ du bist oder leer ist; zuErledigen: wie „Zu erledigen“; anstehend: Fristen, Erinnerungen und Aufgaben mit Datum von heute bis in 7 Tagen; ueberfaellig: offene mit Datum vor heute. stand zählt hoch, sobald sich eine Zahl gegenüber dem letzten Abruf ändert; geaendert ist der Zeitpunkt dieser Änderung. Die Antwort trägt ein ETag: Mit If-None-Match und gleichem ETag kommt 304 ohne Inhalt. Dafür genügt ein Schlüssel der Stufe „nur Zähler“, der sonst nichts darf; „lesen“ und „lesen und schreiben“ dürfen ebenfalls.",
        "operationId": "getIchZaehler",
        "parameters": [
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "description": "ETag des letzten Abrufs; passt es, kommt 304 ohne Inhalt",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zaehlerstand"
                }
              }
            },
            "headers": {
              "ETag": {
                "description": "Stand der Zahlen; mit If-None-Match zurückschicken",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "304": {
            "description": "Nichts geändert: If-None-Match passt zum aktuellen ETag; ohne Inhalt"
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Nur bei Anmeldung mit Sitzung: Zwei-Faktor-Anmeldung ist vorgeschrieben, aber noch nicht eingerichtet",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/konto/abwesenheit": {
      "get": {
        "tags": [
          "Konto"
        ],
        "summary": "Eigene Abwesenheit",
        "description": "Abwesenheit mit Vertreter und Anzahl eigener offener Aufgaben.",
        "operationId": "getKontoAbwesenheit",
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AbwesenheitStand"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Konto"
        ],
        "summary": "Eigene Abwesenheit setzen",
        "description": "Solange sie wirkt (an, und heute im Zeitraum von–bis, beides optional), gehen neue Aufgaben an den Vertreter. Vertreter ist Pflicht, sobald an=true.",
        "operationId": "putKontoAbwesenheit",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Abwesenheit"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Benutzer"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/konto/zusammenfassung": {
      "get": {
        "tags": [
          "Konto"
        ],
        "summary": "Tägliche Zusammenfassung: eigene Einstellung",
        "description": "Ob, um wie viel Uhr und an welchen Wochentagen die tägliche Zusammenfassung der Aufgaben kommt; uhrzeit null = Standard der Werkbank.",
        "operationId": "getKontoZusammenfassung",
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zusammenfassung"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Konto"
        ],
        "summary": "Tägliche Zusammenfassung einstellen",
        "description": "uhrzeit im 15-Minuten-Raster (HH:MM) oder null, tage 1 = Montag … 7 = Sonntag (leer = aus), feiertage = nicht an Feiertagen des Bundeslands.",
        "operationId": "putKontoZusammenfassung",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ZusammenfassungEingabe"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zusammenfassung"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/typen": {
      "get": {
        "tags": [
          "Ablage"
        ],
        "summary": "Alle Mappentypen",
        "description": "Felder, Register, Titel-Vorlage und Trefferliste je Typ. Feldschlüssel sind die Namen in `werte` einer Mappe.",
        "operationId": "getTypen",
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MappentypListe"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Werkbank"
        ],
        "summary": "Mappentyp anlegen (Administrator)",
        "operationId": "postTypen",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MappentypEingabe"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Mappentyp"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Nur für Administratoren; oder Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/sichten": {
      "get": {
        "tags": [
          "Ablage"
        ],
        "summary": "Anzahl Mappen je Typ, je Ansicht und unter „Zu erledigen“",
        "operationId": "getSichten",
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zaehler"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/sichten/definitionen": {
      "get": {
        "tags": [
          "Ablage"
        ],
        "summary": "Alle Ansichten",
        "description": "Ansichten mit Elternsicht, Reihenfolge, Mappentypen und Bedingungen. Die Mappen einer Ansicht liefert GET /mappen?sicht=<id>.",
        "operationId": "getSichtenDefinitionen",
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SichtListe"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/mappen": {
      "get": {
        "tags": [
          "Ablage"
        ],
        "summary": "Mappen einer Ansicht, seitenweise",
        "description": "Mappen eines Typs (oder von „Zu erledigen“), sortiert und seitenweise. `bezuege` enthält Titel und Typ der Mappen, auf die die gelieferten Mappen verweisen.",
        "operationId": "getMappen",
        "parameters": [
          {
            "name": "sicht",
            "in": "query",
            "required": true,
            "description": "Id einer Ansicht, „eingang“, „favoriten“ (eigene Favoriten) oder „typ:<Id eines Mappentyps>“ (alle Mappen dieses Typs, ohne Bedingungen) oder „link“ (Link über Mappentyp und Feldwerte, siehe link). „sicht“ ist die „Ansicht“ der Oberfläche, „eingang“ die Liste „Zu erledigen“ oder „suche“ (erweiterte Suche, siehe link)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "link",
            "in": "query",
            "required": false,
            "description": "Mit sicht=link: die Parameter eines Links über Mappentyp und Feldwerte als ein kodierter Wert, z. B. typ%3DRechnung%26bezahlt%3Dnein (#98). Fehler im Link: 422. Mit sicht=suche die Parameter der erweiterten Suche (#199), z. B. typ%3Drechnung%26rechnungsdatum.von%3D2025-03-01%26vertragspartner%3D<Id>%26volltext%3DBackofen%26in%3Ddokumente: typ mehrfach (ohne = alle Typen, nur Systemfelder), feld.von/feld.bis für Datum und Zahlen, feld=wert mehrfach für Verweise und Auswahl (ODER), Ja/Nein ja|nein, Text enthält, feld.leer=1 bzw. feld.nichtleer=1, volltext mit in=dokumente und/oder in=notizen (ohne in: beide). Zwischen Feldern gilt UND. Ungültige Eingaben: 422.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "von",
            "in": "query",
            "required": false,
            "description": "Erster Eintrag (ab 0), Standard 0",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "anzahl",
            "in": "query",
            "required": false,
            "description": "Anzahl, 1–500, Standard 100",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "suche",
            "in": "query",
            "required": false,
            "description": "Text in Titel oder Werten",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "notizen",
            "in": "query",
            "required": false,
            "description": "true = auch in Notizen suchen; Fundstellen stehen in ausschnitte (dokument: „Notiz“)",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "volltext",
            "in": "query",
            "required": false,
            "description": "true = auch im Volltext der Dokumente suchen (Wortstämme in der Sprache jedes Dokuments, #400, z. B. „Rechnungen“ findet „Rechnung“, „invoices“ findet „invoice“); Fundstellen stehen in ausschnitte. Umlaute, ß und Bindestriche gleicht die Suche aus, gleichbedeutende Wörter aus der Werkbank zählen mit (#356).",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "sortierung",
            "in": "query",
            "required": false,
            "description": "Feldschlüssel oder _titel, _typ, _erstellt, _erstelltVon, _geaendert, _geaendertVon; Standard _titel",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "absteigend",
            "in": "query",
            "required": false,
            "description": "true = absteigend",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "passwoerter",
            "in": "query",
            "required": false,
            "description": "„anzeigen“: Passwortfelder im Klartext statt nur {gesetzt, lesbar}. Nur mit einem API-Schlüssel mit dem Recht „Passwörter lesen“ (sonst 403); jeder Abruf steht im Protokoll.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Seite"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Ablage"
        ],
        "summary": "Mappe anlegen",
        "description": "Die Werte werden wie in der Oberfläche geprüft (Pflichtfelder, Längen, eindeutige Werte, Verweise, Formate und Datumsgrenzen). Bei Fehlern: 422 mit den Feldnamen in der Meldung und `details` je Feld.",
        "operationId": "postMappen",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MappeEingabe"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Mappe"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/mappen/{id}": {
      "get": {
        "tags": [
          "Ablage"
        ],
        "summary": "Eine Mappe mit Dokumenten und Rückverweisen",
        "operationId": "getMappenMitid",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id der Mappe (UUID)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "passwoerter",
            "in": "query",
            "required": false,
            "description": "„anzeigen“: Passwortfelder im Klartext statt nur {gesetzt, lesbar}. Nur mit einem API-Schlüssel mit dem Recht „Passwörter lesen“ (sonst 403); jeder Abruf steht im Protokoll.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MappeDetails"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Ablage"
        ],
        "summary": "Mappe ändern",
        "description": "Übergebene Werte ersetzen die bisherigen; nicht übergebene Felder bleiben, wie sie gerade gespeichert sind – schicke nur, was du ändern willst. Werte von Feldern, die es im Typ nicht mehr gibt, bleiben erhalten. Formate und Datumsgrenzen (#535) gelten nur für Werte, die sich ändern. Gleichzeitig bearbeiten (#609): Mit stand (der Wert geaendert der Mappe, so wie du sie gelesen hast) prüft Ablago, ob seitdem jemand eines der übergebenen Felder geändert hat. Dann kommt 409 mit details: Mappenkonflikt (betroffene Felder, wer, wann, aktueller Wert) und nichts wird gespeichert; andere Felder werden ohne Rückfrage zusammengeführt. Den eigenen Wert trotzdem übernehmen: noch einmal mit stand aus der 409-Antwort senden; den anderen behalten: das Feld weglassen. Ohne stand keine Prüfung (wie bis 0.143): Die übergebenen Felder gelten.",
        "operationId": "putMappenMitid",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id der Mappe (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MappeAenderung"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Mappe"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "409": {
            "description": "Mit stand: Seitdem hat jemand dasselbe Feld anders geändert (details: Mappenkonflikt); nichts gespeichert",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Ablage"
        ],
        "summary": "Mappe löschen",
        "description": "Samt ihrer Dokumente. 409, solange andere Mappen auf sie verweisen. Ist der Papierkorb an, kommt sie dorthin und lässt sich wiederherstellen. Jede Löschung steht im Löschprotokoll (#470) – mit dem API-Schlüssel als „Schnittstelle“.",
        "operationId": "deleteMappenMitid",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id der Mappe (UUID)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "grund",
            "in": "query",
            "required": false,
            "description": "Grund fürs Löschprotokoll (#470): frist, verlangen, nicht_noetig oder sonstiges",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "grundText",
            "in": "query",
            "required": false,
            "description": "Freier Text zum Grund, ohne Personenbezug (höchstens 200 Zeichen)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Erledigt"
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "409": {
            "description": "Kann (noch) nicht gelöscht werden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/mappen/{id}/favorit": {
      "put": {
        "tags": [
          "Ablage"
        ],
        "summary": "Mappe als Favorit markieren",
        "description": "Persönlich für den Benutzer des Schlüssels; ändert weder „zuletzt geändert“ noch die Historie. Mehrfaches Markieren schadet nicht.",
        "operationId": "putMappenMitidFavorit",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id der Mappe (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Favorit"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Ablage"
        ],
        "summary": "Favorit entfernen",
        "operationId": "deleteMappenMitidFavorit",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id der Mappe (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Favorit"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "409": {
            "description": "Kann (noch) nicht gelöscht werden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/mappen/{id}/baum": {
      "get": {
        "tags": [
          "Ablage"
        ],
        "summary": "Alle Mappen, die über Verweise an einer Mappe hängen",
        "description": "Baum-Sammlung (#396, #424): Breitensuche ab der Mappe über Verweise – verwiesenVon (Mappen, die darauf verweisen, „nach unten“) und/oder verweistAuf (Mappen, auf die sie verweist). Ohne seitwaerts geht jede Mappe nur in der Richtung weiter, über die sie erreicht wurde. Mit nurZugehoerigkeit geht es nur über Verweisfelder der Art Zugehörigkeit weiter; Mappen, die nur über Bezug verbunden sind, stehen als Blatt da (nurBezug). Kreise werden erkannt (auchUeber, kreise), die Obergrenze max kappt große Bäume (abgeschnitten). Nur Mappen, die der Aufrufer lesen darf; über nicht lesbare geht es nicht weiter (gezählt in verborgen). Benutzer und Rollen sind ausgenommen. Je Knoten: Ebene, über welchen Verweis erreicht, Anzahl Dokumente, Verweise zu Mappen außerhalb des Baums (aussen), Aufbewahrungsfrist (aufbewahrenBis, gesperrt) und die eigenen Rechte.",
        "operationId": "getMappenMitidBaum",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id der Start-Mappe (UUID)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tiefe",
            "in": "query",
            "required": false,
            "description": "Ebenen, 1 bis 10 (Standard 2)",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "richtungen",
            "in": "query",
            "required": false,
            "description": "verwiesenVon, verweistAuf oder beide mit Komma (Standard beide)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "max",
            "in": "query",
            "required": false,
            "description": "höchstens so viele Mappen, 1 bis 5000 (Standard 1000)",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "seitwaerts",
            "in": "query",
            "required": false,
            "description": "true: jede Mappe in alle Richtungen weiter (Standard false)",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "nurZugehoerigkeit",
            "in": "query",
            "required": false,
            "description": "true: nur über Verweise der Art Zugehörigkeit weitersammeln (Standard false)",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Baum"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/mappen/{id}/loeschvorschau": {
      "get": {
        "tags": [
          "Ablage"
        ],
        "summary": "Mit verknüpften Mappen löschen: Vorschau",
        "description": "Mappe mit allen verknüpften Mappen löschen (#424): Baum „nach unten“ (Mappen, die auf die Mappe verweisen, und so weiter; nie nach oben oder seitwärts; ohne Benutzer und Rollen) wie GET /mappen/{id}/baum mit nurZugehoerigkeit: Mitgelöscht und weitergesammelt wird nur über Verweise der Art Zugehörigkeit; Mappen, die nur über Bezug dranhängen (knoten[].nurBezug, 📎), werden nie gelöscht – bei ihnen wird nur der Verweis entfernt. Dazu kanten (alle Verweise im Baum), geteilt (🔗: gehört über Zugehörigkeit auch zu einer Mappe außerhalb – gleicher Typ oder gleiches Feld), nichtLoeschbar (Id → Grund), papierkorbTage und vorschlag (Id → loeschen | entkoppeln | behalten). Gesperrte Mappen (Aufbewahrungsfrist, knoten[].gesperrt) und Mappen ohne Löschrecht (knoten[].rechte.D) werden nie gelöscht. Die Vorschau ändert nichts.",
        "operationId": "getMappenMitidLoeschvorschau",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id der Start-Mappe (UUID)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tiefe",
            "in": "query",
            "required": false,
            "description": "Ebenen, 1 bis 10 (Standard 5)",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "max",
            "in": "query",
            "required": false,
            "description": "höchstens so viele Mappen, 1 bis 5000 (Standard 1000)",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LoeschVorschau"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/mappen/{id}/mit-verknuepften-loeschen": {
      "post": {
        "tags": [
          "Ablage"
        ],
        "summary": "Mit verknüpften Mappen löschen: ausführen",
        "description": "Sammelt die Vorschau neu (gleiche tiefe/max angeben) und löscht nach auswahl (Id → loeschen | entkoppeln | behalten; fehlende Ids bleiben – z. B. vorschlag aus der Vorschau übernehmen). Dieselben Prüfungen wie in der Vorschau: Rechte, Aufbewahrungsfristen; eine Mappe, auf die eine bleibende Mappe noch verweist, bleibt. entkoppeln entfernt nur die Verweise dieser Mappe auf gelöschte Mappen (Recht „Bearbeiten“). Alles geht als ein Vorgang in den Papierkorb (bei 0 Tagen Aufbewahrung sofort endgültig) und lässt sich mit POST /papierkorb/vorgang/{vorgang}/wiederherstellen gemeinsam wiederherstellen. Bleibt die Start-Mappe wegen Mappen in der Aufbewahrungsfrist, legt Ablago dem Aufrufer an ihr eine Erinnerung zum Tag nach dem spätesten Fristende an (erinnerung). 422, wenn nach der Auswahl nichts gelöscht würde.",
        "operationId": "postMappenMitidMit-verknuepften-loeschen",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id der Start-Mappe (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LoeschAusfuehren"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LoeschErgebnis"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/papierkorb": {
      "get": {
        "tags": [
          "Ablage"
        ],
        "summary": "Eigener Papierkorb",
        "description": "Mappen, die der Benutzer dieses Schlüssels gelöscht hat, neueste zuerst. Nach der eingestellten Aufbewahrung werden sie endgültig gelöscht.",
        "operationId": "getPapierkorb",
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PapierkorbListe"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Ablage"
        ],
        "summary": "Eigenen Papierkorb leeren",
        "operationId": "deletePapierkorb",
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Geloescht"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "409": {
            "description": "Kann (noch) nicht gelöscht werden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/papierkorb/{id}/wiederherstellen": {
      "post": {
        "tags": [
          "Ablage"
        ],
        "summary": "Mappe aus dem Papierkorb wiederherstellen",
        "description": "Verweise auf Mappen, die es nicht mehr gibt, entfallen; passt die Mappe danach nicht zur Definition (z. B. ein eindeutiger Wert ist inzwischen vergeben), erscheint sie unter „Zu erledigen“.",
        "operationId": "postPapierkorbMitidWiederherstellen",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id der Mappe (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Wiederhergestellt"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/papierkorb/vorgang/{id}/wiederherstellen": {
      "post": {
        "tags": [
          "Ablage"
        ],
        "summary": "Einen Vorgang gemeinsam wiederherstellen",
        "description": "Alle Mappen, die zusammen „mit verknüpften Mappen“ gelöscht wurden (#424, Feld vorgang im Papierkorb), samt Dokumenten und Verweisen untereinander; Verweise bleibender Mappen, die beim Löschen entfernt wurden, werden wieder gesetzt.",
        "operationId": "postPapierkorbVorgangMitidWiederherstellen",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Vorgangs (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VorgangWiederhergestellt"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/papierkorb/{id}": {
      "delete": {
        "tags": [
          "Ablage"
        ],
        "summary": "Mappe endgültig löschen",
        "operationId": "deletePapierkorbMitid",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id der Mappe (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Geloescht"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "409": {
            "description": "Kann (noch) nicht gelöscht werden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/papierkorb/dokumente": {
      "get": {
        "tags": [
          "Ablage"
        ],
        "summary": "Einzeln gelöschte Dokumente im eigenen Papierkorb",
        "description": "Dokumente, die der Benutzer dieses Schlüssels aus einem Register gelöscht hat (#344), neueste zuerst. mappe: da (wiederherstellbar), papierkorb (erst die Mappe wiederherstellen) oder weg.",
        "operationId": "getPapierkorbDokumente",
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PapierkorbDokumente"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/papierkorb/dokumente/{id}/wiederherstellen": {
      "post": {
        "tags": [
          "Ablage"
        ],
        "summary": "Dokument aus dem Papierkorb wiederherstellen",
        "description": "Legt das Dokument mit allen Versionen in dasselbe Register derselben Mappe zurück; braucht das Recht „Bearbeiten“ an der Mappe. 409, wenn die Mappe selbst im Papierkorb liegt oder es sie nicht mehr gibt.",
        "operationId": "postPapierkorbDokumenteMitidWiederherstellen",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Dokuments (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DokumentWiederhergestellt"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/papierkorb/dokumente/{id}": {
      "delete": {
        "tags": [
          "Ablage"
        ],
        "summary": "Dokument endgültig löschen",
        "operationId": "deletePapierkorbDokumenteMitid",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Dokuments (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Geloescht"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "409": {
            "description": "Kann (noch) nicht gelöscht werden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/aufgaben": {
      "get": {
        "tags": [
          "Ablage"
        ],
        "summary": "Meine offenen Aufgaben",
        "description": "Aufgaben für den Benutzer des Schlüssels (Administratoren: auch die für alle Administratoren), mit Titel und Typ der Mappe.",
        "operationId": "getAufgaben",
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AufgabenListe"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/mappen/{id}/aufgaben": {
      "post": {
        "tags": [
          "Ablage"
        ],
        "summary": "Aufgabe vergeben",
        "operationId": "postMappenMitidAufgaben",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id der Mappe (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AufgabeEingabe"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Aufgabe"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/aufgaben/{id}/erledigt": {
      "post": {
        "tags": [
          "Ablage"
        ],
        "summary": "Aufgabe erledigen",
        "description": "„Passt nicht“-Aufgaben erledigen sich selbst (409).",
        "operationId": "postAufgabenMitidErledigt",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id der Aufgabe (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Aufgabe"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/aufgaben/{id}/rueckgaengig": {
      "post": {
        "tags": [
          "Ablage"
        ],
        "summary": "Automatische Zuordnung rückgängig machen",
        "description": "Nur für Aufgaben der Art „zugeordnet“ (#337, „Automatisch zugeordnet – bitte prüfen“): Die Dokumente kommen zurück in die Post, der Verweis auf die Zielmappe fällt weg, der Stand ist wieder „Neu“ (wenn die Post sonst nirgends zugeordnet ist), die Aufgabe ist erledigt; beides steht in der Historie. Diese Post ordnet die Erkennung danach nie wieder von selbst zu. Braucht Bearbeiten an der Post; 409, wenn schon zurückgenommen.",
        "operationId": "postAufgabenMitidRueckgaengig",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id der Aufgabe (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rueckgaengig"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/aufgaben/{id}/delegieren": {
      "post": {
        "tags": [
          "Ablage"
        ],
        "summary": "Aufgabe weitergeben",
        "operationId": "postAufgabenMitidDelegieren",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id der Aufgabe (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Delegieren"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Aufgabe"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/aufgaben/weitergeben": {
      "post": {
        "tags": [
          "Ablage"
        ],
        "summary": "Mehrere Aufgaben auf einmal weitergeben",
        "description": "Sammel-Weitergabe (#415, #419): je Aufgabe dieselben Rechte wie beim einzelnen Weitergeben (eigene, als Administrator alle); das Ziel muss die jeweilige Mappe lesen dürfen. Was nicht geht, steht mit Grund unter nicht. Jede Weitergabe steht in der Historie ihrer Mappe; der Empfänger bekommt eine Sammelbenachrichtigung unter „Zu erledigen“. Höchstens 1000 Aufgaben.",
        "operationId": "postAufgabenWeitergeben",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SammelWeitergabe"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SammelErgebnis"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/aufgaben/erledigt": {
      "post": {
        "tags": [
          "Ablage"
        ],
        "summary": "Mehrere Aufgaben auf einmal erledigen",
        "description": "Wie /aufgaben/{id}/erledigt für jede Aufgabe; „Passt nicht“-Aufgaben und fremde Aufgaben stehen mit Grund unter nicht.",
        "operationId": "postAufgabenErledigt",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SammelAuswahl"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SammelErgebnis"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/anstehend": {
      "get": {
        "tags": [
          "Ablage"
        ],
        "summary": "Anstehende Fristen, Erinnerungen und Aufgaben mit Datum",
        "description": "Fristen, Erinnerungen und Aufgaben mit Datum des Benutzers dieses Schlüssels, fällige und kommende, nach Datum – nur an Mappen, die er lesen darf. Entweder bis heute + tage (Standard 30, wie die Liste) oder für einen Zeitraum von … bis (höchstens 400 Tage, wie der Kalender, #528): dann auch die künftigen Termine wiederkehrender Fristen (folgetermin), Überfälliges auch vor „von“ und die Feiertage des Bundeslands. Überfällig ist ein Eintrag mit faellig und datum vor heute.",
        "operationId": "getAnstehend",
        "parameters": [
          {
            "name": "tage",
            "in": "query",
            "required": false,
            "description": "Zeitraum in Tagen ab heute (0–366); ohne von/bis",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "von",
            "in": "query",
            "required": false,
            "description": "Beginn des Zeitraums (JJJJ-MM-TT), nur zusammen mit bis",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "bis",
            "in": "query",
            "required": false,
            "description": "Ende des Zeitraums (JJJJ-MM-TT), höchstens 400 Tage nach von",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Anstehend"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/mappen/{id}/erinnerungen": {
      "post": {
        "tags": [
          "Ablage"
        ],
        "summary": "Erinnerung anlegen",
        "description": "Am Datum wird daraus eine Aufgabe der Art „erinnerung“; liegt es heute oder früher, sofort.",
        "operationId": "postMappenMitidErinnerungen",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id der Mappe (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ErinnerungEingabe"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Erinnerung"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/erinnerungen/{id}": {
      "put": {
        "tags": [
          "Ablage"
        ],
        "summary": "Erinnerung ändern",
        "operationId": "putErinnerungenMitid",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id der Erinnerung (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ErinnerungEingabe"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Erinnerung"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Ablage"
        ],
        "summary": "Erinnerung löschen",
        "operationId": "deleteErinnerungenMitid",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id der Erinnerung (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Erledigt"
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "409": {
            "description": "Kann (noch) nicht gelöscht werden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/aufgaben/{id}/folgetermin": {
      "post": {
        "tags": [
          "Ablage"
        ],
        "summary": "Nächsten Termin einer wiederkehrenden Frist setzen",
        "description": "Nur solange das Datumsfeld noch das Datum der Frist hat (sonst 409). Braucht das Recht „Bearbeiten“.",
        "operationId": "postAufgabenMitidFolgetermin",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id der Aufgabe (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Mappe"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/mappen/{id}/notizen": {
      "get": {
        "tags": [
          "Ablage"
        ],
        "summary": "Notizen einer Mappe",
        "operationId": "getMappenMitidNotizen",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id der Mappe (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotizListe"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Ablage"
        ],
        "summary": "Notiz anlegen",
        "description": "text als formatierter Text (Markdown).",
        "operationId": "postMappenMitidNotizen",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id der Mappe (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NotizEingabe"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Notiz"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/notizen/{id}": {
      "put": {
        "tags": [
          "Ablage"
        ],
        "summary": "Notiz ändern",
        "operationId": "putNotizenMitid",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id der Notiz (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NotizEingabe"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Notiz"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Ablage"
        ],
        "summary": "Notiz löschen",
        "operationId": "deleteNotizenMitid",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id der Notiz (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Erledigt"
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "409": {
            "description": "Kann (noch) nicht gelöscht werden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/mappen/{id}/historie": {
      "get": {
        "tags": [
          "Ablage"
        ],
        "summary": "Änderungshistorie einer Mappe",
        "description": "Neueste zuerst: angelegt, geändert (mit Feld, alt und neu), Dokumente, Papierkorb, Passwort angezeigt, Notizen, Aufgaben, E-Mails. Einträge sind unveränderlich.",
        "operationId": "getMappenMitidHistorie",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id der Mappe (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Historie"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/mappen/email": {
      "post": {
        "tags": [
          "Ablage"
        ],
        "summary": "Mehrere Mappen per E-Mail versenden",
        "description": "Mehrere Mappen in einer E-Mail (#151, höchstens 100). Anhänge: je Mappe ihre Angaben als PDF („Titel.pdf“, angaben=false lässt sie weg) und die Dokumente – dokumente=„alle“ oder eine Liste von Dokument-Ids (Standard: keine); zusammen höchstens 50 MB. Jede Mappe braucht Lesen und das Recht zu versenden (Recht E einer Ansicht, wie beim Export); fehlt es bei einer, wird nichts verschickt (403). Danach gibt es eine Post (Kanal E-Mail, ausgehend, erledigt), die auf alle Mappen verweist, und in jeder Mappe einen Eintrag in der Historie.",
        "operationId": "postMappenEmail",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmailMehrere"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailMehrereVersendet"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/mappen/{id}/email": {
      "post": {
        "tags": [
          "Ablage"
        ],
        "summary": "Mappe per E-Mail versenden",
        "description": "Absender ist die Adresse von Ablago, „Antworten an“ der Benutzer des Schlüssels. Anhänge sind Dokumente der Mappe (zusammen höchstens 50 MB). Danach gibt es eine Post-Mappe (Kanal E-Mail, ausgehend, erledigt), die dieser Mappe zugeordnet ist, und einen Protokolleintrag. 409, wenn der Versand nicht eingerichtet ist; 502, wenn der Mailserver ablehnt.",
        "operationId": "postMappenMitidEmail",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id der Mappe (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmailEingabe"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailVersendet"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/post": {
      "post": {
        "tags": [
          "Ablage"
        ],
        "summary": "Post anlegen",
        "description": "Neue Post (Systemtyp Post, #192): Stand „Neu“, Richtung eingehend, Kanal „API“ (mit Schlüssel) bzw. „Hochgeladen“; Datum heute, wenn nicht angegeben. Dokumente danach mit POST /mappen/{id}/dokumente ins Register „dokumente“ hochladen. 403 ohne das Recht, Post anzulegen.",
        "operationId": "postPost",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PostEingabe"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Mappe"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/post/{id}/zuordnen": {
      "post": {
        "tags": [
          "Ablage"
        ],
        "summary": "Post einer Mappe zuordnen",
        "description": "Die Post verweist danach auf die Mappe („Zugeordnet zu“) und hat Stand „Zugeordnet“. Die gewählten Dokumente (Standard: alle der Post) wandern in ein Dokumentenregister der Zielmappe; mit kopieren=true bleiben sie zusätzlich in der Post (gleiche Datei, kein zweiter Speicherplatz). Mehrmals möglich. Braucht Bearbeiten an Post und Zielmappe.",
        "operationId": "postPostMitidZuordnen",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id der Post (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Zuordnen"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zugeordnet"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/typen/{id}/vorschlaege": {
      "post": {
        "tags": [
          "Ablage"
        ],
        "summary": "Vorschläge für Mappentyp aus Dokument",
        "description": "Aus Dokument ausfüllen (#391; Erkennung eingebaut ohne KI oder – #511, in der Werkbank bzw. am Mappentyp gewählt – ein Paket mit dms:erkennen, dessen Antwort genauso geprüft wird; engine sagt, womit): Vorschläge für die Felder des Mappentyps aus text und/oder den Volltexten der Dokumente dokumente (Ids, Lesen nötig; ohne Volltext 409). Mit mappe (Id einer Mappe dieses Typs) braucht es Bearbeiten, sonst das Recht, Mappen des Typs anzulegen. Gefüllt werden die Felder, die „für die Erkennung“ markiert sind (hat der Typ keine, alle mit erkennbarer Art); Passwortfelder und feste Felder nie. Jeder Wert ist gegen die Feldart geprüft: Datum JJJJ-MM-TT, Betrag {betrag, waehrung}, Auswahl nur aus der Liste, Verweis als Mappen-Id einer lesbaren Mappe. Nichts wird gespeichert.",
        "operationId": "postTypenMitidVorschlaege",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Mappentyps (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VorschlaegeEingabe"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TypVorschlaege"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/typen/{id}/vorschlaege/datei": {
      "post": {
        "tags": [
          "Ablage"
        ],
        "summary": "Vorschläge aus einer Datei (Foto, PDF, vCard)",
        "description": "Wie POST /typen/{id}/vorschlaege, der Text kommt aus der Datei im Körper (roh, höchstens 30 MB): Fotos und PDFs über die Texterkennung (sofort, höchstens 5 Seiten), vCards (.vcf) direkt. Die Datei wird nicht gespeichert; die Antwort enthält zusätzlich text (der gelesene Text, z. B. um Vorder- und Rückseite einer Visitenkarte zusammen an POST /typen/{id}/vorschlaege zu geben). 415 bei anderen Dateiarten, 503 ohne Texterkennung.",
        "operationId": "postTypenMitidVorschlaegeDatei",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Mappentyps (UUID)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "name",
            "in": "query",
            "required": false,
            "description": "Dateiname (z. B. karte.jpg, kontakt.vcf)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "typ",
            "in": "query",
            "required": false,
            "description": "MIME-Typ",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "mappe",
            "in": "query",
            "required": false,
            "description": "Id der Mappe, die gefüllt wird (sonst eine neue)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/octet-stream": {
              "schema": {
                "type": "string",
                "format": "binary"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TypVorschlaege"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/typen/{id}/erkennungsschema": {
      "get": {
        "tags": [
          "Ablage"
        ],
        "summary": "Feldbeschreibung für die Erkennung (JSON Schema)",
        "description": "Die Felder des Mappentyps als JSON Schema 2020-12 (#391): je Feld ein Objekt { wert, sicherheit, fundstelle } mit dem Schema des Werts nach Feldart, Bezeichnung (title), Hilfetext und Erkennungshinweis (description) sowie x-dms-feldtyp, x-dms-erkennung (Art) und x-dms-markiert. Ohne Passwortfelder und feste Felder. So sieht auch die Antwort einer Engine aus Paketen aus (#511).",
        "operationId": "getTypenMitidErkennungsschema",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Mappentyps (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JsonSchema"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/post/{id}/erkennung": {
      "get": {
        "tags": [
          "Ablage"
        ],
        "summary": "Vorschläge beim Zuordnen",
        "description": "Erkennung (#336), ohne KI: Absender (Mappen, deren für die Erkennung markierte Felder wie Kundennummer, IBAN, E-Mail oder Internetseite im Text stehen – mit Begründung), Datum, Gesamtbetrag und Nummern aus dem Text sowie Vorschläge für die Zielmappe (direkte Treffer, Mappen, die auf den Absender verweisen, frühere Post dieses Absenders). Gerechnet einmal nach dem Volltext; nur Mappen, die der Benutzer des Schlüssels lesen darf. neuerAbsender: Vorschlag „neue Organisation anlegen“, wenn kein Absender passt und der Briefkopf sicher erkennbar ist.",
        "operationId": "getPostMitidErkennung",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id der Post (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Erkennung"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Ablage"
        ],
        "summary": "Erkennung neu rechnen",
        "description": "Rechnet die Vorschläge beim Zuordnen (#336) jetzt neu, z. B. nachdem eine Organisation angelegt wurde. Braucht Lesen.",
        "operationId": "postPostMitidErkennung",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id der Post (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Erkennung"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/fotostapel": {
      "post": {
        "tags": [
          "Ablage"
        ],
        "summary": "Foto für eine Post ablegen",
        "description": "Post fotografieren (#490): ein Foto (JPEG oder PNG, roh im Körper, höchstens 100 MB) für später; liefert seine Kennung. Erst POST /post/fotos bzw. POST /mappen/{id}/fotos macht daraus Seiten eines PDFs. Nicht verwendete Fotos verfallen nach zwei Stunden.",
        "operationId": "postFotostapel",
        "requestBody": {
          "required": true,
          "content": {
            "application/octet-stream": {
              "schema": {
                "type": "string",
                "format": "binary"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FotoAbgelegt"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/post/fotos": {
      "post": {
        "tags": [
          "Ablage"
        ],
        "summary": "Post aus Fotos anlegen",
        "description": "Post fotografieren (#490): Aus den Fotos des Stapels (in dieser Reihenfolge) wird ein PDF – je Foto eine Seite, Lage laut EXIF – und daraus eine neue Post wie mit POST /post (Betreff ohne Angabe „Post vom TT.MM.JJJJ, hh:mm“). Die Fotos sind danach aus dem Stapel. 410, wenn ein Foto verfallen ist.",
        "operationId": "postPostFotos",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PostFotos"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostAusFotos"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/mappen/{id}/fotos": {
      "post": {
        "tags": [
          "Ablage"
        ],
        "summary": "Fotos als Seiten anhängen",
        "description": "Seite hinzufügen (#490): Fotos des Stapels als Seiten ans Ende des PDFs dokument (neue Version; ohne Versionierung ersetzt das Ergebnis das bisherige, das in den Papierkorb kommt). Ohne dokument entsteht ein neues PDF „Fotos vom ….pdf“ im ersten (bzw. angegebenen) Dokumentenregister. Braucht Bearbeiten.",
        "operationId": "postMappenMitidFotos",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id der Mappe (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FotosAnhaengen"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FotosAngehaengt"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/post/{id}/zusammenlegen": {
      "post": {
        "tags": [
          "Ablage"
        ],
        "summary": "Zwei Posts zusammenlegen",
        "description": "Zusammenlegen (#490): Die Seiten der Post quelle (PDFs und Fotos in ihrer Reihenfolge) kommen ans Ende des ersten PDFs dieser Post (hat sie keins, entsteht eins); quelle kommt in den Papierkorb. Andere Dateiarten: 422. Braucht Bearbeiten an dieser Post und Löschen an quelle.",
        "operationId": "postPostMitidZusammenlegen",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id der Post, die bleibt (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Zusammenlegen"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostAusFotos"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/mappen/{id}/dokumente": {
      "post": {
        "tags": [
          "Dokumente"
        ],
        "summary": "Dokument hochladen",
        "description": "Rohe Bytes der Datei als Body (Content-Type: application/octet-stream), höchstens 100 MB. Gleicher Inhalt wird nur einmal gespeichert; gleicherInhalt nennt die anderen Mappen mit dieser Datei, soweit der Schlüssel sie lesen darf (#333).",
        "operationId": "postMappenMitidDokumente",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id der Mappe (UUID)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "register",
            "in": "query",
            "required": true,
            "description": "Kennung eines Dokumentenregisters des Mappentyps",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "name",
            "in": "query",
            "required": true,
            "description": "Dateiname",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "typ",
            "in": "query",
            "required": false,
            "description": "MIME-Typ (nur Angabe; angezeigt werden PDF und Bilder anhand des Inhalts)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "gleicherName",
            "in": "query",
            "required": false,
            "description": "Gibt es im Register schon ein Dokument mit diesem Namen: zaehler (Standard, „Rechnung (2).pdf“), version (neue Version davon; nur mit Versionierung) oder ersetzen (das vorhandene endgültig löschen; nur ohne Versionierung)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/octet-stream": {
              "schema": {
                "type": "string",
                "format": "binary"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Hochgeladen"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/dokumente/{id}/ersetzen": {
      "post": {
        "tags": [
          "Dokumente"
        ],
        "summary": "Neue Version eines Dokuments",
        "description": "Versionierung (#194): Rohe Bytes als Body; das Dokument behält seine Id, die bisherige Datei bleibt als ältere Version. Name und Dateityp dürfen sich ändern. 409, wenn die Versionierung des Registers aus ist.",
        "operationId": "postDokumenteMitidErsetzen",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Dokuments (UUID)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "name",
            "in": "query",
            "required": false,
            "description": "Neuer Dateiname; ohne Angabe bleibt der bisherige",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "typ",
            "in": "query",
            "required": false,
            "description": "MIME-Typ (nur Angabe)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/octet-stream": {
              "schema": {
                "type": "string",
                "format": "binary"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Dokument"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/dokumente/{id}/versionen": {
      "get": {
        "tags": [
          "Dokumente"
        ],
        "summary": "Versionen eines Dokuments",
        "operationId": "getDokumenteMitidVersionen",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Dokuments (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Versionen"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/dokumente/{id}/versionen/{nummer}/inhalt": {
      "get": {
        "tags": [
          "Dokumente"
        ],
        "summary": "Ältere Version herunterladen",
        "description": "Wie der Inhalt des Dokuments, mit denselben Stempel-Parametern und verkleinern. Stempel (#394): Mit Stempel-Parametern entsteht eine gestempelte Kopie als PDF (Bilder werden zum PDF); das gespeicherte Original bleibt unverändert, die Historie der Mappe vermerkt die Weitergabe, die Antwort trägt den Kopf X-DMS-Stempel: 1. Verlangt der Mappentyp einen Stempel (Pflicht), wird ohne Parameter seine Vorlage verwendet. 422, wenn sich die Datei nicht stempeln lässt (nur PDF, JPEG, PNG; nicht verschlüsselt) oder der Empfänger fehlt. Verkleinert (#393): Mit verkleinern=bildschirm|standard|druck (oder true = standard) kommt eine verkleinerte Kopie eines PDFs (Bilder auf ca. 100, 150 oder 300 dpi); das gespeicherte Dokument bleibt unverändert, die Antwort trägt den Kopf X-DMS-Verkleinert: <Bytes vorher>/<Bytes nachher>. Bringt es weniger als 10 %, kommt das Original (ohne diesen Kopf). Erst wird verkleinert, dann gestempelt. 422 bei anderen Dateitypen ohne Stempel.",
        "operationId": "getDokumenteMitidVersionenMitnummerInhalt",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Dokuments (UUID)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "nummer",
            "in": "path",
            "required": true,
            "description": "Nummer der Version",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "herunterladen",
            "in": "query",
            "required": false,
            "description": "Beliebiger Wert: als Datei herunterladen. Über einen API-Schlüssel ist jeder Abruf ein Herunterladen (Weitergeben); Pakete bekommen immer das Original.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "vorlage",
            "in": "query",
            "required": false,
            "description": "Id einer Stempel-Vorlage (GET /stempel/vorlagen); eigene Angaben unten gehen vor",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "stempel",
            "in": "query",
            "required": false,
            "description": "Text des Stempels (höchstens 200 Zeichen) mit Platzhaltern {datum}, {empfänger}, {benutzer}, {mappe}",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "empfaenger",
            "in": "query",
            "required": false,
            "description": "Wert für {empfänger}; Pflicht, wenn der Text ihn nutzt",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "lage",
            "in": "query",
            "required": false,
            "description": "diagonal (Wasserzeichen, Standard), kopf, fuss oder ecke",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deckkraft",
            "in": "query",
            "required": false,
            "description": "0.1 bis 1, Standard 0.25",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "seiten",
            "in": "query",
            "required": false,
            "description": "alle (Standard) oder erste",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "seitenzahlen",
            "in": "query",
            "required": false,
            "description": "true = Fußzeile „Seite x von y“ auf jeder Seite (auch ohne Stempeltext)",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "archivnummer",
            "in": "query",
            "required": false,
            "description": "true = Archivnummer des Dokuments in der Fußzeile",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "verkleinern",
            "in": "query",
            "required": false,
            "description": "bildschirm (≈ 100 dpi), standard (≈ 150 dpi) oder druck (≈ 300 dpi): verkleinerte Kopie eines PDFs (#393)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/dokumente/{id}/versionen/{nummer}/zurueckholen": {
      "post": {
        "tags": [
          "Dokumente"
        ],
        "summary": "Ältere Version zurückholen",
        "description": "Übernimmt die Version als neue, höchste Version; es geht nichts verloren.",
        "operationId": "postDokumenteMitidVersionenMitnummerZurueckholen",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Dokuments (UUID)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "nummer",
            "in": "path",
            "required": true,
            "description": "Nummer der Version",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Dokument"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/dokumente/gleiche": {
      "post": {
        "tags": [
          "Dokumente"
        ],
        "summary": "Gibt es diese Dateien schon?",
        "description": "Doppelte Dateien (#333): SHA-256-Prüfwerte (hex, höchstens 100) → Fundstellen je Prüfwert, nur in Mappen, die der Schlüssel lesen darf. Prüfwerte ohne lesbare Fundstelle fehlen in der Antwort. ohneMappe lässt eine Mappe aus (z. B. die, in die man gerade hochlädt).",
        "operationId": "postDokumenteGleiche",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Gleiche"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fundstellen"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/dokumente/{id}/inhalt": {
      "get": {
        "tags": [
          "Dokumente"
        ],
        "summary": "Inhalt eines Dokuments herunterladen",
        "description": "Ohne Parameter die gespeicherte Datei. Stempel (#394): Mit Stempel-Parametern entsteht eine gestempelte Kopie als PDF (Bilder werden zum PDF); das gespeicherte Original bleibt unverändert, die Historie der Mappe vermerkt die Weitergabe, die Antwort trägt den Kopf X-DMS-Stempel: 1. Verlangt der Mappentyp einen Stempel (Pflicht), wird ohne Parameter seine Vorlage verwendet. 422, wenn sich die Datei nicht stempeln lässt (nur PDF, JPEG, PNG; nicht verschlüsselt) oder der Empfänger fehlt. Verkleinert (#393): Mit verkleinern=bildschirm|standard|druck (oder true = standard) kommt eine verkleinerte Kopie eines PDFs (Bilder auf ca. 100, 150 oder 300 dpi); das gespeicherte Dokument bleibt unverändert, die Antwort trägt den Kopf X-DMS-Verkleinert: <Bytes vorher>/<Bytes nachher>. Bringt es weniger als 10 %, kommt das Original (ohne diesen Kopf). Erst wird verkleinert, dann gestempelt. 422 bei anderen Dateitypen ohne Stempel. Beispiel: ?vorlage=kopie&empfaenger=Hausverwaltung%20M%C3%BCller oder ?stempel=ENTWURF&lage=diagonal&deckkraft=0.2&seitenzahlen=true oder ?verkleinern=standard.",
        "operationId": "getDokumenteMitidInhalt",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Dokuments (UUID)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "herunterladen",
            "in": "query",
            "required": false,
            "description": "Beliebiger Wert: als Datei herunterladen. Über einen API-Schlüssel ist jeder Abruf ein Herunterladen (Weitergeben); Pakete bekommen immer das Original.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "vorlage",
            "in": "query",
            "required": false,
            "description": "Id einer Stempel-Vorlage (GET /stempel/vorlagen); eigene Angaben unten gehen vor",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "stempel",
            "in": "query",
            "required": false,
            "description": "Text des Stempels (höchstens 200 Zeichen) mit Platzhaltern {datum}, {empfänger}, {benutzer}, {mappe}",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "empfaenger",
            "in": "query",
            "required": false,
            "description": "Wert für {empfänger}; Pflicht, wenn der Text ihn nutzt",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "lage",
            "in": "query",
            "required": false,
            "description": "diagonal (Wasserzeichen, Standard), kopf, fuss oder ecke",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deckkraft",
            "in": "query",
            "required": false,
            "description": "0.1 bis 1, Standard 0.25",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "seiten",
            "in": "query",
            "required": false,
            "description": "alle (Standard) oder erste",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "seitenzahlen",
            "in": "query",
            "required": false,
            "description": "true = Fußzeile „Seite x von y“ auf jeder Seite (auch ohne Stempeltext)",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "archivnummer",
            "in": "query",
            "required": false,
            "description": "true = Archivnummer des Dokuments in der Fußzeile",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "verkleinern",
            "in": "query",
            "required": false,
            "description": "bildschirm (≈ 100 dpi), standard (≈ 150 dpi) oder druck (≈ 300 dpi): verkleinerte Kopie eines PDFs (#393)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/stempel/vorlagen": {
      "get": {
        "tags": [
          "Dokumente"
        ],
        "summary": "Stempel-Vorlagen",
        "description": "Vorlagen für Stempel beim Weitergeben (#394): id, name, text mit Platzhaltern, lage, deckkraft, seiten, seitenzahlen, archivnummer. Ob ein Mappentyp einen Stempel vorschlägt oder verlangt, steht an GET /typen unter stempel ({ modus: vorschlag|pflicht, vorlage }).",
        "operationId": "getStempelVorlagen",
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StempelVorlagen"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/dokumente/{id}/volltext": {
      "get": {
        "tags": [
          "Dokumente"
        ],
        "summary": "Volltext eines Dokuments",
        "description": "Textebene des PDFs oder Ergebnis der Texterkennung; text ist null, solange es keinen gibt (siehe ocr.stand).",
        "operationId": "getDokumenteMitidVolltext",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Dokuments (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Volltext"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Dokumente"
        ],
        "summary": "Volltext schreiben",
        "description": "Für Pakete mit eigener Texterkennung (#338) oder mit dem Recht „dms:volltext“ (#614): ersetzt den Volltext. Dienstkonten brauchen das Recht „Dokumente schreiben“ aus dem Manifest – oder dms:volltext mit „Dokumente lesen“, dann nur für Dokumente der Dateitypen aus code.volltext (sonst 403); Benutzer das Recht Bearbeiten an der Mappe. Höchstens 5 Millionen Zeichen (413), der Körper darf dafür bis 32 MB groß sein. Die Herkunft steht in ocr.info und in der Historie; die eingebaute Texterkennung überschreibt den Text danach nicht mehr von selbst. Mit sprache (#400) gibt das Paket die Sprache des Texts an, sonst erkennt Ablago sie. Mehrere Sprachen (#579): Seiten im Text durch Seitenvorschub (\\f) trennen und in seitensprachen je Seite ihre Sprache(n) nennen (Mischseite: zwei, null: Ablago erkennt sie) – der Suchindex nimmt dann je Seite die Wortstämme ihrer Sprache, das Dokument bekommt Hauptsprache und weitere Sprachen. Gespeichert wird der Text mit Leerzeilen zwischen den Seiten.",
        "operationId": "putDokumenteMitidVolltext",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Dokuments (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VolltextSchreiben"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Volltext"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/dokumente/{id}/sprache": {
      "put": {
        "tags": [
          "Dokumente"
        ],
        "summary": "Sprache des Volltexts setzen",
        "description": "Sprache des Dokuments (#400) als Kennung wie bei Tesseract (deu, eng, fra, spa, ita, nld, tur, pol, por, rus, ukr, ara) oder null (keine Angabe = Deutsch). Die Volltextsuche nimmt die Wortstämme dieser Sprache; der Suchindex des Dokuments entsteht dabei neu. Mit weitere (#579) auch die weiteren Sprachen fürs ganze Dokument (der Suchindex nimmt den Text dann zusätzlich mit deren Wortstämmen; Seitensprachen entfallen); ohne weitere bleiben sie. Rechte wie beim Volltext schreiben; steht in der Historie.",
        "operationId": "putDokumenteMitidSprache",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Dokuments (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SpracheSetzen"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DokumentSprache"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/dokumente/{id}/teilen-hinweis": {
      "delete": {
        "tags": [
          "Dokumente"
        ],
        "summary": "Hinweis „Post teilen?“ ausblenden",
        "description": "Der Hinweis „Ab Seite N beginnt vermutlich ein eigenes Schreiben – Post teilen?“ (#579, teilenAb am Dokument) erscheint nicht mehr – für alle, bis das Dokument einen neuen Volltext bekommt. Geteilt wird nie von selbst. Braucht Bearbeiten an der Mappe.",
        "operationId": "deleteDokumenteMitidTeilen-hinweis",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Dokuments (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeilenHinweis"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "409": {
            "description": "Kann (noch) nicht gelöscht werden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/dokumente/{id}/vektor": {
      "put": {
        "tags": [
          "Dokumente"
        ],
        "summary": "Vektor eines Dokuments setzen",
        "description": "Für Pakete mit dem Recht „dms:vektoren“ (#442), z. B. „KI lokal – Ähnlichkeit“: legt je Dokument und Modell einen Vektor ab (ersetzt einen vorhandenen). Der Kern normiert ihn auf Länge 1 und vergleicht mit dem Kosinus. Alle Vektoren eines Modells haben dieselbe Länge (8 bis 4096). Ein neues Modell desselben Pakets macht dessen alte Vektoren ungültig (sie werden entfernt und im Hintergrund neu berechnet). Das Paket muss das Dokument lesen dürfen; andere Aufrufer bekommen 403.",
        "operationId": "putDokumenteMitidVektor",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Dokuments (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VektorSetzen"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VektorGesetzt"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Dokumente"
        ],
        "summary": "Vektor eines Dokuments löschen",
        "description": "Für Pakete mit dem Recht „dms:vektoren“ (#442). Mit dem Dokument verschwinden seine Vektoren ohnehin.",
        "operationId": "deleteDokumenteMitidVektor",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Dokuments (UUID)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "modell",
            "in": "query",
            "required": true,
            "description": "Kennung des Modells",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VektorGeloescht"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "409": {
            "description": "Kann (noch) nicht gelöscht werden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/dokumente/{id}/aehnliche": {
      "get": {
        "tags": [
          "Dokumente"
        ],
        "summary": "Ähnliche Dokumente zu einem Dokument",
        "description": "Die ähnlichsten Dokumente (Kosinus der Vektoren, #442) – nur in Mappen, die der Aufrufer lesen darf, absteigend. 404, wenn das Dokument keinen Vektor dieses Modells hat. Leere Liste ohne Paket mit „dms:vektoren“.",
        "operationId": "getDokumenteMitidAehnliche",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Dokuments (UUID)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "modell",
            "in": "query",
            "required": false,
            "description": "Kennung des Modells; ohne Angabe das aktuelle Modell des Pakets",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "anzahl",
            "in": "query",
            "required": false,
            "description": "1–100, Standard 10",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "schwelle",
            "in": "query",
            "required": false,
            "description": "Zahl: nur ab dieser Ähnlichkeit (-1 bis 1)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Aehnliche"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/vektoren/aehnliche": {
      "post": {
        "tags": [
          "Dokumente"
        ],
        "summary": "Ähnliche Dokumente zu einem Vektor",
        "description": "Wie GET /dokumente/{id}/aehnliche, aber zu einem mitgeschickten Vektor (z. B. dem eines Suchbegriffs, #442). Ändert nichts.",
        "operationId": "postVektorenAehnliche",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AehnlicheAnfrage"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Aehnliche"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/dokumente/{id}/fassung": {
      "put": {
        "tags": [
          "Dokumente"
        ],
        "summary": "Umgewandelte Fassung setzen (Pakete)",
        "description": "Für Pakete mit dem Recht „dms:umwandeln“ (#577), z. B. „Bildformate“: die Fassung einer Datei, die Ablago nicht selbst liest (Ereignis datei.umwandeln), als PDF, PNG oder JPEG – roh im Körper (application/octet-stream), erkannt am Inhalt, höchstens 50 MB, Bilder höchstens 36 Millionen Bildpunkte, PDFs höchstens 1000 Seiten. Daraus entstehen Vorschaubild und Volltext (Textebene bzw. Paket Texterkennung). Die Fassung gehört zur Datei (Prüfwert), nicht zum Dokument, und ersetzt eine vorhandene. 403 ohne das Recht oder wenn das Paket für den Dateityp nicht zuständig ist (code.umwandeln), 409, wenn sha256 nicht mehr die Datei des Dokuments ist (neue Version), 413 zu groß, 415 kein PDF, PNG oder JPEG, 422 nicht lesbar.",
        "operationId": "putDokumenteMitidFassung",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Dokuments (UUID)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sha256",
            "in": "query",
            "required": true,
            "description": "Prüfwert der Datei aus dem Ereignis datei.umwandeln",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/octet-stream": {
              "schema": {
                "type": "string",
                "format": "binary"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FassungGesetzt"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "Dokumente"
        ],
        "summary": "Umgewandelte Fassung herunterladen",
        "description": "Die Fassung (PDF, PNG oder JPEG), die ein Paket aus einer Datei gemacht hat, die Ablago nicht selbst liest (#577); Dateiname „… (umgewandelt)“, der Kopf x-dms-fassung-paket nennt Paket und Version. Das Dokument selbst bleibt das Original. 404, wenn es keine gibt. Braucht Lesen.",
        "operationId": "getDokumenteMitidFassung",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Dokuments (UUID)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "herunterladen",
            "in": "query",
            "required": false,
            "description": "Herunterladen statt anzeigen",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/dokumente/{id}/vorschaubild": {
      "put": {
        "tags": [
          "Dokumente"
        ],
        "summary": "Vorschaubild setzen (Pakete)",
        "description": "Für Pakete mit dem Recht „dms:umwandeln“ (#577): ein eigenes Vorschaubild der Datei (JPEG oder PNG, roh im Körper, höchstens 5 MB). Ablago verkleinert es auf seine Größe (längste Seite 104 px, JPEG) und ersetzt ein vorhandenes – auch eins aus der Fassung; schicke es deshalb nach der Fassung. Fehler wie bei der Fassung.",
        "operationId": "putDokumenteMitidVorschaubild",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Dokuments (UUID)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sha256",
            "in": "query",
            "required": true,
            "description": "Prüfwert der Datei aus dem Ereignis datei.umwandeln",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/octet-stream": {
              "schema": {
                "type": "string",
                "format": "binary"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VorschaubildGesetzt"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/dokumente/{id}/archivfassung": {
      "put": {
        "tags": [
          "Dokumente"
        ],
        "summary": "Archivfassung (PDF/A) ablegen (Pakete)",
        "description": "Für Pakete mit dem Recht „dms:archivfassung“ (#631), z. B. „PDF/A“: das durchsuchbare PDF/A zu einem Dokument (Ereignis datei.archivfassung) – roh im Körper (application/octet-stream), höchstens 100 MB und 1000 Seiten. Der Kern nimmt nur ein PDF mit PDF/A-Kennung in den XMP-Metadaten (pdfaid:part 1–4 und pdfaid:conformance, Metadaten ungefiltert) und ohne JavaScript, Aktionen oder Verweise auf externe Inhalte; sonst 422 mit Grund, der auch am Dokument steht. Die Archivfassung gehört zur Datei (Prüfwert) und ersetzt eine vorhandene; ein Eintrag in der Historie. 403 ohne das Recht oder wenn das Paket für den Dateityp nicht zuständig ist (code.archivfassung), 409, wenn sha256 nicht mehr die Datei des Dokuments ist, 413 zu groß, 415 kein PDF.",
        "operationId": "putDokumenteMitidArchivfassung",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Dokuments (UUID)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sha256",
            "in": "query",
            "required": true,
            "description": "Prüfwert der Datei aus dem Ereignis datei.archivfassung",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/octet-stream": {
              "schema": {
                "type": "string",
                "format": "binary"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ArchivfassungGesetzt"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "Dokumente"
        ],
        "summary": "Archivfassung (PDF/A) herunterladen",
        "description": "Die Archivfassung zur aktuellen Datei des Dokuments (#631); Dateiname „… (PDF-A).pdf“, der Kopf x-dms-archivfassung nennt Kennung, Paket und Version („original“: das Original ist schon PDF/A). Nach einer Änderung am Original (neue Version, Seiten, Schwärzen) gibt es sie erst wieder, wenn das Paket neu erzeugt hat. 404 ohne. Braucht Lesen.",
        "operationId": "getDokumenteMitidArchivfassung",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Dokuments (UUID)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "herunterladen",
            "in": "query",
            "required": false,
            "description": "Herunterladen statt anzeigen",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/dokumente/{id}/wortpositionen": {
      "get": {
        "tags": [
          "Dokumente"
        ],
        "summary": "Wortpositionen (für die Archivfassung)",
        "description": "Je Seite der Quelle (Original bzw. bei TIFF und Co. die Lesefassung) die Wörter mit Lage [Text, x, y, b, h], relativ zur angezeigten Seite (0…1, Ursprung oben links) – aus der Textebene des PDFs, sonst aus der Texterkennung (die sie mit PUT …/volltext als woerter schickt), sonst keine (quelle „keine“). breite/hoehe: Seite in pt (PDF) bzw. Bildpunkten (Bild). vollstaendig: jede Seite hat Wörter. Braucht Lesen (#631).",
        "operationId": "getDokumenteMitidWortpositionen",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Dokuments (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Wortpositionen"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/dokumente/{id}/seiten/{nr}/scan": {
      "get": {
        "tags": [
          "Dokumente"
        ],
        "summary": "Seite als Graustufenbild (PGM)",
        "description": "Für eine Texterkennung im Paket (#338): die Seite eines PDFs als PGM (8 Bit, „P5 Breite Höhe 255“, danach die Bildpunkte). Seit 0.133.0 (#458) auch JPEG und PNG: Seite 1 in Originalgröße (dpi zählt dort nicht). Seit 0.137.0 (#577) für andere Dateitypen die Seiten ihrer umgewandelten Fassung. 404, wenn es die Seite nicht gibt; 422 für andere Dateitypen ohne Fassung oder zu große Seiten.",
        "operationId": "getDokumenteMitidSeitenMitnrScan",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Dokuments (UUID)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "nr",
            "in": "path",
            "required": true,
            "description": "Seitennummer ab 1",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "dpi",
            "in": "query",
            "required": false,
            "description": "Auflösung 72–400, ohne Angabe 300",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/dokumente/{id}/texterkennung": {
      "post": {
        "tags": [
          "Dokumente"
        ],
        "summary": "Texterkennung (erneut) anstoßen",
        "description": "Stellt das Dokument in die Warteschlange der Texterkennung, z. B. nach einem Fehler.",
        "operationId": "postDokumenteMitidTexterkennung",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Dokuments (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Dokument"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/dokumente/{id}/seiten": {
      "get": {
        "tags": [
          "Dokumente"
        ],
        "summary": "Seiten eines PDFs",
        "description": "PDF bearbeiten (#335): Seitenzahl und Drehung je Seite (Grad). 422 bei anderen Dateitypen.",
        "operationId": "getDokumenteMitidSeiten",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Dokuments (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Seiten"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Dokumente"
        ],
        "summary": "PDF bearbeiten: drehen, Seiten löschen, umsortieren, teilen",
        "description": "PDF bearbeiten (#335). seiten = die Seiten des Ergebnisses in der gewünschten Reihenfolge (nr im Original ab 1, drehung zusätzlich im Uhrzeigersinn: 0/90/180/270); fehlende Seiten fallen weg. teile = Positionen in seiten (ab 0), an denen ein neuer Teil beginnt. Ohne teile: neue Version des Dokuments; ist die Versionierung des Registers aus, ersetzt das Ergebnis das Dokument nur mit bestaetigt=true (sonst 409 mit rueckfrage), das bisherige kommt in den Papierkorb. Mit teile in einer Mappe: Teil 1 wird die neue Version, die weiteren Teile werden eigene Dokumente „Name (Teil n).pdf“ im selben Register. Mit teile bei Post („Post teilen nach Seitenbereichen“): je Teil eine neue Post (Stand Neu, Betreff „… (Teil n)“); die Ausgangspost behält ihr Dokument, hat Stand Erledigt und verweist auf die neuen. Texterkennung läuft für die Ergebnisse neu.",
        "operationId": "postDokumenteMitidSeiten",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Dokuments (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SeitenBearbeiten"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SeitenErgebnis"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/dokumente/{id}/seiten/{nr}/bild": {
      "get": {
        "tags": [
          "Dokumente"
        ],
        "summary": "Bild einer Seite",
        "description": "Kleines JPEG (längste Seite 260 px) für eine Seitenansicht; für die ersten 400 Seiten.",
        "operationId": "getDokumenteMitidSeitenMitnrBild",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Dokuments (UUID)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "nr",
            "in": "path",
            "required": true,
            "description": "Seitennummer ab 1",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/dokumente/zusammenfuegen": {
      "post": {
        "tags": [
          "Dokumente"
        ],
        "summary": "PDFs zusammenfügen",
        "description": "PDF bearbeiten (#335): mehrere PDF-Dokumente (auch aus mehreren Mappen oder Posts, Lesen genügt) in dieser Reihenfolge zu einem neuen Dokument in ziel (Standard: die Mappe des ersten; braucht Bearbeiten). originaleEntfernen=true legt die Ausgangsdokumente in den Papierkorb (braucht Bearbeiten; ohne Papierkorb nur mit bestaetigt=true); eine Post, die dadurch kein Dokument mehr hat, ist danach erledigt und verweist auf das Ziel. Im Archivmodus bleiben die Ausgangsdokumente (409).",
        "operationId": "postDokumenteZusammenfuegen",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Zusammenfuegen"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Zusammengefuegt"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/dokumente/{id}/schwaerzen": {
      "get": {
        "tags": [
          "Dokumente"
        ],
        "summary": "Schwärzen: Seiten und Wörter",
        "description": "Schwärzen (#392): je Seite die Größe (pt, wie angezeigt) und die Wörter mit Lage als [Text, x, y, b, h] relativ zur Seite (0 bis 1, Ursprung oben links) – aus der Textebene, für Seiten ohne Text per Texterkennung (quelle). Damit lassen sich Suchbegriffe und Muster selbst verorten. Dazu, ob das Register versioniert ist, der Name der Kopie und die Muster. Nur PDF, JPEG und PNG (sonst 422). Braucht Lesen.",
        "operationId": "getDokumenteMitidSchwaerzen",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Dokuments (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SchwaerzenAnalyse"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Dokumente"
        ],
        "summary": "Dokument schwärzen",
        "description": "Schwärzen (#392): Bereiche (Seite ab 1, x, y, b, h relativ zur Seite), Suchbegriffe (überall, ohne Groß-/Kleinschreibung, auch über Wortgrenzen; getroffen wird das ganze Wort) und/oder Muster (alle Vorschläge dieser Arten) werden endgültig entfernt: Alle Seiten werden neu gerendert (150 dpi), die Bereiche schwarz gefüllt, die Textebene ohne die Wörter darin neu aufgebaut; Metadaten, Anmerkungen, Formulare, eingebettete Dateien und JavaScript entfallen. Bilder bleiben Bilder desselben Typs (ohne EXIF). Ergebnis ist ein neues Dokument „… (geschwärzt)“ im selben Register (ziel=kopie, Standard; Ereignis dokument.hochgeladen) oder eine neue Version (ziel=version, nur mit Versionierung; die ungeschwärzte bleibt als ältere Version). Das Original bleibt unverändert; nicht rückgängig zu machen. Historie „geschwärzte Fassung erstellt“ ohne Suchbegriffe und Inhalt. 422, wenn nichts zu schwärzen ist (kein Suchbegriff gefunden, keine Bereiche). Braucht Bearbeiten.",
        "operationId": "postDokumenteMitidSchwaerzen",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Dokuments (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Schwaerzen"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Geschwaerzt"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/dokumente/{id}/schwaerzen/seiten/{nr}": {
      "get": {
        "tags": [
          "Dokumente"
        ],
        "summary": "Schwärzen: Seitenbild",
        "description": "Schwärzen (#392): Seite als JPEG (längste Seite 1400 px) in derselben Lage wie die Koordinaten (Bilder nach EXIF-Ausrichtung gedreht). Braucht Lesen.",
        "operationId": "getDokumenteMitidSchwaerzenSeitenMitnr",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Dokuments (UUID)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "nr",
            "in": "path",
            "required": true,
            "description": "Seite ab 1",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/dokumente/{id}/verkleinern": {
      "get": {
        "tags": [
          "Dokumente"
        ],
        "summary": "PDF verkleinern: Schätzung",
        "description": "PDF verkleinern (#393): Größe, Seiten, Anzahl Bilder, höchste Bildauflösung (dpi) und je Stufe (bildschirm ≈ 100 dpi, standard ≈ 150 dpi, druck ≈ 300 dpi) die geschätzte Größe danach und ob es sich lohnt (mindestens 10 % kleiner). Dazu, ob das Register versioniert ist. 422 bei anderen Dateitypen oder verschlüsselten PDFs. Braucht Lesen.",
        "operationId": "getDokumenteMitidVerkleinern",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Dokuments (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VerkleinernSchaetzung"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Dokumente"
        ],
        "summary": "PDF verkleinern",
        "description": "PDF verkleinern (#393): Bilder werden auf die Auflösung der Stufe heruntergerechnet und als JPEG neu komprimiert, doppelte und unbenutzte Objekte entfernt; Textebene und Volltext bleiben (keine neue Texterkennung). Ergebnis ist eine neue Version (Herkunft „in Ablago bearbeitet“, kein Ereignis dokument.hochgeladen); ist die Versionierung des Registers aus, ersetzt es das Dokument nur mit bestaetigt=true (sonst 409 mit rueckfrage), das bisherige kommt in den Papierkorb. Bringt es weniger als 10 %, bleibt das Dokument unverändert: 200 mit unveraendert=true und meldung; sonst 201. Braucht Bearbeiten.",
        "operationId": "postDokumenteMitidVerkleinern",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Dokuments (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Verkleinern"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Verkleinert"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/dokumente/{id}/archivnummer": {
      "put": {
        "tags": [
          "Dokumente"
        ],
        "summary": "Archivnummer setzen",
        "description": "Archivnummer des Papieroriginals (#345), eindeutig je Haushalt (ohne Groß-/Kleinschreibung); ein vorangestelltes „DMS-ASN:“ aus dem Barcode wird entfernt, leer entfernt die Nummer. 409, wenn ein anderes Dokument sie schon hat. Braucht Bearbeiten an der Mappe.",
        "operationId": "putDokumenteMitidArchivnummer",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Dokuments (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Archivnummer"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Dokument"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/archivnummern/{nr}": {
      "get": {
        "tags": [
          "Dokumente"
        ],
        "summary": "Dokument zu einer Archivnummer",
        "description": "Sucht das Dokument mit dieser Archivnummer (#345, auch mit „DMS-ASN:“ davor); 404, wenn es keins gibt oder die Mappe nicht lesbar ist.",
        "operationId": "getArchivnummernMitnr",
        "parameters": [
          {
            "name": "nr",
            "in": "path",
            "required": true,
            "description": "Archivnummer, z. B. A-000123",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ArchivnummerTreffer"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/dokumente/{id}": {
      "delete": {
        "tags": [
          "Dokumente"
        ],
        "summary": "Dokument löschen",
        "description": "Ist der Papierkorb eingeschaltet, kommt das Dokument mit allen Versionen in den Papierkorb (#344); sonst ist es endgültig weg. Steht im Löschprotokoll (#470) mit Prüfsumme, ohne Dateinamen.",
        "operationId": "deleteDokumenteMitid",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Dokuments (UUID)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "grund",
            "in": "query",
            "required": false,
            "description": "Grund fürs Löschprotokoll (#470): frist, verlangen, nicht_noetig oder sonstiges",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "grundText",
            "in": "query",
            "required": false,
            "description": "Freier Text zum Grund, ohne Personenbezug (höchstens 200 Zeichen)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Erledigt"
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "409": {
            "description": "Kann (noch) nicht gelöscht werden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/typen/{id}": {
      "put": {
        "tags": [
          "Werkbank"
        ],
        "summary": "Mappentyp ändern (Administrator)",
        "description": "Titel und Passung aller Mappen des Typs werden neu berechnet.",
        "operationId": "putTypenMitid",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Mappentyps (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MappentypEingabe"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Mappentyp"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Nur für Administratoren; oder Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Werkbank"
        ],
        "summary": "Mappentyp löschen (Administrator)",
        "description": "Nur ohne Mappen und ohne Verweise anderer Typen.",
        "operationId": "deleteTypenMitid",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Mappentyps (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Erledigt"
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Nur für Administratoren; oder Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "409": {
            "description": "Kann (noch) nicht gelöscht werden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/benutzer": {
      "get": {
        "tags": [
          "Werkbank"
        ],
        "summary": "Alle Benutzer (Administrator)",
        "operationId": "getBenutzer",
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BenutzerListe"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Nur für Administratoren; oder Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Werkbank"
        ],
        "summary": "Benutzer anlegen und einladen (Administrator)",
        "operationId": "postBenutzer",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BenutzerEingabe"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LinkErgebnis"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Nur für Administratoren; oder Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/benutzer/{id}": {
      "put": {
        "tags": [
          "Werkbank"
        ],
        "summary": "Benutzer ändern (Administrator)",
        "operationId": "putBenutzerMitid",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Benutzers (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BenutzerAenderung"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Benutzer"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Nur für Administratoren; oder Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Werkbank"
        ],
        "summary": "Benutzer löschen (Administrator)",
        "description": "Nur solange die Einladung nie angenommen wurde; wer sich schon angemeldet hat, wird über PUT mit aktiv=false deaktiviert.",
        "operationId": "deleteBenutzerMitid",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Benutzers (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Erledigt"
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Nur für Administratoren; oder Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "409": {
            "description": "Kann (noch) nicht gelöscht werden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/werkbank/verkleinern": {
      "get": {
        "tags": [
          "Werkbank"
        ],
        "summary": "Große PDFs (Administrator)",
        "description": "PDF verkleinern (#393): PDF-Dokumente ab einer Größe, größte zuerst (höchstens 200), für die ersten 60 mit geschätzter Größe nach dem Verkleinern in der Stufe.",
        "operationId": "getWerkbankVerkleinern",
        "parameters": [
          {
            "name": "ab",
            "in": "query",
            "required": false,
            "description": "Ab dieser Größe in MB (Standard 2)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "stufe",
            "in": "query",
            "required": false,
            "description": "bildschirm, standard (Standard) oder druck",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GrossePdfs"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Nur für Administratoren; oder Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Werkbank"
        ],
        "summary": "Große PDFs verkleinern (Administrator)",
        "description": "Sammelaktion (#393) als Hintergrundauftrag (Stand: GET /api/werkbank/auftrag): jedes Dokument wie POST /dokumente/{id}/verkleinern. ohneOriginal=true behält die bisherige Version nicht (gibt den Platz sofort frei; nicht während einer Aufbewahrungsfrist). Register ohne Versionierung nur mit bestaetigt=true.",
        "operationId": "postWerkbankVerkleinern",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VerkleinernViele"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Auftrag"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Nur für Administratoren; oder Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/werkbank/datenschutz": {
      "get": {
        "tags": [
          "Werkbank"
        ],
        "summary": "Datenschutz: Einstellungen und bereitliegende Auskünfte (Administrator)",
        "description": "Auskunft nach Art. 15 DSGVO (#396): Verantwortlicher, Empfänger, Text zu den Rechten, je Mappentyp „betrifft eine Person“ und Zweck; dazu die erzeugten Auskünfte, die noch zum Herunterladen bereitliegen (höchstens 7 Tage, nach dem Herunterladen gelöscht).",
        "operationId": "getWerkbankDatenschutz",
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DatenschutzStand"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Nur für Administratoren; oder Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Werkbank"
        ],
        "summary": "Datenschutz: Einstellungen speichern (Administrator)",
        "operationId": "putWerkbankDatenschutz",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Datenschutz"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Datenschutz"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Nur für Administratoren; oder Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/werkbank/loeschprotokoll": {
      "get": {
        "tags": [
          "Werkbank"
        ],
        "summary": "Löschprotokoll (Administrator)",
        "description": "Löschprotokoll (#470), neueste zuerst: je Schritt (papierkorb, endgueltig, wiederhergestellt) ein Eintrag für die Mappe (Mappentyp, Id, Nummer, Anzahl Dokumente/Notizen/entfernte Verweise) und je Dokument bzw. ältere Version (SHA-256, Größe, Dateityp, Seiten, Archivnummer) – keine Titel, Feldwerte oder Dateinamen. Dazu wann, von wem (Benutzer, Schnittstelle, Paket, automatisch), warum und Vorgang (#424). Nicht änderbar.",
        "operationId": "getWerkbankLoeschprotokoll",
        "parameters": [
          {
            "name": "von",
            "in": "query",
            "required": false,
            "description": "ab Tag (JJJJ-MM-TT)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "bis",
            "in": "query",
            "required": false,
            "description": "bis Tag (JJJJ-MM-TT)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "typId",
            "in": "query",
            "required": false,
            "description": "Mappentyp",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "grund",
            "in": "query",
            "required": false,
            "description": "frist, verlangen, nicht_noetig, sonstiges oder ohne",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "schritt",
            "in": "query",
            "required": false,
            "description": "papierkorb, endgueltig oder wiederhergestellt",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "vorgang",
            "in": "query",
            "required": false,
            "description": "Vorgang oder Mappen-Id",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "suche",
            "in": "query",
            "required": false,
            "description": "Nummer, Archivnummer, Id oder Prüfsumme (SHA-256, 64 Zeichen)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "max",
            "in": "query",
            "required": false,
            "description": "höchstens (Standard 500, bis 2000)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Loeschprotokoll"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Nur für Administratoren; oder Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/werkbank/loeschprotokoll/datei": {
      "get": {
        "tags": [
          "Werkbank"
        ],
        "summary": "Löschprotokoll als PDF oder CSV (Administrator)",
        "description": "Dieselben Filter wie GET /werkbank/loeschprotokoll (bis 20.000 Einträge).",
        "operationId": "getWerkbankLoeschprotokollDatei",
        "parameters": [
          {
            "name": "format",
            "in": "query",
            "required": false,
            "description": "pdf (Standard) oder csv",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Nur für Administratoren; oder Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/werkbank/loeschprotokoll/einstellungen": {
      "put": {
        "tags": [
          "Werkbank"
        ],
        "summary": "Aufbewahrung des Löschprotokolls (Administrator)",
        "description": "jahre: 1–30 (Standard 10); ältere Einträge fallen beim stündlichen Aufräumen weg.",
        "operationId": "putWerkbankLoeschprotokollEinstellungen",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LoeschprotokollEinstellung"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LoeschprotokollEinstellung"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Nur für Administratoren; oder Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/werkbank/datenschutz/loeschkonzept": {
      "get": {
        "tags": [
          "Werkbank"
        ],
        "summary": "Löschkonzept erzeugen (Administrator)",
        "description": "Löschkonzept (#469) wie die Vorlage im Administratorhandbuch, Abschnitt 2 „Datenarten und Fristen“ aus den Mappentypen mit Personenbezug, Zweck und Archivmodus; weitere Abschnitte mit den Einstellungen (Papierkorb, Sicherungen). Was Ablago nicht weiß, steht in [eckigen Klammern]. Nur Typen, Einstellungen und Fristen – nichts aus Mappen. Lücken liefert GET /werkbank/datenschutz unter loeschkonzept.luecken.",
        "operationId": "getWerkbankDatenschutzLoeschkonzept",
        "parameters": [
          {
            "name": "format",
            "in": "query",
            "required": false,
            "description": "pdf (Standard) oder docx",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Nur für Administratoren; oder Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/werkbank/auskunft/vorschau": {
      "post": {
        "tags": [
          "Werkbank"
        ],
        "summary": "Auskunft: sammeln und Prüfliste (Administrator)",
        "description": "Auskunft nach Art. 15 DSGVO (#396, #472): Baum ab der Mappe des Betroffenen (wie GET /mappen/{id}/baum mit nurZugehoerigkeit, ohne Benutzer und Rollen): nach unten alles, nach oben nur weiter nach oben; weiter nur über Verweise der Art Zugehörigkeit. Mappen, die nur über Bezug verbunden sind (baum.knoten[].nurBezug, z. B. Vertrag mit der Person als Ansprechpartner), gehen standardmäßig nur als Erwähnung hinaus (auswahl.erwaehnungen). Je Mappe Dokumente (mit geschwärzten Fassungen), Notizen, Anzahl Einträge der Historie, Hinweis auf Daten Dritter und die Passwortfelder, die nie mitgehen. Volltext-Vorschläge gibt es nicht mehr; die Eingabe vorschlaege wird ignoriert.",
        "operationId": "postWerkbankAuskunftVorschau",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AuskunftVorschauEingabe"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuskunftVorschau"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Nur für Administratoren; oder Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/werkbank/auskunft": {
      "post": {
        "tags": [
          "Werkbank"
        ],
        "summary": "Auskunft als ZIP erzeugen (Administrator)",
        "description": "Hintergrundauftrag (Stand: GET /api/werkbank/auftrag, Ergebnis AuskunftStand). Nur ausdrücklich Ausgewähltes geht hinaus, geprueft=true ist Pflicht; jede abgewählte Notiz einer ausgewählten Mappe braucht eine Begründung. Passwortfelder, verschlüsselte Werte und ältere Versionen sind nie enthalten. Mit passwort (mindestens 10 Zeichen) liegt die Auskunft als „Auskunft.zip“ in einer AES-256-verschlüsselten ZIP. Nachweis in der Historie des Betroffenen und im Protokoll, ohne Inhalte.",
        "operationId": "postWerkbankAuskunft",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AuskunftEingabe"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Auftrag"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Nur für Administratoren; oder Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/werkbank/auskunft/frist": {
      "post": {
        "tags": [
          "Werkbank"
        ],
        "summary": "Auskunft: Frist als Aufgabe (Administrator)",
        "description": "Aufgabe „Auskunft nach Art. 15 DSGVO an … bis …“ an der Mappe des Betroffenen für den Aufrufer, fällig einen Monat nach dem Eingang der Anfrage (Art. 12 Abs. 3 DSGVO).",
        "operationId": "postWerkbankAuskunftFrist",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AuskunftFrist"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Aufgabe"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Nur für Administratoren; oder Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/werkbank/auskunft/{id}/zip": {
      "get": {
        "tags": [
          "Werkbank"
        ],
        "summary": "Auskunft herunterladen (Administrator)",
        "description": "Die ZIP-Datei; danach wird sie gelöscht (404 beim zweiten Abruf).",
        "operationId": "getWerkbankAuskunftMitidZip",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id der Auskunft (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Nur für Administratoren; oder Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/werkbank/auskunft/{id}": {
      "delete": {
        "tags": [
          "Werkbank"
        ],
        "summary": "Auskunft löschen (Administrator)",
        "description": "Gültige Abruf-Links dieser Auskunft werden dabei zurückgezogen (#455).",
        "operationId": "deleteWerkbankAuskunftMitid",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id der Auskunft (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Erledigt"
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Nur für Administratoren; oder Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "409": {
            "description": "Kann (noch) nicht gelöscht werden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/werkbank/auskunft/{id}/email": {
      "post": {
        "tags": [
          "Werkbank"
        ],
        "summary": "Auskunft per E-Mail senden (Administrator)",
        "description": "Auskunft zustellen, Weg 1 (#455): die ZIP als Anhang über den E-Mail-Versand von Ablago. Nur für Auskünfte mit Passwort (sonst 422); das Passwort kennt Ablago nicht und schickt es nie mit – teile es auf einem anderen Weg mit. Größer als 50 MB: 413, dann den Abruf-Link nutzen. Ohne betreff/nachricht gilt ein Vorschlag in Du-Form. Nachweis in der Historie der Person.",
        "operationId": "postWerkbankAuskunftMitidEmail",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id der Auskunft (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AuskunftEmail"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuskunftEmailErgebnis"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Nur für Administratoren; oder Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/werkbank/auskunft/{id}/link": {
      "post": {
        "tags": [
          "Werkbank"
        ],
        "summary": "Abruf-Link für eine Auskunft erstellen (Administrator)",
        "description": "Auskunft zustellen, Weg 2 (#455): Link auf die öffentliche Abrufseite (/abruf#<Schlüssel>, 256 Bit) mit Abrufcode (8 Zeichen, oder ein eigener ab 6 Zeichen). Link und Code stehen nur in dieser Antwort im Klartext. Gültig tage Tage (1–90, Standard 30), höchstens abrufe Abrufe (1–10, Standard 3); ein noch gültiger Link derselben Auskunft wird zurückgezogen. Mit senden=true geht der Link – ohne Code – per E-Mail an an. Die ZIP bleibt, solange der Link gilt.",
        "operationId": "postWerkbankAuskunftMitidLink",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id der Auskunft (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AuskunftLinkEingabe"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuskunftLinkNeu"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Nur für Administratoren; oder Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/werkbank/auskunft/link/{id}/widerrufen": {
      "post": {
        "tags": [
          "Werkbank"
        ],
        "summary": "Abruf-Link zurückziehen (Administrator)",
        "description": "Der Link gilt sofort nicht mehr (#455); der Eintrag bleibt als Nachweis. Für die ZIP gilt wieder das ursprüngliche Ende (7 Tage nach dem Erstellen).",
        "operationId": "postWerkbankAuskunftLinkMitidWiderrufen",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Id des Links (UUID)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuskunftLink"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Nur für Administratoren; oder Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/sicherungen/{name}": {
      "get": {
        "tags": [
          "Werkbank"
        ],
        "summary": "Schlanke Metadaten einer Sicherung (Pakete)",
        "description": "Für Pakete mit dem Recht „dms:sicherung-lesen“ (#585), z. B. „Sicherungsziel WebDAV“: Dateiname, Größe, SHA-256, Beginn und Fingerabdruck des Schlüssels der Sicherung aus dem Ereignis sicherung.fertig – ohne Person, Umgebung, Zähler und Haushalts-Id. Genau diese Angaben legt das Paket als <name>.json neben die Datei auf das Ziel; die Wiederherstellung kommt damit aus. 403 ohne das Recht oder für eine Sicherung, die dem Paket nicht gemeldet wurde; 404, wenn sie nicht mehr da ist (Aufbewahrung).",
        "operationId": "getSicherungenMitname",
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "required": true,
            "description": "Name der Sicherung aus dem Ereignis (ohne Endung)",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SicherungSchlank"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Nur für Administratoren; oder Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/sicherungen/{name}/datei": {
      "get": {
        "tags": [
          "Werkbank"
        ],
        "summary": "Ein Stück der verschlüsselten Sicherung (Pakete)",
        "description": "Für Pakete mit dem Recht „dms:sicherung-lesen“ (#585): ab versatz höchstens laenge Bytes (bis 8 MB) der verschlüsselten Sicherungsdatei, roh. Der Kopf X-DMS-Groesse nennt die Größe der ganzen Datei; am Ende kommt ein leerer Körper. Lies die Datei in Stücken und lade sie in Teilen hoch – eine Sicherung hat schnell mehrere GB. Das Paket bekommt nie den Schlüssel und nie andere Dateien des Sicherungsordners. Fehler wie bei GET /sicherungen/{name}, 422 bei ungültigem versatz oder laenge.",
        "operationId": "getSicherungenMitnameDatei",
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "required": true,
            "description": "Name der Sicherung aus dem Ereignis",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "versatz",
            "in": "query",
            "required": false,
            "description": "Ab diesem Byte (Standard 0)",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "laenge",
            "in": "query",
            "required": false,
            "description": "Höchstens so viele Bytes, 1 bis 8388608 (Standard)",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Nur für Administratoren; oder Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/sicherungen/{name}/extern": {
      "put": {
        "tags": [
          "Werkbank"
        ],
        "summary": "Stand der Kopie außer Haus melden (Pakete, veraltet)",
        "description": "Veraltet seit 0.158.1 (#636), fällt mit der übernächsten Fassung weg: Pakete haben nur noch einen Leseschlüssel und melden ihren Stand als „extern“ im JSON-Ergebnis des Ereignisses sicherung.fertig – dieselben Felder wie hier, auch neben „weiter“. Ohne „extern“ gilt: Rückgabewert 2 → fehlgeschlagen (endgültig), anderer Fehler → läuft mit der Meldung als Grund. Rückmeldung des Pakets je Sicherung (#585): laeuft (mit bytes/gesamt), hochgeladen (pruefung groesse oder keine), geprueft (pruefung pruefsumme oder stichprobe), fehlgeschlagen (grund Pflicht; endgueltig=true, wenn eine Wiederholung nicht hilft – dann bekommen die Administratoren eine E-Mail). ziel nennt das Ziel in Worten, ohne Zugangsdaten (Adressen werden davon befreit). Werkbank → Sicherung zeigt den Stand je Sicherung. Gibt Ablago das Ereignis nach allen Wiederholungen auf, setzt es selbst „fehlgeschlagen“.",
        "operationId": "putSicherungenMitnameExtern",
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "required": true,
            "description": "Name der Sicherung aus dem Ereignis",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SicherungRueckmeldung"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SicherungExtern"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Nur für Administratoren; oder Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "404": {
            "description": "Nicht gefunden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "422": {
            "description": "Eingaben ungültig (details: Prüfergebnis)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    },
    "/rollen": {
      "get": {
        "tags": [
          "Werkbank"
        ],
        "summary": "Alle Rollen (Administrator)",
        "description": "Systemrollen (Administrator, Mitglied) zuerst. Rollen selbst sind Mappen des Systemmappentyps „Rolle“ und werden wie andere Mappen angelegt, geändert und gelöscht.",
        "operationId": "getRollen",
        "responses": {
          "200": {
            "description": "Erfolg",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RollenListe"
                }
              }
            }
          },
          "401": {
            "description": "Nicht angemeldet oder Schlüssel ungültig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          },
          "403": {
            "description": "Nur für Administratoren; oder Schlüssel nur zum Lesen oder nur Zähler",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fehler"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "apiSchluessel": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "dms_…",
        "description": "API-Schlüssel aus dem Profil"
      }
    },
    "schemas": {
      "Fehler": {
        "type": "object",
        "required": [
          "fehler"
        ],
        "properties": {
          "fehler": {
            "type": "string",
            "description": "Meldung auf Deutsch"
          },
          "details": {
            "description": "Je nach Fehler, z. B. Prüfergebnis bei 422"
          }
        }
      },
      "Pruefergebnis": {
        "type": "object",
        "properties": {
          "allgemein": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "felder": {
            "type": "object",
            "additionalProperties": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "description": "Meldungen je Feldschlüssel"
          }
        }
      },
      "Feld": {
        "type": "object",
        "required": [
          "key",
          "label",
          "typ"
        ],
        "properties": {
          "key": {
            "type": "string",
            "pattern": "^[a-z][a-z0-9_]{0,39}$"
          },
          "label": {
            "type": "string"
          },
          "typ": {
            "type": "string",
            "enum": [
              "text",
              "langtext",
              "formatiert",
              "zahl",
              "betrag",
              "datum",
              "janein",
              "auswahl",
              "referenz",
              "passwort"
            ]
          },
          "pflicht": {
            "type": "boolean"
          },
          "eindeutig": {
            "type": "boolean"
          },
          "hilfe": {
            "type": "string"
          },
          "minLen": {
            "type": "integer"
          },
          "maxLen": {
            "type": "integer"
          },
          "min": {
            "oneOf": [
              {
                "type": "number"
              },
              {
                "type": "string"
              }
            ],
            "description": "Zahl und Betrag: Zahl. Datum (#535): „heute“ oder JJJJ-MM-TT – frühestes erlaubtes Datum"
          },
          "max": {
            "oneOf": [
              {
                "type": "number"
              },
              {
                "type": "string"
              }
            ],
            "description": "Zahl und Betrag: Zahl. Datum (#535): „heute“ oder JJJJ-MM-TT – spätestes erlaubtes Datum, z. B. heute für einen Geburtstag"
          },
          "nachkomma": {
            "type": "integer"
          },
          "muster": {
            "type": "string"
          },
          "optionen": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "system": {
            "type": "boolean",
            "readOnly": true,
            "description": "Systemfeld eines Systemmappentyps: nicht entfernbar, nur Bezeichnung und Hilfetext änderbar"
          },
          "mehrfach": {
            "type": "boolean"
          },
          "zielTyp": {
            "type": "string",
            "format": "uuid",
            "description": "Bei typ=referenz: Id des Ziel-Mappentyps"
          },
          "verweisart": {
            "type": "string",
            "enum": [
              "zugehoerigkeit",
              "bezug"
            ]
          },
          "waehrung": {
            "type": "string"
          },
          "erkennung": {
            "type": "object",
            "nullable": true,
            "description": "Für die Erkennung nutzen (#336, #391); vorhanden = an. Nur bei Text, Langtext, Zahl, Betrag, Datum, Auswahl und Verweis. art: was im Feld steht (fehlt = aus Feldart und Bezeichnung), hinweis: Erkennungshinweis, z. B. „Muster 100-####“ (# = Ziffer).",
            "properties": {
              "art": {
                "type": "string",
                "enum": [
                  "name",
                  "vorname",
                  "nachname",
                  "funktion",
                  "nummer",
                  "iban",
                  "ustid",
                  "email",
                  "internet",
                  "telefon",
                  "mobil",
                  "fax",
                  "strasse",
                  "hausnummer",
                  "plz",
                  "ort",
                  "datum",
                  "betrag",
                  "verweis",
                  "auswahl"
                ]
              },
              "hinweis": {
                "type": "string",
                "maxLength": 300
              }
            }
          },
          "format": {
            "type": "string",
            "nullable": true,
            "enum": [
              "email",
              "telefon",
              "internetseite",
              "iban",
              "plz"
            ],
            "description": "Nur bei typ=text (#535): Format der Angabe. Neue und geänderte Werte müssen passen, gespeicherte bleiben gültig."
          },
          "landFeld": {
            "type": "string",
            "nullable": true,
            "description": "Bei format=plz (#535): Kennung des Felds mit dem Land. Steht dort Deutschland (oder nichts), hat die PLZ genau 5 Ziffern."
          }
        }
      },
      "Register": {
        "type": "object",
        "required": [
          "key",
          "name",
          "art"
        ],
        "properties": {
          "key": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "art": {
            "type": "string",
            "enum": [
              "felder",
              "dokumente",
              "verknuepfungen",
              "protokoll"
            ]
          },
          "felder": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "quellen": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "typId": {
                  "type": "string",
                  "format": "uuid"
                },
                "feldKey": {
                  "type": "string"
                },
                "trefferliste": {
                  "type": "string",
                  "description": "Kennung einer Trefferliste des Quelltyps; das Register zeigt dann deren Spalten"
                }
              }
            }
          }
        }
      },
      "MappentypEingabe": {
        "type": "object",
        "required": [
          "name",
          "felder"
        ],
        "properties": {
          "autoZuordnen": {
            "type": "boolean",
            "description": "Post automatisch zuordnen, wenn die Erkennung sicher ist (#337): Absender eindeutig (z. B. Kundennummer, IBAN) und genau eine passende Mappe dieses Typs. Standard false; bei Archivmodus wirkungslos. Der Empfänger bekommt eine Aufgabe „Automatisch zugeordnet – bitte prüfen“ mit Rückgängig."
          },
          "ausDokument": {
            "type": "object",
            "nullable": true,
            "description": "„Aus Dokument ausfüllen“ (#391): eigene Beschriftung des Knopfs (höchstens 40 Zeichen) oder aus = true blendet ihn aus; null = Standard. Systemtypen haben den Knopf nie.",
            "properties": {
              "aus": {
                "type": "boolean"
              },
              "beschriftung": {
                "type": "string",
                "example": "Visitenkarte scannen"
              }
            }
          },
          "name": {
            "type": "string"
          },
          "schluessel": {
            "type": "string",
            "example": "rechnung",
            "description": "Feste Kennung; beim Anlegen frei wählbar (sonst aus dem Namen), danach unveränderlich"
          },
          "beschreibung": {
            "type": "string"
          },
          "titelVorlage": {
            "type": "string",
            "example": "{rechnungsnummer} vom {rechnungsdatum}"
          },
          "felder": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Feld"
            }
          },
          "register": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Register"
            }
          },
          "trefferlisten": {
            "type": "array",
            "description": "Trefferlisten; genau eine ist Standard",
            "items": {
              "type": "object",
              "required": [
                "key",
                "name",
                "spalten"
              ],
              "properties": {
                "key": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "spalten": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "Feldschlüssel oder _titel, _erstellt, _erstelltVon, _geaendert, _geaendertVon"
                },
                "standard": {
                  "type": "boolean"
                }
              }
            }
          },
          "trefferliste": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Spalten der Standard-Trefferliste (ältere Form); wenn angegeben, ersetzt sie deren Spalten"
          },
          "archiv": {
            "type": "object",
            "nullable": true,
            "description": "Archivmodus (#212); null = aus. Frist bis Ende des Kalenderjahres des Stichtags + jahre; vorher kein Löschen (409). Die Versionierung der Dokumentenregister ist dann Pflicht.",
            "properties": {
              "jahre": {
                "type": "integer",
                "minimum": 1,
                "maximum": 30
              },
              "stichtag": {
                "type": "string",
                "nullable": true,
                "description": "Kennung eines Datumsfelds; null = Anlagedatum"
              }
            }
          },
          "erstellenErlaubt": {
            "type": "boolean",
            "default": true,
            "deprecated": true,
            "description": "Ohne Wirkung seit 0.32 – wer anlegen darf, regeln die Berechtigungen (Recht C)"
          },
          "sichtAnlegen": {
            "type": "boolean",
            "default": true,
            "writeOnly": true,
            "description": "Nur beim Anlegen: eigene Ansicht in der Ablage anlegen"
          },
          "loeschenErlaubt": {
            "type": "boolean",
            "default": true,
            "deprecated": true,
            "description": "Ohne Wirkung seit 0.32 – wer löschen darf, regeln die Berechtigungen (Recht D)"
          }
        }
      },
      "Mappentyp": {
        "allOf": [
          {
            "$ref": "#/components/schemas/MappentypEingabe"
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              },
              "erstellt": {
                "type": "string",
                "format": "date-time"
              },
              "geaendert": {
                "type": "string",
                "format": "date-time"
              },
              "system": {
                "type": "string",
                "enum": [
                  "benutzer",
                  "rolle",
                  "post"
                ],
                "nullable": true,
                "description": "Systemmappentyp: lässt sich erweitern, aber nicht löschen"
              },
              "stempel": {
                "type": "object",
                "nullable": true,
                "description": "Stempel beim Weitergeben (#394): vorschlag oder pflicht, mit Id der Vorlage; null = kein Stempel",
                "properties": {
                  "modus": {
                    "type": "string",
                    "enum": [
                      "vorschlag",
                      "pflicht"
                    ]
                  },
                  "vorlage": {
                    "type": "string",
                    "nullable": true
                  }
                }
              }
            }
          }
        ]
      },
      "MappentypListe": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/Mappentyp"
        }
      },
      "Werte": {
        "type": "object",
        "additionalProperties": true,
        "description": "Werte je Feldschlüssel: Text und Datum (JJJJ-MM-TT) als string, Zahl als number, Ja/Nein als boolean, Betrag als {betrag, waehrung}, Auswahl als string (mehrfach: string[]), Verweis als Mappen-Id (mehrfach: string[]). Passwort: beim Lesen nur {gesetzt, lesbar} (Klartext mit ?passwoerter=anzeigen); zum Setzen ein Text oder {neu}, zum Entfernen null, unverändert lassen durch Weglassen.",
        "example": {
          "rechnungsnummer": "R-2026-17",
          "rechnungsdatum": "2026-10-01",
          "betrag": {
            "betrag": 49.9,
            "waehrung": "EUR"
          },
          "bezahlt": false
        }
      },
      "Mappe": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "typId": {
            "type": "string",
            "format": "uuid"
          },
          "werte": {
            "$ref": "#/components/schemas/Werte"
          },
          "titel": {
            "type": "string",
            "description": "Vom Server aus der Titel-Vorlage berechnet"
          },
          "erstellt": {
            "type": "string",
            "format": "date-time"
          },
          "erstelltVon": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "geaendert": {
            "type": "string",
            "format": "date-time"
          },
          "geaendertVon": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "passt": {
            "type": "boolean",
            "description": "Passt zur aktuellen Definition des Typs"
          },
          "problem": {
            "type": "string",
            "nullable": true
          },
          "demo": {
            "type": "boolean"
          },
          "systemKennung": {
            "type": "string",
            "nullable": true,
            "description": "Mappen, die das System pflegt, z. B. rolle:admin und rolle:mitglied"
          }
        }
      },
      "MappeEingabe": {
        "type": "object",
        "required": [
          "typId",
          "werte"
        ],
        "properties": {
          "typId": {
            "type": "string",
            "format": "uuid"
          },
          "werte": {
            "$ref": "#/components/schemas/Werte"
          }
        }
      },
      "MappeAenderung": {
        "type": "object",
        "required": [
          "werte"
        ],
        "properties": {
          "werte": {
            "$ref": "#/components/schemas/Werte",
            "description": "Nur die Felder, die sich ändern sollen; fehlende Felder bleiben unverändert (#609)"
          },
          "stand": {
            "type": "string",
            "format": "date-time",
            "description": "Optional (#609): „geaendert“ der Mappe beim Lesen. Hat sich seitdem ein übergebenes Feld geändert und soll es anders lauten, kommt 409 statt Überschreiben."
          }
        }
      },
      "Mappenkonflikt": {
        "type": "object",
        "description": "Gleichzeitig bearbeiten (#609): details der 409-Antwort von PUT /mappen/{id}",
        "properties": {
          "stand": {
            "type": "string",
            "format": "date-time",
            "description": "Aktueller Stand der Mappe – mit ihm noch einmal senden, um die eigenen Werte zu übernehmen"
          },
          "konflikte": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "feld": {
                  "type": "string",
                  "description": "Kennung des Felds"
                },
                "label": {
                  "type": "string"
                },
                "deins": {
                  "type": "string",
                  "description": "Dein Wert, lesbar (leer bei Passwortfeldern)"
                },
                "aktuell": {
                  "type": "string",
                  "description": "Jetziger Wert, lesbar (leer bei Passwortfeldern)"
                },
                "wert": {
                  "description": "Jetziger Wert wie in werte; fehlt bei Passwortfeldern"
                },
                "geheim": {
                  "type": "boolean",
                  "description": "Passwortfeld"
                },
                "von": {
                  "type": "string",
                  "format": "uuid",
                  "nullable": true,
                  "description": "Wer zuletzt geändert hat; null = Ablago selbst"
                },
                "name": {
                  "type": "string"
                },
                "zeit": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          }
        }
      },
      "Bezug": {
        "type": "object",
        "properties": {
          "titel": {
            "type": "string"
          },
          "typId": {
            "type": "string",
            "format": "uuid"
          }
        }
      },
      "PapierkorbEintrag": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "typId": {
            "type": "string",
            "format": "uuid"
          },
          "titel": {
            "type": "string"
          },
          "werte": {
            "$ref": "#/components/schemas/Werte"
          },
          "demo": {
            "type": "boolean"
          },
          "erstellt": {
            "type": "string",
            "format": "date-time"
          },
          "erstelltVon": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "geaendert": {
            "type": "string",
            "format": "date-time"
          },
          "geaendertVon": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "geloescht": {
            "type": "string",
            "format": "date-time"
          },
          "geloeschtVon": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "dokumente": {
            "type": "integer",
            "description": "Anzahl Dokumente, die mit ihr im Papierkorb liegen"
          },
          "vorgang": {
            "type": "string",
            "format": "uuid",
            "nullable": true,
            "description": "Mit verknüpften Mappen gelöscht (#424): gemeinsame Id des Vorgangs"
          },
          "entkoppelt": {
            "type": "array",
            "description": "Verweise bleibender Mappen auf diese, die beim Löschen entfernt wurden (#424)",
            "items": {
              "type": "object",
              "properties": {
                "quelleId": {
                  "type": "string",
                  "format": "uuid"
                },
                "feldKey": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "PapierkorbListe": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/PapierkorbEintrag"
        }
      },
      "Wiederhergestellt": {
        "type": "object",
        "properties": {
          "mappe": {
            "$ref": "#/components/schemas/Mappe"
          },
          "verweiseEntfallen": {
            "type": "integer",
            "description": "Verweise auf Mappen, die es nicht mehr gibt"
          }
        }
      },
      "LoeschVorschau": {
        "type": "object",
        "properties": {
          "baum": {
            "$ref": "#/components/schemas/Baum"
          },
          "kanten": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "quelleId": {
                  "type": "string",
                  "format": "uuid"
                },
                "feldKey": {
                  "type": "string"
                },
                "zielId": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            }
          },
          "geteilt": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          },
          "nichtLoeschbar": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "vorschlag": {
            "type": "object",
            "additionalProperties": {
              "type": "string",
              "enum": [
                "loeschen",
                "entkoppeln",
                "behalten"
              ]
            }
          },
          "papierkorbTage": {
            "type": "integer"
          }
        }
      },
      "LoeschAusfuehren": {
        "type": "object",
        "required": [
          "auswahl"
        ],
        "properties": {
          "auswahl": {
            "type": "object",
            "additionalProperties": {
              "type": "string",
              "enum": [
                "loeschen",
                "entkoppeln",
                "behalten"
              ]
            },
            "description": "Mappen-Id → Aktion; fehlende Ids bleiben"
          },
          "tiefe": {
            "type": "integer"
          },
          "max": {
            "type": "integer"
          }
        }
      },
      "LoeschErgebnis": {
        "type": "object",
        "properties": {
          "vorgang": {
            "type": "string",
            "format": "uuid"
          },
          "endgueltig": {
            "type": "boolean",
            "description": "true = kein Papierkorb, sofort endgültig"
          },
          "zahlen": {
            "type": "object",
            "properties": {
              "mappen": {
                "type": "integer"
              },
              "dokumente": {
                "type": "integer"
              },
              "frist": {
                "type": "integer"
              },
              "ohneRecht": {
                "type": "integer"
              },
              "verweise": {
                "type": "integer"
              },
              "gehalten": {
                "type": "integer"
              },
              "abgewaehlt": {
                "type": "integer"
              }
            }
          },
          "loeschen": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          },
          "entkoppeln": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "erinnerung": {
            "type": "object",
            "nullable": true,
            "description": "Erinnerung zum Fristende (#424): blieb die Start-Mappe wegen Mappen in der Aufbewahrungsfrist, eine Erinnerung für den Aufrufer an der Start-Mappe zum Tag nach dem spätesten Fristende",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              },
              "datum": {
                "type": "string",
                "format": "date"
              },
              "text": {
                "type": "string"
              }
            }
          }
        }
      },
      "VorgangWiederhergestellt": {
        "type": "object",
        "properties": {
          "mappen": {
            "type": "integer"
          },
          "verweiseWieder": {
            "type": "integer"
          },
          "verweiseEntfallen": {
            "type": "integer"
          },
          "startId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          }
        }
      },
      "Geloescht": {
        "type": "object",
        "properties": {
          "geloescht": {
            "type": "integer",
            "description": "Anzahl endgültig gelöschter Mappen"
          }
        }
      },
      "Dokument": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "mappeId": {
            "type": "string",
            "format": "uuid"
          },
          "registerKey": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "mime": {
            "type": "string"
          },
          "groesse": {
            "type": "integer"
          },
          "sha256": {
            "type": "string"
          },
          "anzeigbar": {
            "type": "boolean"
          },
          "erstellt": {
            "type": "string",
            "format": "date-time"
          },
          "erstelltVon": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "sprache": {
            "type": "string",
            "nullable": true,
            "description": "Sprache des Volltexts (#400), Kennung wie fra; null = keine Angabe (Deutsch). Bei mehrsprachigen Dokumenten die Hauptsprache (#579)."
          },
          "weitereSprachen": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Weitere Sprachen im Dokument (#579, „enthält auch“), nach Textmenge"
          },
          "teilenAb": {
            "type": "integer",
            "nullable": true,
            "description": "Hinweis „Post teilen?“ (#579): ab dieser Seite beginnt vermutlich ein eigenes Schreiben (die Sprache wechselt ganz); null ohne Wechsel oder weggeklickt"
          },
          "ocr": {
            "type": "object",
            "description": "Stand der Texterkennung",
            "properties": {
              "stand": {
                "type": "string",
                "enum": [
                  "keiner",
                  "wartet",
                  "laeuft",
                  "fertig",
                  "fehler",
                  "ausgelassen",
                  "paket"
                ],
                "description": "paket (#458): Textebene gelesen, wartet auf das Paket für die Texterkennung"
              },
              "info": {
                "type": "string",
                "nullable": true
              },
              "seiten": {
                "type": "integer",
                "nullable": true
              },
              "zeit": {
                "type": "string",
                "format": "date-time",
                "nullable": true
              }
            }
          },
          "version": {
            "type": "integer",
            "description": "Nummer der aktuellen Version (ohne Versionierung 1)"
          },
          "herkunft": {
            "type": "string",
            "nullable": true,
            "enum": [
              "hochgeladen",
              "api",
              "webdav",
              "paket",
              "eingang",
              "zurueckgeholt",
              "bearbeitet",
              "geschwaerzt",
              null
            ],
            "description": "Woher die aktuelle Version kam"
          },
          "archivnummer": {
            "type": "string",
            "nullable": true,
            "description": "Archivnummer des Papieroriginals (#345)"
          },
          "aeltere": {
            "type": "integer",
            "description": "Anzahl älterer Versionen"
          }
        }
      },
      "DokumentVersion": {
        "type": "object",
        "description": "Eine ältere Version eines Dokuments",
        "properties": {
          "dokumentId": {
            "type": "string",
            "format": "uuid"
          },
          "nummer": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "mime": {
            "type": "string"
          },
          "groesse": {
            "type": "integer"
          },
          "sha256": {
            "type": "string"
          },
          "anzeigbar": {
            "type": "boolean"
          },
          "erstellt": {
            "type": "string",
            "format": "date-time"
          },
          "erstelltVon": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "herkunft": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "Versionen": {
        "type": "object",
        "properties": {
          "aktuell": {
            "$ref": "#/components/schemas/Dokument"
          },
          "aeltere": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DokumentVersion"
            },
            "description": "neueste zuerst"
          }
        }
      },
      "MappeDetails": {
        "type": "object",
        "properties": {
          "mappe": {
            "$ref": "#/components/schemas/Mappe"
          },
          "favorit": {
            "type": "boolean",
            "description": "Favorit des Benutzers dieses Schlüssels"
          },
          "dokumente": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Dokument"
            }
          },
          "notizen": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Notiz"
            }
          },
          "aufgaben": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Aufgabe"
            }
          },
          "bezuege": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/Bezug"
            }
          },
          "rueckverweise": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "quelleId": {
                  "type": "string",
                  "format": "uuid"
                },
                "quelleTypId": {
                  "type": "string",
                  "format": "uuid"
                },
                "feldKey": {
                  "type": "string"
                },
                "titel": {
                  "type": "string"
                }
              }
            }
          },
          "aufbewahrenBis": {
            "type": "string",
            "format": "date",
            "nullable": true,
            "description": "Archivmodus (#212): Ende der Aufbewahrungsfrist (JJJJ-12-31); vorher antwortet Löschen mit 409"
          },
          "loeschbar": {
            "type": "object",
            "description": "Ob die Mappe gelöscht werden kann; sonst Grund und die Mappen, die das verhindern",
            "properties": {
              "ok": {
                "type": "boolean"
              },
              "grund": {
                "type": "string"
              },
              "rueckverweise": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "quelleId": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "quelleTypId": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "feldKey": {
                      "type": "string"
                    },
                    "titel": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "Seite": {
        "type": "object",
        "properties": {
          "gesamt": {
            "type": "integer"
          },
          "von": {
            "type": "integer"
          },
          "mappen": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Mappe"
            }
          },
          "bezuege": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/Bezug"
            }
          },
          "aufgaben": {
            "type": "object",
            "description": "Nur unter „Zu erledigen“: offene Aufgaben je Mappen-Id",
            "additionalProperties": {
              "type": "string"
            }
          },
          "favoriten": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "description": "Ids der gelieferten Mappen, die Favoriten des Benutzers sind"
          },
          "ausschnitte": {
            "type": "object",
            "description": "Nur mit volltext=true: Fundstelle je Mappen-Id; Treffer zwischen den Steuerzeichen U+0002 und U+0003",
            "additionalProperties": {
              "type": "object",
              "properties": {
                "dokument": {
                  "type": "string"
                },
                "text": {
                  "type": "string"
                }
              }
            }
          },
          "unscharf": {
            "type": "object",
            "description": "Unscharfe Suche (#356): Gab es keinen genauen Treffer, sucht Ablago mit ähnlich geschriebenen Wörtern aus dem Wörterverzeichnis weiter (Werkbank → Suche); dann stehen hier der gesuchte Text (statt), „Meintest du …?“ (vorschlag, oder null) und die ähnlichen Wörter je Begriff. Fehlt bei genauen Treffern.",
            "properties": {
              "statt": {
                "type": "string"
              },
              "vorschlag": {
                "type": "string",
                "nullable": true
              },
              "begriffe": {
                "type": "object",
                "additionalProperties": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "aehnlich": {
            "type": "array",
            "description": "Ähnliche Treffer (#442), nur mit sicht=suche ohne Feldbedingungen, volltext=true, von=0 und einem Paket mit „dms:vektoren“: Mappen, die nicht in mappen stehen, deren Dokument dem Suchbegriff ähnlich ist (Kosinus). Fehlt, wenn es keine gibt.",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "titel": {
                  "type": "string"
                },
                "typId": {
                  "type": "string",
                  "format": "uuid"
                },
                "dokument": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "name": {
                      "type": "string"
                    }
                  }
                },
                "aehnlichkeit": {
                  "type": "number"
                }
              }
            }
          }
        }
      },
      "Aufgabe": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "mappeId": {
            "type": "string",
            "format": "uuid"
          },
          "empfaengerId": {
            "type": "string",
            "format": "uuid",
            "nullable": true,
            "description": "null = Administratoren"
          },
          "art": {
            "type": "string",
            "enum": [
              "passung",
              "erwaehnung",
              "manuell",
              "vertretung",
              "frist",
              "erinnerung",
              "post",
              "auskunft",
              "aenderung"
            ]
          },
          "text": {
            "type": "string"
          },
          "feldKey": {
            "type": "string",
            "nullable": true
          },
          "datum": {
            "type": "string",
            "format": "date",
            "nullable": true,
            "description": "Frist und Erinnerung: das Datum, um das es geht"
          },
          "erstellt": {
            "type": "string",
            "format": "date-time"
          },
          "erstelltVon": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "erledigt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "erledigtVon": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "mappeTitel": {
            "type": "string"
          },
          "typId": {
            "type": "string",
            "format": "uuid"
          }
        }
      },
      "AufgabenListe": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/Aufgabe"
        }
      },
      "AufgabeEingabe": {
        "type": "object",
        "required": [
          "empfaengerId",
          "text"
        ],
        "properties": {
          "empfaengerId": {
            "type": "string",
            "format": "uuid"
          },
          "text": {
            "type": "string"
          }
        }
      },
      "Favorit": {
        "type": "object",
        "properties": {
          "favorit": {
            "type": "boolean"
          }
        }
      },
      "Delegieren": {
        "type": "object",
        "required": [
          "empfaengerId"
        ],
        "properties": {
          "empfaengerId": {
            "type": "string",
            "format": "uuid"
          }
        }
      },
      "SammelAuswahl": {
        "type": "object",
        "required": [
          "ids"
        ],
        "properties": {
          "ids": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "maxItems": 1000
          }
        }
      },
      "SammelWeitergabe": {
        "type": "object",
        "required": [
          "ids",
          "empfaengerId"
        ],
        "properties": {
          "ids": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "maxItems": 1000
          },
          "empfaengerId": {
            "type": "string",
            "format": "uuid"
          }
        }
      },
      "SammelErgebnis": {
        "type": "object",
        "properties": {
          "weitergegeben": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "description": "nur bei /aufgaben/weitergeben"
          },
          "erledigt": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "description": "nur bei /aufgaben/erledigt"
          },
          "nicht": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "grund": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "Notiz": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "mappeId": {
            "type": "string",
            "format": "uuid"
          },
          "text": {
            "type": "string",
            "description": "Markdown"
          },
          "erstellt": {
            "type": "string",
            "format": "date-time"
          },
          "erstelltVon": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "geaendert": {
            "type": "string",
            "format": "date-time"
          },
          "geaendertVon": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          }
        }
      },
      "NotizListe": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/Notiz"
        }
      },
      "PostEingabe": {
        "type": "object",
        "properties": {
          "betreff": {
            "type": "string",
            "description": "Standard „Neue Post“"
          },
          "datum": {
            "type": "string",
            "format": "date"
          },
          "absender": {
            "type": "string",
            "description": "Wer die Post geschickt hat; ohne Angabe leer (bis 0.99: Name des Benutzers, #494)"
          },
          "fuer": {
            "type": "string",
            "format": "uuid",
            "description": "Id eines Benutzers: Er bekommt die Aufgabe „Post für dich“ unter „Zu erledigen“, solange die Post neu ist."
          },
          "nachricht": {
            "type": "string"
          },
          "kanal": {
            "type": "string",
            "enum": [
              "Hochgeladen",
              "E-Mail",
              "Scan",
              "Ordner",
              "Import",
              "API",
              "WebDAV"
            ]
          },
          "werte": {
            "$ref": "#/components/schemas/Werte",
            "description": "Werte weiterer Felder, die der Administrator am Typ Post ergänzt hat"
          }
        }
      },
      "Zuordnen": {
        "type": "object",
        "required": [
          "ziel"
        ],
        "properties": {
          "ziel": {
            "type": "string",
            "format": "uuid",
            "description": "Id der Mappe, zu der die Post gehört"
          },
          "register": {
            "type": "string",
            "description": "Kennung eines Dokumentenregisters der Zielmappe; Standard: das erste"
          },
          "dokumente": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "description": "Ids von Dokumenten der Post; Standard: alle"
          },
          "kopieren": {
            "type": "boolean",
            "description": "true = Dokumente bleiben auch in der Post"
          }
        }
      },
      "Zugeordnet": {
        "type": "object",
        "properties": {
          "post": {
            "$ref": "#/components/schemas/Mappe"
          },
          "ziel": {
            "$ref": "#/components/schemas/Mappe"
          }
        }
      },
      "VorschlaegeEingabe": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Text, z. B. von Fotos (höchstens 200.000 Zeichen)"
          },
          "dokumente": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "description": "Dokumente mit Volltext (höchstens 10)"
          },
          "mappe": {
            "type": "string",
            "format": "uuid",
            "description": "Mappe dieses Typs, die gefüllt wird"
          }
        }
      },
      "TypVorschlaege": {
        "type": "object",
        "properties": {
          "engine": {
            "type": "object",
            "description": "Womit erkannt wurde (#511): { art: eingebaut } oder { art: paket, id, name } – ein Paket mit dms:erkennen, gewählt in der Werkbank oder am Mappentyp",
            "properties": {
              "art": {
                "type": "string",
                "enum": [
                  "eingebaut",
                  "paket"
                ]
              },
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              }
            }
          },
          "hinweis": {
            "type": "string",
            "description": "z. B. wenn das gewählte Paket nicht antwortete oder nichts Brauchbares lieferte und die eingebaute Erkennung übernahm"
          },
          "gekuerzt": {
            "type": "boolean",
            "enum": [
              true
            ],
            "description": "Nur vorhanden, wenn das Paket nur einen Teil des Texts gelesen hat (#564; ab 0.138.0) – der Kern schickt höchstens 50.000 Zeichen, ein Paket kann für seinen Dienst weiter kürzen"
          },
          "vorschlaege": {
            "type": "object",
            "additionalProperties": {
              "type": "object",
              "properties": {
                "wert": {
                  "description": "Wert im Format der Feldart (wie Werte)"
                },
                "sicherheit": {
                  "type": "string",
                  "enum": [
                    "hoch",
                    "mittel",
                    "niedrig"
                  ]
                },
                "fundstelle": {
                  "type": "string"
                }
              }
            },
            "description": "Je Feldkennung"
          },
          "bezuege": {
            "type": "object",
            "additionalProperties": {
              "type": "object",
              "properties": {
                "titel": {
                  "type": "string"
                },
                "typId": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "description": "Titel der vorgeschlagenen Mappen in Verweisfeldern"
          },
          "neu": {
            "type": "object",
            "additionalProperties": {
              "type": "object",
              "properties": {
                "typId": {
                  "type": "string",
                  "format": "uuid"
                },
                "werte": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "fundstelle": {
                  "type": "string"
                }
              }
            },
            "description": "Verweisfeld ohne passende Mappe: Vorschlag, eine neue (z. B. Organisation) mit diesen Werten anzulegen"
          },
          "verworfen": {
            "type": "integer",
            "description": "Werte, die die Prüfung gegen die Feldtypen verworfen hat"
          },
          "zeichen": {
            "type": "integer",
            "description": "Länge des gelesenen Texts"
          },
          "text": {
            "type": "string",
            "description": "Nur bei /datei: der gelesene Text"
          },
          "info": {
            "type": "string",
            "description": "Nur bei /datei: wie gelesen wurde"
          }
        }
      },
      "JsonSchema": {
        "type": "object",
        "description": "JSON Schema 2020-12",
        "additionalProperties": true
      },
      "Rueckgaengig": {
        "type": "object",
        "properties": {
          "post": {
            "$ref": "#/components/schemas/Mappe"
          },
          "dokumente": {
            "type": "integer",
            "description": "Dokumente, die zurück in die Post kamen"
          }
        }
      },
      "Erkennung": {
        "type": "object",
        "properties": {
          "zeit": {
            "type": "string",
            "format": "date-time"
          },
          "dokumente": {
            "type": "integer",
            "description": "Dokumente der Post mit Volltext"
          },
          "absender": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "mappeId": {
                  "type": "string",
                  "format": "uuid"
                },
                "typId": {
                  "type": "string",
                  "format": "uuid"
                },
                "titel": {
                  "type": "string"
                },
                "stark": {
                  "type": "boolean",
                  "description": "an einem eindeutigen Merkmal erkannt (Kundennummer, IBAN, E-Mail …)"
                },
                "punkte": {
                  "type": "number"
                },
                "gruende": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "z. B. „Kundennummer 100-4711“"
                }
              }
            }
          },
          "eindeutig": {
            "type": "string",
            "format": "uuid",
            "nullable": true,
            "description": "Eindeutig erkannter Absender"
          },
          "angaben": {
            "type": "object",
            "properties": {
              "datum": {
                "type": "object",
                "nullable": true,
                "properties": {
                  "wert": {
                    "type": "string",
                    "format": "date"
                  },
                  "sicherheit": {
                    "type": "string",
                    "enum": [
                      "hoch",
                      "mittel",
                      "niedrig"
                    ]
                  },
                  "fundstelle": {
                    "type": "string"
                  }
                }
              },
              "betrag": {
                "type": "object",
                "nullable": true,
                "properties": {
                  "wert": {
                    "type": "object",
                    "properties": {
                      "betrag": {
                        "type": "number"
                      },
                      "waehrung": {
                        "type": "string"
                      }
                    }
                  },
                  "sicherheit": {
                    "type": "string"
                  },
                  "fundstelle": {
                    "type": "string"
                  }
                }
              },
              "nummern": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "label": {
                      "type": "string"
                    },
                    "wert": {
                      "type": "string"
                    },
                    "fundstelle": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "neuerAbsender": {
            "type": "object",
            "nullable": true,
            "properties": {
              "typId": {
                "type": "string",
                "format": "uuid"
              },
              "werte": {
                "type": "object",
                "additionalProperties": {
                  "type": "string"
                }
              },
              "fundstelle": {
                "type": "string"
              }
            }
          },
          "ziele": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "mappeId": {
                  "type": "string",
                  "format": "uuid"
                },
                "typId": {
                  "type": "string",
                  "format": "uuid"
                },
                "titel": {
                  "type": "string"
                },
                "punkte": {
                  "type": "number"
                },
                "gruende": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      },
      "FotoAbgelegt": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "Kennung des Fotos im Stapel"
          }
        }
      },
      "PostFotos": {
        "type": "object",
        "required": [
          "stapel"
        ],
        "properties": {
          "stapel": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "description": "Kennungen aus POST /fotostapel, höchstens 50"
          },
          "betreff": {
            "type": "string"
          },
          "fuer": {
            "type": "string",
            "format": "uuid"
          }
        }
      },
      "FotosAnhaengen": {
        "type": "object",
        "required": [
          "stapel"
        ],
        "properties": {
          "stapel": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          },
          "dokument": {
            "type": "string",
            "format": "uuid",
            "description": "PDF der Mappe, an das die Seiten kommen"
          },
          "register": {
            "type": "string"
          }
        }
      },
      "FotosAngehaengt": {
        "type": "object",
        "properties": {
          "dokument": {
            "$ref": "#/components/schemas/Dokument"
          },
          "seiten": {
            "type": "integer"
          }
        }
      },
      "Zusammenlegen": {
        "type": "object",
        "required": [
          "quelle"
        ],
        "properties": {
          "quelle": {
            "type": "string",
            "format": "uuid",
            "description": "Id der Post, deren Seiten angehängt werden"
          }
        }
      },
      "PostAusFotos": {
        "type": "object",
        "properties": {
          "post": {
            "$ref": "#/components/schemas/Mappe"
          },
          "dokument": {
            "$ref": "#/components/schemas/Dokument"
          },
          "seiten": {
            "type": "integer"
          }
        }
      },
      "EmailEingabe": {
        "type": "object",
        "required": [
          "an",
          "betreff"
        ],
        "properties": {
          "an": {
            "type": "string",
            "description": "Eine oder mehrere Adressen, durch Komma getrennt"
          },
          "betreff": {
            "type": "string"
          },
          "nachricht": {
            "type": "string"
          },
          "dokumente": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "description": "Ids von Dokumenten dieser Mappe"
          }
        }
      },
      "EmailVersendet": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "Id der neuen E-Mail-Mappe"
          },
          "typId": {
            "type": "string",
            "format": "uuid"
          }
        }
      },
      "NotizEingabe": {
        "type": "object",
        "required": [
          "text"
        ],
        "properties": {
          "text": {
            "type": "string"
          }
        }
      },
      "Erinnerung": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "mappeId": {
            "type": "string",
            "format": "uuid"
          },
          "empfaengerId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "datum": {
            "type": "string",
            "format": "date"
          },
          "text": {
            "type": "string"
          },
          "erstellt": {
            "type": "string",
            "format": "date-time"
          },
          "erstelltVon": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "hinweis": {
            "type": "string",
            "description": "Wenn der Empfänger die Mappe nicht lesen darf"
          }
        }
      },
      "ErinnerungEingabe": {
        "type": "object",
        "required": [
          "datum",
          "text"
        ],
        "properties": {
          "datum": {
            "type": "string",
            "format": "date"
          },
          "text": {
            "type": "string"
          },
          "empfaengerId": {
            "type": "string",
            "format": "uuid",
            "description": "Benutzer; fehlt = der Benutzer des Schlüssels"
          }
        }
      },
      "Anstehend": {
        "type": "object",
        "properties": {
          "tage": {
            "type": "integer",
            "description": "Tage von heute bis „bis“"
          },
          "heute": {
            "type": "string",
            "format": "date"
          },
          "von": {
            "type": "string",
            "format": "date"
          },
          "bis": {
            "type": "string",
            "format": "date"
          },
          "feiertage": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Nur mit von/bis: gesetzliche Feiertage im Zeitraum (Datum → Name), Bundesland aus der Werkbank"
          },
          "eintraege": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "art": {
                  "type": "string",
                  "enum": [
                    "frist",
                    "erinnerung",
                    "aufgabe"
                  ]
                },
                "datum": {
                  "type": "string",
                  "format": "date"
                },
                "ab": {
                  "type": "string",
                  "format": "date",
                  "description": "ab wann unter „Zu erledigen“"
                },
                "text": {
                  "type": "string"
                },
                "mappeId": {
                  "type": "string",
                  "format": "uuid"
                },
                "mappeTitel": {
                  "type": "string"
                },
                "typId": {
                  "type": "string",
                  "format": "uuid"
                },
                "faellig": {
                  "type": "boolean",
                  "description": "steht schon unter „Zu erledigen“"
                },
                "feldKey": {
                  "type": "string",
                  "nullable": true
                },
                "erinnerungId": {
                  "type": "string",
                  "format": "uuid"
                },
                "folgetermin": {
                  "type": "boolean",
                  "description": "Künftiger Termin einer wiederkehrenden Frist, berechnet (nur mit von/bis)"
                }
              }
            }
          }
        }
      },
      "Historie": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "id": {
              "type": "integer"
            },
            "mappeId": {
              "type": "string",
              "format": "uuid"
            },
            "zeit": {
              "type": "string",
              "format": "date-time"
            },
            "benutzerId": {
              "type": "string",
              "format": "uuid",
              "nullable": true
            },
            "art": {
              "type": "string"
            },
            "daten": {
              "type": "object",
              "additionalProperties": true,
              "description": "Je nach Art, z. B. aenderungen: [{feld, label, alt, neu}] oder dokument"
            }
          }
        }
      },
      "StempelVorlagen": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            },
            "name": {
              "type": "string"
            },
            "text": {
              "type": "string"
            },
            "lage": {
              "type": "string",
              "enum": [
                "diagonal",
                "kopf",
                "fuss",
                "ecke"
              ]
            },
            "deckkraft": {
              "type": "number"
            },
            "seiten": {
              "type": "string",
              "enum": [
                "alle",
                "erste"
              ]
            },
            "seitenzahlen": {
              "type": "boolean"
            },
            "archivnummer": {
              "type": "boolean"
            }
          }
        }
      },
      "Volltext": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "ocr": {
            "type": "object"
          },
          "sprache": {
            "type": "string",
            "nullable": true,
            "description": "Sprache des Texts (#400), z. B. fra; null = keine Angabe (Deutsch). Bei mehrsprachigen Dokumenten die Hauptsprache (#579)."
          },
          "weitereSprachen": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Weitere Sprachen im Dokument (#579, „enthält auch“)"
          },
          "text": {
            "type": "string",
            "nullable": true
          },
          "seiten": {
            "type": "array",
            "description": "Nur wenn Ablago die Seiten kennt (#579: mehrsprachig oder gemischtes PDF): Text und Sprache(n) je Seite",
            "items": {
              "type": "object",
              "properties": {
                "seite": {
                  "type": "integer"
                },
                "sprachen": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "text": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "Sicht": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "beschreibung": {
            "type": "string"
          },
          "elternId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "position": {
            "type": "integer"
          },
          "typen": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "description": "Mappentypen, deren Mappen die Ansicht selbst zeigt; dazu kommen die ihrer Unteransichten"
          },
          "bedingungen": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            },
            "description": "Gelten zusammen (UND): {art:\"feld\", feld, op, wert?, bis?}, {art:\"dokumente\"|\"verknuepfungen\", register, vergleich, anzahl}, {art:\"dokumenteGesamt\"|\"verknuepfungenGesamt\", vergleich, anzahl}, {art:\"favorit\"}"
          },
          "trefferliste": {
            "type": "string",
            "nullable": true,
            "description": "Kennung der Trefferliste; null = Standard"
          },
          "rechte": {
            "type": "object",
            "readOnly": true,
            "properties": {
              "R": {
                "type": "boolean"
              },
              "C": {
                "type": "boolean"
              }
            },
            "description": "Nur für Benutzer (#148): wirksame Rechte an der Ansicht. Verborgene Ansichten fehlen in der Liste."
          }
        }
      },
      "SichtListe": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/Sicht"
        }
      },
      "Zaehler": {
        "type": "object",
        "properties": {
          "sichten": {
            "type": "object",
            "additionalProperties": {
              "type": "integer"
            },
            "description": "Anzahl Mappen je Ansicht (mit Unteransichten)"
          },
          "typen": {
            "type": "object",
            "additionalProperties": {
              "type": "object",
              "properties": {
                "anzahl": {
                  "type": "integer"
                },
                "unpassend": {
                  "type": "integer"
                },
                "demo": {
                  "type": "integer"
                }
              }
            }
          },
          "eingang": {
            "type": "integer"
          },
          "favoriten": {
            "type": "integer",
            "description": "Eigene Favoriten"
          }
        }
      },
      "SchwaerzenAnalyse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "mime": {
            "type": "string"
          },
          "sha256": {
            "type": "string"
          },
          "seiten": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "breite": {
                  "type": "number",
                  "description": "pt, wie angezeigt"
                },
                "hoehe": {
                  "type": "number"
                },
                "woerter": {
                  "type": "array",
                  "description": "[Text, x, y, b, h], relativ zur Seite",
                  "items": {
                    "type": "array",
                    "items": {}
                  }
                }
              }
            }
          },
          "quelle": {
            "type": "string",
            "enum": [
              "textebene",
              "texterkennung",
              "gemischt",
              "keine"
            ]
          },
          "erkannt": {
            "type": "integer",
            "description": "Seiten per Texterkennung"
          },
          "versioniert": {
            "type": "boolean"
          },
          "kopieName": {
            "type": "string"
          },
          "muster": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          }
        }
      },
      "Schwaerzen": {
        "type": "object",
        "properties": {
          "bereiche": {
            "type": "array",
            "maxItems": 5000,
            "items": {
              "type": "object",
              "required": [
                "seite",
                "x",
                "y",
                "b",
                "h"
              ],
              "properties": {
                "seite": {
                  "type": "integer",
                  "minimum": 1
                },
                "x": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1
                },
                "y": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1
                },
                "b": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1
                },
                "h": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1
                }
              }
            }
          },
          "begriffe": {
            "type": "array",
            "maxItems": 50,
            "items": {
              "type": "string",
              "maxLength": 200
            },
            "description": "Überall schwärzen, z. B. ein Name oder eine IBAN"
          },
          "muster": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "iban",
                "steuerid",
                "geburtsdatum",
                "email",
                "telefon"
              ]
            },
            "description": "Alle Fundstellen dieser Muster schwärzen"
          },
          "ziel": {
            "type": "string",
            "enum": [
              "kopie",
              "version"
            ],
            "description": "Standard: kopie"
          }
        }
      },
      "Geschwaerzt": {
        "type": "object",
        "properties": {
          "dokument": {
            "$ref": "#/components/schemas/Dokument"
          },
          "ziel": {
            "type": "string"
          },
          "stellen": {
            "type": "integer"
          },
          "seiten": {
            "type": "integer",
            "description": "betroffene Seiten"
          },
          "begriffe": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "gefunden": {
                  "type": "integer"
                }
              }
            },
            "description": "je Suchbegriff (in der Reihenfolge der Eingabe, ohne doppelte und leere)"
          },
          "meldung": {
            "type": "string"
          }
        }
      },
      "VerkleinernSchaetzung": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "groesse": {
            "type": "integer"
          },
          "seiten": {
            "type": "integer"
          },
          "bilder": {
            "type": "integer"
          },
          "hoechsteDpi": {
            "type": "integer",
            "nullable": true
          },
          "versioniert": {
            "type": "boolean"
          },
          "papierkorb": {
            "type": "boolean"
          },
          "mindestens": {
            "type": "number",
            "description": "Mindestersparnis (0.1)"
          },
          "stufen": {
            "type": "object",
            "description": "je Stufe (bildschirm, standard, druck)",
            "additionalProperties": {
              "type": "object",
              "properties": {
                "dpi": {
                  "type": "integer"
                },
                "geschaetzt": {
                  "type": "integer"
                },
                "lohnt": {
                  "type": "boolean"
                },
                "bilder": {
                  "type": "integer",
                  "description": "Bilder, die neu gerechnet würden"
                }
              }
            }
          }
        }
      },
      "Verkleinern": {
        "type": "object",
        "properties": {
          "stufe": {
            "type": "string",
            "enum": [
              "bildschirm",
              "standard",
              "druck"
            ],
            "description": "Standard: standard"
          },
          "bestaetigt": {
            "type": "boolean",
            "description": "Nötig ohne Versionierung"
          }
        }
      },
      "Verkleinert": {
        "type": "object",
        "properties": {
          "dokument": {
            "$ref": "#/components/schemas/Dokument"
          },
          "unveraendert": {
            "type": "boolean"
          },
          "vorher": {
            "type": "integer"
          },
          "nachher": {
            "type": "integer"
          },
          "stufe": {
            "type": "string"
          },
          "meldung": {
            "type": "string",
            "description": "z. B. „Verkleinert von 18,4 MB auf 2,1 MB (−89 %).“"
          }
        }
      },
      "BaumKnoten": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "typId": {
            "type": "string",
            "format": "uuid"
          },
          "typ": {
            "type": "string"
          },
          "titel": {
            "type": "string"
          },
          "ebene": {
            "type": "integer",
            "description": "0 = Start-Mappe"
          },
          "ueber": {
            "type": "object",
            "nullable": true,
            "description": "über welchen Verweis erreicht",
            "properties": {
              "vonId": {
                "type": "string",
                "format": "uuid"
              },
              "richtung": {
                "type": "string",
                "enum": [
                  "verwiesenVon",
                  "verweistAuf"
                ]
              },
              "feldKey": {
                "type": "string"
              },
              "feld": {
                "type": "string"
              },
              "verweisart": {
                "type": "string",
                "enum": [
                  "zugehoerigkeit",
                  "bezug"
                ]
              }
            }
          },
          "nurBezug": {
            "type": "boolean",
            "description": "mit nurZugehoerigkeit: nur über Bezug verbunden – Blatt, nicht weiterverfolgt"
          },
          "auchUeber": {
            "type": "array",
            "description": "weitere Wege innerhalb des Baums (Kreise)",
            "items": {
              "type": "object"
            }
          },
          "dokumente": {
            "type": "integer"
          },
          "aussen": {
            "type": "object",
            "description": "Verweise zu Mappen außerhalb des Baums (je Richtung höchstens 20 einzeln, anzahl zählt alle); nicht lesbare ohne Titel",
            "properties": {
              "verweistAuf": {
                "type": "array",
                "items": {
                  "type": "object"
                }
              },
              "verwiesenVon": {
                "type": "array",
                "items": {
                  "type": "object"
                }
              },
              "anzahl": {
                "type": "object"
              }
            }
          },
          "aufbewahrenBis": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "gesperrt": {
            "type": "boolean",
            "description": "in der Aufbewahrungsfrist (#212)"
          },
          "rechte": {
            "type": "object",
            "description": "C, R, U, D, P des Aufrufers"
          }
        }
      },
      "Baum": {
        "type": "object",
        "properties": {
          "startId": {
            "type": "string",
            "format": "uuid"
          },
          "optionen": {
            "type": "object"
          },
          "knoten": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BaumKnoten"
            }
          },
          "abgeschnitten": {
            "type": "boolean"
          },
          "kreise": {
            "type": "integer"
          },
          "verborgen": {
            "type": "integer"
          },
          "tieferMoeglich": {
            "type": "boolean"
          }
        }
      },
      "Datenschutz": {
        "type": "object",
        "properties": {
          "verantwortlicher": {
            "type": "string"
          },
          "empfaenger": {
            "type": "string"
          },
          "rechte": {
            "type": "string",
            "description": "Text auf dem Deckblatt; leer oder unverändert = Vorschlag in der eingestellten Anrede"
          },
          "anrede": {
            "type": "string",
            "enum": [
              "du",
              "sie"
            ],
            "description": "Anrede in Unterlagen für Dritte (#474): Deckblatt, Übersicht, LIESMICH, Abrufseite, E-Mails an die Person. Vorgabe du; die Oberfläche bleibt bei du."
          },
          "typen": {
            "type": "object",
            "description": "Typ-Id → { person: boolean, zweck: string }",
            "additionalProperties": {
              "type": "object",
              "properties": {
                "person": {
                  "type": "boolean"
                },
                "zweck": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "AuskunftStand": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "mappeId": {
            "type": "string",
            "format": "uuid"
          },
          "titel": {
            "type": "string"
          },
          "erstellt": {
            "type": "string",
            "format": "date-time"
          },
          "bis": {
            "type": "string",
            "format": "date-time"
          },
          "bytes": {
            "type": "integer"
          },
          "mappen": {
            "type": "integer"
          },
          "dokumente": {
            "type": "integer"
          },
          "verschluesselt": {
            "type": "boolean"
          },
          "von": {
            "type": "string"
          }
        }
      },
      "DatenschutzStand": {
        "type": "object",
        "properties": {
          "einstellung": {
            "$ref": "#/components/schemas/Datenschutz"
          },
          "auskuenfte": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AuskunftStand"
            }
          },
          "tage": {
            "type": "integer"
          },
          "links": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AuskunftLink"
            },
            "description": "Abruf-Links (#455), neueste zuerst – auch nach dem Löschen der ZIP als Nachweis"
          },
          "adresse": {
            "type": "string",
            "description": "Adresse von Ablago für Links"
          },
          "oeffentlich": {
            "type": "boolean",
            "description": "Adresse sieht nach Internet aus (nicht localhost, kein privates Netz) – Vorschlag: Abruf-Link"
          },
          "mail": {
            "type": "boolean",
            "description": "E-Mail-Versand eingerichtet"
          }
        }
      },
      "LoeschEintrag": {
        "type": "object",
        "description": "Ein Schritt einer Löschung (#470) – ohne Titel, Feldwerte und Dateinamen",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "zeit": {
            "type": "string",
            "format": "date-time"
          },
          "art": {
            "type": "string",
            "enum": [
              "mappe",
              "dokument"
            ]
          },
          "schritt": {
            "type": "string",
            "enum": [
              "papierkorb",
              "endgueltig",
              "wiederhergestellt"
            ]
          },
          "weg": {
            "type": "string",
            "description": "einzeln, mehrere, verknuepft, dokument, ersetzt, version, papierkorb, leeren, abmelden, ablauf, ausgeschaltet, zurueckgerollt"
          },
          "mappeId": {
            "type": "string",
            "format": "uuid"
          },
          "typId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "typ": {
            "type": "string",
            "description": "Name des Mappentyps beim Löschen"
          },
          "nummer": {
            "type": "string",
            "nullable": true,
            "description": "Nummer aus dem Nummernkreis der Mappe"
          },
          "archivnummer": {
            "type": "string",
            "nullable": true
          },
          "dokumentId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "version": {
            "type": "integer",
            "nullable": true
          },
          "sha256": {
            "type": "string",
            "nullable": true
          },
          "groesse": {
            "type": "integer",
            "nullable": true
          },
          "mime": {
            "type": "string",
            "nullable": true
          },
          "seiten": {
            "type": "integer",
            "nullable": true
          },
          "anzahl": {
            "type": "object",
            "nullable": true,
            "properties": {
              "dokumente": {
                "type": "integer"
              },
              "versionen": {
                "type": "integer"
              },
              "notizen": {
                "type": "integer"
              },
              "verweise": {
                "type": "integer"
              }
            }
          },
          "vonId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "von": {
            "type": "string"
          },
          "ausloeser": {
            "type": "string",
            "enum": [
              "benutzer",
              "api",
              "paket",
              "automatisch"
            ]
          },
          "grund": {
            "type": "string",
            "nullable": true,
            "enum": [
              "frist",
              "verlangen",
              "nicht_noetig",
              "sonstiges"
            ]
          },
          "grundText": {
            "type": "string"
          },
          "vorgang": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "startId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          }
        }
      },
      "Loeschprotokoll": {
        "type": "object",
        "properties": {
          "eintraege": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LoeschEintrag"
            }
          },
          "gesamt": {
            "type": "integer"
          },
          "jahre": {
            "type": "integer",
            "description": "Aufbewahrung in Jahren"
          },
          "max": {
            "type": "integer"
          }
        }
      },
      "LoeschprotokollEinstellung": {
        "type": "object",
        "properties": {
          "jahre": {
            "type": "integer",
            "minimum": 1,
            "maximum": 30
          }
        }
      },
      "AuskunftLink": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "auskunftId": {
            "type": "string",
            "format": "uuid"
          },
          "mappeId": {
            "type": "string",
            "format": "uuid"
          },
          "titel": {
            "type": "string"
          },
          "empfaenger": {
            "type": "string",
            "nullable": true
          },
          "codeArt": {
            "type": "string",
            "enum": [
              "erzeugt",
              "eigen"
            ]
          },
          "erstellt": {
            "type": "string",
            "format": "date-time"
          },
          "erstelltVon": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "ablauf": {
            "type": "string",
            "format": "date-time"
          },
          "maxAbrufe": {
            "type": "integer"
          },
          "abrufe": {
            "type": "integer"
          },
          "fehlversuche": {
            "type": "integer"
          },
          "gesperrt": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "nach zu vielen falschen Abrufcodes"
          },
          "widerrufen": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "abgerufen": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "zuletzt erfolgreich abgerufen"
          }
        }
      },
      "AuskunftLinkEingabe": {
        "type": "object",
        "properties": {
          "tage": {
            "type": "integer",
            "description": "1–90, Standard 30"
          },
          "abrufe": {
            "type": "integer",
            "description": "1–10, Standard 3"
          },
          "code": {
            "type": "string",
            "description": "eigener Abrufcode (z. B. Vertragsnummer, mindestens 6 Zeichen); ohne Angabe erzeugt Ablago einen"
          },
          "an": {
            "type": "string",
            "format": "email"
          },
          "senden": {
            "type": "boolean",
            "description": "Link per E-Mail an „an“ schicken (ohne Code)"
          }
        }
      },
      "AuskunftLinkNeu": {
        "type": "object",
        "properties": {
          "link": {
            "$ref": "#/components/schemas/AuskunftLink"
          },
          "url": {
            "type": "string",
            "description": "nur jetzt im Klartext"
          },
          "code": {
            "type": "string",
            "description": "Abrufcode, nur jetzt im Klartext – auf anderem Weg mitteilen"
          },
          "gesendet": {
            "type": "boolean"
          }
        }
      },
      "AuskunftEmail": {
        "type": "object",
        "required": [
          "an"
        ],
        "properties": {
          "an": {
            "type": "string",
            "description": "Adressen, durch Komma getrennt"
          },
          "betreff": {
            "type": "string"
          },
          "nachricht": {
            "type": "string"
          }
        }
      },
      "AuskunftEmailErgebnis": {
        "type": "object",
        "properties": {
          "an": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "AuskunftVorschauEingabe": {
        "type": "object",
        "required": [
          "mappeId"
        ],
        "properties": {
          "mappeId": {
            "type": "string",
            "format": "uuid"
          },
          "tiefe": {
            "type": "integer"
          },
          "richtungen": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "AuskunftVorschau": {
        "type": "object",
        "properties": {
          "baum": {
            "$ref": "#/components/schemas/Baum"
          },
          "mappen": {
            "type": "object",
            "description": "Mappe-Id → { dokumente, notizen, historie, dritte, ohneFelder } (auch für Bezug-Mappen, falls man sie ganz aufnimmt)"
          },
          "frist": {
            "type": "string",
            "format": "date"
          }
        }
      },
      "AuskunftEingabe": {
        "type": "object",
        "required": [
          "mappeId",
          "auswahl",
          "geprueft"
        ],
        "properties": {
          "mappeId": {
            "type": "string",
            "format": "uuid"
          },
          "tiefe": {
            "type": "integer"
          },
          "richtungen": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "auswahl": {
            "type": "object",
            "properties": {
              "mappen": {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "dokumente": {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "notizen": {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "historie": {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uuid"
                },
                "description": "Mappen, deren Historie mitgeht"
              },
              "ohneNotizen": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "grund": {
                      "type": "string"
                    }
                  }
                }
              },
              "erwaehnungen": {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uuid"
                },
                "description": "Bezug-Mappen (nurBezug), die nur mit Art, Titel und Feld hinausgehen – ohne Dokumente, Notizen und übrige Werte (#472); ganz aufgenommene stehen in mappen"
              }
            }
          },
          "geprueft": {
            "type": "boolean"
          },
          "passwort": {
            "type": "string"
          },
          "empfaenger": {
            "type": "string"
          },
          "anmerkung": {
            "type": "string"
          }
        }
      },
      "AuskunftFrist": {
        "type": "object",
        "required": [
          "mappeId"
        ],
        "properties": {
          "mappeId": {
            "type": "string",
            "format": "uuid"
          },
          "eingang": {
            "type": "string",
            "format": "date",
            "description": "Eingang der Anfrage (Standard heute)"
          }
        }
      },
      "Auftrag": {
        "type": "object",
        "description": "Hintergrundauftrag (#364)",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "art": {
            "type": "string"
          },
          "titel": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "laeuft",
              "fertig",
              "fehler"
            ]
          },
          "fertig": {
            "type": "integer"
          },
          "gesamt": {
            "type": "integer"
          },
          "phase": {
            "type": "string",
            "nullable": true
          },
          "phasen": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "gestartet": {
            "type": "string",
            "format": "date-time"
          },
          "beendet": {
            "type": "string",
            "format": "date-time"
          },
          "ergebnis": {
            "type": "object"
          },
          "fehler": {
            "type": "string"
          }
        }
      },
      "VerkleinernViele": {
        "type": "object",
        "required": [
          "ids"
        ],
        "properties": {
          "ids": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          },
          "stufe": {
            "type": "string",
            "enum": [
              "bildschirm",
              "standard",
              "druck"
            ]
          },
          "ohneOriginal": {
            "type": "boolean"
          },
          "bestaetigt": {
            "type": "boolean"
          }
        }
      },
      "GrossePdfs": {
        "type": "object",
        "properties": {
          "stufe": {
            "type": "string"
          },
          "ab": {
            "type": "number"
          },
          "geschaetzteErsparnis": {
            "type": "integer"
          },
          "mehr": {
            "type": "boolean"
          },
          "eintraege": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "name": {
                  "type": "string"
                },
                "groesse": {
                  "type": "integer"
                },
                "mappeId": {
                  "type": "string",
                  "format": "uuid"
                },
                "mappeTitel": {
                  "type": "string"
                },
                "version": {
                  "type": "integer"
                },
                "geschaetzt": {
                  "type": "integer",
                  "nullable": true
                },
                "lohnt": {
                  "type": "boolean",
                  "nullable": true
                }
              }
            }
          }
        }
      },
      "Seiten": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "version": {
            "type": "integer"
          },
          "sha256": {
            "type": "string"
          },
          "anzahl": {
            "type": "integer"
          },
          "drehungen": {
            "type": "array",
            "items": {
              "type": "integer",
              "enum": [
                0,
                90,
                180,
                270
              ]
            }
          },
          "bilderBis": {
            "type": "integer",
            "description": "Seitenbilder gibt es bis zu dieser Seite"
          }
        }
      },
      "SeitenBearbeiten": {
        "type": "object",
        "required": [
          "seiten"
        ],
        "properties": {
          "seiten": {
            "type": "array",
            "minItems": 1,
            "items": {
              "type": "object",
              "required": [
                "nr"
              ],
              "properties": {
                "nr": {
                  "type": "integer",
                  "minimum": 1
                },
                "drehung": {
                  "type": "integer",
                  "enum": [
                    0,
                    90,
                    180,
                    270
                  ]
                }
              }
            }
          },
          "teile": {
            "type": "array",
            "items": {
              "type": "integer",
              "minimum": 0
            },
            "description": "Positionen in seiten, an denen ein neuer Teil beginnt"
          },
          "bestaetigt": {
            "type": "boolean",
            "description": "Ersetzen ohne Versionierung bestätigen"
          }
        }
      },
      "SeitenErgebnis": {
        "type": "object",
        "properties": {
          "dokumente": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Dokument"
            }
          },
          "posten": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Mappe"
            },
            "description": "Neue Posts beim Teilen einer Post"
          }
        }
      },
      "Zusammenfuegen": {
        "type": "object",
        "required": [
          "dokumente"
        ],
        "properties": {
          "dokumente": {
            "type": "array",
            "minItems": 2,
            "maxItems": 100,
            "items": {
              "type": "string",
              "format": "uuid"
            }
          },
          "ziel": {
            "type": "string",
            "format": "uuid"
          },
          "register": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "originaleEntfernen": {
            "type": "boolean"
          },
          "bestaetigt": {
            "type": "boolean"
          }
        }
      },
      "Zusammengefuegt": {
        "type": "object",
        "properties": {
          "dokument": {
            "$ref": "#/components/schemas/Dokument"
          },
          "erledigtePost": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          }
        }
      },
      "EmailMehrere": {
        "type": "object",
        "required": [
          "ids",
          "an",
          "betreff"
        ],
        "properties": {
          "ids": {
            "type": "array",
            "minItems": 1,
            "maxItems": 100,
            "items": {
              "type": "string",
              "format": "uuid"
            }
          },
          "an": {
            "type": "string",
            "description": "Empfänger, mehrere durch Komma getrennt (höchstens 20)"
          },
          "betreff": {
            "type": "string",
            "maxLength": 250
          },
          "nachricht": {
            "type": "string"
          },
          "angaben": {
            "type": "boolean",
            "description": "Angaben je Mappe als PDF (Standard: ja)"
          },
          "dokumente": {
            "oneOf": [
              {
                "type": "string",
                "enum": [
                  "alle"
                ]
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            ]
          }
        }
      },
      "EmailMehrereVersendet": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "Id der Post"
          },
          "typId": {
            "type": "string",
            "format": "uuid"
          },
          "mappen": {
            "type": "integer"
          },
          "anhaenge": {
            "type": "integer"
          }
        }
      },
      "Archivnummer": {
        "type": "object",
        "properties": {
          "archivnummer": {
            "type": "string",
            "nullable": true,
            "maxLength": 40,
            "description": "leer oder null entfernt die Nummer"
          }
        }
      },
      "ArchivnummerTreffer": {
        "type": "object",
        "properties": {
          "dokument": {
            "$ref": "#/components/schemas/Dokument"
          },
          "mappeId": {
            "type": "string",
            "format": "uuid"
          },
          "typId": {
            "type": "string",
            "format": "uuid"
          },
          "titel": {
            "type": "string"
          }
        }
      },
      "VektorSetzen": {
        "type": "object",
        "required": [
          "modell",
          "vektor"
        ],
        "properties": {
          "modell": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9._:/+-]{0,99}$",
            "description": "Kennung des Modells, z. B. „static-similarity-mrl-multilingual-v1/256“"
          },
          "vektor": {
            "type": "array",
            "items": {
              "type": "number"
            },
            "minItems": 8,
            "maxItems": 4096
          }
        }
      },
      "VektorGesetzt": {
        "type": "object",
        "properties": {
          "dokument": {
            "type": "string",
            "format": "uuid"
          },
          "modell": {
            "type": "string"
          },
          "dimension": {
            "type": "integer"
          }
        }
      },
      "SicherungSchlank": {
        "type": "object",
        "description": "Schlanke Metadaten einer Sicherung (#585) – so auch als <name>.json auf dem Ziel außer Haus.",
        "properties": {
          "name": {
            "type": "string",
            "description": "Name der Sicherung (ohne Endung)"
          },
          "format": {
            "type": "integer"
          },
          "schlank": {
            "type": "boolean",
            "enum": [
              true
            ]
          },
          "datei": {
            "type": "string",
            "description": "<name>.dms-sicherung"
          },
          "groesse": {
            "type": "integer",
            "description": "Bytes"
          },
          "sha256": {
            "type": "string",
            "description": "SHA-256 der Datei (hex)"
          },
          "beginn": {
            "type": "string",
            "format": "date-time"
          },
          "verschluesselung": {
            "type": "object",
            "properties": {
              "verfahren": {
                "type": "string"
              },
              "fingerabdruck": {
                "type": "string"
              }
            }
          }
        }
      },
      "SicherungRueckmeldung": {
        "type": "object",
        "required": [
          "status"
        ],
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "laeuft",
              "hochgeladen",
              "geprueft",
              "fehlgeschlagen"
            ]
          },
          "pruefung": {
            "type": "string",
            "enum": [
              "pruefsumme",
              "stichprobe",
              "groesse",
              "keine"
            ],
            "description": "pruefsumme: SHA-256 vom Ziel bestätigt oder vollständig zurückgelesen; stichprobe: Größe und Stichproben; groesse: nur die Größe; keine: Ziel ohne Lesezugriff (z. B. Dateiablage)"
          },
          "grund": {
            "type": "string",
            "maxLength": 500,
            "description": "Verständlicher Grund, Pflicht bei fehlgeschlagen"
          },
          "endgueltig": {
            "type": "boolean",
            "description": "Nur bei fehlgeschlagen: Eine Wiederholung hilft nicht (z. B. Prüfsumme falsch, Anmeldung abgelehnt) – E-Mail an die Administratoren"
          },
          "ziel": {
            "type": "string",
            "maxLength": 200,
            "description": "Ziel in Worten, ohne Zugangsdaten"
          },
          "bytes": {
            "type": "integer",
            "description": "Schon übertragen"
          },
          "gesamt": {
            "type": "integer",
            "description": "Größe der Datei"
          }
        }
      },
      "SicherungExtern": {
        "type": "object",
        "description": "Stand der Kopie außer Haus einer Sicherung für ein Paket (#585)",
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "offen",
              "laeuft",
              "hochgeladen",
              "geprueft",
              "fehlgeschlagen"
            ]
          },
          "pruefung": {
            "type": "string"
          },
          "grund": {
            "type": "string"
          },
          "endgueltig": {
            "type": "boolean"
          },
          "ziel": {
            "type": "string"
          },
          "bytes": {
            "type": "integer"
          },
          "gesamt": {
            "type": "integer"
          },
          "seit": {
            "type": "string",
            "format": "date-time"
          },
          "am": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "ArchivfassungGesetzt": {
        "type": "object",
        "properties": {
          "dokument": {
            "type": "string",
            "format": "uuid"
          },
          "archivfassung": {
            "type": "object",
            "properties": {
              "mime": {
                "type": "string"
              },
              "groesse": {
                "type": "integer"
              },
              "sha256": {
                "type": "string"
              },
              "seiten": {
                "type": "integer"
              },
              "pdfa": {
                "type": "object",
                "properties": {
                  "teil": {
                    "type": "integer"
                  },
                  "stufe": {
                    "type": "string",
                    "nullable": true
                  }
                }
              },
              "paket": {
                "type": "object"
              },
              "erstellt": {
                "type": "string",
                "format": "date-time"
              },
              "signiert": {
                "type": "boolean"
              },
              "erechnung": {
                "type": "boolean"
              },
              "weggelassen": {
                "type": "boolean",
                "description": "Das Original enthielt externe Inhalte, JavaScript oder Aktionen, die nicht übernommen wurden"
              }
            }
          }
        }
      },
      "Wortpositionen": {
        "type": "object",
        "properties": {
          "dokument": {
            "type": "string",
            "format": "uuid"
          },
          "sha256": {
            "type": "string"
          },
          "quelle": {
            "type": "string",
            "enum": [
              "original",
              "lesefassung"
            ]
          },
          "mime": {
            "type": "string"
          },
          "vollstaendig": {
            "type": "boolean"
          },
          "seiten": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "seite": {
                  "type": "integer"
                },
                "quelle": {
                  "type": "string",
                  "enum": [
                    "textebene",
                    "texterkennung",
                    "keine"
                  ]
                },
                "breite": {
                  "type": "number"
                },
                "hoehe": {
                  "type": "number"
                },
                "woerter": {
                  "type": "array",
                  "description": "[Text, x, y, b, h], relativ zur Seite",
                  "items": {
                    "type": "array",
                    "items": {}
                  }
                }
              }
            }
          }
        }
      },
      "FassungGesetzt": {
        "type": "object",
        "properties": {
          "dokument": {
            "type": "string",
            "format": "uuid"
          },
          "fassung": {
            "type": "object",
            "properties": {
              "mime": {
                "type": "string",
                "enum": [
                  "application/pdf",
                  "image/png",
                  "image/jpeg"
                ]
              },
              "groesse": {
                "type": "integer"
              },
              "sha256": {
                "type": "string"
              },
              "seiten": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "paket": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "name": {
                    "type": "string"
                  },
                  "version": {
                    "type": "string"
                  }
                }
              },
              "erstellt": {
                "type": "string",
                "format": "date-time"
              }
            }
          }
        }
      },
      "VorschaubildGesetzt": {
        "type": "object",
        "properties": {
          "dokument": {
            "type": "string",
            "format": "uuid"
          },
          "mime": {
            "type": "string"
          },
          "groesse": {
            "type": "integer"
          }
        }
      },
      "VektorGeloescht": {
        "type": "object",
        "properties": {
          "entfernt": {
            "type": "integer"
          }
        }
      },
      "AehnlicheAnfrage": {
        "type": "object",
        "required": [
          "vektor"
        ],
        "properties": {
          "modell": {
            "type": "string",
            "description": "ohne Angabe das aktuelle Modell"
          },
          "vektor": {
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "anzahl": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100
          },
          "schwelle": {
            "type": "number",
            "minimum": -1,
            "maximum": 1
          }
        }
      },
      "Aehnliche": {
        "type": "object",
        "properties": {
          "modell": {
            "type": "string"
          },
          "treffer": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "dokumentId": {
                  "type": "string",
                  "format": "uuid"
                },
                "mappeId": {
                  "type": "string",
                  "format": "uuid"
                },
                "aehnlichkeit": {
                  "type": "number",
                  "description": "Kosinus, -1 bis 1"
                }
              }
            }
          }
        }
      },
      "VolltextSchreiben": {
        "type": "object",
        "required": [
          "text"
        ],
        "properties": {
          "text": {
            "type": "string",
            "description": "höchstens 5 000 000 Zeichen; Seiten dürfen durch Seitenvorschub (\\f) getrennt sein (#579)"
          },
          "seiten": {
            "type": "integer",
            "minimum": 1
          },
          "sprache": {
            "type": "string",
            "nullable": true,
            "enum": [
              "deu",
              "eng",
              "fra",
              "spa",
              "ita",
              "nld",
              "tur",
              "pol",
              "por",
              "rus",
              "ukr",
              "ara",
              null
            ],
            "description": "Sprache des Texts (#400) bzw. Hauptsprache; fehlt oder null: Ablago erkennt sie (bei Seiten: die mit dem meisten Text)"
          },
          "seitensprachen": {
            "type": "array",
            "maxItems": 1000,
            "description": "Sprache je Seite (#579), ein Eintrag je durch \\f getrennter Seite: ein bis zwei Kennungen (Mischseite) oder null (Ablago erkennt sie). Beispiel: [[\"deu\"], [\"fra\"], [\"deu\", \"fra\"]]",
            "items": {
              "type": "array",
              "nullable": true,
              "maxItems": 2,
              "items": {
                "type": "string",
                "enum": [
                  "deu",
                  "eng",
                  "fra",
                  "spa",
                  "ita",
                  "nld",
                  "tur",
                  "pol",
                  "por",
                  "rus",
                  "ukr",
                  "ara"
                ]
              }
            }
          },
          "weitere": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "deu",
                "eng",
                "fra",
                "spa",
                "ita",
                "nld",
                "tur",
                "pol",
                "por",
                "rus",
                "ukr",
                "ara"
              ]
            },
            "description": "Weitere Sprachen fürs ganze Dokument (#579), wenn das Paket die Seiten nicht kennt"
          },
          "woerter": {
            "type": "array",
            "nullable": true,
            "maxItems": 1000,
            "description": "Wortpositionen (#631) für die Archivfassung: je durch \\f getrennter Seite eine Liste [Text, x, y, b, h] (relativ zur Seite, wie GET …/seiten/{nr}/scan sie liefert, 0…1, Ursprung oben links) oder null (Seite ohne Angabe, z. B. Textebene). Höchstens 1,5 Millionen Wörter. Ohne Angabe nimmt ein Paket die bisherigen mit weg; null: entfernen.",
            "items": {
              "type": "array",
              "nullable": true,
              "items": {
                "type": "array",
                "minItems": 5,
                "maxItems": 5,
                "items": {}
              }
            }
          }
        }
      },
      "SpracheSetzen": {
        "type": "object",
        "required": [
          "sprache"
        ],
        "properties": {
          "sprache": {
            "type": "string",
            "nullable": true,
            "enum": [
              "deu",
              "eng",
              "fra",
              "spa",
              "ita",
              "nld",
              "tur",
              "pol",
              "por",
              "rus",
              "ukr",
              "ara",
              null
            ]
          },
          "weitere": {
            "type": "array",
            "nullable": true,
            "items": {
              "type": "string",
              "enum": [
                "deu",
                "eng",
                "fra",
                "spa",
                "ita",
                "nld",
                "tur",
                "pol",
                "por",
                "rus",
                "ukr",
                "ara"
              ]
            },
            "description": "Weitere Sprachen (#579); fehlt: bleiben, [] oder null: keine"
          }
        }
      },
      "TeilenHinweis": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "teilenAb": {
            "type": "integer",
            "nullable": true
          }
        }
      },
      "DokumentSprache": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "sprache": {
            "type": "string",
            "nullable": true
          },
          "weitereSprachen": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "ocr": {
            "type": "object"
          }
        }
      },
      "Gleiche": {
        "type": "object",
        "required": [
          "pruefwerte"
        ],
        "properties": {
          "pruefwerte": {
            "type": "array",
            "maxItems": 100,
            "items": {
              "type": "string",
              "pattern": "^[0-9a-f]{64}$"
            }
          },
          "ohneMappe": {
            "type": "string",
            "format": "uuid"
          }
        }
      },
      "Fundstellen": {
        "type": "object",
        "properties": {
          "fundstellen": {
            "type": "object",
            "description": "Je Prüfwert höchstens 5 Fundstellen",
            "additionalProperties": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "mappeId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "typId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "titel": {
                    "type": "string"
                  },
                  "typ": {
                    "type": "string"
                  },
                  "register": {
                    "type": "string"
                  },
                  "name": {
                    "type": "string"
                  },
                  "erstellt": {
                    "type": "string",
                    "format": "date-time"
                  }
                }
              }
            }
          }
        }
      },
      "PapierkorbDokumente": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid"
            },
            "art": {
              "type": "string",
              "enum": [
                "dokument"
              ]
            },
            "mappeId": {
              "type": "string",
              "format": "uuid"
            },
            "typId": {
              "type": "string",
              "format": "uuid"
            },
            "mappeTitel": {
              "type": "string"
            },
            "registerKey": {
              "type": "string"
            },
            "register": {
              "type": "string"
            },
            "name": {
              "type": "string"
            },
            "mime": {
              "type": "string"
            },
            "groesse": {
              "type": "integer"
            },
            "sha256": {
              "type": "string"
            },
            "versionen": {
              "type": "integer",
              "description": "ältere Versionen, die mitgegangen sind"
            },
            "erstellt": {
              "type": "string",
              "format": "date-time"
            },
            "erstelltVon": {
              "type": "string",
              "nullable": true
            },
            "geloescht": {
              "type": "string",
              "format": "date-time"
            },
            "geloeschtVon": {
              "type": "string",
              "nullable": true
            },
            "mappe": {
              "type": "string",
              "enum": [
                "da",
                "papierkorb",
                "weg"
              ]
            }
          }
        }
      },
      "DokumentWiederhergestellt": {
        "type": "object",
        "properties": {
          "dokument": {
            "$ref": "#/components/schemas/Dokument"
          },
          "typId": {
            "type": "string",
            "format": "uuid"
          }
        }
      },
      "Hochgeladen": {
        "type": "object",
        "properties": {
          "dokument": {
            "$ref": "#/components/schemas/Dokument"
          },
          "gleicherInhalt": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "mappeId": {
                  "type": "string",
                  "format": "uuid"
                },
                "name": {
                  "type": "string"
                },
                "titel": {
                  "type": "string"
                },
                "typId": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            }
          }
        }
      },
      "Benutzer": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "email": {
            "type": "string",
            "format": "email"
          },
          "name": {
            "type": "string"
          },
          "rolle": {
            "type": "string",
            "enum": [
              "admin",
              "mitglied"
            ]
          },
          "aktiv": {
            "type": "boolean"
          },
          "hatPasswort": {
            "type": "boolean"
          },
          "erstellt": {
            "type": "string",
            "format": "date-time"
          },
          "letzteAnmeldung": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "rollen": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "description": "Weitere (fachliche) Rollen: Ids von Rollen-Mappen, ohne Administrator und Mitglied"
          }
        }
      },
      "BenutzerListe": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/Benutzer"
        }
      },
      "BenutzerEingabe": {
        "type": "object",
        "required": [
          "email"
        ],
        "properties": {
          "email": {
            "type": "string",
            "format": "email"
          },
          "name": {
            "type": "string"
          },
          "rolle": {
            "type": "string",
            "enum": [
              "admin",
              "mitglied"
            ]
          },
          "rollen": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "description": "Weitere (fachliche) Rollen: Ids von Rollen-Mappen, ohne Administrator und Mitglied"
          }
        }
      },
      "BenutzerAenderung": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "rolle": {
            "type": "string",
            "enum": [
              "admin",
              "mitglied"
            ]
          },
          "aktiv": {
            "type": "boolean"
          },
          "rollen": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "description": "Weitere (fachliche) Rollen: Ids von Rollen-Mappen, ohne Administrator und Mitglied"
          }
        }
      },
      "RollenListe": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid"
            },
            "name": {
              "type": "string"
            },
            "system": {
              "type": "boolean",
              "description": "Administrator oder Mitglied"
            }
          }
        }
      },
      "LinkErgebnis": {
        "type": "object",
        "properties": {
          "benutzer": {
            "$ref": "#/components/schemas/Benutzer"
          },
          "mailVerschickt": {
            "type": "boolean"
          },
          "link": {
            "type": "string",
            "description": "Nur ohne E-Mail-Versand"
          }
        }
      },
      "ZusammenfassungEingabe": {
        "type": "object",
        "properties": {
          "aktiv": {
            "type": "boolean"
          },
          "uhrzeit": {
            "type": "string",
            "nullable": true,
            "example": "07:00"
          },
          "tage": {
            "type": "array",
            "items": {
              "type": "integer",
              "minimum": 1,
              "maximum": 7
            }
          },
          "feiertage": {
            "type": "boolean"
          }
        }
      },
      "Zusammenfassung": {
        "type": "object",
        "properties": {
          "aktiv": {
            "type": "boolean"
          },
          "uhrzeit": {
            "type": "string",
            "nullable": true
          },
          "tage": {
            "type": "array",
            "items": {
              "type": "integer"
            }
          },
          "feiertage": {
            "type": "boolean"
          },
          "standard": {
            "type": "object",
            "properties": {
              "uhrzeit": {
                "type": "string"
              },
              "tage": {
                "type": "array",
                "items": {
                  "type": "integer"
                }
              },
              "bundesland": {
                "type": "string",
                "nullable": true
              }
            }
          },
          "versand": {
            "type": "boolean"
          }
        }
      },
      "Abwesenheit": {
        "type": "object",
        "required": [
          "an"
        ],
        "properties": {
          "an": {
            "type": "boolean"
          },
          "von": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "bis": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "vertreterId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          }
        }
      },
      "AbwesenheitStand": {
        "type": "object",
        "properties": {
          "abwesenheit": {
            "$ref": "#/components/schemas/Abwesenheit",
            "nullable": true
          },
          "offeneAufgaben": {
            "type": "integer"
          }
        }
      },
      "Zaehlerstand": {
        "type": "object",
        "required": [
          "neuePost",
          "zuErledigen",
          "anstehend",
          "ueberfaellig",
          "stand",
          "geaendert"
        ],
        "additionalProperties": false,
        "properties": {
          "neuePost": {
            "type": "integer",
            "minimum": 0,
            "description": "Post im Stand „Neu“ für dich oder ohne „Für“"
          },
          "zuErledigen": {
            "type": "integer",
            "minimum": 0,
            "description": "Mappen unter „Zu erledigen“"
          },
          "anstehend": {
            "type": "integer",
            "minimum": 0,
            "description": "Fristen, Erinnerungen und Aufgaben mit Datum von heute bis in 7 Tagen"
          },
          "ueberfaellig": {
            "type": "integer",
            "minimum": 0,
            "description": "Offene Fristen, Erinnerungen und Aufgaben mit Datum vor heute"
          },
          "stand": {
            "type": "integer",
            "minimum": 1,
            "description": "Zählt hoch, sobald sich eine Zahl ändert"
          },
          "geaendert": {
            "type": "string",
            "format": "date-time",
            "description": "Wann sich die Zahlen zuletzt geändert haben (beim Abruf bemerkt)"
          }
        },
        "example": {
          "neuePost": 2,
          "zuErledigen": 5,
          "anstehend": 3,
          "ueberfaellig": 1,
          "stand": 42,
          "geaendert": "2026-11-03T07:15:00.000Z"
        }
      },
      "Ich": {
        "type": "object",
        "properties": {
          "benutzer": {
            "$ref": "#/components/schemas/Benutzer"
          },
          "schluessel": {
            "type": "object",
            "nullable": true,
            "properties": {
              "name": {
                "type": "string"
              },
              "recht": {
                "type": "string",
                "enum": [
                  "lesen",
                  "schreiben",
                  "zaehler"
                ],
                "description": "zaehler = „nur Zähler“ (#625): nur GET /ich/zaehler"
              },
              "passwoerter": {
                "type": "boolean",
                "description": "Recht „Passwörter lesen“"
              },
              "ablauf": {
                "type": "string",
                "format": "date-time",
                "nullable": true
              }
            }
          }
        }
      }
    }
  }
}