API Dokumentation
Vollstaendige Referenz der Benning E-CAD REST API. Alle Endpoints benoetigen eine aktive Session (Cookie-basiert), ausser /auth/login und /health.
GET /api/v2/openapi.json und GET /api/v2/openapi.yaml. v1-Endpoints werden weiterhin unterstützt.
POST /auth/login wird ein session-Cookie gesetzt. Alle weiteren Requests müssen diesen Cookie mitsenden. Fehlt die Session, antworten alle Endpoints mit 401 Unauthorized.Response-Format:
{"ok": true, "data": {...}} oder {"ok": false, "error": "Fehlermeldung"}Binäre Responses (PDF, CSV, PNG, SVG, ZIP) haben direkte
Content-Type-Header ohne JSON-Wrapper.
HTTP Statuscodes
| Code | Bedeutung | Typischer Grund |
|---|---|---|
| 200 | OK | Erfolgreiche GET/PUT/DELETE-Anfrage |
| 201 | Created | Ressource erfolgreich erstellt (POST) |
| 400 | Bad Request | Fehlendes Pflichtfeld, ungültiger Wert |
| 401 | Unauthorized | Nicht angemeldet oder Session abgelaufen |
| 403 | Forbidden | Keine Berechtigung fuer dieses Projekt |
| 404 | Not Found | Projekt/Seite/Symbol existiert nicht |
| 409 | Conflict | BMK-Duplikat, Username bereits vorhanden |
| 500 | Server Error | Interner Fehler, PDF-Generierung fehlgeschlagen |
Authentifizierung
5 EndpointsRequest Body
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| username | string | Ja | Benutzername |
| password | string | Ja | Passwort |
| remember | boolean | Nein | Permanente Session (default: false) |
Response 200
{"ok":true,"data":{"id":1,"username":"admin","email":"admin@example.com","company_name":"VBWork"}}
Try it
Response 200
{"ok":true,"data":{"message":"Abgemeldet"}}Try it
Response 200
{"ok":true,"data":{"id":1,"username":"admin","email":"admin@example.com","company_name":"VBWork","created_at":"2026-01-01T00:00:00"}}
Try it
Request Body
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| old_password | string | Ja | Aktuelles Passwort |
| new_password | string | Ja | Neues Passwort (min. 6 Zeichen) |
Einstellungen
4 EndpointsResponse 200
{"ok":true,"data":{"profile":{"username":"admin","email":"...","company_name":"..."},"preferences":{"theme":"dark","language":"de","default_format":"A4"}}}
Try it
Request Body
| Feld | Typ | Beschreibung |
|---|---|---|
| company_name | string | Firmenname fuer Schriftfeld |
| default_format | string | A4, A3, A2 |
| default_orientation | string | quer, hoch |
| language | string | de, en |
Request Body
| Feld | Typ | Beschreibung |
|---|---|---|
| string | E-Mail-Adresse | |
| company_name | string | Firmenname |
| first_name | string | Vorname |
| last_name | string | Nachname |
Projekte
17 EndpointsQuery Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
| status | string | Filter: active, archived |
| search | string | Suche in Name/Beschreibung |
| tag | string | Tag-Filter |
Response 200
[{"id":1,"name":"Maschinensteuerung","description":"...","page_count":3,"status":"active","tags":[],"is_favorite":false,"created_at":"...","updated_at":"..."}]
Try it
Request Body
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| name | string | Ja | Projektname |
| description | string | Nein | Beschreibung |
| page_format | string | Nein | A4 (default), A3, A2 |
| orientation | string | Nein | quer (default), hoch |
| tags | array[string] | Nein | Tags |
Response 201
{"ok":true,"data":{"id":42,"name":"Mein Projekt","page_count":1,"status":"active","created_at":"..."}}
Try it
Response 200
{"ok":true,"data":{"id":1,"name":"...","pages":[{"id":1,"page_number":1,"title":"Seite 1","canvas_data":{"elements":[],"wires":[]}}]}}
Try it
Request Body
| Feld | Typ | Beschreibung |
|---|---|---|
| name | string | Neuer Projektname |
| description | string | Neue Beschreibung |
| customer | string | Auftraggeber |
| location | string | Aufstellort |
Response 200
{"ok":true,"data":{"deleted":1}}Response 200
{"ok":true,"data":[{"id":1,"name":"...","updated_at":"..."}]}Request Body
| Feld | Typ | Beschreibung |
|---|---|---|
| name | string | Name der Kopie (default: "Kopie von ...") |
Response 201
{"ok":true,"data":{"id":43,"name":"Kopie von Mein Projekt","page_count":3}}Request Body
{"status":"in_progress"}
Werte: draft, in_progress, review, done, archived
Response 200
{"ok":true,"data":{"archived":true}}Response 200
{"ok":true,"data":{"is_favorite":true}}Request Body
{"tags":["automation","400V","SPS"]}Response 200
{"ok":true,"data":{"pages":3,"elements":24,"wires":18,"terminals":12,"cables":6,"symbols_used":["ls3","contactor-3p"]}}
image/png direkt (kein JSON-Wrapper). QR-Code des Projektlinks.Request Body
| Feld | Typ | Beschreibung |
|---|---|---|
| start | integer | Startnummer (default: 1) |
| prefix | string | Prefix (default: "-") |
| per_page | boolean | Pro Seite neu nummerieren (default: false) |
Response 200
{"ok":true,"data":{"renamed":12}}Request Body
{"ids":[1,2,3],"action":"archive"}
Actions: archive, unarchive, delete, set_status, add_tag, remove_tag
application/zip. Enthaelt JSON-Dump aller Seiten, Canvas-Daten, Metadaten und Symbolreferenzen.Request Body
{"project_id_a":1,"project_id_b":2}Response 200
{"ok":true,"data":{"added":[],"removed":[],"changed":[{"bmk":"-K1","field":"label","old":"Alt","new":"Neu"}]}}Response 200
{"ok":true,"data":{"auto_save":true,"wire_snap":10,"default_wire_color":"#a0522d","cross_section":"1.5","norm":"DIN EN 61082"}}
Request Body
{"columns":[{"id":"todo","title":"Offen","cards":[]},{"id":"done","title":"Fertig","cards":[]}]}Seiten (Schaltplanseiten)
8 EndpointsResponse 200
[{"id":1,"project_id":1,"page_number":1,"title":"Seite 1","page_format":"A4","orientation":"quer","canvas_data":{"elements":[],"wires":[]}}]
Request Body
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| title | string | Nein | Seitentitel (default: "Seite N") |
| page_format | string | Nein | A4, A3, A2 |
| orientation | string | Nein | quer, hoch |
| canvas_data | object | Nein | Initiale Canvas-Daten {elements:[], wires:[]} |
canvas_data Struktur
{
"elements": [
{"id":"el_1","symbolId":"ls3","x":200,"y":300,"width":60,"height":60,
"bmk":"-Q1","label":"Leitungsschutzschalter","voltage":"400V","rotation":0}
],
"wires": [
{"id":"w_1","segments":[{"x1":200,"y1":80,"x2":200,"y2":300}],
"color":"#a0522d","potential":"L1","crossSection":"1.5","number":"1"}
]
}
Request Body
{"template_id":3,"title":"Motorseite"}Response 200
{"ok":true,"data":{"id":1,"title":"Seite 1","page_format":"A4","orientation":"quer","canvas_data":{...}}}
Request Body
| Feld | Typ | Beschreibung |
|---|---|---|
| canvas_data | object | Vollstaendiger Canvas-Inhalt |
| title | string | Seitentitel |
| page_format | string | A4, A3, A2 |
| orientation | string | quer, hoch |
Response 400 - Letzte Seite
{"ok":false,"error":"Mindestens eine Seite muss vorhanden sein"}Request Body
{"page_number":3}Request Body
{"order":[3,1,2]}
Array aus Seiten-IDs in der gewuenschten Reihenfolge.
Revisionen (Versionierung)
10 EndpointsResponse 200
[{"index":0,"timestamp":"2026-03-23T12:00:00","element_count":12,"wire_count":8}]
Response 200
{"ok":true,"data":{"restored":true,"timestamp":"2026-03-23T12:00:00"}}
Response 200
[{"id":1,"version":"v1.0","comment":"Freigabe Kunde","created_at":"...","page_count":3}]
Request Body
| Feld | Typ | Beschreibung |
|---|---|---|
| version | string | Versionsbezeichnung (z.B. "v2.1") |
| comment | string | Kommentar zur Revision |
Response 200
{"ok":true,"data":{"added":[{"bmk":"-K3","type":"contactor"}],"removed":[],"changed":[{"bmk":"-Q1","field":"label","old":"Alt","new":"Neu"}]}}
BMK-Verwaltung (Betriebsmittelkennzeichnung)
5 EndpointsRequest Body
{"bmk":"-K1"}Response 200
{"ok":true,"data":{"unique":false,"existing_pages":[1,3],"count":2}}
Request Body
{"prefix":"-K","type":"contactor"}Response 200
{"ok":true,"data":{"next":"-K4","existing":["-K1","-K2","-K3"]}}Request Body
{"symbol_type":"motor","page_id":1}Response 200
{"ok":true,"data":{"suggested":"-M2"}}Request Body
{"prefix":"-K","start":1,"step":1}
Response 200
{"ok":true,"data":{"renamed":4,"mapping":{"-K3":"-K1","-K7":"-K2"}}}Symbole
6 EndpointsQuery Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
| category | string | Kategorie-Filter (z.B. "Schuetze") |
| search | string | Suche in Name, Beschreibung, IEC-Nummer |
| is_custom | boolean | Nur eigene Symbole |
Response 200
[{"id":1,"name":"Schuetz 3-polig","category":"Schuetze","iec_number":"IEC 60617","tags":["motor"],"is_custom":false}]
Try it
Response 200
{"ok":true,"data":{"categories":[{"name":"Schuetze","count":12},{"name":"Sicherungen","count":8}]}}
Try it
image/svg+xml direkt (kein JSON-Wrapper).Beispiel: /api/symbols/file/schuetze/contactor-3p.svg → liefert SVG-Inhalt.
Request Body
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| name | string | Ja | Symbolname |
| category | string | Ja | Kategorie |
| svg_data | string | Ja | SVG-Quellcode (wird sanitized: kein script, foreignObject, javascript:) |
| description | string | Nein | Beschreibung |
| iec_number | string | Nein | IEC 60617 Nummer |
| tags | array | Nein | Suchbegriffe |
Request Body
{"name":"Mein Symbol","category":"Custom","paths":[{"d":"M0 0 L60 60","stroke":"#fff"}],"width":60,"height":60}
Komponenten & Artikelkatalog
6 EndpointsQuery Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
| q | string | Suchbegriff (Name, Artikelnr, Hersteller) |
| manufacturer | string | Hersteller-Filter |
| limit | integer | Ergebnislimit (default: 20) |
Response 200
[{"id":1,"name":"3RT2015 Schuetz","manufacturer":"Siemens","article_nr":"3RT2015-1BB41","current":"7A","voltage":"24VDC"}]
Liefert Komponenten-Vorschlaege zum Symbol-Typ (z.B. contactor, fuse, motor).
Response 200
{"ok":true,"data":["contactor","fuse","motor","circuit_breaker","terminal"]}Query Parameter
| Parameter | Beschreibung |
|---|---|
| q | Suchbegriff |
| manufacturer | Hersteller-Filter |
| category | Kategorie-Filter |
Try it
Response 200
{"ok":true,"data":{"artikelnr":"3RT2015-1BB41","name":"...","manufacturer":"Siemens","price":89.50,"unit":"Stueck","datasheet_url":"..."}}
Response 200
{"ok":true,"data":["Siemens","ABB","Schneider Electric","Eaton","Phoenix Contact","Wago"]}
Export (PDF, SVG, DXF, PNG, Import)
12 EndpointsRequest Body
| Feld | Typ | Beschreibung |
|---|---|---|
| pages | array[int] | Seiten-IDs. Leer = alle Seiten. |
| with_schriftfeld | boolean | DIN-Schriftfeld (default: true) |
| company | object | {name, address, project_nr, drawn_by, date} |
| include_bom | boolean | Stueckliste anhaengen (default: false) |
application/pdf als direkter Datei-Download.PDF-Inhalt
1. Deckblatt (DIN EN 61082) • 2. Inhaltsverzeichnis • 3. Alle Schaltplanseiten • 4. Stueckliste (BOM) • 5. Klemmplan • 6. Kabelplan • 7. Verdrahtungsliste • 8. Pruefprotokoll-Vorlage (VDE 0100-600)
Request Body
{"page_ids":[1,2]}image/svg+xml oder application/zip (mehrere Seiten).application/dxf. Kompatibel mit AutoCAD, EPLAN, WSCAD.Request Body
| Feld | Typ | Beschreibung |
|---|---|---|
| dpi | integer | Aufloesung (default: 150, max: 300) |
| page_ids | array[int] | Seiten-IDs |
Request Body
{"formats":["pdf","svg","dxf"],"page_ids":[1,2,3]}Request
Multipart-Form-Upload: file-Feld mit der zu importierenden Datei.
Formate
| Endpoint | Format | Funktion |
|---|---|---|
| /import/csv | CSV | Stueckliste / Komponentenliste importieren |
| /import/dxf | DXF | CAD-Zeichnung als Vorlage importieren |
| /import/svg | SVG | SVG-Zeichnung als Hintergrund |
| /import/image | PNG/JPG | Bild als Hintergrundebene |
Stueckliste (BOM)
3 EndpointsResponse 200
{"ok":true,"data":{"items":[
{"Pos":1,"BMK":"-Q1","Bezeichnung":"Leitungsschutzschalter 3-pol",
"Hersteller":"","Bestellnummer":"","Symbol":"ls3","Seite":"Seite 1","Menge":1}
],"total":5}}
Try it
text/csv; charset=utf-8. Semikolon-separiert, UTF-8 BOM fuer Excel.application/pdf. Tabellarische Auflistung aller Betriebsmittel mit Pos., BMK, Bezeichnung, Menge.Klemmplan & Klemmenliste
4 EndpointsResponse 200
{"ok":true,"data":{
"groups":{"X1":[
{"nr":"1","bezeichnung":"Einspeisung L1","potential":"L1","querschnitt":"2.5",
"von_bmk":"-Q1","nach_bmk":"-K1","farbe":"braun"}
]},
"total":12
}}
Try it
Response 200
{"ok":true,"data":[{"bmk":"-K1","contacts":[{"nr":"13/14","type":"NO","page":"Seite 2"}]}]}
Response 200
{"ok":true,"data":{"bmk":"-K1","label":"Hauptschuetz","contacts":[{"contact_nr":"13","type":"NO","page":"Seite 2","connected_to":"-Q1"}]}}
Kabelmanagement
9 EndpointsResponse 200
{"ok":true,"data":[{
"id":1,"project_id":1,"bezeichnung":"W1","typ":"NYCY","querschnitt":"3x1.5","laenge":5.5,
"farbe":"schwarz","von_bmk":"-Q1","nach_bmk":"-M1","adern":3,"schirm":true,
"von_klemme":"1","nach_klemme":"U","note":"Motorleitung"
}]}
Try it
Request Body
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| bezeichnung | string | Ja | Kabelbezeichnung (z.B. "W1") |
| typ | string | Nein | Kabeltyp (NYCY, H05VV-F, ...) |
| querschnitt | string | Nein | Querschnitt (z.B. "3x1.5") |
| laenge | float | Nein | Laenge in Metern |
| von_bmk | string | Nein | Startpunkt BMK |
| nach_bmk | string | Nein | Endpunkt BMK |
| adern | integer | Nein | Anzahl Adern |
| schirm | boolean | Nein | Geschirmt (default: false) |
Gleiche Felder wie POST. Nur angegebene Felder werden aktualisiert.
Response 200
{"ok":true,"data":{"deleted":1}}Response 200
{"ok":true,"data":{"total_cables":8,"total_length_m":42.5,"types":{"NYCY":3,"H05VV-F":5},"total_weight_kg":2.1}}
text/csv semikolon-separiert. PDF: application/pdf tabellarisch.Verdrahtungsliste & Kabelplan-Ansicht
5 EndpointsResponse 200
{"ok":true,"data":{"connections":[
{"nr":"1","potential":"L1","querschnitt":"1.5","farbe":"braun",
"von_bmk":"-Q1","von_klemme":"2","nach_bmk":"-K1","nach_klemme":"A1","laenge":0.25}
],"total":18}}
Response 200
{"ok":true,"data":{"cables":[{"number":"1","potential":"L1","cross_section":"1.5","color":"#a0522d","from_bmk":"-Q1","to_bmk":"-K1","length_approx":250}],"total":8}}
Response 200
{"ok":true,"data":{"references":[{
"bmk":"-K1","label":"Hauptschuetz",
"occurrences":[{"page":"Seite 1","page_number":1,"x":200,"y":340}]
}],"multi_page":["-K1","-F1"]}}
Response 200
{"ok":true,"data":{"potentials":{"L1":[{"page":"Seite 1","direction":"out"},{"page":"Seite 2","direction":"in"}]}}}
Steckerbelegung (Connectors)
2 EndpointsResponse 200
{"ok":true,"data":[{"bmk":"-X1","type":"DSUB9","pins":9,"page":"Seite 1","connections":[{"pin":1,"signal":"RxD","connected_to":"-A1"}]}]}
Response 200
{"ok":true,"data":[{"bmk":"-X1","pins":[{"nr":"1","von":"A1:1","nach":"X2:1","farbe":"ws"}]}]}
VDE-Pruefung & Sicherheitsanalyse
5 EndpointsRequest Body
| Feld | Typ | Beschreibung |
|---|---|---|
| elements | array | Canvas-Elemente der Seite |
| wires | array | Leitungen der Seite |
| norm | string | Pruefnorm (default: "VDE 0100") |
Response 200
{"ok":true,"data":{
"issues":[
{"type":"error","message":"Fehlender PE-Anschluss an -M1","rule":"VDE 0100-540","severity":"high"},
{"type":"warning","message":"Querschnitt 1.5mm2 bei 16A-Sicherung unterdimensioniert","rule":"VDE 0100-430"}
],
"score":72,
"passed":false
}}
Try it
Response 200
{"ok":true,"data":{"pages_checked":3,"total_issues":5,"errors":2,"warnings":3,"score":78,"report":[...]}}
Response 200
{"ok":true,"data":{"emergency_stop":true,"pe_circuit":true,"fuses":true,"issues":[],"safety_score":100}}
Response 200
{"ok":true,"data":{"total_leakage_ma":2.4,"rcd_required":true,"recommended_rcd":"30mA","circuits":[...]}}
Response 200
{"ok":true,"data":{"circuits":[{"name":"Abgang 1","fuse":"16A","consumer":"-M1","current_demand":12}]}}
Pruefprotokoll & Pruefkalender
12 EndpointsResponse 200
{"ok":true,"data":{"anlage":"Maschinensteuerung","pruefpunkte":[{"nr":1,"beschreibung":"Sichtpruefung","norm":"VDE 0100-600","ergebnis":null}]}}
Response 200
[{"id":1,"nr":"1.1","beschreibung":"Isolationswiderstand messen","norm":"VDE 0100-600:2017 Abschn. 61","einheit":"MOhm","sollwert":">1"}]
Response 200
[{"id":1,"bezeichnung":"UVV-Pruefung","faellig_am":"2026-04-01","intervall_monate":12,"letzter_pruefer":"M. Muster","status":"faellig"}]
Request Body
| Feld | Typ | Beschreibung |
|---|---|---|
| pruefer | string | Name des Pruefers |
| ergebnis | string | bestanden, nicht_bestanden, auflagen |
| notiz | string | Pruefnotiz |
| datum | string | Pruef-Datum (default: heute) |
Response 200
{"ok":true,"data":{"overdue":2,"due_soon":3,"upcoming":5,"items":[...]}}
Try it
Request Body
| Feld | Typ | Beschreibung |
|---|---|---|
| anlage | string | Anlagenbezeichnung |
| standort | string | Aufstellort |
| auftraggeber | string | Auftraggeber |
| pruefer | string | Name Pruefer |
| datum | string | Pruef-Datum (DD.MM.YYYY) |
| norm | string | Pruefnorm (default: "VDE 0100-600") |
| messungen | array | Messergebnisse [{punkt, wert, einheit, bestanden}] |
Wartungsplan
6 EndpointsResponse 200
{"ok":true,"data":{"active_tasks":3,"overdue":1,"due_this_month":2,"last_service":"2026-01-15"}}
Response 200
{"ok":true,"data":{"components":[{"bmk":"-K1","typ":"Schuetz","wartungsintervall_monate":12,"letzte_wartung":null}],"gesamtaufwand_h":4.5}}
Response 200
[{"id":1,"aufgabe":"Schuetz -K1 pruefen","faellig":"2026-04-01","erledigt":false,"zugewiesen_an":""}]
Request Body
{"aufgabe":"Schmiermittel wechseln","faellig":"2026-06-01","zugewiesen_an":"Max Muster","intervall_monate":6}
Request Body
{"task_id":1,"erledigt":true,"notiz":"Erledigt am 2026-03-24","naechste_faelligkeit":"2026-09-24"}application/pdf. Vollstaendiger Wartungsplan mit Checklisten und Intervallplanung.Energiebilanz & Leistungsanalyse
2 EndpointsResponse 200
{"ok":true,"data":{
"total_power_kw":22.5,"total_current_a":42.3,
"consumers":[{"bmk":"-M1","label":"Hauptantrieb","power_kw":15,"current_a":28.5,"cos_phi":0.85}],
"fuse_check":{"ok":true,"issues":[]}
}}
Try it
application/pdf. Lastflussdiagramm und Leistungstabelle.Schaltschrank-Layout
6 EndpointsRequest Body
| Feld | Typ | Beschreibung |
|---|---|---|
| width_mm | integer | Breite in mm (default: 600) |
| height_mm | integer | Hoehe in mm (default: 800) |
| depth_mm | integer | Tiefe in mm (default: 250) |
| hersteller | string | Schaltschranktyp (Rittal, Siemens, ...) |
Response 200
{"ok":true,"data":{"layout_id":1,"width_mm":600,"height_mm":800,"components":[{"bmk":"-Q1","x_mm":20,"y_mm":50,"width_mm":40,"height_mm":80}]}}
Response 200
[{"bmk":"-K1","label":"Hauptschuetz","x":100,"y":200,"width":45,"height":90,"row":2,"slot":3}]
Laedt Schaltschrank-Layout unabhaengig vom Projekt-Kontext.
Request Body
{"components":[{"bmk":"-Q1","x":20,"y":50}],"din_rails":[{"y":80,"length_mm":400}]}application/pdf. Massstaebliche Zeichnung mit Bauteilpositionen und Beschriftung.Motor-Datenblaetter
2 EndpointsResponse 200
{"ok":true,"data":[{"bmk":"-M1","label":"Hauptantrieb","power_kw":7.5,"voltage":"400V","current_a":15.2,"protection":"IP55","poles":4}]}
application/pdf. Alle Motoren mit technischen Kenndaten.Statistik & Dashboard
2 EndpointsResponse 200
{"ok":true,"data":{"projects":12,"pages":48,"symbols_used":234,"exports_this_month":8,"storage_mb":45.2}}
Try it
Response 200
{"ok":true,"data":{"recent_projects":[...],"pending_tasks":3,"overdue_checks":1,"notifications":2}}
KI-Assistenz (DeepSeek & Gemini)
10 EndpointsResponse 200
{"ok":true,"data":{"providers":[
{"name":"deepseek","model":"deepseek-chat","status":"available","features":["generate","edit","chat","vde-check"]},
{"name":"gemini","model":"gemini-2.0-flash","status":"available","features":["analyze-image","explain","generate","optimize"]}
]}}
Try it
Request Body
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| prompt | string | Ja | Natuerlichsprachliche Beschreibung (z.B. "Erstelle Direktstarter 4kW") |
| context | object | Nein | Bestehendes canvas_data als Kontext |
Response 200
{"ok":true,"data":{"elements":[
{"type":"busline","y":80,"label":"L1","color":"#a0522d"},
{"type":"symbol","symbolFile":"schuetze/contactor-3p.svg","x":200,"y":340,"bmk":"-K1"},
{"type":"wire","segments":[{"x1":200,"y1":80,"x2":200,"y2":340}]}
],"description":"Direktstarter mit Hauptschuetz und Leitungsschutz"}}
deepseek-chat, temperature=0.3, max_tokens=4000. Timeout: 60s.Try it
Request Body
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| prompt | string | Ja | Aenderungsbefehl (z.B. "Fuege zweite Sicherung ein") |
| elements | array | Ja | Aktuelle Canvas-Elemente |
| wires | array | Nein | Aktuelle Leitungen |
Response 200
{"ok":true,"data":{"add":[...],"remove":["el_3"],"modify":[{"id":"el_1","changes":{"label":"Neu"}}]}}
Request Body
| Feld | Typ | Beschreibung |
|---|---|---|
| message | string | Frage/Nachricht an KI |
| history | array | Chat-Verlauf [{role:"user/assistant",content:"..."}] |
| context | object | canvas_data als Kontext fuer Fragen |
Response 200
{"ok":true,"data":{"reply":"Um einen Stern-Dreieck-Starter zu ergaenzen...","suggestions":["Zeige mir den Anlasserkreis"]}}
Request Body
{"canvas_data":{"elements":[...],"wires":[...]},"mode":"complete"}
Modes: complete (Schaltplan vervollstaendigen), optimize (optimieren), errors (Fehler finden)
Request Body
{"prompt":"Stern-Dreieck-Anlauf fuer 11kW Motor","model":"gemini-2.0-flash"}/ki/generate. Verwendet Google Gemini statt DeepSeek.Request Body (JSON)
| Feld | Typ | Beschreibung |
|---|---|---|
| image_base64 | string | Base64-kodiertes Bild (JPG/PNG) |
| task | string | describe, extract_elements, convert_to_ecad |
Response (task: convert_to_ecad)
{"ok":true,"data":{"elements":[...],"wires":[...],"confidence":0.87}}
Request Body
{"canvas_data":{...},"level":"beginner"}
Levels: beginner, intermediate, expert
Response 200
{"ok":true,"data":{"explanation":"Der Schaltplan zeigt einen Direktstarter...","components_explained":[...],"safety_notes":[]}}
Request Body
{"canvas_data":{...},"goals":["cost","space","vde_compliance"]}Response 200
{"ok":true,"data":{"suggestions":[{"type":"replace","bmk":"-Q1","current":"LS-Schalter 3-pol 16A","proposed":"LS-Schalter 3-pol 10A","reason":"Motorstrom 8A, 10A ausreichend","saving_eur":12.50}]}}
Annotationen & Kommentare
4 EndpointsResponse 200
[{"id":1,"text":"Hier PE-Anschluss pruefen","page_id":1,"x":200,"y":300,"author":"admin","created_at":"...","resolved":false}]
Request Body
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| text | string | Ja | Kommentartext |
| page_id | integer | Ja | Seiten-ID |
| x | number | Nein | X-Position auf der Seite |
| y | number | Nein | Y-Position auf der Seite |
| bmk_ref | string | Nein | Referenziertes Betriebsmittel |
Request Body
{"text":"Aktualisierter Text","resolved":true}Response 200
{"ok":true,"data":{"deleted":1}}Berechtigungen (Projekt-Sharing)
3 EndpointsResponse 200
[{"id":1,"user_id":2,"username":"mitarbeiter","role":"viewer","granted_at":"..."}]
Roles: viewer (nur lesen), editor (bearbeiten), admin (voller Zugriff)
Request Body
{"user_id":2,"role":"editor"}Response 200
{"ok":true,"data":{"deleted":1}}Makros (Vordefinierte Schaltungsgruppen)
7 EndpointsVerfuegbare System-Makros
| ID | Name | Kategorie |
|---|---|---|
| direktstarter | Direktstarter | Motorsteuerung |
| stern_dreieck | Stern-Dreieck-Anlauf | Motorsteuerung |
| wendeschaltung | Wendeschaltung | Motorsteuerung |
| sanftanlauf | Sanftanlauf | Motorsteuerung |
| steckdosenabzweig | Steckdosenabzweig | Niederspannung |
| beleuchtungsabzweig | Beleuchtungsabzweig | Niederspannung |
| notaus_kreis | NOT-AUS-Kreis | Sicherheit |
Try it
Response 200
{"ok":true,"data":{"id":"direktstarter","name":"Direktstarter","elements":[
{"symId":"ls3","dx":0,"dy":0,"w":60,"h":60,"label":"LS","bmk_prefix":"-Q"},
{"symId":"contactor-3p","dx":0,"dy":120,"w":60,"h":60,"label":"Schuetz","bmk_prefix":"-K"}
],"wires":[...]}}
Try it
Response 200
[{"id":1,"name":"Mein Makro","category":"Custom","elements_count":5}]Request Body
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| name | string | Ja | Makroname |
| elements | array | Ja | Element-Definitionen |
| wires | array | Nein | Leitungs-Definitionen |
| category | string | Nein | Kategorie (default: "Custom") |
Projekt- & Seitenvorlagen
6 EndpointsResponse 200
[{"id":"empty","name":"Leeres Projekt","pages_count":1},{"id":"maschine","name":"Maschinensteuerung","pages_count":4}]
Request Body
{"name":"Neues Projekt","template_id":"maschine","description":"..."}
Response 200
[{"id":1,"name":"Motor A4 quer","format":"A4","orientation":"quer","element_count":8}]
Response 200
[{"id":1,"name":"Standard A4","format":"A4","company_data":{"name":"","address":""},"logo_path":""}]
Benachrichtigungen
4 EndpointsResponse 200
{"ok":true,"data":[{"id":1,"type":"prueftermin","message":"UVV-Pruefung faellig: Maschine X","read":false,"created_at":"...","project_id":1}],"unread_count":2}
Try it
Response 200
{"ok":true,"data":{"read":true}}Response 200
{"ok":true,"data":{"deleted":1}}Response 200
{"ok":true,"data":{"checked":12,"new_notifications":3,"overdue":1}}Lesezeichen (Bookmarks)
4 EndpointsResponse 200
[{"id":1,"label":"Motor-Hauptkreis","page_id":2,"page_number":2,"bmk":"-K1","x":200,"y":340}]
Request Body
{"label":"Wichtige Stelle","page_id":2,"bmk":"-K1","x":200,"y":340}
Request Body
{"label":"Neuer Name"}Response 200
{"ok":true,"data":{"deleted":1}}Administration (Admin-Rolle erforderlich)
14 Endpoints/api/admin/* Endpoints erfordern die Admin-Rolle. Normale Benutzer erhalten 403 Forbidden.Response 200
[{"id":1,"username":"admin","email":"...","role":"admin","created_at":"...","last_login":"...","project_count":12}]
Try it
Request Body
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| username | string | Ja | Eindeutiger Benutzername |
| password | string | Ja | Initialpasswort (min. 6 Zeichen) |
| string | Nein | E-Mail-Adresse | |
| role | string | Nein | user (default), admin |
| company_name | string | Nein | Firmenname |
Response 200
{"ok":true,"data":{"id":2,"username":"user2","email":"...","role":"user","projects":[...],"last_login":"..."}}
Request Body
{"role":"admin","email":"new@example.com","is_active":true}Request Body
{"new_password":"NeuesPasswort123"}Response 200
{"ok":true,"data":{"filename":"backup_20260324_120000.db","size_mb":45.2,"created_at":"2026-03-24T12:00:00"}}
Try it
Response 200
{"ok":true,"data":{"backups":[{"filename":"backup_20260324.db","size_mb":45.2,"created_at":"..."}]}}
Try it
application/octet-stream Datei-Download.Request Body
{"filename":"backup_20260324.db"}Response 200
{"ok":true,"data":{"size_mb":45.2,"users":5,"projects":48,"pages":192,"symbols":234,"last_vacuum":"2026-03-20"}}
Try it
Request
Multipart-Upload: file-Feld mit CSV. Erwartete Spalten: artikelnr;name;manufacturer;price;unit;category
Health, Dashboard & Sonstiges
4 EndpointsResponse 200
{"ok":true,"data":{"status":"ok","service":"benning-ecad","version":"1.0.0","db":"ok","uptime_s":86400}}
Try it
| Endpoint | Methode | Funktion |
|---|---|---|
| /projects/{id}/verteilerplan | POST | Verteilerplan generieren |
| /projects/{id}/verteilerplan/pdf | POST | Verteilerplan als PDF |
| /projects/{id}/fehlerstrom-analyse | POST | RCD-Dimensionierung |
| /api/pruefkalender/check-fristen | POST | Alle Fristen pruefen |
| /projects/{id}/import/csv | POST | Komponentenliste importieren |
Keine Endpoints gefunden
Suche anpassen oder