{"components":{"securitySchemes":{"sessionAuth":{"in":"cookie","name":"session","type":"apiKey"}}},"info":{"contact":{"name":"Benning E-CAD","url":"https://ecad.benning.one"},"description":"REST API fuer den VBWork E-CAD Schaltplaner.\n\n**Authentifizierung:** Session-Cookie nach `/api/auth/login`\n\n**Basis-URL:** `/api/` (v1 kompatibel) oder `/api/v2/` (bevorzugt)\n\n**Antwortformat:** `{ok: bool, data: ..., error: ...}`","title":"Benning E-CAD API","version":"2.0.0","x-logo":{"url":"/ecad/static/icon.svg"}},"openapi":"3.0.3","paths":{"/api/admin/backup/create":{"post":{"description":"Manuelles Datenbank-Backup anlegen (nur Admin).","operationId":"post_api_compat_admin_data_backup_create","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Backup erstellen","tags":["Admin"]}},"/api/admin/backup/download/{filename}":{"get":{"operationId":"get_api_compat_admin_data_backup_download","parameters":[{"in":"path","name":"filename","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Admin Data Backup Download","tags":["Admin"]}},"/api/admin/backup/list":{"get":{"description":"Alle verf\u00fcgbaren Datenbank-Backups auflisten (nur Admin).","operationId":"get_api_compat_admin_data_backup_list","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Backups auflisten","tags":["Admin"]}},"/api/admin/backup/restore":{"post":{"description":"Datenbank aus einem Backup wiederherstellen (nur Admin).","operationId":"post_api_compat_admin_data_backup_restore","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Backup wiederherstellen","tags":["Admin"]}},"/api/admin/backup/status":{"get":{"operationId":"get_api_compat_admin_data_backup_status","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Admin Data Backup Status","tags":["Admin"]}},"/api/admin/catalog/import-csv":{"post":{"operationId":"post_api_compat_admin_data_catalog_import_csv","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Admin Data Catalog Import Csv","tags":["Admin"]}},"/api/admin/db-stats":{"get":{"description":"Datenbankgr\u00f6sse, Tabellenzahlen und Performance-Metriken (nur Admin).","operationId":"get_api_compat_admin_data_db_stats","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Datenbankstatistiken","tags":["Admin"]}},"/api/admin/project/import":{"post":{"operationId":"post_api_compat_admin_data_admin_import_project","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Admin Data Admin Import Project","tags":["Admin"]}},"/api/admin/project/{project_id}/export":{"get":{"operationId":"get_api_compat_admin_data_admin_export_project","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Admin Data Admin Export Project","tags":["Admin"]}},"/api/admin/projects/list":{"get":{"operationId":"get_api_compat_admin_data_admin_projects_list","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Admin Data Admin Projects List","tags":["Admin"]}},"/api/admin/symbols/reindex":{"post":{"operationId":"post_api_compat_admin_data_symbols_reindex","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Admin Data Symbols Reindex","tags":["Admin"]}},"/api/admin/users":{"get":{"description":"Alle Benutzer im System auflisten (nur Admin).","operationId":"get_api_compat_auth_admin_list_users","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Benutzer auflisten","tags":["Admin"]},"post":{"description":"Neuen Benutzer anlegen (nur Admin).","operationId":"post_api_compat_auth_admin_create_user","requestBody":{"content":{"application/json":{"example":{"email":"max@beispiel.de","password":"SicheresPasswort123!","role":"editor","username":"max.mustermann"},"schema":{"properties":{"email":{"example":"max@beispiel.de","format":"email","type":"string"},"password":{"example":"SicheresPasswort123!","type":"string"},"role":{"default":"editor","enum":["admin","editor","viewer"],"type":"string"},"username":{"example":"max.mustermann","type":"string"}},"required":["username","password"],"type":"object"}}},"required":true},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Benutzer erstellen","tags":["Admin"]}},"/api/admin/users/list":{"get":{"operationId":"get_api_compat_admin_data_users_list","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Admin Data Users List","tags":["Admin"]}},"/api/admin/users/{user_id}":{"delete":{"description":"Benutzer und alle Daten l\u00f6schen (nur Admin).","operationId":"delete_api_compat_auth_admin_delete_user","parameters":[{"in":"path","name":"user_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Benutzer l\u00f6schen","tags":["Admin"]},"get":{"description":"Benutzerdaten f\u00fcr eine bestimmte ID abrufen (nur Admin).","operationId":"get_api_compat_auth_admin_get_user","parameters":[{"in":"path","name":"user_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Benutzer abrufen","tags":["Admin"]},"put":{"description":"Benutzerdaten aktualisieren (nur Admin).","operationId":"put_api_compat_auth_admin_update_user","parameters":[{"in":"path","name":"user_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Benutzer aktualisieren","tags":["Admin"]}},"/api/admin/users/{user_id}/reset-password":{"post":{"description":"Passwort eines Benutzers zur\u00fccksetzen (nur Admin).","operationId":"post_api_compat_auth_admin_reset_password","parameters":[{"in":"path","name":"user_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Passwort zur\u00fccksetzen","tags":["Admin"]}},"/api/auth/change-password":{"post":{"description":"Passwort des aktuellen Benutzers \u00e4ndern.","operationId":"post_api_compat_auth_change_password","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Passwort \u00e4ndern","tags":["Auth"]}},"/api/auth/login":{"post":{"description":"Benutzeranmeldung mit Username und Passwort. Gibt Session-Cookie zur\u00fcck.","operationId":"post_api_compat_auth_login","requestBody":{"content":{"application/json":{"example":{"password":"geheim123","remember":true,"username":"admin"},"schema":{"properties":{"password":{"example":"geheim123","type":"string"},"remember":{"default":false,"type":"boolean"},"username":{"example":"admin","type":"string"}},"required":["username","password"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"data":{"id":1,"role":"admin","username":"admin"},"ok":true}}},"description":"Anmeldung erfolgreich"},"401":{"content":{"application/json":{"example":{"error":"Ungueltige Anmeldedaten","ok":false}}},"description":"Ungueltige Anmeldedaten"}},"summary":"Anmelden","tags":["Auth"]}},"/api/auth/logout":{"post":{"description":"Benutzer-Session beenden.","operationId":"post_api_compat_auth_logout","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Abmelden","tags":["Auth"]}},"/api/auth/me":{"get":{"description":"Gibt Profildaten des angemeldeten Benutzers zur\u00fcck.","operationId":"get_api_compat_auth_me","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Aktueller Benutzer","tags":["Auth"]}},"/api/bookmarks/{bm_id}":{"delete":{"description":"Lesezeichen entfernen.","operationId":"delete_api_compat_bookmarks_delete_bookmark","parameters":[{"in":"path","name":"bm_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Lesezeichen l\u00f6schen","tags":["Bookmarks"]},"put":{"description":"Lesezeichen-Titel oder Position aktualisieren.","operationId":"put_api_compat_bookmarks_update_bookmark","parameters":[{"in":"path","name":"bm_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Lesezeichen \u00e4ndern","tags":["Bookmarks"]}},"/api/catalog/article/{artikelnr}":{"get":{"description":"Einzelnen Katalogartikel mit Technischen Daten abrufen.","operationId":"get_api_compat_catalog_catalog_article","parameters":[{"in":"path","name":"artikelnr","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Katalogartikel","tags":["Katalog"]}},"/api/catalog/manufacturers":{"get":{"description":"Liste aller Hersteller im Produktkatalog.","operationId":"get_api_compat_catalog_catalog_manufacturers","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Hersteller","tags":["Katalog"]}},"/api/catalog/search":{"get":{"description":"Produktkatalog nach Hersteller, Typ oder Artikelnummer durchsuchen.","operationId":"get_api_compat_catalog_catalog_search","parameters":[{"description":"Suchbegriff","example":"Leitungsschutz","in":"query","name":"q","schema":{"type":"string"}},{"description":"Hersteller filtern","example":"Siemens","in":"query","name":"manufacturer","schema":{"type":"string"}},{"description":"Maximale Ergebnisanzahl","in":"query","name":"limit","schema":{"default":20,"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Katalog suchen","tags":["Katalog"]}},"/api/components/by-symbol/{sym_type}":{"get":{"operationId":"get_api_compat_catalog_api_components_by_symbol","parameters":[{"in":"path","name":"sym_type","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Gibt alle Katalogeintraege fuer einen Symbol-Typ zurueck.","tags":["Sonstige"]}},"/api/components/search":{"get":{"operationId":"get_api_compat_catalog_api_components_search","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Suche in der Bauteil-Bibliothek.","tags":["Sonstige"]}},"/api/components/sym-types":{"get":{"operationId":"get_api_compat_catalog_api_components_sym_types","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Gibt alle verfuegbaren Symbol-Typen mit Anzahl zurueck.","tags":["Sonstige"]}},"/api/dashboard":{"get":{"description":"Dashboard-\u00dcbersicht mit Projekten, Aktivit\u00e4ten und Schnellzugriff.","operationId":"get_api_compat_dashboard_get_dashboard","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Dashboard-Daten","tags":["Dashboard"]}},"/api/health":{"get":{"description":"Systemstatus und Datenbankverbindung pr\u00fcfen.","operationId":"get_api_compat_auth_health","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Health Check","tags":["System"]}},"/api/ki/chat":{"post":{"description":"Kontextueller Chat mit dem KI-Assistenten f\u00fcr E-CAD-Fragen.","operationId":"post_api_compat_gemini_ki_chat","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"KI-Chat","tags":["Sonstige"]}},"/api/ki/edit":{"post":{"operationId":"post_api_compat_ai_ki_edit","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"KI bearbeitet bestehenden Schaltplan per Textbefehl","tags":["Sonstige"]}},"/api/ki/gemini/analyze-image":{"post":{"description":"Schaltplan-Bild per Gemini analysieren.","operationId":"post_api_compat_gemini_gemini_analyze_image","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Gemini Bildanalyse","tags":["Sonstige"]}},"/api/ki/gemini/explain":{"post":{"description":"Schaltplanelemente per Gemini erkl\u00e4ren lassen.","operationId":"post_api_compat_gemini_gemini_explain","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Gemini erkl\u00e4ren","tags":["Sonstige"]}},"/api/ki/gemini/generate":{"post":{"description":"Schaltplanerstellung via Google Gemini AI.","operationId":"post_api_compat_gemini_gemini_generate","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Gemini generieren","tags":["Sonstige"]}},"/api/ki/gemini/optimize":{"post":{"description":"Schaltplan-Optimierungsvorschl\u00e4ge von Gemini.","operationId":"post_api_compat_gemini_gemini_optimize","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Gemini optimieren","tags":["Sonstige"]}},"/api/ki/generate":{"post":{"description":"Schaltplan-Elemente per KI-Prompt generieren.","operationId":"post_api_compat_ai_ki_generate","requestBody":{"content":{"application/json":{"example":{"project_id":42,"prompt":"Erstelle einen Motorstarter mit Leitungsschutzschalter und Schuetz","provider":"claude"},"schema":{"properties":{"page_id":{"example":7,"type":"integer"},"project_id":{"example":42,"type":"integer"},"prompt":{"example":"Erstelle einen Motorstarter mit Leitungsschutzschalter und Schuetz","type":"string"},"provider":{"default":"claude","enum":["claude","gemini","deepseek"],"type":"string"}},"required":["prompt"],"type":"object"}}},"required":true},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"KI generieren","tags":["Sonstige"]}},"/api/ki/providers":{"get":{"description":"Verf\u00fcgbare KI-Anbieter und deren Status zur\u00fcckgeben.","operationId":"get_api_compat_gemini_ki_providers","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"KI-Provider","tags":["Sonstige"]}},"/api/ki/smart-assist":{"post":{"description":"Intelligente Vorschl\u00e4ge und automatische Korrekturen.","operationId":"post_api_compat_gemini_ki_smart_assist","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Smart Assist","tags":["Sonstige"]}},"/api/ki/vde-check":{"post":{"description":"Schaltplan auf VDE-Normen und Installationsregeln pr\u00fcfen.","operationId":"post_api_compat_ai_ki_vde_check","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"VDE-Pr\u00fcfung","tags":["Sonstige"]}},"/api/macros":{"get":{"operationId":"get_api_compat_template_get_macros","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Gibt alle Makro-Definitionen zurueck.","tags":["Sonstige"]}},"/api/macros/custom":{"get":{"operationId":"get_api_compat_template_get_custom_macros","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Gibt alle eigenen Makros des eingeloggten Users zurueck.","tags":["Sonstige"]},"post":{"operationId":"post_api_compat_template_create_custom_macro","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Erstellt ein neues Benutzer-Makro aus ausgewaehlten Canvas-Elementen.","tags":["Sonstige"]}},"/api/macros/custom/{macro_id}":{"delete":{"operationId":"delete_api_compat_template_delete_custom_macro","parameters":[{"in":"path","name":"macro_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Template Delete Custom Macro","tags":["Sonstige"]},"get":{"operationId":"get_api_compat_template_get_custom_macro","parameters":[{"in":"path","name":"macro_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Template Get Custom Macro","tags":["Sonstige"]},"put":{"operationId":"put_api_compat_template_update_custom_macro","parameters":[{"in":"path","name":"macro_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Template Update Custom Macro","tags":["Sonstige"]}},"/api/macros/{macro_id}":{"get":{"operationId":"get_api_compat_template_get_macro","parameters":[{"in":"path","name":"macro_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Gibt eine spezifische Makro-Definition zurueck.","tags":["Sonstige"]}},"/api/notifications":{"get":{"description":"Aktuelle Benachrichtigungen des Benutzers abrufen.","operationId":"get_api_compat_notifications_list_notifications","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Benachrichtigungen","tags":["Notifications"]}},"/api/notifications/check-prueffristen":{"post":{"operationId":"post_api_compat_notifications_check_prueffristen","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Prueft DGUV V3 Fristen fuer alle Projekte des Users.","tags":["Notifications"]}},"/api/notifications/clear-all":{"delete":{"operationId":"delete_api_compat_notifications_clear_all_notifications","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Notifications Clear All Notifications","tags":["Notifications"]}},"/api/notifications/dnd":{"get":{"operationId":"get_api_compat_notifications_get_dnd","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Notifications Get Dnd","tags":["Notifications"]},"put":{"operationId":"put_api_compat_notifications_update_dnd","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Notifications Update Dnd","tags":["Notifications"]}},"/api/notifications/preferences":{"get":{"operationId":"get_api_compat_notifications_get_preferences","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Notifications Get Preferences","tags":["Notifications"]},"put":{"operationId":"put_api_compat_notifications_update_preferences","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Notifications Update Preferences","tags":["Notifications"]}},"/api/notifications/push/subscribe":{"post":{"operationId":"post_api_compat_notifications_push_subscribe","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Notifications Push Subscribe","tags":["Notifications"]}},"/api/notifications/push/subscriptions":{"get":{"operationId":"get_api_compat_notifications_list_push_subscriptions","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Notifications List Push Subscriptions","tags":["Notifications"]}},"/api/notifications/push/unsubscribe":{"post":{"operationId":"post_api_compat_notifications_push_unsubscribe","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Notifications Push Unsubscribe","tags":["Notifications"]}},"/api/notifications/read-all":{"put":{"description":"Alle Benachrichtigungen als gelesen markieren.","operationId":"put_api_compat_notifications_mark_all_read","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Alle gelesen","tags":["Notifications"]}},"/api/notifications/test":{"post":{"operationId":"post_api_compat_notifications_test_notification","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Notifications Test Notification","tags":["Notifications"]}},"/api/notifications/vapid-public-key":{"get":{"operationId":"get_api_compat_notifications_get_vapid_public_key","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Notifications Get Vapid Public Key","tags":["Notifications"]}},"/api/notifications/{nid}":{"delete":{"description":"Eine Benachrichtigung l\u00f6schen.","operationId":"delete_api_compat_notifications_delete_notification","parameters":[{"in":"path","name":"nid","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Benachrichtigung l\u00f6schen","tags":["Notifications"]}},"/api/notifications/{nid}/read":{"put":{"description":"Eine Benachrichtigung als gelesen markieren.","operationId":"put_api_compat_notifications_mark_read","parameters":[{"in":"path","name":"nid","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Gelesen markieren","tags":["Notifications"]}},"/api/page-templates":{"get":{"operationId":"get_api_compat_template_get_page_templates","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Gibt alle verfuegbaren Seitenvorlagen zurueck.","tags":["Sonstige"]}},"/api/page-types":{"get":{"operationId":"get_api_compat_project_get_page_types","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Gibt alle gueltigen Seitentypen mit Metadaten zurueck.","tags":["Sonstige"]}},"/api/pages/{page_id}":{"delete":{"description":"Einzelne Schaltplanseite dauerhaft l\u00f6schen.","operationId":"delete_api_compat_project_delete_page","parameters":[{"in":"path","name":"page_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Seite l\u00f6schen","tags":["Pages"]},"get":{"description":"Einzelne Seite mit Schaltplan-JSON (elements, wires) zur\u00fcckgeben.","operationId":"get_api_compat_project_get_page","parameters":[{"in":"path","name":"page_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Seite abrufen","tags":["Pages"]},"put":{"description":"Schaltplan einer Seite aktualisieren (elements, wires, Metadaten).","operationId":"put_api_compat_project_update_page","parameters":[{"in":"path","name":"page_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"properties":{"elements":{"description":"Liste aller Schaltplan-Symbole auf dieser Seite","items":{"properties":{"id":{"type":"string"},"label":{"example":"Q1","type":"string"},"rotation":{"enum":[0,90,180,270],"type":"integer"},"symId":{"example":"LS_3pol","type":"string"},"x":{"type":"number"},"y":{"type":"number"}},"type":"object"},"type":"array"},"title":{"example":"Hauptstromkreis","type":"string"},"wires":{"description":"Liste aller Leitungen auf dieser Seite","items":{"properties":{"color":{"example":"#000000","type":"string"},"id":{"type":"string"},"points":{"items":{"properties":{"x":{"type":"number"},"y":{"type":"number"}},"type":"object"},"type":"array"},"width":{"example":1.5,"type":"number"}},"type":"object"},"type":"array"}},"type":"object"}}},"required":true},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Seite speichern","tags":["Pages"]}},"/api/pages/{page_id}/reorder":{"put":{"description":"Position einer Seite in der Reihenfolge \u00e4ndern.","operationId":"put_api_compat_project_reorder_page","parameters":[{"in":"path","name":"page_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Seite verschieben","tags":["Pages"]}},"/api/pages/{page_id}/versions":{"get":{"description":"Alle gespeicherten Versionen einer Seite auflisten.","operationId":"get_api_compat_project_get_page_versions","parameters":[{"in":"path","name":"page_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Versionshistorie","tags":["Pages"]}},"/api/pages/{page_id}/versions/{version_idx}/restore":{"post":{"description":"Eine \u00e4ltere Version einer Seite als aktuellen Stand wiederherstellen.","operationId":"post_api_compat_project_restore_page_version","parameters":[{"in":"path","name":"page_id","required":true,"schema":{"type":"integer"}},{"in":"path","name":"version_idx","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Version wiederherstellen","tags":["Pages"]}},"/api/project-templates":{"get":{"operationId":"get_api_compat_template_get_project_templates","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Gibt alle verfuegbaren Projekt-Templates zurueck.","tags":["Sonstige"]}},"/api/projects":{"get":{"description":"Alle Projekte des angemeldeten Benutzers zur\u00fcckgeben.","operationId":"get_api_compat_project_get_projects","responses":{"200":{"content":{"application/json":{"example":{"data":[{"id":1,"name":"Schaltschrank WA01","page_count":4,"updated_at":"2026-03-25T14:30:00Z"},{"id":2,"name":"Motorsteuerung M1","page_count":2,"updated_at":"2026-03-24T09:00:00Z"}],"ok":true}}},"description":"Liste aller Projekte"},"401":{"description":"Nicht angemeldet"}},"summary":"Projekte auflisten","tags":["Projects"]},"post":{"description":"Neues E-CAD Projekt anlegen mit Name, Format und Netzform.","operationId":"post_api_compat_project_create_project","requestBody":{"content":{"application/json":{"example":{"description":"Hauptverteilung Halle 1","name":"Schaltschrank WA01","netzform":"TN-C-S","page_format":"A4"},"schema":{"properties":{"description":{"example":"Hauptverteilung Halle 1","type":"string"},"name":{"example":"Schaltschrank WA01","type":"string"},"nennfrequenz":{"example":"50Hz","type":"string"},"nennspannung":{"example":"230V/400V","type":"string"},"netzform":{"default":"TN-C-S","enum":["TN-C-S","TN-S","TT","IT"],"type":"string"},"orientation":{"default":"quer","enum":["quer","hoch"],"type":"string"},"page_format":{"default":"A4","enum":["A4","A3","A2"],"type":"string"}},"required":["name"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"data":{"created_at":"2026-03-26T10:00:00Z","id":42,"name":"Schaltschrank WA01","netzform":"TN-C-S","page_count":1,"page_format":"A4"},"ok":true}}},"description":"Projekt erfolgreich erstellt"},"401":{"description":"Nicht angemeldet"}},"summary":"Projekt erstellen","tags":["Projects"]}},"/api/projects/bulk":{"post":{"description":"Mehrere Projekte gleichzeitig archivieren, l\u00f6schen oder taggen.","operationId":"post_api_compat_project_bulk_action","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Bulk-Aktion auf Projekte","tags":["Projects"]}},"/api/projects/compare":{"post":{"operationId":"post_api_compat_compare_compare_projects","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Compare Compare Projects","tags":["Projects"]}},"/api/projects/compare/export-pdf":{"post":{"operationId":"post_api_compat_compare_export_compare_pdf","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Compare Export Compare Pdf","tags":["Projects"]}},"/api/projects/from-template":{"post":{"operationId":"post_api_compat_template_create_project_with_template","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Erstellt ein Projekt mit einem vordefinierten Template.","tags":["Projects"]}},"/api/projects/import":{"post":{"operationId":"post_api_compat_project_import_project","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Project Import Project","tags":["Projects"]}},"/api/projects/import/zip":{"post":{"operationId":"post_api_compat_zip_import_project_zip","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Zip Import Project Zip","tags":["Projects"]}},"/api/projects/recent":{"get":{"description":"Die zuletzt bearbeiteten Projekte (max. 10) zur\u00fcckgeben.","operationId":"get_api_compat_project_get_recent_projects","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Zuletzt ge\u00f6ffnete Projekte","tags":["Projects"]}},"/api/projects/{pid}/changelog":{"get":{"operationId":"get_api_compat_collaboration_get_project_changelog","parameters":[{"in":"path","name":"pid","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Collaboration Get Project Changelog","tags":["Projects"]},"post":{"operationId":"post_api_compat_collaboration_add_changelog_entry","parameters":[{"in":"path","name":"pid","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Collaboration Add Changelog Entry","tags":["Projects"]}},"/api/projects/{pid}/comment-stats":{"get":{"operationId":"get_api_compat_collaboration_get_comment_stats","parameters":[{"in":"path","name":"pid","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Collaboration Get Comment Stats","tags":["Projects"]}},"/api/projects/{pid}/elements/{element_id}/changelog":{"get":{"operationId":"get_api_compat_collaboration_get_element_changelog","parameters":[{"in":"path","name":"pid","required":true,"schema":{"type":"integer"}},{"in":"path","name":"element_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Collaboration Get Element Changelog","tags":["Projects"]}},"/api/projects/{pid}/elements/{element_id}/comments":{"get":{"operationId":"get_api_compat_collaboration_get_element_comments","parameters":[{"in":"path","name":"pid","required":true,"schema":{"type":"integer"}},{"in":"path","name":"element_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Collaboration Get Element Comments","tags":["Projects"]},"post":{"operationId":"post_api_compat_collaboration_create_element_comment","parameters":[{"in":"path","name":"pid","required":true,"schema":{"type":"integer"}},{"in":"path","name":"element_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Collaboration Create Element Comment","tags":["Projects"]}},"/api/projects/{pid}/status":{"get":{"operationId":"get_api_compat_collaboration_get_project_status","parameters":[{"in":"path","name":"pid","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Collaboration Get Project Status","tags":["Projects"]},"put":{"operationId":"put_api_compat_collaboration_update_project_status","parameters":[{"in":"path","name":"pid","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Collaboration Update Project Status","tags":["Projects"]}},"/api/projects/{project_id}":{"delete":{"description":"Projekt und alle zugeh\u00f6rigen Seiten dauerhaft l\u00f6schen.","operationId":"delete_api_compat_project_delete_project","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Projekt l\u00f6schen","tags":["Projects"]},"get":{"description":"Einzelnes Projekt mit allen Metadaten zur\u00fcckgeben.","operationId":"get_api_compat_project_get_project","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Projekt abrufen","tags":["Projects"]},"put":{"description":"Name, Beschreibung und Metadaten eines Projekts \u00e4ndern.","operationId":"put_api_compat_project_update_project","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Projekt aktualisieren","tags":["Projects"]}},"/api/projects/{project_id}/annotations":{"get":{"operationId":"get_api_compat_annotations_list_annotations","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Annotations List Annotations","tags":["Projects"]},"post":{"operationId":"post_api_compat_annotations_create_annotation","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Annotations Create Annotation","tags":["Projects"]}},"/api/projects/{project_id}/annotations/{ann_id}":{"delete":{"operationId":"delete_api_compat_annotations_delete_annotation","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}},{"in":"path","name":"ann_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Annotations Delete Annotation","tags":["Projects"]},"put":{"operationId":"put_api_compat_annotations_update_annotation","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}},{"in":"path","name":"ann_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Annotations Update Annotation","tags":["Projects"]}},"/api/projects/{project_id}/archive":{"put":{"description":"Projekt in den Archivstatus versetzen.","operationId":"put_api_compat_project_archive_project","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Projekt archivieren","tags":["Projects"]}},"/api/projects/{project_id}/auto-number":{"post":{"operationId":"post_api_compat_auto_number_auto_number_project","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Auto Number Auto Number Project","tags":["Projects"]}},"/api/projects/{project_id}/bmk/bulk-renumber":{"post":{"operationId":"post_api_compat_auto_number_bmk_bulk_renumber","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Auto Number Bmk Bulk Renumber","tags":["Projects"]}},"/api/projects/{project_id}/bmk/check":{"post":{"operationId":"post_api_compat_template_check_bmk_unique","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Pr\u00fcft ob ein BMK bereits existiert und schl\u00e4gt n\u00e4chste Nummer vor.","tags":["Projects"]}},"/api/projects/{project_id}/bmk/next":{"post":{"operationId":"post_api_compat_auto_number_bmk_next","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Auto Number Bmk Next","tags":["Projects"]}},"/api/projects/{project_id}/bmk/suggest":{"post":{"operationId":"post_api_compat_template_suggest_bmk","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Schl\u00e4gt n\u00e4chste freie BMK f\u00fcr einen Ger\u00e4tetyp vor (-K1, -K2, etc.)","tags":["Projects"]}},"/api/projects/{project_id}/bom":{"get":{"description":"Bill of Materials aller Betriebsmittel zur\u00fcckgeben.","operationId":"get_api_compat_export_csv_export_generate_bom","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"St\u00fcckliste (BOM)","tags":["Projects"]}},"/api/projects/{project_id}/bom/csv":{"get":{"description":"St\u00fcckliste als CSV-Datei exportieren.","operationId":"get_api_compat_export_csv_export_export_bom_csv","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"BOM als CSV","tags":["Projects"]}},"/api/projects/{project_id}/bom/pdf":{"post":{"description":"St\u00fcckliste als PDF-Dokument exportieren.","operationId":"post_api_compat_export_csv_export_export_bom_pdf","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"BOM als PDF","tags":["Projects"]}},"/api/projects/{project_id}/bookmarks":{"get":{"description":"Alle Schaltplan-Lesezeichen eines Projekts abrufen.","operationId":"get_api_compat_bookmarks_get_bookmarks","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Lesezeichen","tags":["Projects"]},"post":{"description":"Neues Lesezeichen f\u00fcr eine Seite/Position anlegen.","operationId":"post_api_compat_bookmarks_create_bookmark","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Lesezeichen erstellen","tags":["Projects"]}},"/api/projects/{project_id}/connectors":{"get":{"operationId":"get_api_compat_connector_get_connectors","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Liefert alle Steckverbinder mit Paarungsinformationen.","tags":["Projects"]}},"/api/projects/{project_id}/connectors/kontaktspiegel":{"get":{"operationId":"get_api_compat_connector_get_kontaktspiegel","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Kontaktspiegel: alle Steckverbinder mit Anschlussbelegung und Querverweisen.","tags":["Projects"]}},"/api/projects/{project_id}/dashboard":{"get":{"operationId":"get_api_compat_project_dashboard_get_project_dashboard","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Per-Projekt-Dashboard: Stats, Revisionen, Team, letzte Aktivitaet.","tags":["Projects"]}},"/api/projects/{project_id}/duplicate":{"post":{"description":"Vollst\u00e4ndige Kopie eines Projekts mit allen Seiten erstellen.","operationId":"post_api_compat_project_duplicate_project","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Projekt duplizieren","tags":["Projects"]}},"/api/projects/{project_id}/energiebilanz":{"get":{"operationId":"get_api_compat_energiebilanz_get_energiebilanz","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Berechnet die vollstaendige Energiebilanz aller Seiten.","tags":["Projects"]}},"/api/projects/{project_id}/energiebilanz/pdf":{"post":{"operationId":"post_api_compat_energiebilanz_export_energiebilanz_pdf","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Exportiert Energiebilanz als professionelles PDF.","tags":["Projects"]}},"/api/projects/{project_id}/export-zip":{"get":{"operationId":"get_api_compat_export_pdf_export_export_project_zip","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Vollstaendiger Projekt-Export als ZIP-Archiv.","tags":["Projects"]}},"/api/projects/{project_id}/export/batch":{"post":{"operationId":"post_api_compat_export_pdf_export_export_batch","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Generiert alle Export-Formate auf einmal und gibt ZIP zurueck.","tags":["Projects"]}},"/api/projects/{project_id}/export/complete":{"post":{"operationId":"post_api_compat_export_pdf_export_export_complete","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Vollstaendige Projektdokumentation als PDF:","tags":["Projects"]}},"/api/projects/{project_id}/export/connector-pdf":{"post":{"operationId":"post_api_compat_connector_export_connector_pdf","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Exportiert Steckverbinder-Kontaktspiegel als PDF.","tags":["Projects"]}},"/api/projects/{project_id}/export/dxf":{"post":{"description":"Schaltplan als AutoCAD DXF exportieren.","operationId":"post_api_compat_export_dxf_export_export_dxf","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"DXF exportieren","tags":["Projects"]}},"/api/projects/{project_id}/export/pdf":{"post":{"description":"Schaltplan als PDF exportieren (alle oder gew\u00e4hlte Seiten).","operationId":"post_api_compat_export_pdf_export_export_pdf","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"example":{"include_bom":false,"include_cover":true,"page_ids":[]},"schema":{"properties":{"include_bom":{"default":false,"description":"Stueckliste anhaengen","type":"boolean"},"include_cover":{"default":true,"description":"Deckblatt einfuegen","type":"boolean"},"page_ids":{"description":"Nur diese Seiten exportieren. Leer = alle Seiten.","example":[1,2,3],"items":{"type":"integer"},"type":"array"}},"type":"object"}}},"required":false},"responses":{"200":{"content":{"application/pdf":{"schema":{"format":"binary","type":"string"}}},"description":"PDF-Datei"},"401":{"description":"Nicht angemeldet"}},"summary":"PDF exportieren","tags":["Projects"]}},"/api/projects/{project_id}/export/png":{"post":{"description":"Schaltplan als PNG-Bild exportieren.","operationId":"post_api_compat_export_svg_export_export_png","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"PNG exportieren","tags":["Projects"]}},"/api/projects/{project_id}/export/svg":{"post":{"description":"Schaltplan als SVG-Grafik exportieren.","operationId":"post_api_compat_export_svg_export_export_svg","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"SVG exportieren","tags":["Projects"]}},"/api/projects/{project_id}/export/zip":{"post":{"operationId":"post_api_compat_zip_export_project_zip","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Zip Export Project Zip","tags":["Projects"]}},"/api/projects/{project_id}/favorite":{"delete":{"description":"Projekt aus der Favoritenliste entfernen.","operationId":"delete_api_compat_project_remove_favorite","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Favorit entfernen","tags":["Projects"]},"post":{"description":"Projekt zur Favoritenliste hinzuf\u00fcgen.","operationId":"post_api_compat_project_set_favorite","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Als Favorit markieren","tags":["Projects"]}},"/api/projects/{project_id}/fehlerstrom-analyse":{"post":{"operationId":"post_api_compat_fehlerstrom_fehlerstrom_analyse","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Fehlerstrom-Analyse nach VDE 0100-410.","tags":["Projects"]}},"/api/projects/{project_id}/import/csv":{"post":{"operationId":"post_api_compat_import_import_csv","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Import Import Csv","tags":["Projects"]}},"/api/projects/{project_id}/import/dxf":{"post":{"operationId":"post_api_compat_import_import_dxf","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Import Import Dxf","tags":["Projects"]}},"/api/projects/{project_id}/import/image":{"post":{"operationId":"post_api_compat_import_import_image","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Import Import Image","tags":["Projects"]}},"/api/projects/{project_id}/import/svg":{"post":{"operationId":"post_api_compat_import_import_svg","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Import Import Svg","tags":["Projects"]}},"/api/projects/{project_id}/kabel":{"get":{"operationId":"get_api_compat_kabelplan_get_kabel","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Kabelplan Get Kabel","tags":["Projects"]},"post":{"operationId":"post_api_compat_kabelplan_create_kabel","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Kabelplan Create Kabel","tags":["Projects"]}},"/api/projects/{project_id}/kabel/export/csv":{"get":{"operationId":"get_api_compat_kabelplan_kabel_export_csv","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Kabelplan Kabel Export Csv","tags":["Projects"]}},"/api/projects/{project_id}/kabel/export/pdf":{"get":{"operationId":"get_api_compat_kabelplan_kabel_export_pdf","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Kabelplan Kabel Export Pdf","tags":["Projects"]}},"/api/projects/{project_id}/kabel/import_schaltplan":{"post":{"operationId":"post_api_compat_kabelplan_import_from_schaltplan","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Kabelplan Import From Schaltplan","tags":["Projects"]}},"/api/projects/{project_id}/kabel/stats":{"get":{"operationId":"get_api_compat_kabelplan_kabel_stats","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Kabelplan Kabel Stats","tags":["Projects"]}},"/api/projects/{project_id}/kabel/{kabel_id}":{"delete":{"operationId":"delete_api_compat_kabelplan_delete_kabel","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}},{"in":"path","name":"kabel_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Kabelplan Delete Kabel","tags":["Projects"]},"put":{"operationId":"put_api_compat_kabelplan_update_kabel","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}},{"in":"path","name":"kabel_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Kabelplan Update Kabel","tags":["Projects"]}},"/api/projects/{project_id}/kabelplan":{"get":{"description":"Kabelbelegungsplan und Leitungsliste zur\u00fcckgeben.","operationId":"get_api_compat_export_kabelplan_export_get_kabelplan","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Kabelplan","tags":["Projects"]}},"/api/projects/{project_id}/kanban":{"put":{"operationId":"put_api_compat_project_update_kanban","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Project Update Kanban","tags":["Projects"]}},"/api/projects/{project_id}/klemmenplan/csv":{"get":{"operationId":"get_api_compat_klemmenplan_export_klemmenplan_csv","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Exportiert Klemmenliste als CSV (Semikolon-getrennt, UTF-8 BOM).","tags":["Projects"]}},"/api/projects/{project_id}/klemmenplan/grafisch":{"get":{"operationId":"get_api_compat_klemmenplan_get_klemmenplan_grafisch","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Klemmenplan Get Klemmenplan Grafisch","tags":["Projects"]}},"/api/projects/{project_id}/klemmenplan/grafisch/pdf":{"get":{"operationId":"get_api_compat_klemmenplan_export_klemmenplan_grafisch_pdf","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Klemmenplan Export Klemmenplan Grafisch Pdf","tags":["Projects"]}},"/api/projects/{project_id}/klemmenplan/grafisch/save":{"post":{"operationId":"post_api_compat_klemmenplan_save_klemmenplan_grafisch","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Klemmenplan Save Klemmenplan Grafisch","tags":["Projects"]}},"/api/projects/{project_id}/klemmenplan/tabelle":{"get":{"operationId":"get_api_compat_klemmenplan_get_klemmenplan_tabelle","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Tabellarischer Klemmenplan mit automatischer Wire-Analyse.","tags":["Projects"]}},"/api/projects/{project_id}/klemmenplan/tabelle/pdf":{"get":{"operationId":"get_api_compat_klemmenplan_export_klemmenplan_tabelle_pdf","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Exportiert tabellarischen Klemmenplan als PDF nach DIN EN 61082.","tags":["Projects"]}},"/api/projects/{project_id}/klemmenplan/tabelle/save":{"post":{"operationId":"post_api_compat_klemmenplan_save_klemmenplan_tabelle","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Speichert manuelle Aenderungen an der Klemmenliste.","tags":["Projects"]}},"/api/projects/{project_id}/klemmplan":{"get":{"description":"Klemmenbelegungsplan als strukturierte Daten abrufen.","operationId":"get_api_compat_export_klemmplan_export_get_klemmplan","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Klemmplan","tags":["Projects"]}},"/api/projects/{project_id}/klemmplan/pdf":{"post":{"description":"Klemmenbelegungsplan als PDF exportieren.","operationId":"post_api_compat_export_klemmplan_export_export_klemmplan_pdf","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Klemmplan als PDF","tags":["Projects"]}},"/api/projects/{project_id}/kontaktspiegel":{"get":{"operationId":"get_api_compat_template_get_all_kontaktspiegel","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Kontaktspiegel fuer alle Geraete im Projekt.","tags":["Projects"]}},"/api/projects/{project_id}/kontaktspiegel/{bmk}":{"get":{"operationId":"get_api_compat_template_get_kontaktspiegel","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}},{"in":"path","name":"bmk","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Kontaktspiegel fuer ein Geraet (BMK) ueber alle Seiten.","tags":["Projects"]}},"/api/projects/{project_id}/motor-datenblaetter":{"get":{"operationId":"get_api_compat_motor_datenblatt_get_motor_datenblaetter","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"JSON: Alle Motor-Datenblaetter eines Projekts.","tags":["Projects"]}},"/api/projects/{project_id}/motor-datenblaetter/pdf":{"get":{"operationId":"get_api_compat_motor_datenblatt_export_motor_datenblaetter_pdf","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"PDF: Motor-Datenblaetter als Download.","tags":["Projects"]}},"/api/projects/{project_id}/pages":{"get":{"description":"Alle Schaltplanseiten eines Projekts zur\u00fcckgeben.","operationId":"get_api_compat_project_get_pages","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Seiten auflisten","tags":["Projects"]},"post":{"description":"Neue Schaltplanseite in einem Projekt anlegen.","operationId":"post_api_compat_project_create_page","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Seite erstellen","tags":["Projects"]}},"/api/projects/{project_id}/pages/from-template":{"post":{"operationId":"post_api_compat_template_create_page_from_template","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Erstellt eine neue Seite aus einer Seitenvorlage.","tags":["Projects"]}},"/api/projects/{project_id}/pages/order":{"put":{"description":"Reihenfolge aller Seiten in einem Schritt neu setzen.","operationId":"put_api_compat_project_reorder_pages_bulk","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Seitenreihenfolge","tags":["Projects"]}},"/api/projects/{project_id}/permissions":{"get":{"description":"Freigaben und Zugriffsrechte f\u00fcr ein Projekt anzeigen.","operationId":"get_api_compat_auth_list_project_permissions","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Berechtigungen","tags":["Projects"]},"post":{"description":"Einem Benutzer Zugriff auf ein Projekt erteilen.","operationId":"post_api_compat_auth_add_project_permission","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Berechtigung erteilen","tags":["Projects"]}},"/api/projects/{project_id}/permissions/{perm_id}":{"delete":{"description":"Zugriffsrecht f\u00fcr einen Benutzer entfernen.","operationId":"delete_api_compat_auth_remove_project_permission","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}},{"in":"path","name":"perm_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Berechtigung entziehen","tags":["Projects"]}},"/api/projects/{project_id}/potential-arrows":{"get":{"operationId":"get_api_compat_export_kabelplan_export_get_potential_arrows","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Liefert alle Potential\u00fcberg\u00e4nge zwischen Seiten","tags":["Projects"]}},"/api/projects/{project_id}/pruefprotokoll":{"get":{"operationId":"get_api_compat_pruefplaner_get_pruefprotokoll_data","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Aggregiert alle Daten fuer das Pruefprotokoll-Frontend.","tags":["Projects"]}},"/api/projects/{project_id}/pruefpunkte":{"get":{"operationId":"get_api_compat_pruefplaner_get_pruefpunkte","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Pruefplaner Get Pruefpunkte","tags":["Projects"]}},"/api/projects/{project_id}/pruefpunkte/generate":{"post":{"operationId":"post_api_compat_pruefplaner_regenerate_pruefpunkte","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Pruefpunkte neu generieren (loescht bestehende).","tags":["Projects"]}},"/api/projects/{project_id}/prueftermine":{"get":{"operationId":"get_api_compat_pruefplaner_get_prueftermine","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Pruefplaner Get Prueftermine","tags":["Projects"]}},"/api/projects/{project_id}/qrcode":{"get":{"operationId":"get_api_compat_export_pdf_export_get_project_qrcode","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Gibt QR-Code PNG fuer Projekt-URL zurueck.","tags":["Projects"]}},"/api/projects/{project_id}/querverweise":{"get":{"description":"Elektrische Querverweise zwischen Betriebsmitteln abrufen.","operationId":"get_api_compat_export_kabelplan_export_get_querverweise","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Querverweise","tags":["Projects"]}},"/api/projects/{project_id}/quickstats":{"get":{"description":"Schnelle \u00dcbersicht: Seitenanzahl, Elemente, Leitungen.","operationId":"get_api_compat_project_project_quickstats","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Schnellstatistik","tags":["Projects"]}},"/api/projects/{project_id}/revisions":{"get":{"description":"Alle Revisionseintr\u00e4ge eines Projekts zur\u00fcckgeben.","operationId":"get_api_compat_revision_list_revisions","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Revisionen auflisten","tags":["Projects"]},"post":{"description":"Neuen Revisionsstand f\u00fcr ein Projekt anlegen.","operationId":"post_api_compat_revision_create_revision","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Revision erstellen","tags":["Projects"]}},"/api/projects/{project_id}/revisions/{rev_id}":{"delete":{"description":"Revision dauerhaft entfernen.","operationId":"delete_api_compat_revision_delete_revision","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}},{"in":"path","name":"rev_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Revision l\u00f6schen","tags":["Projects"]},"get":{"description":"Einzelne Revision mit Metadaten zur\u00fcckgeben.","operationId":"get_api_compat_revision_get_revision","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}},{"in":"path","name":"rev_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Revision abrufen","tags":["Projects"]}},"/api/projects/{project_id}/revisions/{rev_id}/compare":{"get":{"operationId":"get_api_compat_revision_compare_revision","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}},{"in":"path","name":"rev_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Compare rev_id against another revision or the current state.","tags":["Projects"]}},"/api/projects/{project_id}/revisions/{rev_id}/restore":{"post":{"description":"Projekt auf den Stand einer Revision zur\u00fccksetzen.","operationId":"post_api_compat_revision_restore_revision","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}},{"in":"path","name":"rev_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Revision wiederherstellen","tags":["Projects"]}},"/api/projects/{project_id}/safety-check":{"post":{"operationId":"post_api_compat_ai_safety_check","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Sicherheitskreis-Validator nach EN ISO 13849 / IEC 62061.","tags":["Projects"]}},"/api/projects/{project_id}/schaltschrank":{"get":{"operationId":"get_api_compat_schaltschrank_get_schaltschrank_layouts","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Schaltschrank Get Schaltschrank Layouts","tags":["Projects"]},"post":{"operationId":"post_api_compat_schaltschrank_create_schaltschrank_layout","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Schaltschrank Create Schaltschrank Layout","tags":["Projects"]}},"/api/projects/{project_id}/schaltschrank/components":{"get":{"operationId":"get_api_compat_schaltschrank_get_schaltschrank_components","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Liefert alle Bauteile aus dem Schaltplan fuer die Sidebar.","tags":["Projects"]}},"/api/projects/{project_id}/settings":{"get":{"description":"Netzform, Spannung, Frequenz und weitere Einstellungen abrufen.","operationId":"get_api_compat_project_get_project_settings","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Projekteinstellungen","tags":["Projects"]},"put":{"description":"Projekteinstellungen aktualisieren.","operationId":"put_api_compat_project_update_project_settings","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Einstellungen speichern","tags":["Projects"]}},"/api/projects/{project_id}/spannungsfall":{"post":{"operationId":"post_api_compat_spannungsfall_spannungsfall_berechnen","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Spannungsfall-Berechnung nach VDE 0100-520.","tags":["Projects"]}},"/api/projects/{project_id}/status":{"put":{"operationId":"put_api_compat_pruefplaner_set_project_status","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Setzt den Projektstatus. Bei 'fertig' werden Pruefpunkte generiert.","tags":["Projects"]}},"/api/projects/{project_id}/tags":{"put":{"description":"Tags eines Projekts aktualisieren.","operationId":"put_api_compat_project_update_tags","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Tags setzen","tags":["Projects"]}},"/api/projects/{project_id}/thumbnail":{"get":{"operationId":"get_api_compat_thumbnail_project_thumbnail","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Thumbnail Project Thumbnail","tags":["Projects"]}},"/api/projects/{project_id}/unarchive":{"put":{"description":"Archiviertes Projekt wieder aktivieren.","operationId":"put_api_compat_project_unarchive_project","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Projekt reaktivieren","tags":["Projects"]}},"/api/projects/{project_id}/vde-check-advanced":{"post":{"operationId":"post_api_compat_ai_vde_check_advanced","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Deterministische VDE-Pr\u00fcfung mit Python VDE-Engine (ergaenzt KI-Pruefung)","tags":["Projects"]}},"/api/projects/{project_id}/verdrahtungsliste":{"get":{"operationId":"get_api_compat_verdrahtungsliste_get_verdrahtungsliste","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Verdrahtungsliste Get Verdrahtungsliste","tags":["Projects"]}},"/api/projects/{project_id}/verdrahtungsliste/export/csv":{"get":{"operationId":"get_api_compat_verdrahtungsliste_verdrahtungsliste_csv","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Verdrahtungsliste Verdrahtungsliste Csv","tags":["Projects"]}},"/api/projects/{project_id}/verdrahtungsliste/export/pdf":{"get":{"operationId":"get_api_compat_verdrahtungsliste_verdrahtungsliste_pdf","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Verdrahtungsliste Verdrahtungsliste Pdf","tags":["Projects"]}},"/api/projects/{project_id}/verteilerplan":{"post":{"operationId":"post_api_compat_verteilerplan_generate_verteilerplan","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Analysiert alle Seiten und erstellt automatisch einen Verteilerplan.","tags":["Projects"]}},"/api/projects/{project_id}/verteilerplan/pdf":{"post":{"operationId":"post_api_compat_verteilerplan_export_verteilerplan_pdf","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Exportiert Verteilerplan als PDF.","tags":["Projects"]}},"/api/projects/{project_id}/wartungsplan/analyse":{"get":{"operationId":"get_api_compat_wartungsplan_get_analyse","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Schaltplan analysieren \u2013 Bauteil-Counts zur\u00fcckgeben.","tags":["Projects"]}},"/api/projects/{project_id}/wartungsplan/checkliste":{"get":{"operationId":"get_api_compat_wartungsplan_get_checkliste","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Checkliste abrufen oder neu generieren.","tags":["Projects"]},"post":{"operationId":"post_api_compat_wartungsplan_get_checkliste","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Checkliste abrufen oder neu generieren.","tags":["Projects"]}},"/api/projects/{project_id}/wartungsplan/pdf":{"post":{"operationId":"post_api_compat_wartungsplan_export_pdf","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Wartungsplan als DGUV V3 konformes PDF exportieren.","tags":["Projects"]}},"/api/projects/{project_id}/wartungsplan/status":{"get":{"operationId":"get_api_compat_wartungsplan_get_status","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Kurzstatus f\u00fcr Dashboard-Fr\u00fchwarnung.","tags":["Projects"]}},"/api/projects/{project_id}/wartungsplan/update":{"put":{"operationId":"put_api_compat_wartungsplan_update_eintrag","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Einzelnen Checklist-Eintrag aktualisieren (Status, Pr\u00fcfer, Ergebnis).","tags":["Projects"]}},"/api/pruefkalender":{"get":{"operationId":"get_api_compat_pruefplaner_get_pruefkalender","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Alle Prueftermine des Users, optional gefiltert nach Monat.","tags":["Pruefplanung"]}},"/api/pruefkalender/check-fristen":{"post":{"operationId":"post_api_compat_pruefplaner_check_fristen","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Prueffristen pr\u00fcfen und Notifications senden (kann per Cron aufgerufen werden).","tags":["Pruefplanung"]}},"/api/pruefprotokoll/export":{"post":{"operationId":"post_api_compat_export_pdf_export_export_pruefprotokoll","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"PDF-Export Pruefprotokoll nach VDE 0100-600 \u2013 professionelles Format, druckferti","tags":["Pruefplanung"]}},"/api/prueftermine/{termin_id}":{"put":{"operationId":"put_api_compat_pruefplaner_update_prueftermin","parameters":[{"in":"path","name":"termin_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Prueftermin bearbeiten (Notizen, Datum verschieben).","tags":["Pruefplanung"]}},"/api/prueftermine/{termin_id}/erledigen":{"put":{"operationId":"put_api_compat_pruefplaner_termin_erledigen","parameters":[{"in":"path","name":"termin_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Prueftermin als erledigt markieren und naechsten Termin setzen.","tags":["Pruefplanung"]}},"/api/schaltschrank/{layout_id}":{"delete":{"operationId":"delete_api_compat_schaltschrank_delete_schaltschrank_layout","parameters":[{"in":"path","name":"layout_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Schaltschrank Delete Schaltschrank Layout","tags":["Schaltschrank"]},"get":{"operationId":"get_api_compat_schaltschrank_get_schaltschrank_layout","parameters":[{"in":"path","name":"layout_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Schaltschrank Get Schaltschrank Layout","tags":["Schaltschrank"]},"put":{"operationId":"put_api_compat_schaltschrank_update_schaltschrank_layout","parameters":[{"in":"path","name":"layout_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Schaltschrank Update Schaltschrank Layout","tags":["Schaltschrank"]}},"/api/schaltschrank/{layout_id}/pdf":{"post":{"operationId":"post_api_compat_schaltschrank_export_schaltschrank_pdf","parameters":[{"in":"path","name":"layout_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Schaltschrank Export Schaltschrank Pdf","tags":["Schaltschrank"]}},"/api/schaltschrank/{layout_id}/thermal":{"get":{"operationId":"get_api_compat_schaltschrank_get_thermal_calculation","parameters":[{"in":"path","name":"layout_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Schaltschrank Get Thermal Calculation","tags":["Schaltschrank"]}},"/api/settings":{"get":{"description":"Benutzereinstellungen abrufen.","operationId":"get_api_compat_settings_get_settings","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Einstellungen","tags":["Settings"]},"put":{"description":"Benutzereinstellungen speichern.","operationId":"put_api_compat_settings_update_settings","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Einstellungen speichern","tags":["Settings"]}},"/api/settings/change-password":{"post":{"operationId":"post_api_compat_settings_settings_change_password","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Settings Settings Change Password","tags":["Settings"]}},"/api/settings/profile":{"put":{"operationId":"put_api_compat_settings_update_profile","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Settings Update Profile","tags":["Settings"]}},"/api/settings/telegram":{"put":{"operationId":"put_api_compat_settings_update_telegram","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Settings Update Telegram","tags":["Settings"]}},"/api/statistics":{"get":{"description":"Nutzungsstatistiken: Projekte, Seiten, Elemente, Leitungen.","operationId":"get_api_compat_statistics_get_statistics","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Statistiken","tags":["Statistik"]}},"/api/statistics/compare":{"get":{"operationId":"get_api_compat_statistics_get_project_compare","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Vergleich aller Projekte fuer Balkendiagramm.","tags":["Statistik"]}},"/api/statistics/export-history":{"get":{"operationId":"get_api_compat_statistics_get_export_history","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Export-Historie: wann wurde was exportiert.","tags":["Statistik"]}},"/api/statistics/project/{project_id}":{"get":{"operationId":"get_api_compat_statistics_get_project_detail","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Detailstatistik fuer ein einzelnes Projekt.","tags":["Statistik"]}},"/api/statistics/symbol-heatmap":{"get":{"operationId":"get_api_compat_statistics_get_symbol_heatmap","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Symbol-Nutzung Heatmap \u2013 welche Symbole werden am meisten genutzt.","tags":["Statistik"]}},"/api/statistics/vde-history":{"get":{"operationId":"get_api_compat_statistics_get_vde_history","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"VDE-Score Verlauf pro Projekt.","tags":["Statistik"]}},"/api/symbols":{"get":{"description":"Alle verf\u00fcgbaren E-CAD Symbole zur\u00fcckgeben (inkl. Filter).","operationId":"get_api_compat_symbol_get_symbols","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Symbole auflisten","tags":["Symbols"]},"post":{"description":"Neues Symbol in die Datenbank eintragen.","operationId":"post_api_compat_symbol_create_symbol","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Symbol erstellen","tags":["Symbols"]}},"/api/symbols/categories":{"get":{"description":"Liste aller Symbolkategorien und Unterkategorien.","operationId":"get_api_compat_symbol_get_symbol_categories","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Symbolkategorien","tags":["Symbols"]}},"/api/symbols/custom":{"post":{"description":"Benutzerdefiniertes Symbol aus SVG-Daten erstellen.","operationId":"post_api_compat_symbol_create_custom_symbol","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Custom Symbol","tags":["Symbols"]}},"/api/symbols/file/<path:sym_path>":{"get":{"operationId":"get_api_compat_symbol_get_symbol_file","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Gibt den SVG-Inhalt einer Symbol-Datei auf Disk zurueck.","tags":["Symbols"]}},"/api/symbols/{symbol_id}/svg":{"get":{"description":"SVG-Grafik eines Symbols zur\u00fcckgeben.","operationId":"get_api_compat_symbol_get_symbol_svg","parameters":[{"in":"path","name":"symbol_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Symbol-SVG","tags":["Symbols"]}},"/api/templates":{"get":{"operationId":"get_api_compat_template_get_templates","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Template Get Templates","tags":["Templates"]},"post":{"operationId":"post_api_compat_template_create_template","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Template Create Template","tags":["Templates"]}},"/api/templates/{template_id}":{"put":{"operationId":"put_api_compat_template_update_template","parameters":[{"in":"path","name":"template_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Api Compat Template Update Template","tags":["Templates"]}},"/api/v2/":{"get":{"operationId":"get_v2_compat_api_v2_root","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"API v2 Root - Info und Endpunkt\u00fcbersicht.","tags":["Sonstige"]}},"/api/v2/admin/backup/create":{"post":{"operationId":"post_v2_compat_v2_backup_create","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Backup Create","tags":["Sonstige"]}},"/api/v2/admin/backup/list":{"get":{"operationId":"get_v2_compat_v2_backup_list","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Backup List","tags":["Sonstige"]}},"/api/v2/admin/backup/restore":{"post":{"operationId":"post_v2_compat_v2_backup_restore","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Backup Restore","tags":["Sonstige"]}},"/api/v2/admin/db-stats":{"get":{"operationId":"get_v2_compat_v2_db_stats","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Db Stats","tags":["Sonstige"]}},"/api/v2/admin/users":{"get":{"operationId":"get_v2_compat_v2_admin_list","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Admin List","tags":["Sonstige"]},"post":{"operationId":"post_v2_compat_v2_admin_create","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Admin Create","tags":["Sonstige"]}},"/api/v2/admin/users/{user_id}":{"delete":{"operationId":"delete_v2_compat_v2_admin_del","parameters":[{"in":"path","name":"user_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Admin Del","tags":["Sonstige"]},"get":{"operationId":"get_v2_compat_v2_admin_get","parameters":[{"in":"path","name":"user_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Admin Get","tags":["Sonstige"]},"put":{"operationId":"put_v2_compat_v2_admin_upd","parameters":[{"in":"path","name":"user_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Admin Upd","tags":["Sonstige"]}},"/api/v2/admin/users/{user_id}/reset-password":{"post":{"operationId":"post_v2_compat_v2_admin_reset","parameters":[{"in":"path","name":"user_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Admin Reset","tags":["Sonstige"]}},"/api/v2/auth/change-password":{"post":{"operationId":"post_v2_compat_v2_change_password","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Change Password","tags":["Sonstige"]}},"/api/v2/auth/login":{"post":{"operationId":"post_v2_compat_v2_login","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Login","tags":["Sonstige"]}},"/api/v2/auth/logout":{"post":{"operationId":"post_v2_compat_v2_logout","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Logout","tags":["Sonstige"]}},"/api/v2/auth/me":{"get":{"operationId":"get_v2_compat_v2_me","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Me","tags":["Sonstige"]}},"/api/v2/bookmarks/{bm_id}":{"delete":{"operationId":"delete_v2_compat_v2_del_bookmark","parameters":[{"in":"path","name":"bm_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Del Bookmark","tags":["Sonstige"]},"put":{"operationId":"put_v2_compat_v2_upd_bookmark","parameters":[{"in":"path","name":"bm_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Upd Bookmark","tags":["Sonstige"]}},"/api/v2/catalog/article/{artikelnr}":{"get":{"operationId":"get_v2_compat_v2_catalog_art","parameters":[{"in":"path","name":"artikelnr","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Catalog Art","tags":["Sonstige"]}},"/api/v2/catalog/manufacturers":{"get":{"operationId":"get_v2_compat_v2_manufacturers","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Manufacturers","tags":["Sonstige"]}},"/api/v2/catalog/search":{"get":{"operationId":"get_v2_compat_v2_catalog_search","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Catalog Search","tags":["Sonstige"]}},"/api/v2/dashboard":{"get":{"operationId":"get_v2_compat_v2_dashboard","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Aggregierte Dashboard-Daten: Timeline, Prueffristen, VDE-Scores, Katalog-Stats, ","tags":["Sonstige"]}},"/api/v2/health":{"get":{"operationId":"get_v2_compat_v2_health","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Health","tags":["System"]}},"/api/v2/ki/chat":{"post":{"operationId":"post_v2_compat_v2_ki_chat","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Generischer KI-Chat fuer beliebige Fragen mit Schaltplan-Kontext.","tags":["Sonstige"]}},"/api/v2/ki/gemini/analyze-image":{"post":{"operationId":"post_v2_compat_v2_gem_img","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Foto eines Papier-Schaltplans -> Netlist + Canvas-Elemente.","tags":["Sonstige"]}},"/api/v2/ki/gemini/explain":{"post":{"operationId":"post_v2_compat_v2_gem_explain","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Schaltplan auf Deutsch erklaeren.","tags":["Sonstige"]}},"/api/v2/ki/gemini/generate":{"post":{"operationId":"post_v2_compat_v2_gem_gen","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Schaltplan aus Textbeschreibung generieren - besserer System-Prompt als DeepSeek","tags":["Sonstige"]}},"/api/v2/ki/gemini/optimize":{"post":{"operationId":"post_v2_compat_v2_gem_opt","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Schaltplan optimieren - fehlende Schutzgeraete, bessere Bauteile vorschlagen.","tags":["Sonstige"]}},"/api/v2/ki/generate":{"post":{"operationId":"post_v2_compat_v2_ki_generate","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"KI generiert Schaltplan-Elemente aus Textbeschreibung","tags":["Sonstige"]}},"/api/v2/ki/providers":{"get":{"operationId":"get_v2_compat_v2_ki_providers","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Verfuegbare KI-Provider pruefen.","tags":["Sonstige"]}},"/api/v2/ki/smart-assist":{"post":{"operationId":"post_v2_compat_v2_smart_assist","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Proaktiver Assistent - analysiert Plan im Hintergrund und gibt Tipps.","tags":["Sonstige"]}},"/api/v2/ki/vde-check":{"post":{"operationId":"post_v2_compat_v2_vde_check","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"KI prueft Schaltplan auf VDE-Konformitaet","tags":["Sonstige"]}},"/api/v2/notifications":{"get":{"operationId":"get_v2_compat_v2_notifs","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Notifs","tags":["Sonstige"]}},"/api/v2/notifications/read-all":{"put":{"operationId":"put_v2_compat_v2_notif_all","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Notif All","tags":["Sonstige"]}},"/api/v2/notifications/{nid}":{"delete":{"operationId":"delete_v2_compat_v2_notif_del","parameters":[{"in":"path","name":"nid","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Notif Del","tags":["Sonstige"]}},"/api/v2/notifications/{nid}/read":{"put":{"operationId":"put_v2_compat_v2_notif_read","parameters":[{"in":"path","name":"nid","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Notif Read","tags":["Sonstige"]}},"/api/v2/openapi.json":{"get":{"operationId":"get_v2_compat_openapi_spec_json","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"OpenAPI 3.0 Spezifikation als JSON.","tags":["Sonstige"]}},"/api/v2/openapi.yaml":{"get":{"operationId":"get_v2_compat_openapi_spec","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"OpenAPI 3.0 Spezifikation als YAML.","tags":["Sonstige"]}},"/api/v2/pages/{page_id}":{"delete":{"operationId":"delete_v2_compat_v2_del_page","parameters":[{"in":"path","name":"page_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Del Page","tags":["Pages"]},"get":{"operationId":"get_v2_compat_v2_get_page","parameters":[{"in":"path","name":"page_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Get Page","tags":["Pages"]},"put":{"operationId":"put_v2_compat_v2_upd_page","parameters":[{"in":"path","name":"page_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Upd Page","tags":["Pages"]}},"/api/v2/pages/{page_id}/reorder":{"put":{"operationId":"put_v2_compat_v2_reorder","parameters":[{"in":"path","name":"page_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Reorder","tags":["Pages"]}},"/api/v2/pages/{page_id}/versions":{"get":{"operationId":"get_v2_compat_v2_page_versions","parameters":[{"in":"path","name":"page_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Return server-side version history for a page","tags":["Pages"]}},"/api/v2/pages/{page_id}/versions/{version_idx}/restore":{"post":{"operationId":"post_v2_compat_v2_restore_ver","parameters":[{"in":"path","name":"page_id","required":true,"schema":{"type":"integer"}},{"in":"path","name":"version_idx","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Restore a specific version of a page","tags":["Pages"]}},"/api/v2/projects":{"get":{"operationId":"get_v2_compat_v2_list_projects","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 List Projects","tags":["Projects"]},"post":{"operationId":"post_v2_compat_v2_create_project","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Create Project","tags":["Projects"]}},"/api/v2/projects/bulk":{"post":{"operationId":"post_v2_compat_v2_bulk","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Bulk","tags":["Projects"]}},"/api/v2/projects/recent":{"get":{"operationId":"get_v2_compat_v2_recent","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Recent","tags":["Projects"]}},"/api/v2/projects/{project_id}":{"delete":{"operationId":"delete_v2_compat_v2_del_project","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Del Project","tags":["Projects"]},"get":{"operationId":"get_v2_compat_v2_get_project","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Get Project","tags":["Projects"]},"put":{"operationId":"put_v2_compat_v2_upd_project","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Upd Project","tags":["Projects"]}},"/api/v2/projects/{project_id}/archive":{"put":{"operationId":"put_v2_compat_v2_archive","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Archive","tags":["Projects"]}},"/api/v2/projects/{project_id}/bom":{"get":{"operationId":"get_v2_compat_v2_bom","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Generiert St\u00fcckliste aus allen Seiten des Projekts","tags":["Projects"]}},"/api/v2/projects/{project_id}/bom/csv":{"get":{"operationId":"get_v2_compat_v2_bom_csv","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Exportiert St\u00fcckliste als CSV","tags":["Projects"]}},"/api/v2/projects/{project_id}/bom/pdf":{"post":{"operationId":"post_v2_compat_v2_bom_pdf","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Exportiert St\u00fcckliste als PDF","tags":["Projects"]}},"/api/v2/projects/{project_id}/bookmarks":{"get":{"operationId":"get_v2_compat_v2_get_bookmarks","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Get Bookmarks","tags":["Projects"]},"post":{"operationId":"post_v2_compat_v2_add_bookmark","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Add Bookmark","tags":["Projects"]}},"/api/v2/projects/{project_id}/duplicate":{"post":{"operationId":"post_v2_compat_v2_duplicate","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Duplicate","tags":["Projects"]}},"/api/v2/projects/{project_id}/export/dxf":{"post":{"operationId":"post_v2_compat_v2_export_dxf","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Exportiert alle Schaltplanseiten als DXF-Datei (R2010, Millimeter).","tags":["Projects"]}},"/api/v2/projects/{project_id}/export/pdf":{"post":{"operationId":"post_v2_compat_v2_export_pdf","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Export Pdf","tags":["Projects"]}},"/api/v2/projects/{project_id}/export/png":{"post":{"operationId":"post_v2_compat_v2_export_png","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Exportiert alle Seiten als PNG-Archiv (ZIP) bei 300 DPI.","tags":["Projects"]}},"/api/v2/projects/{project_id}/export/svg":{"post":{"operationId":"post_v2_compat_v2_export_svg","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Exportiert alle Seiten als SVG-Dateien (ZIP bei mehreren Seiten).","tags":["Projects"]}},"/api/v2/projects/{project_id}/favorite":{"delete":{"operationId":"delete_v2_compat_v2_del_fav","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Del Fav","tags":["Projects"]},"post":{"operationId":"post_v2_compat_v2_set_fav","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Set Fav","tags":["Projects"]}},"/api/v2/projects/{project_id}/kabelplan":{"get":{"operationId":"get_v2_compat_v2_kabelplan","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Generiert Kabelplan","tags":["Projects"]}},"/api/v2/projects/{project_id}/klemmplan":{"get":{"operationId":"get_v2_compat_v2_klemmplan","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Generiert Klemmplan-Daten aus dem Projekt","tags":["Projects"]}},"/api/v2/projects/{project_id}/klemmplan/pdf":{"post":{"operationId":"post_v2_compat_v2_klemmplan_pdf","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Exportiert Klemmplan als PDF nach DIN EN 61082","tags":["Projects"]}},"/api/v2/projects/{project_id}/pages":{"get":{"operationId":"get_v2_compat_v2_get_pages","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Get Pages","tags":["Projects"]},"post":{"operationId":"post_v2_compat_v2_create_page","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Create Page","tags":["Projects"]}},"/api/v2/projects/{project_id}/pages/order":{"put":{"operationId":"put_v2_compat_v2_reorder_bulk","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Bulk reorder pages by providing an ordered list of page IDs.","tags":["Projects"]}},"/api/v2/projects/{project_id}/permissions":{"get":{"operationId":"get_v2_compat_v2_list_perms","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 List Perms","tags":["Projects"]},"post":{"operationId":"post_v2_compat_v2_add_perm","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Add Perm","tags":["Projects"]}},"/api/v2/projects/{project_id}/permissions/{perm_id}":{"delete":{"operationId":"delete_v2_compat_v2_del_perm","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}},{"in":"path","name":"perm_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Del Perm","tags":["Projects"]}},"/api/v2/projects/{project_id}/querverweise":{"get":{"operationId":"get_v2_compat_v2_querverweise","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Generiert Querverweisliste","tags":["Projects"]}},"/api/v2/projects/{project_id}/quickstats":{"get":{"operationId":"get_v2_compat_v2_quickstats","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Quickstats","tags":["Projects"]}},"/api/v2/projects/{project_id}/revisions":{"get":{"operationId":"get_v2_compat_v2_list_revs","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 List Revs","tags":["Projects"]},"post":{"operationId":"post_v2_compat_v2_create_rev","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Create Rev","tags":["Projects"]}},"/api/v2/projects/{project_id}/revisions/{rev_id}":{"delete":{"operationId":"delete_v2_compat_v2_del_rev","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}},{"in":"path","name":"rev_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Del Rev","tags":["Projects"]},"get":{"operationId":"get_v2_compat_v2_get_rev","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}},{"in":"path","name":"rev_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Get Rev","tags":["Projects"]}},"/api/v2/projects/{project_id}/revisions/{rev_id}/restore":{"post":{"operationId":"post_v2_compat_v2_restore_rev","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}},{"in":"path","name":"rev_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Restore project pages to a revision snapshot.","tags":["Projects"]}},"/api/v2/projects/{project_id}/settings":{"get":{"operationId":"get_v2_compat_v2_get_proj_sett","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Get Proj Sett","tags":["Projects"]},"put":{"operationId":"put_v2_compat_v2_put_proj_sett","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Put Proj Sett","tags":["Projects"]}},"/api/v2/projects/{project_id}/tags":{"put":{"operationId":"put_v2_compat_v2_tags","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Tags","tags":["Projects"]}},"/api/v2/projects/{project_id}/unarchive":{"put":{"operationId":"put_v2_compat_v2_unarchive","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Unarchive","tags":["Projects"]}},"/api/v2/settings":{"get":{"operationId":"get_v2_compat_v2_get_settings","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Get Settings","tags":["Sonstige"]},"put":{"operationId":"put_v2_compat_v2_put_settings","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Put Settings","tags":["Sonstige"]}},"/api/v2/statistics":{"get":{"operationId":"get_v2_compat_v2_statistics","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Aggregierte Statistiken fuer das Dashboard.","tags":["Statistik"]}},"/api/v2/symbols":{"get":{"operationId":"get_v2_compat_v2_list_symbols","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 List Symbols","tags":["Symbols"]},"post":{"operationId":"post_v2_compat_v2_create_symbol","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Create Symbol","tags":["Symbols"]}},"/api/v2/symbols/categories":{"get":{"operationId":"get_v2_compat_v2_sym_cats","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Sym Cats","tags":["Symbols"]}},"/api/v2/symbols/custom":{"post":{"operationId":"post_v2_compat_v2_custom_symbol","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Speichert ein vom Symbol-Editor gezeichnetes Symbol.","tags":["Symbols"]}},"/api/v2/symbols/file/<path:sym_path>":{"get":{"operationId":"get_v2_compat_v2_sym_file","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Gibt den SVG-Inhalt einer Symbol-Datei auf Disk zurueck.","tags":["Symbols"]}},"/api/v2/symbols/{symbol_id}/svg":{"get":{"operationId":"get_v2_compat_v2_sym_svg","parameters":[{"in":"path","name":"symbol_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"V2 Compat V2 Sym Svg","tags":["Symbols"]}},"/api/version":{"get":{"description":"Aktuelle API- und App-Version zur\u00fcckgeben.","operationId":"get_api_compat_auth_get_version","responses":{"200":{"description":"Erfolg"},"401":{"description":"Nicht angemeldet"}},"summary":"Versionsinfo","tags":["Sonstige"]}}},"security":[{"sessionAuth":[]}],"servers":[{"description":"Production","url":"https://ecad.benning.one"},{"description":"Local","url":"http://localhost:5055"}],"tags":[{"name":"Admin"},{"name":"Auth"},{"name":"Bookmarks"},{"name":"Dashboard"},{"name":"Katalog"},{"name":"Notifications"},{"name":"Pages"},{"name":"Projects"},{"name":"Pruefplanung"},{"name":"Schaltschrank"},{"name":"Settings"},{"name":"Sonstige"},{"name":"Statistik"},{"name":"Symbols"},{"name":"System"},{"name":"Templates"}]}
