{"openapi":"3.1.0","info":{"title":"Documentr API","version":"1.0.0","description":"REST API für KI-gestützte Dokumentenverwaltung. Authentifizierung per Bearer-Token (API-Schlüssel).","contact":{"name":"Documentr","url":"https://documentr.app/developers/api"}},"servers":[{"url":"https://documentr.app","description":"Production"}],"paths":{"/api/v1/documents/{uuid}/download":{"get":{"tags":["Documents"],"parameters":[{"name":"uuid","in":"path","required":true,"schema":{"type":"string"},"description":"Dokument-UUID"}],"responses":{"200":{"description":"PDF-Datei","content":{"application/pdf":{}}},"401":{"description":"Unauthorized"},"404":{"description":"Dokument nicht gefunden"}},"description":"PDF-Datei eines Dokuments herunterladen","security":[{"bearerAuth":[]}]}},"/api/v1/documents/{uuid}":{"get":{"tags":["Documents"],"parameters":[{"name":"uuid","in":"path","required":true,"schema":{"type":"string"},"description":"Dokument-UUID"}],"responses":{"200":{"description":"Dokument-Details"},"401":{"description":"Unauthorized"},"404":{"description":"Dokument nicht gefunden"}},"description":"Einzeldokument per UUID abrufen (Titel, Zusammenfassung, Absender, Tags, Ordner)","security":[{"bearerAuth":[]}]}},"/api/v1/documents":{"get":{"tags":["Documents"],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","default":50,"minimum":1,"maximum":100},"description":"Anzahl Ergebnisse (1–100, Standard: 50)"},{"name":"offset","in":"query","schema":{"type":"integer","default":0,"minimum":0},"description":"Offset für Pagination"},{"name":"tag","in":"query","schema":{"type":"string"},"description":"Nach Tag filtern"},{"name":"folder","in":"query","schema":{"type":"string"},"description":"Nach Ordner filtern"},{"name":"sender","in":"query","schema":{"type":"string"},"description":"Nach Absender filtern"},{"name":"favorite","in":"query","schema":{"type":"boolean"},"description":"Nur Favoriten"},{"name":"archived","in":"query","schema":{"type":"boolean"},"description":"Nur archivierte"},{"name":"fromDate","in":"query","schema":{"type":"string","format":"date"},"description":"Ab Datum (ISO 8601)"},{"name":"toDate","in":"query","schema":{"type":"string","format":"date"},"description":"Bis Datum (ISO 8601)"}],"responses":{"200":{"description":"Paginierte Dokumentliste"},"401":{"description":"Unauthorized"}},"description":"Dokumente auflisten mit optionalen Filtern und Pagination","security":[{"bearerAuth":[]}]}},"/api/v1/documents/search-content":{"post":{"tags":["Search"],"parameters":[],"responses":{"200":{"description":"Semantische Suchergebnisse","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","required":["info","results","unsearchableDocuments","hasMoreUnsearchableDocuments"],"properties":{"info":{"type":"string","description":"Zusammenfassung des Ergebnisses"},"results":{"type":"array","description":"Treffer je Dokument, nach Rang sortiert","items":{"type":"object","required":["rank","uuid","title","sender","documentDate","uploadedAt","excerpts"],"properties":{"rank":{"type":"integer","minimum":1,"description":"1 für den relevantesten Treffer"},"uuid":{"type":"string","format":"uuid"},"title":{"type":["string","null"]},"sender":{"type":["string","null"],"description":"Name des Absenders, ohne Anschrift"},"documentDate":{"type":["string","null"],"format":"date","description":"Datum des Dokuments (YYYY-MM-DD), null wenn keins erkannt wurde"},"uploadedAt":{"type":"string","format":"date-time","description":"Zeitpunkt des Uploads"},"excerpts":{"type":"array","description":"Bis zu drei Textauszüge, je höchstens 800 Zeichen","items":{"type":"object","required":["pageNumber","text"],"properties":{"pageNumber":{"type":["integer","null"],"minimum":1,"description":"Seite des Auszugs, null wenn unbekannt"},"text":{"type":"string"}}}}}}},"unsearchableDocuments":{"type":"array","description":"Dokumente, die noch nicht durchsuchbar sind, neueste zuerst, höchstens 10","items":{"type":"object","required":["uuid","title","uploadedAt","state"],"properties":{"uuid":{"type":"string","format":"uuid"},"title":{"type":["string","null"],"description":"null, solange die Analyse noch keinen Titel vergeben hat"},"uploadedAt":{"type":"string","format":"date-time"},"state":{"type":"string","enum":["processing","waitingForBudget","failed","notSearchable"],"description":"processing: Analyse oder Vektorisierung läuft oder wartet in der Warteschlange. waitingForBudget: wartet auf freies KI-Budget. failed: letzter Verarbeitungsschritt fehlgeschlagen oder abgebrochen. notSearchable: nichts in Arbeit, aber nichts durchsuchbar (kein Text oder Vektorisierung nie gestartet)."}}}},"hasMoreUnsearchableDocuments":{"type":"boolean","description":"true, wenn mehr Dokumente nicht durchsuchbar sind als aufgeführt"}}}}}}}},"401":{"description":"Unauthorized"}},"description":"Semantische Suche im Dokumentinhalt per Vektorähnlichkeit (RAG). Liefert je Dokument Rang, Absender, Dokument- und Upload-Datum sowie Textauszüge mit Seitenzahl; bei fast gleicher Relevanz steht von mehreren Fassungen desselben Dokuments (gleicher Absender, gleicher Titel ohne Jahreszahl) die neueste zuerst. Zusätzlich werden Dokumente genannt, die noch nicht durchsuchbar sind. Seit Documentr 0.79.0 sind `excerpts` Objekte mit `pageNumber` und `text` statt Zeichenketten.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["query"],"properties":{"query":{"type":"string","description":"Suchanfrage in natürlicher Sprache"},"limit":{"type":"number","description":"Max. Ergebnisse (Standard: 15, Max: 50)"}}}}}}}},"/api/v1/documents/search":{"post":{"tags":["Search"],"parameters":[],"responses":{"200":{"description":"Suchergebnisse"},"401":{"description":"Unauthorized"}},"description":"Textsuche über Dokumente (Titel, Zusammenfassung, Absender) mit Trigram-Ähnlichkeit","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["query"],"properties":{"query":{"type":"string","description":"Suchbegriff"}}}}}}}},"/api/v1/folders":{"get":{"tags":["Folders"],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","default":50,"minimum":1,"maximum":100},"description":"Anzahl Ergebnisse (1–100, Standard: 50)"},{"name":"offset","in":"query","schema":{"type":"integer","default":0,"minimum":0},"description":"Offset für Pagination"}],"responses":{"200":{"description":"Paginierte Ordner-Liste"},"401":{"description":"Unauthorized"}},"description":"Alle Ordner mit Dokument-Anzahl auflisten (paginiert)","security":[{"bearerAuth":[]}]}},"/api/v1/stats":{"get":{"tags":["Statistics"],"parameters":[],"responses":{"200":{"description":"Statistiken"},"401":{"description":"Unauthorized"}},"description":"Bibliotheksstatistiken abrufen (Gesamtzahl, analysiert, archiviert, Favoriten, Tags, Ordner)","security":[{"bearerAuth":[]}]}},"/api/v1/tags":{"get":{"tags":["Tags"],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","default":50,"minimum":1,"maximum":100},"description":"Anzahl Ergebnisse (1–100, Standard: 50)"},{"name":"offset","in":"query","schema":{"type":"integer","default":0,"minimum":0},"description":"Offset für Pagination"}],"responses":{"200":{"description":"Paginierte Tag-Liste"},"401":{"description":"Unauthorized"}},"description":"Alle Tags mit Dokument-Anzahl auflisten (paginiert)","security":[{"bearerAuth":[]}]}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"API-Key im Format dk_..."}}}}