# BreakPilot Backend API Dokumentation ## Übersicht Base URL: `http://localhost:8000/api` Alle Endpoints erfordern Authentifizierung via JWT im Authorization-Header: ``` Authorization: Bearer ``` --- ## Worksheets API Generiert Lernmaterialien (MC-Tests, Lückentexte, Mindmaps, Quiz). ### POST /worksheets/generate/multiple-choice Generiert Multiple-Choice-Fragen aus Quelltext. **Request Body:** ```json { "source_text": "Der Text, aus dem Fragen generiert werden sollen...", "num_questions": 5, "difficulty": "medium", "topic": "Thema", "subject": "Deutsch" } ``` **Response (200):** ```json { "success": true, "content": { "type": "multiple_choice", "data": { "questions": [ { "question": "Was ist...?", "options": ["A", "B", "C", "D"], "correct": 0, "explanation": "Erklärung..." } ] } } } ``` ### POST /worksheets/generate/cloze Generiert Lückentexte. **Request Body:** ```json { "source_text": "Quelltext...", "num_gaps": 5, "gap_type": "word", "hint_type": "first_letter" } ``` ### POST /worksheets/generate/mindmap Generiert Mindmap als Mermaid-Diagramm. **Request Body:** ```json { "source_text": "Quelltext...", "max_branches": 5, "depth": 2 } ``` ### POST /worksheets/generate/quiz Generiert Mix aus verschiedenen Fragetypen. **Request Body:** ```json { "source_text": "Quelltext...", "num_questions": 5, "include_types": ["mc", "open", "truefalse"] } ``` ### POST /worksheets/generate/batch Generiert mehrere Inhaltstypen gleichzeitig. **Request Body:** ```json { "source_text": "Quelltext...", "types": ["multiple_choice", "cloze", "mindmap"] } ``` --- ## Corrections API OCR-basierte Klausurkorrektur mit automatischer Bewertung. ### POST /corrections/ Erstellt neue Korrektur-Session. **Request Body:** ```json { "student_id": "student-123", "student_name": "Max Mustermann", "class_name": "10a", "exam_title": "Klassenarbeit Nr. 3", "subject": "Mathematik", "max_points": 100 } ``` **Response (200):** ```json { "success": true, "correction": { "id": "uuid", "status": "uploaded", "student_name": "Max Mustermann", ... } } ``` ### POST /corrections/{id}/upload Lädt gescannte Klausur hoch und startet OCR im Hintergrund. **Request (multipart/form-data):** - `file`: PDF/PNG/JPG Datei **Response (200):** ```json { "success": true, "correction": { "id": "uuid", "status": "processing" } } ``` ### GET /corrections/{id} Ruft Korrektur-Status ab. **Response (200):** ```json { "success": true, "correction": { "id": "uuid", "status": "ocr_complete", "extracted_text": "Erkannter Text...", "evaluations": [], ... } } ``` **Status-Werte:** - `uploaded` - Datei hochgeladen - `processing` - OCR läuft - `ocr_complete` - OCR fertig - `analyzing` - Analyse läuft - `analyzed` - Analyse abgeschlossen - `reviewing` - In Review - `completed` - Fertig - `error` - Fehler ### POST /corrections/{id}/analyze Analysiert extrahierten Text und bewertet Antworten. **Request Body (optional):** ```json { "expected_answers": { "1": "Musterlösung für Aufgabe 1", "2": "Musterlösung für Aufgabe 2" } } ``` **Response (200):** ```json { "success": true, "evaluations": [ { "question_number": 1, "extracted_text": "Schülerantwort...", "points_possible": 10, "points_awarded": 8, "feedback": "Gut gelöst...", "is_correct": true, "confidence": 0.85 } ], "total_points": 85, "percentage": 85.0, "suggested_grade": "2", "ai_feedback": "Insgesamt gute Arbeit..." } ``` ### PUT /corrections/{id} Aktualisiert Korrektur (manuelle Anpassungen). **Request Body:** ```json { "evaluations": [...], "total_points": 90, "grade": "1", "teacher_notes": "Sehr gute Verbesserung", "status": "reviewing" } ``` ### POST /corrections/{id}/complete Markiert Korrektur als abgeschlossen. ### GET /corrections/{id}/export-pdf Exportiert korrigierte Arbeit als PDF. **Response:** `application/pdf` ### GET /corrections/class/{class_name}/summary Klassenübersicht mit Statistiken. **Response (200):** ```json { "class_name": "10a", "total_students": 25, "average_percentage": 72.5, "average_points": 72.5, "grade_distribution": {"1": 2, "2": 8, "3": 10, "4": 4, "5": 1}, "corrections": [...] } ``` --- ## Letters API Elternbriefe mit GFK-Integration und PDF-Export. ### POST /letters/ Erstellt neuen Elternbrief. **Request Body:** ```json { "recipient_name": "Familie Müller", "recipient_address": "Musterstr. 1, 12345 Stadt", "student_name": "Max Müller", "student_class": "7a", "subject": "Information zum Leistungsstand", "content": "Sehr geehrte Eltern...", "letter_type": "halbjahr", "tone": "professional", "teacher_name": "Frau Schmidt", "teacher_title": "Klassenlehrerin" } ``` **letter_type Werte:** - `general` - Allgemeine Information - `halbjahr` - Halbjahresinformation - `fehlzeiten` - Fehlzeiten-Mitteilung - `elternabend` - Einladung Elternabend - `lob` - Positives Feedback - `custom` - Benutzerdefiniert **tone Werte:** - `formal` - Sehr förmlich - `professional` - Professionell-freundlich - `warm` - Warmherzig - `concerned` - Besorgt - `appreciative` - Wertschätzend ### GET /letters/{id} Lädt gespeicherten Brief. ### GET /letters/ Listet alle Briefe (mit Filterung). **Query Parameter:** - `class_name` - Filter nach Klasse - `letter_type` - Filter nach Typ - `status` - Filter nach Status (draft/sent/archived) - `page` - Seitennummer - `page_size` - Einträge pro Seite ### PUT /letters/{id} Aktualisiert Brief. ### DELETE /letters/{id} Löscht Brief. ### POST /letters/export-pdf Exportiert Brief als PDF. **Request Body:** ```json { "letter_id": "uuid" } ``` oder ```json { "letter_data": { ... } } ``` **Response:** `application/pdf` ### POST /letters/improve Verbessert Text nach GFK-Prinzipien. **Request Body:** ```json { "content": "Text zur Verbesserung...", "communication_type": "general_info", "tone": "professional" } ``` **Response (200):** ```json { "improved_content": "Verbesserter Text...", "changes": ["Hinweis 1", "Hinweis 2"], "gfk_score": 0.85, "gfk_principles_applied": ["Ich-Botschaften", "Offene Fragen"] } ``` ### POST /letters/{id}/send Versendet Brief per Email. **Request Body:** ```json { "letter_id": "uuid", "recipient_email": "eltern@example.com", "cc_emails": ["schulleitung@example.com"], "include_pdf": true } ``` --- ## State Engine API Begleiter-Modus mit Phasen-Management und Antizipation. ### GET /state/context Ruft Lehrer-Kontext ab. **Query Parameter:** - `teacher_id` (required) **Response (200):** ```json { "context": { "teacher_id": "xxx", "current_phase": "school_year_start", "completed_milestones": ["consent_accept", "profile_complete"], "classes": [...], "stats": {...} }, "phase_info": { "name": "Schuljahresbeginn", "description": "..." } } ``` ### GET /state/phase Ruft aktuelle Phase ab. ### GET /state/phases Listet alle verfügbaren Phasen. **Response (200):** ```json { "phases": [ {"id": "onboarding", "name": "Onboarding", "description": "..."}, {"id": "school_year_start", "name": "Schuljahresbeginn", "description": "..."}, ... ] } ``` ### GET /state/suggestions Ruft Vorschläge für Lehrer ab. **Query Parameter:** - `teacher_id` (required) **Response (200):** ```json { "suggestions": [ { "id": "create_first_class", "title": "Erste Klasse anlegen", "description": "...", "priority": "urgent", "category": "setup", "action": {"type": "navigate", "target": "/school"} } ], "current_phase": "school_year_start", "priority_counts": {"urgent": 1, "high": 2, "medium": 3} } ``` ### GET /state/suggestions/top Ruft wichtigsten Vorschlag ab. ### GET /state/dashboard Komplettes Dashboard für Begleiter-Modus. **Response (200):** ```json { "context": {...}, "suggestions": [...], "stats": {...}, "progress": { "milestones_completed": 3, "milestones_total": 5 }, "phases": [...] } ``` ### POST /state/milestone Schließt Meilenstein ab. **Request Body:** ```json { "milestone": "consent_accept" } ``` ### POST /state/transition Manueller Phasenübergang. **Request Body:** ```json { "target_phase": "teaching_setup" } ``` ### GET /state/next-phase Zeigt nächste Phase und Bedingungen. --- ## Schuljahr-Phasen | Phase | ID | Beschreibung | |-------|-----|--------------| | Onboarding | `onboarding` | Ersteinrichtung | | Schuljahresbeginn | `school_year_start` | Klassen anlegen | | Unterrichtsvorbereitung | `teaching_setup` | Materialien erstellen | | 1. Leistungsphase | `performance_1` | Tests & Klausuren | | Halbjahr | `semester_end` | Zeugnisse | | 2. Leistungsphase | `performance_2` | Tests & Klausuren | | Prüfungsphase | `exam_phase` | Abschlussprüfungen | | Schuljahresende | `year_end` | Abschluss | | Archiviert | `archived` | Abgeschlossen | --- ## Klausur-Korrektur API (Abitur) Abitur-Klausurkorrektur mit 15-Punkte-System, Erst-/Zweitprüfer-Workflow und KI-gestützter Bewertung. ### Klausur-Modi | Modus | Beschreibung | |-------|--------------| | `landes_abitur` | NiBiS Niedersachsen - rechtlich geklärte Aufgaben | | `vorabitur` | Lehrer-erstellte Klausuren mit Rights-Gate | ### POST /klausur-korrektur/klausuren Erstellt neue Abitur-Klausur. **Request Body:** ```json { "title": "Deutsch LK Q4", "subject": "deutsch", "modus": "landes_abitur", "year": 2025, "semester": "Q4" } ``` **Response (200):** ```json { "success": true, "klausur": { "id": "uuid", "title": "Deutsch LK Q4", "modus": "landes_abitur", "status": "draft", ... } } ``` ### GET /klausur-korrektur/klausuren Listet alle Klausuren. **Query Parameter:** - `subject` - Filter nach Fach - `year` - Filter nach Jahr - `status` - Filter nach Status ### GET /klausur-korrektur/klausuren/{id} Ruft Klausur-Details ab. ### PUT /klausur-korrektur/klausuren/{id} Aktualisiert Klausur. ### DELETE /klausur-korrektur/klausuren/{id} Löscht Klausur. ### POST /klausur-korrektur/klausuren/{id}/text-sources Fügt Text-Quelle hinzu (Vorabitur-Modus). **Request Body:** ```json { "source_type": "eigentext", "title": "Kafka - Die Verwandlung", "author": "Franz Kafka", "content": "Als Gregor Samsa eines Morgens..." } ``` ### POST /klausur-korrektur/text-sources/{id}/verify Prüft Text-Quelle mit Rights-Gate. **Response (200):** ```json { "verified": true, "license_status": "verified", "license_info": { "license": "PD", "source": "Projekt Gutenberg" } } ``` ### GET /klausur-korrektur/nibis/aufgaben Listet verfügbare NiBiS-Aufgaben. **Query Parameter:** - `fach` - Filter nach Fach - `jahr` - Filter nach Jahr - `niveau` - Filter nach Niveau (eA/gA) ### POST /klausur-korrektur/klausuren/{id}/erwartungshorizont/generate Generiert Erwartungshorizont mit KI. **Request Body:** ```json { "aufgabenstellung": "Analysieren Sie den vorliegenden Text...", "text_context": "Kafka - Die Verwandlung..." } ``` **Response (200):** ```json { "erwartungshorizont": { "aufgaben": [ { "nummer": "1", "operator": "analysieren", "anforderungsbereich": 2, "erwartete_leistungen": ["Erkennt den Erzähler", "..."], "punkte": 30 } ], "max_points": 100 } } ``` ### PUT /klausur-korrektur/klausuren/{id}/erwartungshorizont Aktualisiert Erwartungshorizont manuell. ### POST /klausur-korrektur/klausuren/{id}/students Lädt Schülerarbeit hoch. **Request (multipart/form-data):** - `file`: PDF/PNG/JPG Datei - `student_name`: Name des Schülers ### POST /klausur-korrektur/students/{id}/ocr Startet OCR für Schülerarbeit. ### POST /klausur-korrektur/students/{id}/evaluate Startet KI-Bewertung. **Response (200):** ```json { "criteria_scores": { "rechtschreibung": {"score": 85, "weight": 0.15, "annotations": ["..."]}, "grammatik": {"score": 90, "weight": 0.15, "annotations": ["..."]}, "inhalt": {"score": 75, "weight": 0.40, "annotations": ["..."]}, "struktur": {"score": 80, "weight": 0.15, "annotations": ["..."]}, "stil": {"score": 85, "weight": 0.15, "annotations": ["..."]} }, "raw_points": 80, "grade_points": 11, "grade_label": "2" } ``` ### PUT /klausur-korrektur/students/{id}/criteria Passt Bewertungskriterien manuell an. ### POST /klausur-korrektur/students/{id}/annotations Fügt Annotation zu Dokument hinzu. ### POST /klausur-korrektur/students/{id}/gutachten/generate Generiert Gutachten mit KI. **Response (200):** ```json { "gutachten": { "einleitung": "Die vorliegende Arbeit...", "hauptteil": "Der Verfasser zeigt...", "fazit": "Zusammenfassend lässt sich...", "staerken": ["Gute Argumentation", "..."], "schwaechen": ["Rechtschreibfehler", "..."] } } ``` ### PUT /klausur-korrektur/students/{id}/gutachten Bearbeitet Gutachten manuell. ### POST /klausur-korrektur/students/{id}/grade Berechnet 15-Punkte-Note. ### PUT /klausur-korrektur/students/{id}/finalize Schließt Bewertung ab. ### POST /klausur-korrektur/students/{id}/examiner Weist Erst-/Zweitprüfer zu. **Request Body:** ```json { "examiner_type": "first", "examiner_id": "teacher-uuid" } ``` ### GET /klausur-korrektur/examiner/queue Listet Prüfer-Warteschlange. ### GET /klausur-korrektur/klausuren/{id}/fairness Vergleichsanalyse aller Schüler. **Response (200):** ```json { "average_score": 75.5, "median_score": 76, "standard_deviation": 8.2, "grade_distribution": {"15": 1, "14": 2, "13": 4, ...}, "outliers": ["student-uuid-1", "student-uuid-2"] } ``` ### POST /klausur-korrektur/klausuren/{id}/export Exportiert Klausur als PDF. **Request Body:** ```json { "include_gutachten": true, "include_annotations": true } ``` **Response:** `application/pdf` ### 15-Punkte-Notenschlüssel | Punkte | Prozent | Note | |--------|---------|------| | 15 | ≥95% | 1+ | | 14 | ≥90% | 1 | | 13 | ≥85% | 1- | | 12 | ≥80% | 2+ | | 11 | ≥75% | 2 | | 10 | ≥70% | 2- | | 9 | ≥65% | 3+ | | 8 | ≥60% | 3 | | 7 | ≥55% | 3- | | 6 | ≥50% | 4+ | | 5 | ≥45% | 4 | | 4 | ≥40% | 4- | | 3 | ≥33% | 5+ | | 2 | ≥27% | 5 | | 1 | ≥20% | 5- | | 0 | <20% | 6 | ### Bewertungskriterien | Kriterium | Gewicht | Beschreibung | |-----------|---------|--------------| | `rechtschreibung` | 15% | Orthografie | | `grammatik` | 15% | Grammatik & Syntax | | `inhalt` | 40% | Inhaltliche Qualität | | `struktur` | 15% | Aufbau & Gliederung | | `stil` | 15% | Ausdruck & Stil | --- ## Abitur-Docs API (Admin) Verwaltung von Abitur-Dokumenten (NiBiS Niedersachsen) für RAG-System. ### GET /abitur-docs/documents Listet alle Dokumente. **Query Parameter:** - `jahr` - Filter nach Jahr - `fach` - Filter nach Fach - `niveau` - Filter nach Niveau (eA/gA) - `status` - Filter nach Status (pending/recognized/confirmed/indexed) - `search` - Suche im Dateinamen **Response (200):** ```json { "documents": [ { "id": "uuid", "filename": "2025_Deutsch_eA_I_EWH.pdf", "status": "confirmed", "metadata": { "jahr": 2025, "bundesland": "niedersachsen", "fach": "deutsch", "niveau": "eA", "dokument_typ": "erwartungshorizont", "aufgaben_nummer": "I" }, "recognition_result": { "confidence": 0.95, "extracted": {...}, "method": "filename_pattern" } } ], "total": 150 } ``` ### GET /abitur-docs/documents/{id} Ruft Dokument-Details ab. ### POST /abitur-docs/documents Lädt einzelnes Dokument hoch. **Request (multipart/form-data):** - `file`: PDF Datei **Response (200):** ```json { "success": true, "document": { "id": "uuid", "filename": "...", "status": "recognized", "recognition_result": {...} } } ``` ### POST /abitur-docs/import-zip Importiert ZIP-Datei mit mehreren Dokumenten. **Request (multipart/form-data):** - `file`: ZIP Datei **Response (200):** ```json { "success": true, "imported_count": 45, "skipped_count": 2, "errors": ["file.xyz: Unbekanntes Format"] } ``` ### PUT /abitur-docs/documents/{id}/metadata Aktualisiert Dokument-Metadaten. **Request Body:** ```json { "jahr": 2025, "bundesland": "niedersachsen", "fach": "deutsch", "niveau": "eA", "dokument_typ": "erwartungshorizont", "aufgaben_nummer": "I" } ``` ### POST /abitur-docs/documents/{id}/index Indexiert Dokument für RAG-System. ### DELETE /abitur-docs/documents/{id} Löscht Dokument. ### GET /abitur-docs/documents/{id}/preview Gibt PDF-Vorschau zurück. **Response:** `application/pdf` ### GET /abitur-docs/enums Listet verfügbare Enum-Werte für Dropdowns. **Response (200):** ```json { "bundeslaender": [ {"value": "niedersachsen", "label": "Niedersachsen"}, ... ], "faecher": [ {"value": "deutsch", "label": "Deutsch"}, ... ], "niveaus": [ {"value": "eA", "label": "eA - erhöhtes Anforderungsniveau"}, {"value": "gA", "label": "gA - grundlegendes Anforderungsniveau"} ], "dokumenttypen": [ {"value": "aufgabe", "label": "Aufgabe"}, {"value": "erwartungshorizont", "label": "Erwartungshorizont"}, ... ] } ``` ### GET /abitur-docs/search Sucht Dokumente für Klausur-Korrektur. **Query Parameter:** - `fach` (required) - Fach - `jahr` - Jahr - `niveau` - Niveau **Response (200):** ```json { "documents": [ { "id": "uuid", "filename": "...", "metadata": {...} } ] } ``` ### Dokument-Status | Status | Beschreibung | |--------|--------------| | `pending` | Hochgeladen, nicht erkannt | | `recognized` | KI-Erkennung abgeschlossen | | `confirmed` | Metadaten bestätigt | | `indexed` | Im RAG-System indexiert | | `error` | Fehler bei Verarbeitung | ### NiBiS Dateinamen-Muster Automatische Erkennung von: - `2025_Deutsch_eA_I.pdf` → Deutsch eA Aufgabe I - `2025_Deutsch_eA_I_EWH.pdf` → Deutsch eA Erwartungshorizont I - `2025_Englisch_gA_Hoerverstehen.pdf` → Englisch gA Hörverstehen --- ## Security API (DevSecOps Dashboard) API fuer das Security Dashboard mit DevSecOps-Tools Integration. ### GET /v1/security/tools Gibt Status aller DevSecOps-Tools zurueck. **Response (200):** ```json [ { "name": "Gitleaks", "installed": true, "version": "v8.18.0", "last_run": "09.01.2025 12:30", "last_findings": 0 } ] ``` ### GET /v1/security/findings Gibt alle Security-Findings zurueck. **Query Parameter:** - `tool` (optional): Filter nach Tool (gitleaks, semgrep, bandit, trivy, grype) - `severity` (optional): Filter nach Severity (CRITICAL, HIGH, MEDIUM, LOW, INFO) - `limit` (optional): Max. Anzahl (default: 100) **Response (200):** ```json [ { "id": "CVE-2023-12345", "tool": "trivy", "severity": "HIGH", "title": "Critical vulnerability in package", "message": "requests 2.28.0", "file": "requirements.txt", "line": null, "found_at": "2025-01-09T12:30:00" } ] ``` ### GET /v1/security/summary Gibt Severity-Zusammenfassung zurueck. **Response (200):** ```json { "critical": 0, "high": 2, "medium": 5, "low": 12, "info": 3, "total": 22 } ``` ### GET /v1/security/sbom Gibt SBOM (Software Bill of Materials) zurueck. **Response (200):** ```json { "components": [ { "name": "fastapi", "version": "0.109.0", "type": "python", "licenses": [{"license": {"id": "MIT"}}] } ], "metadata": { "timestamp": "2025-01-09T12:30:00" } } ``` ### GET /v1/security/history Gibt Scan-Historie zurueck. **Query Parameter:** - `limit` (optional): Max. Anzahl (default: 20) **Response (200):** ```json [ { "timestamp": "2025-01-09T12:30:00", "title": "Gitleaks Scan", "description": "Keine Findings", "status": "success" } ] ``` ### GET /v1/security/reports/{tool} Gibt vollstaendigen Report eines Tools zurueck. **Path Parameter:** - `tool`: Tool-Name (gitleaks, semgrep, bandit, trivy, grype) **Response (200):** Rohes JSON des Tool-Reports ### POST /v1/security/scan/{type} Startet einen Security-Scan. **Path Parameter:** - `type`: Scan-Typ (secrets, sast, deps, containers, sbom, all) **Response (200):** ```json { "status": "started", "scan_type": "all", "timestamp": "20250109_123000", "message": "Scan 'all' wurde gestartet" } ``` ### GET /v1/security/health Health-Check fuer Security API. **Response (200):** ```json { "status": "healthy", "tools_installed": 5, "tools_total": 6, "reports_dir": "/app/security-reports", "reports_exist": true } ``` --- ## Legal Templates API (Admin) Verwaltung von rechtlichen Textbausteinen für den Dokumentengenerator. Die Templates werden aus Open-Source-Repositories (CC0, MIT, CC BY 4.0) ingestiert und für RAG-basierte Dokumentengenerierung verwendet. ### GET /api/v1/admin/templates/status Gibt den aktuellen Ingestion-Status zurück. **Response (200):** ```json { "collection_exists": true, "document_count": 1250, "sources_count": 13, "last_ingestion": "2026-02-08T10:30:00Z", "ingestion_running": false } ``` ### GET /api/v1/admin/templates/sources Listet alle konfigurierten Template-Quellen. **Response (200):** ```json { "sources": [ { "name": "github-site-policy", "repo_url": "https://github.com/github/site-policy", "license_type": "cc0", "license_name": "CC0 1.0 Universal", "template_types": ["terms_of_service", "privacy_policy"], "languages": ["en"], "jurisdiction": "US", "attribution_required": false, "document_count": 45 } ], "total_sources": 13 } ``` ### GET /api/v1/admin/templates/licenses Gibt Lizenz-Statistiken zurück. **Response (200):** ```json { "licenses": { "cc0": { "count": 450, "attribution_required": false, "sources": ["github-site-policy", "opr-vc"] }, "mit": { "count": 380, "attribution_required": true, "sources": ["webflorist-privacy-policy"] }, "cc_by_4": { "count": 220, "attribution_required": true, "sources": ["common-paper"] } }, "total_documents": 1250 } ``` ### POST /api/v1/admin/templates/ingest Startet vollständige Ingestion aller Quellen im Hintergrund. **Response (202):** ```json { "status": "started", "message": "Ingestion für 13 Quellen gestartet", "task_id": "uuid", "sources_count": 13 } ``` ### POST /api/v1/admin/templates/ingest-source Ingestiert eine einzelne Quelle. **Request Body:** ```json { "source_name": "github-site-policy" } ``` **Response (202):** ```json { "status": "started", "message": "Ingestion für github-site-policy gestartet", "source": "github-site-policy" } ``` ### POST /api/v1/admin/templates/search Semantische Suche in Templates mit Lizenz-Filtern. **Request Body:** ```json { "query": "Datenschutzerklärung DSGVO konform", "template_type": "privacy_policy", "license_types": ["cc0", "mit"], "language": "de", "jurisdiction": "DE", "attribution_required": false, "limit": 10 } ``` **Response (200):** ```json { "results": [ { "id": "uuid", "text": "Diese Datenschutzerklärung informiert Sie...", "score": 0.92, "template_type": "privacy_policy", "license_id": "cc0", "license_name": "CC0 1.0 Universal", "source_name": "opr-vc", "source_url": "https://opr.vc/docs/dsgvo", "language": "de", "jurisdiction": "DE", "attribution_required": false, "attribution_text": null, "placeholders": ["[FIRMENNAME]", "[ADRESSE]"] } ], "total": 45 } ``` ### DELETE /api/v1/admin/templates/reset Leert die gesamte Collection. **Vorsicht: Alle Templates werden gelöscht!** **Response (200):** ```json { "success": true, "message": "Collection bp_legal_templates geleert", "deleted_count": 1250 } ``` ### DELETE /api/v1/admin/templates/source/{source_name} Löscht alle Dokumente einer bestimmten Quelle. **Path Parameter:** - `source_name`: Name der Quelle (z.B. "github-site-policy") **Response (200):** ```json { "success": true, "message": "45 Dokumente von github-site-policy gelöscht", "deleted_count": 45 } ``` ### Lizenz-Typen | Typ | Beschreibung | Attribution | |-----|--------------|-------------| | `public_domain` | Amtliche Werke (§5 UrhG) | Nein | | `cc0` | CC0 1.0 Universal | Nein (empfohlen) | | `unlicense` | Unlicense | Nein | | `mit` | MIT License | Ja (im Footer) | | `cc_by_4` | CC BY 4.0 | Ja + Änderungshinweis | | `reuse_notice` | EDPB/EDPS Reuse Notice | Ja (keine Sinnentstellung) | ### Template-Typen | Typ | Beschreibung | |-----|--------------| | `privacy_policy` | Datenschutzerklärung | | `terms_of_service` | Nutzungsbedingungen | | `agb` | Allgemeine Geschäftsbedingungen | | `cookie_banner` | Cookie-Banner & Cookie-Policy | | `impressum` | Impressum/Legal Notice | | `widerruf` | Widerrufsbelehrung | | `dpa` | Auftragsverarbeitungsvertrag | | `sla` | Service Level Agreement | | `nda` | Geheimhaltungsvereinbarung | | `clause` | Einzelne Vertragsklausel | --- ## Fehler-Responses ### 400 Bad Request ```json { "detail": "Beschreibung des Fehlers" } ``` ### 401 Unauthorized ```json { "detail": "Not authenticated" } ``` ### 404 Not Found ```json { "detail": "Ressource nicht gefunden" } ``` ### 500 Internal Server Error ```json { "detail": "Interner Serverfehler" } ```