{ "openapi": "3.0.3", "info": { "title": "NEXARCH DMS API", "version": "1.0.0", "description": "Dokument-eigene Endpunkte des DMS. Auth: Core-Modul-JWT (EdDSA, JWKS) als Bearer-Token; Fehlerformat und URL-Versionierung wie die Core-API (/api/{modul}/v1). Der Parameter `caller` gilt nur im abschaltbaren Übergangsmodus." }, "servers": [ { "url": "/api/dms/v1" } ], "security": [ { "bearerAuth": [] } ], "paths": { "/audit-log": { "get": { "summary": "Audit-Ereignisse filtern (nur Prüfer)", "tags": [ "Audit" ], "operationId": "get_audit_log", "parameters": [ { "name": "actor", "in": "query", "required": false, "description": "Akteur", "schema": { "type": "string" } }, { "name": "action", "in": "query", "required": false, "description": "Ereignisart", "schema": { "type": "string" } }, { "name": "from", "in": "query", "required": false, "description": "Beginn (RFC 3339)", "schema": { "type": "string" } }, { "name": "to", "in": "query", "required": false, "description": "Ende (RFC 3339)", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Ereignisse", "content": { "application/json": { "schema": { "type": "object" } } } }, "400": { "description": "Ungültige Anfrage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.audit.read" } }, "/audit-log/export": { "get": { "summary": "Audit-Ereignisse exportieren (nur Prüfer)", "tags": [ "Audit" ], "operationId": "get_audit_log_export", "parameters": [ { "name": "actor", "in": "query", "required": false, "description": "Akteur", "schema": { "type": "string" } }, { "name": "action", "in": "query", "required": false, "description": "Ereignisart", "schema": { "type": "string" } }, { "name": "from", "in": "query", "required": false, "description": "Beginn (RFC 3339)", "schema": { "type": "string" } }, { "name": "to", "in": "query", "required": false, "description": "Ende (RFC 3339)", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Export", "content": { "text/csv": { "schema": { "type": "string", "format": "binary" } } } }, "400": { "description": "Ungültige Anfrage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.audit.read" } }, "/auto-rules": { "get": { "summary": "Regeln auflisten", "tags": [ "Auto-Regeln" ], "operationId": "get_auto_rules", "parameters": [], "responses": { "200": { "description": "Regelliste", "content": { "application/json": { "schema": { "type": "object" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.autorule.admin" }, "post": { "summary": "Regel anlegen", "tags": [ "Auto-Regeln" ], "operationId": "post_auto_rules", "parameters": [], "responses": { "201": { "description": "Regel", "content": { "application/json": { "schema": { "type": "object" } } } }, "400": { "description": "Ungültige Anfrage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Ungültiger Wert", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.autorule.admin", "requestBody": { "content": { "application/json": { "schema": { "type": "object", "description": "Regel", "properties": { "name": { "type": "string" }, "priority": { "type": "integer" } } } } }, "required": true } } }, "/auto-rules/{id}": { "put": { "summary": "Regel ändern", "tags": [ "Auto-Regeln" ], "operationId": "put_auto_rules_id", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "Regel", "content": { "application/json": { "schema": { "type": "object" } } } }, "400": { "description": "Ungültige Anfrage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Nicht gefunden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Ungültiger Wert", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.autorule.admin", "requestBody": { "content": { "application/json": { "schema": { "type": "object", "description": "Regel" } } }, "required": true } }, "delete": { "summary": "Regel löschen", "tags": [ "Auto-Regeln" ], "operationId": "delete_auto_rules_id", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "204": { "description": "Gelöscht" }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Nicht gefunden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.autorule.admin" } }, "/bulk-edit": { "post": { "summary": "Massenbearbeitung (Tags, Metadaten) mit Sperrprüfung", "tags": [ "Massenbearbeitung" ], "operationId": "post_bulk_edit", "parameters": [], "responses": { "200": { "description": "Ergebnis je Dokument", "content": { "application/json": { "schema": { "type": "object" } } } }, "400": { "description": "Ungültige Anfrage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Ungültiger Wert", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.bulkedit.write", "requestBody": { "content": { "application/json": { "schema": { "type": "object", "description": "Auswahl und Änderungen", "properties": { "actor": { "type": "string" }, "document_ids": { "type": "array", "items": { "type": "string" } } } } } }, "required": true } } }, "/documents/{id}": { "get": { "summary": "Dokument-Metadaten (Titel, Ordner, Größe, Typ)", "tags": [ "Dokumente" ], "operationId": "get_documents_id", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "Metadaten des Dokuments", "content": { "application/json": { "schema": { "type": "object" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Nicht gefunden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.document.read" } }, "/documents/{id}/content": { "get": { "summary": "Dokumentinhalt (PDF-Derivat oder Original) ausliefern", "tags": [ "Dokumente" ], "operationId": "get_documents_id_content", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "Inhalt; Header X-Content-Source, X-Derivative-Status", "content": { "application/octet-stream": { "schema": { "type": "string", "format": "binary" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Nicht gefunden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.document.read" } }, "/documents/{id}/diff": { "get": { "summary": "Text-/Metadatenunterschied zweier Revisionen", "tags": [ "Versionen" ], "operationId": "get_documents_id_diff", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "from", "in": "query", "required": true, "description": "Revisions-ID (alt)", "schema": { "type": "string" } }, { "name": "to", "in": "query", "required": true, "description": "Revisions-ID (neu)", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Unterschiede", "content": { "application/json": { "schema": { "type": "object" } } } }, "400": { "description": "Ungültige Anfrage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Nicht gefunden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.revision.read" } }, "/documents/{id}/download-url": { "get": { "summary": "Signierte, kurzlebige Download-URL anfordern", "tags": [ "Dokumente" ], "operationId": "get_documents_id_download_url", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "URL mit Ablaufzeit", "content": { "application/json": { "schema": { "type": "object", "properties": { "url": { "type": "string" }, "expires_at": { "type": "string" } } } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Nicht gefunden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.document.read" } }, "/documents/{id}/language": { "get": { "summary": "Erkannte Dokumentsprache und OCR-Konfidenz", "tags": [ "Texterkennung" ], "operationId": "get_documents_id_language", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "Sprache und Konfidenz", "content": { "application/json": { "schema": { "type": "object" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Nicht gefunden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.ocr.read" } }, "/documents/{id}/metadata": { "get": { "summary": "Metadatenwerte lesen", "tags": [ "Metadaten" ], "operationId": "get_documents_id_metadata", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "Werte", "content": { "application/json": { "schema": { "type": "object" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Nicht gefunden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.metadata.read" }, "put": { "summary": "Metadatenwerte setzen (feldweise validiert)", "tags": [ "Metadaten" ], "operationId": "put_documents_id_metadata", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "Gespeichert", "content": { "application/json": { "schema": { "type": "object" } } } }, "400": { "description": "Ungültige Anfrage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Nicht gefunden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Ungültiger Wert", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.metadata.write", "requestBody": { "content": { "application/json": { "schema": { "type": "object", "description": "Feldschlüssel auf Wert" } } }, "required": true } } }, "/documents/{id}/revisions": { "get": { "summary": "Revisionen eines Dokuments auflisten", "tags": [ "Versionen" ], "operationId": "get_documents_id_revisions", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "Revisionsliste", "content": { "application/json": { "schema": { "type": "object" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Nicht gefunden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.revision.read" } }, "/documents/{id}/revisions/{revisionID}/content": { "get": { "summary": "Inhalt einer Revision ausliefern", "tags": [ "Versionen" ], "operationId": "get_documents_id_revisions_revisionid_content", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "revisionID", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "Revisionsinhalt", "content": { "application/octet-stream": { "schema": { "type": "string", "format": "binary" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Nicht gefunden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.revision.read" } }, "/documents/{id}/revisions/{revisionID}/restore": { "post": { "summary": "Revision wiederherstellen (neue Revision aus altem Stand)", "tags": [ "Versionen" ], "operationId": "post_documents_id_revisions_revisionid_restore", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "revisionID", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "Neue Revision", "content": { "application/json": { "schema": { "type": "object" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Nicht gefunden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "409": { "description": "Konflikt", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "423": { "description": "Gesperrt", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.revision.restore" } }, "/documents/{id}/tags": { "get": { "summary": "Tags eines Dokuments", "tags": [ "Tags" ], "operationId": "get_documents_id_tags", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "Tagliste", "content": { "application/json": { "schema": { "type": "object" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Nicht gefunden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.tag.read" }, "post": { "summary": "Tag zuordnen", "tags": [ "Tags" ], "operationId": "post_documents_id_tags", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "Zugeordnet", "content": { "application/json": { "schema": { "type": "object" } } } }, "400": { "description": "Ungültige Anfrage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Nicht gefunden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.tag.write", "requestBody": { "content": { "application/json": { "schema": { "type": "object", "description": "Tag", "properties": { "tag_id": { "type": "string" } }, "required": [ "tag_id" ] } } }, "required": true } } }, "/documents/{id}/tags/{tagID}": { "delete": { "summary": "Tag entfernen", "tags": [ "Tags" ], "operationId": "delete_documents_id_tags_tagid", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "tagID", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "Entfernt", "content": { "application/json": { "schema": { "type": "object" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Nicht gefunden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.tag.write" } }, "/download": { "get": { "summary": "Datei über signierte URL laden (Signatur statt Sitzung)", "tags": [ "Dokumente" ], "operationId": "get_download", "parameters": [ { "name": "document_id", "in": "query", "required": true, "description": "Dokument-ID", "schema": { "type": "string" } }, { "name": "revision_id", "in": "query", "required": true, "description": "Revisions-ID", "schema": { "type": "string" } }, { "name": "filename", "in": "query", "required": true, "description": "Dateiname", "schema": { "type": "string" } }, { "name": "expiry", "in": "query", "required": true, "description": "Ablaufzeit (Unix-Sekunden)", "schema": { "type": "integer" } }, { "name": "sig", "in": "query", "required": true, "description": "Signatur aus download-url", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Dateiinhalt", "content": { "application/octet-stream": { "schema": { "type": "string", "format": "binary" } } } }, "400": { "description": "Ungültige Anfrage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Nicht gefunden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "-", "security": [] } }, "/folders/children": { "get": { "summary": "Ordner der obersten Ebene", "tags": [ "Ordner" ], "operationId": "get_folders_children", "parameters": [ { "name": "sort", "in": "query", "required": false, "description": "Sortierfeld", "schema": { "type": "string" } }, { "name": "order", "in": "query", "required": false, "description": "asc oder desc", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Ordnerliste", "content": { "application/json": { "schema": { "type": "object" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.folder.read" } }, "/folders/documents": { "get": { "summary": "Dokumente der obersten Ebene", "tags": [ "Ordner" ], "operationId": "get_folders_documents", "parameters": [], "responses": { "200": { "description": "Dokumentliste", "content": { "application/json": { "schema": { "type": "object" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.folder.read" } }, "/folders/{id}": { "get": { "summary": "Ordner-Metadaten mit Pfad", "tags": [ "Ordner" ], "operationId": "get_folders_id", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "Ordner mit Pfad", "content": { "application/json": { "schema": { "type": "object" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Nicht gefunden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.folder.read" } }, "/folders/{id}/breadcrumb": { "get": { "summary": "Pfad zum Ordner", "tags": [ "Ordner" ], "operationId": "get_folders_id_breadcrumb", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "Pfadelemente", "content": { "application/json": { "schema": { "type": "object" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Nicht gefunden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.folder.read" } }, "/folders/{id}/children": { "get": { "summary": "Unterordner", "tags": [ "Ordner" ], "operationId": "get_folders_id_children", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "sort", "in": "query", "required": false, "description": "Sortierfeld", "schema": { "type": "string" } }, { "name": "order", "in": "query", "required": false, "description": "asc oder desc", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Ordnerliste", "content": { "application/json": { "schema": { "type": "object" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Nicht gefunden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.folder.read" } }, "/folders/{id}/documents": { "get": { "summary": "Dokumente eines Ordners", "tags": [ "Ordner" ], "operationId": "get_folders_id_documents", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "Dokumentliste", "content": { "application/json": { "schema": { "type": "object" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Nicht gefunden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.folder.read" } }, "/metadata-fields": { "get": { "summary": "Metadatenfelder auflisten", "tags": [ "Metadaten" ], "operationId": "get_metadata_fields", "parameters": [], "responses": { "200": { "description": "Feldliste", "content": { "application/json": { "schema": { "type": "object" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.metadata.read" } }, "/ocr/review": { "get": { "summary": "Nachbearbeitungsliste (niedrige OCR-Konfidenz)", "tags": [ "Texterkennung" ], "operationId": "get_ocr_review", "parameters": [ { "name": "limit", "in": "query", "required": false, "description": "Seitengröße", "schema": { "type": "integer" } }, { "name": "offset", "in": "query", "required": false, "description": "Versatz", "schema": { "type": "integer" } } ], "responses": { "200": { "description": "Liste", "content": { "application/json": { "schema": { "type": "object" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.ocr.admin" } }, "/ocr/settings": { "get": { "summary": "OCR-Einstellungen lesen", "tags": [ "Texterkennung" ], "operationId": "get_ocr_settings", "parameters": [], "responses": { "200": { "description": "Einstellungen", "content": { "application/json": { "schema": { "type": "object" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.ocr.read" }, "put": { "summary": "OCR-Einstellungen ändern (Konfidenz-Schwellwert)", "tags": [ "Texterkennung" ], "operationId": "put_ocr_settings", "parameters": [], "responses": { "200": { "description": "Gespeichert", "content": { "application/json": { "schema": { "type": "object" } } } }, "400": { "description": "Ungültige Anfrage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Ungültiger Wert", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.ocr.admin", "requestBody": { "content": { "application/json": { "schema": { "type": "object", "description": "Einstellungen" } } }, "required": true } } }, "/openapi.json": { "get": { "summary": "Diese Schnittstellenbeschreibung", "tags": [ "Betrieb" ], "operationId": "get_openapi_json", "parameters": [], "responses": { "200": { "description": "OpenAPI 3.0", "content": { "application/json": { "schema": { "type": "object" } } } } }, "x-permission": "-", "security": [] } }, "/retention/destroy-callback": { "post": { "summary": "Vernichtungs-Rückruf von Archive (Dienst-zu-Dienst, RET-05)", "tags": [ "Betrieb" ], "operationId": "post_retention_destroy_callback", "parameters": [ { "name": "X-Nexarch-Tenant", "in": "header", "required": true, "description": "Tenant-Kontext des Aufrufs (INT-16); muss dem Tenant der Instanz (und einem mitgesendeten Service-Token) entsprechen, sonst 403 mit Audit-Eintrag; fehlt er, 400", "schema": { "type": "string", "maxLength": 128 } } ], "responses": { "200": { "description": "Verarbeitet", "content": { "application/json": { "schema": { "type": "object" } } } }, "400": { "description": "Ungültige Anfrage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.retention.callback", "security": [], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "description": "Rückrufnachricht" } } }, "required": true } } }, "/saved-searches": { "get": { "summary": "Gespeicherte Suchen auflisten", "tags": [ "Suche" ], "operationId": "get_saved_searches", "parameters": [], "responses": { "200": { "description": "Suchen", "content": { "application/json": { "schema": { "type": "object" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.savedsearch.read" }, "post": { "summary": "Suche speichern", "tags": [ "Suche" ], "operationId": "post_saved_searches", "parameters": [], "responses": { "201": { "description": "Gespeichert", "content": { "application/json": { "schema": { "type": "object" } } } }, "400": { "description": "Ungültige Anfrage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Ungültiger Wert", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.savedsearch.write", "requestBody": { "content": { "application/json": { "schema": { "type": "object", "description": "Suche", "properties": { "name": { "type": "string" }, "query": { "type": "string" }, "shared": { "type": "boolean" } }, "required": [ "name", "query" ] } } }, "required": true } } }, "/saved-searches/{id}": { "put": { "summary": "Gespeicherte Suche ändern", "tags": [ "Suche" ], "operationId": "put_saved_searches_id", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "Gespeichert", "content": { "application/json": { "schema": { "type": "object" } } } }, "400": { "description": "Ungültige Anfrage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Nicht gefunden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Ungültiger Wert", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.savedsearch.write", "requestBody": { "content": { "application/json": { "schema": { "type": "object", "description": "Suche", "properties": { "name": { "type": "string" }, "query": { "type": "string" }, "shared": { "type": "boolean" } } } } }, "required": true } }, "delete": { "summary": "Gespeicherte Suche löschen", "tags": [ "Suche" ], "operationId": "delete_saved_searches_id", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "204": { "description": "Gelöscht" }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Nicht gefunden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.savedsearch.write" } }, "/saved-searches/{id}/results": { "get": { "summary": "Gespeicherte Suche mit aktuellen Daten ausführen", "tags": [ "Suche" ], "operationId": "get_saved_searches_id_results", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "Trefferseite", "content": { "application/json": { "schema": { "type": "object" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Nicht gefunden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.savedsearch.read" } }, "/search": { "get": { "summary": "Volltextsuche mit Ranking, Filtern, Facetten und Trefferausschnitten", "tags": [ "Suche" ], "operationId": "get_search", "parameters": [ { "name": "q", "in": "query", "required": true, "description": "Suchbegriff", "schema": { "type": "string" } }, { "name": "limit", "in": "query", "required": false, "description": "Seitengröße", "schema": { "type": "integer" } }, { "name": "offset", "in": "query", "required": false, "description": "Versatz", "schema": { "type": "integer" } }, { "name": "sort", "in": "query", "required": false, "description": "relevance, updated oder created", "schema": { "type": "string" } }, { "name": "folder_path", "in": "query", "required": false, "description": "Ordnerpfad", "schema": { "type": "string" } }, { "name": "document_type", "in": "query", "required": false, "description": "Dokumenttyp (mehrfach)", "schema": { "type": "string" } }, { "name": "tag", "in": "query", "required": false, "description": "Tag (mehrfach)", "schema": { "type": "string" } }, { "name": "created_from", "in": "query", "required": false, "description": "Erstellt ab", "schema": { "type": "string" } }, { "name": "created_to", "in": "query", "required": false, "description": "Erstellt bis", "schema": { "type": "string" } }, { "name": "updated_from", "in": "query", "required": false, "description": "Geändert ab", "schema": { "type": "string" } }, { "name": "updated_to", "in": "query", "required": false, "description": "Geändert bis", "schema": { "type": "string" } }, { "name": "facets", "in": "query", "required": false, "description": "Facetten, kommagetrennt", "schema": { "type": "string" } }, { "name": "field.{key}", "in": "query", "required": false, "description": "Filter auf benutzerdefiniertes Feld (optional .min/.max)", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Trefferseite", "content": { "application/json": { "schema": { "type": "object" } } } }, "400": { "description": "Ungültige Anfrage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.search.read", "x-example": { "path": "/search?q=rechnung&limit=10" } } }, "/tags": { "get": { "summary": "Alle Tags", "tags": [ "Tags" ], "operationId": "get_tags", "parameters": [], "responses": { "200": { "description": "Tagliste", "content": { "application/json": { "schema": { "type": "object" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.tag.read" } }, "/trash": { "get": { "summary": "Papierkorb auflisten (mit Restaufbewahrungszeit)", "tags": [ "Papierkorb" ], "operationId": "get_trash", "parameters": [], "responses": { "200": { "description": "Einträge", "content": { "application/json": { "schema": { "type": "object" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.trash.read" }, "post": { "summary": "Dokumente und Ordner in den Papierkorb verschieben", "tags": [ "Papierkorb" ], "operationId": "post_trash", "parameters": [], "responses": { "200": { "description": "Ergebnis je ID (trashed_document_ids, trashed_folder_ids, failed)", "content": { "application/json": { "schema": { "type": "object" } } } }, "400": { "description": "Ungültige Anfrage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.trash.write", "requestBody": { "content": { "application/json": { "schema": { "type": "object", "description": "Dokument- und/oder Ordner-IDs (mindestens eine)", "properties": { "document_ids": { "type": "array", "items": { "type": "string" } }, "folder_ids": { "type": "array", "items": { "type": "string" } } } } } }, "required": true } } }, "/trash/purge": { "post": { "summary": "Endgültig löschen", "tags": [ "Papierkorb" ], "operationId": "post_trash_purge", "parameters": [], "responses": { "200": { "description": "Ergebnis je ID", "content": { "application/json": { "schema": { "type": "object" } } } }, "400": { "description": "Ungültige Anfrage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "409": { "description": "Konflikt", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.trash.purge", "requestBody": { "content": { "application/json": { "schema": { "type": "object", "description": "Dokument- und/oder Ordner-IDs", "properties": { "document_ids": { "type": "array", "items": { "type": "string" } }, "folder_ids": { "type": "array", "items": { "type": "string" } } } } } }, "required": true } } }, "/trash/restore": { "post": { "summary": "Aus dem Papierkorb wiederherstellen", "tags": [ "Papierkorb" ], "operationId": "post_trash_restore", "parameters": [], "responses": { "200": { "description": "Ergebnis je ID", "content": { "application/json": { "schema": { "type": "object" } } } }, "400": { "description": "Ungültige Anfrage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.trash.write", "requestBody": { "content": { "application/json": { "schema": { "type": "object", "description": "Dokument- und/oder Ordner-IDs", "properties": { "document_ids": { "type": "array", "items": { "type": "string" } }, "folder_ids": { "type": "array", "items": { "type": "string" } } } } } }, "required": true } } }, "/uploads": { "post": { "summary": "Upload-Sitzung starten", "tags": [ "Uploads" ], "operationId": "post_uploads", "parameters": [], "responses": { "201": { "description": "Sitzung angelegt", "content": { "application/json": { "schema": { "type": "object", "properties": { "sessionId": { "type": "string" } } } } } }, "400": { "description": "Ungültige Anfrage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "413": { "description": "Zu groß", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.upload.write", "requestBody": { "content": { "application/json": { "schema": { "type": "object", "description": "Dateimetadaten", "properties": { "filename": { "type": "string" }, "mimeType": { "type": "string" }, "totalSize": { "type": "integer", "format": "int64" }, "folderId": { "type": "string", "nullable": true } }, "required": [ "filename", "mimeType", "totalSize" ] } } }, "required": true } } }, "/uploads/{id}": { "get": { "summary": "Upload-Stand abfragen", "tags": [ "Uploads" ], "operationId": "get_uploads_id", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "Sitzung", "content": { "application/json": { "schema": { "type": "object", "properties": { "sessionId": { "type": "string" }, "filename": { "type": "string" }, "totalSize": { "type": "integer" }, "bytesReceived": { "type": "integer" } } } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Nicht gefunden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.upload.read" } }, "/uploads/{id}/chunk": { "put": { "summary": "Datenblock hochladen (fortsetzbar über offset)", "tags": [ "Uploads" ], "operationId": "put_uploads_id_chunk", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "offset", "in": "query", "required": true, "description": "Byte-Offset des Blocks", "schema": { "type": "integer" } } ], "responses": { "200": { "description": "Empfangsstand", "content": { "application/json": { "schema": { "type": "object", "properties": { "bytesReceived": { "type": "integer" } } } } } }, "400": { "description": "Ungültige Anfrage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Nicht gefunden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "409": { "description": "Konflikt", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "413": { "description": "Zu groß", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.upload.write", "requestBody": { "content": { "application/octet-stream": { "schema": { "type": "string", "format": "binary" } } }, "required": true } } }, "/uploads/{id}/complete": { "post": { "summary": "Upload abschließen (Dokument und erste Revision anlegen)", "tags": [ "Uploads" ], "operationId": "post_uploads_id_complete", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "confirm_duplicate", "in": "query", "required": false, "description": "true bestätigt ein erkanntes Duplikat", "schema": { "type": "boolean" } } ], "responses": { "200": { "description": "Dokument angelegt", "content": { "application/json": { "schema": { "type": "object", "properties": { "documentId": { "type": "string" }, "revisionId": { "type": "string" } } } } } }, "400": { "description": "Ungültige Anfrage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Nicht gefunden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "409": { "description": "Konflikt", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.upload.write" } }, "/mail-accounts": { "get": { "summary": "Postfächer auflisten", "tags": [ "Mail" ], "operationId": "list_mail_accounts", "responses": { "200": { "description": "Postfächer", "content": { "application/json": { "schema": { "type": "array", "items": { "type": "object" } } } } }, "400": { "description": "Ungültige Anfrage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.mail.account.read" }, "post": { "summary": "Postfach anlegen", "tags": [ "Mail" ], "operationId": "create_mail_account", "responses": { "201": { "description": "Angelegtes Postfach", "content": { "application/json": { "schema": { "type": "object" } } } }, "400": { "description": "Ungültige Anfrage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Ungültige Eingabe", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.mail.account.write" } }, "/mail-accounts/{id}": { "get": { "summary": "Postfach lesen", "tags": [ "Mail" ], "operationId": "get_mail_account", "parameters": [ { "name": "id", "in": "path", "required": true, "description": "Postfach-ID", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Postfach", "content": { "application/json": { "schema": { "type": "object" } } } }, "400": { "description": "Ungültige Anfrage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Unbekanntes Postfach", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.mail.account.read" }, "put": { "summary": "Postfach ändern", "tags": [ "Mail" ], "operationId": "update_mail_account", "parameters": [ { "name": "id", "in": "path", "required": true, "description": "Postfach-ID", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Geändertes Postfach", "content": { "application/json": { "schema": { "type": "object" } } } }, "400": { "description": "Ungültige Anfrage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Unbekanntes Postfach", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Ungültige Eingabe", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.mail.account.write" } }, "/mail-accounts/{id}/test": { "post": { "summary": "Postfachverbindung testen", "tags": [ "Mail" ], "operationId": "test_mail_account", "parameters": [ { "name": "id", "in": "path", "required": true, "description": "Postfach-ID", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Testergebnis (ok/Fehlertext, nie das Kennwort)", "content": { "application/json": { "schema": { "type": "object" } } } }, "400": { "description": "Ungültige Anfrage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Unbekanntes Postfach", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.mail.account.write" } }, "/mail-rules": { "get": { "summary": "Mail-Regeln auflisten", "tags": [ "Mail" ], "operationId": "list_mail_rules", "responses": { "200": { "description": "Regeln", "content": { "application/json": { "schema": { "type": "array", "items": { "type": "object" } } } } }, "400": { "description": "Ungültige Anfrage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.mail.rule.read" }, "post": { "summary": "Mail-Regel anlegen", "tags": [ "Mail" ], "operationId": "create_mail_rule", "responses": { "201": { "description": "Angelegte Regel", "content": { "application/json": { "schema": { "type": "object" } } } }, "400": { "description": "Ungültige Anfrage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Ungültige Regel", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.mail.rule.write" } }, "/mail-rules/{id}": { "delete": { "summary": "Mail-Regel löschen", "tags": [ "Mail" ], "operationId": "delete_mail_rule", "parameters": [ { "name": "id", "in": "path", "required": true, "description": "Regel-ID", "schema": { "type": "string" } } ], "responses": { "204": { "description": "Gelöscht" }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Unbekannte Regel", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.mail.rule.write" } }, "/mail-filters": { "get": { "summary": "Anhangfilter auflisten", "tags": [ "Mail" ], "operationId": "list_mail_filters", "responses": { "200": { "description": "Filter", "content": { "application/json": { "schema": { "type": "array", "items": { "type": "object" } } } } }, "400": { "description": "Ungültige Anfrage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.mail.rule.read" }, "post": { "summary": "Anhangfilter anlegen", "tags": [ "Mail" ], "operationId": "create_mail_filter", "responses": { "201": { "description": "Angelegter Filter", "content": { "application/json": { "schema": { "type": "object" } } } }, "400": { "description": "Ungültige Anfrage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Ungültiger Filter", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.mail.rule.write" } }, "/mail-filters/{id}": { "delete": { "summary": "Anhangfilter löschen", "tags": [ "Mail" ], "operationId": "delete_mail_filter", "parameters": [ { "name": "id", "in": "path", "required": true, "description": "Filter-ID", "schema": { "type": "string" } } ], "responses": { "204": { "description": "Gelöscht" }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Unbekannter Filter", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.mail.rule.write" } }, "/clarification": { "get": { "summary": "Klärungskorb auflisten", "tags": [ "Mail" ], "operationId": "list_clarification", "parameters": [ { "name": "limit", "in": "query", "required": false, "description": "Höchstzahl der Einträge", "schema": { "type": "integer" } } ], "responses": { "200": { "description": "Nachrichten ohne passende Regel", "content": { "application/json": { "schema": { "type": "array", "items": { "type": "object" } } } } }, "400": { "description": "Ungültige Anfrage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.mail.clarification.read" } }, "/clarification/{id}/apply": { "post": { "summary": "Klärungskorb-Nachricht zuordnen", "tags": [ "Mail" ], "operationId": "apply_clarification", "parameters": [ { "name": "id", "in": "path", "required": true, "description": "Nachrichten-ID", "schema": { "type": "string" } } ], "responses": { "204": { "description": "Zugeordnet" }, "400": { "description": "Ungültige Anfrage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Unbekannte Nachricht", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "409": { "description": "Typwechsel ohne Bestätigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Ungültige Eingabe", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.mail.clarification.write" } }, "/documents/{id}/revisions/{revisionID}/einvoice": { "get": { "summary": "E-Rechnung-Ergebnis lesen", "tags": [ "E-Rechnung" ], "operationId": "get_einvoice_result", "parameters": [ { "name": "id", "in": "path", "required": true, "description": "Dokument-ID", "schema": { "type": "string" } }, { "name": "revisionID", "in": "path", "required": true, "description": "Revisions-ID", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Ergebnis (Lesen und Konformität getrennt)", "content": { "application/json": { "schema": { "type": "object" } } } }, "400": { "description": "Ungültige Anfrage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Kein Ergebnis vorhanden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.document.read" } }, "/documents/{id}/revisions/{revisionID}/einvoice/recheck": { "post": { "summary": "E-Rechnung-Ergebnis neu prüfen", "tags": [ "E-Rechnung" ], "operationId": "recheck_einvoice", "parameters": [ { "name": "id", "in": "path", "required": true, "description": "Dokument-ID", "schema": { "type": "string" } }, { "name": "revisionID", "in": "path", "required": true, "description": "Revisions-ID", "schema": { "type": "string" } } ], "responses": { "202": { "description": "Neuprüfung eingereiht" }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "503": { "description": "Neuprüfung nicht konfiguriert", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.document.read" } }, "/documents/{id}/share-links": { "post": { "summary": "Freigabelink für ein Dokument anlegen", "tags": [ "Freigabelinks" ], "operationId": "post_document_share_links", "parameters": [ { "name": "id", "in": "path", "required": true, "description": "Dokument-ID", "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "ttl_seconds": { "type": "integer", "description": "Gültigkeitsdauer; Standard und Obergrenze per Umgebungsvariable" }, "password": { "type": "string", "description": "Optional; wird nur als Hash gespeichert" }, "download_limit": { "type": "integer", "description": "Optionale Obergrenze der Abrufe" } } } } } }, "responses": { "201": { "description": "Angelegt, enthält den Token einmalig in der URL", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "url": { "type": "string", "description": "Nur in der Antwort auf das Anlegen enthalten" }, "expires_at": { "type": "string", "format": "date-time" }, "download_limit": { "type": "integer", "nullable": true }, "download_count": { "type": "integer" }, "has_password": { "type": "boolean" }, "revoked_at": { "type": "string", "format": "date-time", "nullable": true } } } } } }, "400": { "description": "Ungültige Anfrage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "503": { "description": "Nicht verfügbar", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.sharelink.write" }, "get": { "summary": "Freigabelinks eines Dokuments auflisten (ohne Token/Passwort)", "tags": [ "Freigabelinks" ], "operationId": "get_document_share_links", "parameters": [ { "name": "id", "in": "path", "required": true, "description": "Dokument-ID", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Liste", "content": { "application/json": { "schema": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "url": { "type": "string", "description": "Nur in der Antwort auf das Anlegen enthalten" }, "expires_at": { "type": "string", "format": "date-time" }, "download_limit": { "type": "integer", "nullable": true }, "download_count": { "type": "integer" }, "has_password": { "type": "boolean" }, "revoked_at": { "type": "string", "format": "date-time", "nullable": true } } } } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.sharelink.read" } }, "/documents/{id}/share-links/{linkID}": { "delete": { "summary": "Freigabelink sofort widerrufen", "tags": [ "Freigabelinks" ], "operationId": "delete_document_share_link", "parameters": [ { "name": "id", "in": "path", "required": true, "description": "Dokument-ID", "schema": { "type": "string" } }, { "name": "linkID", "in": "path", "required": true, "description": "Freigabelink-ID", "schema": { "type": "string" } } ], "responses": { "204": { "description": "Widerrufen" }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Nicht gefunden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.sharelink.write" } }, "/share/{token}": { "get": { "summary": "Freigegebenes Dokument ohne Konto abrufen (ohne Passwort)", "tags": [ "Freigabelinks" ], "operationId": "get_share", "parameters": [ { "name": "token", "in": "path", "required": true, "description": "Freigabelink-Token", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Dateiinhalt", "content": { "application/octet-stream": { "schema": { "type": "string", "format": "binary" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Nicht gefunden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "423": { "description": "Gesperrt", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "-", "security": [] }, "post": { "summary": "Freigegebenes Dokument mit Passwort abrufen", "tags": [ "Freigabelinks" ], "operationId": "post_share", "parameters": [ { "name": "token", "in": "path", "required": true, "description": "Freigabelink-Token", "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "password": { "type": "string" } } } } } }, "responses": { "200": { "description": "Dateiinhalt", "content": { "application/octet-stream": { "schema": { "type": "string", "format": "binary" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Nicht gefunden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "423": { "description": "Gesperrt", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "-", "security": [] } }, "/triggers": { "post": { "summary": "Trigger anlegen", "tags": [ "Trigger" ], "operationId": "post_triggers", "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "name", "event", "action_type" ], "properties": { "name": { "type": "string" }, "event": { "type": "string", "enum": [ "document.uploaded", "document.ocr_completed", "document.einvoice_checked" ] }, "filename_pattern": { "type": "string" }, "document_type_id": { "type": "string" }, "action_type": { "type": "string", "enum": [ "webhook", "set_tag", "set_type" ] }, "action_tag_id": { "type": "string" }, "action_document_type_id": { "type": "string" }, "webhook_url": { "type": "string" }, "webhook_secret": { "type": "string", "description": "Optional; wird nur verschluesselt gespeichert, nie im Klartext gelesen" } } } } } }, "responses": { "201": { "description": "Angelegt", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "event": { "type": "string", "enum": [ "document.uploaded", "document.ocr_completed", "document.einvoice_checked" ] }, "filename_pattern": { "type": "string", "nullable": true }, "document_type_id": { "type": "string", "nullable": true }, "action_type": { "type": "string", "enum": [ "webhook", "set_tag", "set_type" ] }, "action_tag_id": { "type": "string", "nullable": true }, "action_document_type_id": { "type": "string", "nullable": true }, "webhook_url": { "type": "string", "nullable": true }, "enabled": { "type": "boolean" }, "created_by": { "type": "string" } } } } } }, "400": { "description": "Ungültige Anfrage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.trigger.write" }, "get": { "summary": "Trigger auflisten", "tags": [ "Trigger" ], "operationId": "get_triggers", "responses": { "200": { "description": "Liste", "content": { "application/json": { "schema": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "event": { "type": "string", "enum": [ "document.uploaded", "document.ocr_completed", "document.einvoice_checked" ] }, "filename_pattern": { "type": "string", "nullable": true }, "document_type_id": { "type": "string", "nullable": true }, "action_type": { "type": "string", "enum": [ "webhook", "set_tag", "set_type" ] }, "action_tag_id": { "type": "string", "nullable": true }, "action_document_type_id": { "type": "string", "nullable": true }, "webhook_url": { "type": "string", "nullable": true }, "enabled": { "type": "boolean" }, "created_by": { "type": "string" } } } } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.trigger.read" } }, "/triggers/{id}": { "get": { "summary": "Trigger lesen", "tags": [ "Trigger" ], "operationId": "get_trigger", "parameters": [ { "name": "id", "in": "path", "required": true, "description": "Trigger-ID", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Trigger", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "event": { "type": "string", "enum": [ "document.uploaded", "document.ocr_completed", "document.einvoice_checked" ] }, "filename_pattern": { "type": "string", "nullable": true }, "document_type_id": { "type": "string", "nullable": true }, "action_type": { "type": "string", "enum": [ "webhook", "set_tag", "set_type" ] }, "action_tag_id": { "type": "string", "nullable": true }, "action_document_type_id": { "type": "string", "nullable": true }, "webhook_url": { "type": "string", "nullable": true }, "enabled": { "type": "boolean" }, "created_by": { "type": "string" } } } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Nicht gefunden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.trigger.read" }, "delete": { "summary": "Trigger loeschen", "tags": [ "Trigger" ], "operationId": "delete_trigger", "parameters": [ { "name": "id", "in": "path", "required": true, "description": "Trigger-ID", "schema": { "type": "string" } } ], "responses": { "204": { "description": "Geloescht" }, "404": { "description": "Nicht gefunden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "400": { "description": "Ungültige Anfrage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.trigger.write" } }, "/triggers/{id}/enable": { "post": { "summary": "Trigger aktivieren", "tags": [ "Trigger" ], "operationId": "post_trigger_enable", "parameters": [ { "name": "id", "in": "path", "required": true, "description": "Trigger-ID", "schema": { "type": "string" } } ], "responses": { "204": { "description": "Ok" }, "404": { "description": "Nicht gefunden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "400": { "description": "Ungültige Anfrage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.trigger.write" } }, "/triggers/{id}/disable": { "post": { "summary": "Trigger deaktivieren", "tags": [ "Trigger" ], "operationId": "post_trigger_disable", "parameters": [ { "name": "id", "in": "path", "required": true, "description": "Trigger-ID", "schema": { "type": "string" } } ], "responses": { "204": { "description": "Ok" }, "404": { "description": "Nicht gefunden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "400": { "description": "Ungültige Anfrage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Nicht angemeldet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Keine Berechtigung", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-permission": "dms.trigger.write" } } }, "components": { "securitySchemes": { "bearerAuth": { "type": "http", "scheme": "bearer", "bearerFormat": "JWT" } }, "schemas": { "Error": { "type": "object", "required": [ "error" ], "properties": { "error": { "type": "object", "required": [ "code", "message" ], "properties": { "code": { "type": "string", "description": "Stabiler, maschinenlesbarer Bezeichner" }, "message": { "type": "string" } } } } } } } }