description:"Vollständige REST-API-Referenz. Tool-Endpunkte, Stapelverarbeitung, Pipelines, Dateibibliothek, Authentifizierung, Teams und Admin-Operationen."
Interaktive API-Dokumentation mit Beispielen für Anfragen und Antworten ist verfügbar unter [http://localhost:1349/api/docs](http://localhost:1349/api/docs).
Schlüssel erhalten das Präfix `si_` und werden als scrypt-Hashes gespeichert. Der Rohschlüssel wird einmal angezeigt und ist danach nie wieder abrufbar.
Wenn MFA für einen Benutzer aktiviert ist, gibt `POST /api/auth/login` statt eines Sitzungs-Tokens `{"requiresMfa":true,"mfaToken":"...","mfaRequired":true|false}` zurück. Senden Sie dieses `mfaToken` zusammen mit einem TOTP- oder Wiederherstellungscode an `/api/auth/mfa/complete`.
### Berechtigungen {#permissions}
| Berechtigung | Admin | Benutzer |
|-----------|:-----:|:----:|
| Tools verwenden | ✓ | ✓ |
| Eigene Dateien/Pipelines/API-Schlüssel | ✓ | ✓ |
| Dateien/Pipelines/Schlüssel aller Benutzer sehen | ✓ | - |
| Einstellungen schreiben | ✓ | - |
| Benutzer & Teams verwalten | ✓ | - |
| Branding verwalten | ✓ | - |
## Health-Check {#health-check}
| Methode | Pfad | Zugriff | Beschreibung |
|--------|------|--------|-------------|
| `GET` | `/api/v1/health` | Öffentlich | Grundlegender Health-Check. Gibt `{"status":"healthy","version":"..."}` mit 200 zurück oder `{"status":"unhealthy"}` mit 503, wenn die Datenbank nicht erreichbar ist. |
| `GET` | `/api/v1/readyz` | Öffentlich | Readiness-Probe. Prüft PostgreSQL, Redis, Speicherplatz und S3, sofern konfiguriert. Gibt 503 zurück, wenn die Instanz keinen Datenverkehr erhalten sollte. |
curl -X POST http://localhost:1349/api/v1/tools/<section>/<toolId> \
-H "Authorization: Bearer <token>"\
-F "file=@input.jpg"\
-F 'settings={"width":800,"height":600}'
# Batch (returns ZIP)
curl -X POST http://localhost:1349/api/v1/tools/<section>/<toolId>/batch \
-H "Authorization: Bearer <token>"\
-F "files=@a.jpg"\
-F "files=@b.jpg"\
-F 'settings={...}'
```
`<section>` ist einer der Werte `image`, `video`, `audio`, `pdf` oder `files`.
- Der Upload ist `multipart/form-data`.
-`settings` ist ein JSON-String mit tool-spezifischen Optionen.
-`clientJobId` ist ein optionales Formularfeld für vom Aufrufer bereitgestellte Fortschrittskorrelation.
-`fileId` ist ein optionales Formularfeld, das auf ein vorhandenes Element der Dateibibliothek verweist. Wenn vorhanden, wird die verarbeitete Ausgabe als neue Version gespeichert und die Antwort enthält `savedFileId`.
- **Schnelle Tools** geben in der Regel 200-JSON zurück: `{"jobId":"...","downloadUrl":"/api/v1/download/<jobId>/<filename>","originalSize":1234,"processedSize":567}`. Rufen Sie die verarbeitete Datei von `downloadUrl` ab.
- **Jedes eingereihte Tool** kann 202-JSON zurückgeben, wenn es lange läuft oder das synchrone Warte-Zeitfenster überschreitet: `{"jobId":"...","async":true}`. Verbinden Sie sich mit SSE für den Fortschritt und laden Sie die Datei nach Abschluss herunter (siehe [Fortschrittsverfolgung](#progress-tracking)).
- **Batch**-Routen geben ein direkt gestreamtes ZIP-Archiv zurück (mit `X-Job-Id`-Header) für Tools, die im generischen Batch-Register registriert sind.
## Tools-Referenz {#tools-reference}
### Konvertierungs-Presets {#conversion-presets}
Der gemeinsame Katalog enthält 83 dedizierte Konvertierungs-Preset-Endpunkte wie `jpg-to-png`, `mov-to-mp4`, `m4a-to-mp3`, `pdf-to-jpg` und `excel-to-csv`. Presets sind vollwertige Tool-Routen:
`POST /api/v1/tools/<section>/<presetId>`
Jedes Preset legt das Ausgabeformat fest und delegiert an ein Basis-Tool wie `convert`, `convert-video`, `extract-audio`, `convert-audio`, `image-to-pdf`, `pdf-to-image`, `svg-to-raster` oder `convert-spreadsheet`. Die vollständige Routentabelle und die optionalen Einstellungen finden Sie unter [Konvertierungs-Presets](/de/tools/conversion-presets).
Alle KI-Tools laufen auf Ihrer Hardware: standardmäßig auf der CPU oder auf NVIDIA CUDA, wenn eine unterstützte NVIDIA-GPU verfügbar ist. Intel/AMD-iGPU-Beschleunigung über VA-API, Quick Sync oder OpenCL wird für KI-Inferenz derzeit nicht unterstützt. Keine Internetverbindung erforderlich.
| Tool-ID | Name | KI-Modell | Wichtige Einstellungen |
| `extract-zip` | ZIP extrahieren | - (Bomben-geschützt) |
### HTML zu Bild {#html-to-image}
Eine Webseite als Bild erfassen. Anders als andere Tools akzeptiert dieser Endpunkt `application/json` statt multipart-Formulardaten (kein Datei-Upload erforderlich).
Einige Tools stellen zusätzliche Endpunkte über die Standard-`POST /api/v1/tools/<section>/<toolId>` hinaus bereit:
| Methode | Pfad | Beschreibung |
|--------|------|-------------|
| `GET` | `/api/v1/tools/popular` | Beliebte Tool-IDs zurückgeben, mit Rückfall auf eine kuratierte Standardliste, wenn Nutzungsdaten spärlich sind |
| `POST` | `/api/v1/tools/image/remove-background/effects` | Hintergrundeffekte (color/gradient/blur/shadow) anwenden, ohne die KI erneut auszuführen. Verwendet die zwischengespeicherte Maske aus der ursprünglichen Entfernung. |
| `POST` | `/api/v1/tools/image/edit-metadata/inspect` | Vorhandene EXIF/IPTC/XMP-Metadaten aus einem Bild lesen |
| `POST` | `/api/v1/tools/image/strip-metadata/inspect` | Metadatenfelder vor dem Entfernen prüfen |
| `POST` | `/api/v1/tools/image/passport-photo/analyze` | Phase 1: KI-Gesichtserkennung + Hintergrundentfernung. Gibt Gesichts-Landmarken und zwischengespeicherte Daten zurück. |
| `POST` | `/api/v1/tools/image/passport-photo/generate` | Phase 2: Zuschneiden, Größe ändern und Kacheln mit zwischengespeicherter Analyse. Keine erneute KI-Ausführung. |
| `POST` | `/api/v1/tools/image/optimize-for-web/preview` | Leichtgewichtige Vorschau für die Live-Parameteranpassung. Gibt ein optimiertes Bild mit Größen-Headern zurück. |
Wenden Sie ein generisches batch-fähiges Tool auf mehrere Dateien gleichzeitig an. Gibt ein ZIP-Archiv zurück. Benutzerdefinierte Mehrfachdatei- oder mehrstufige Routen wie PDF-Signierung und PDF-zu-Bild-Preset-Routen verwenden ihren eigenen Endpunkt-Vertrag anstelle der generischen `/batch`-Route.
Das Tool `ocr-pdf` unterstützt diese generische `/batch`-Route.
curl -X POST http://localhost:1349/api/v1/tools/image/compress/batch \
-H "Authorization: Bearer <token>"\
-F "files=@a.jpg"\
-F "files=@b.jpg"\
-F "files=@c.jpg"\
-F 'settings={"quality":80}'
```
Die Nebenläufigkeit wird durch `CONCURRENT_JOBS` gesteuert (Standard: automatisch anhand der CPU-Kerne erkannt). `MAX_BATCH_SIZE` begrenzt die Anzahl der Dateien pro Stapel (Standard: 100; 0 für unbegrenzt setzen).
## Pipelines {#pipelines}
### Eine Pipeline ausführen {#execute-a-pipeline}
```bash
# Single file
curl -X POST http://localhost:1349/api/v1/pipeline/execute \
Die Ausgabe jedes Schritts ist die Eingabe des nächsten Schritts. Pipelines erlauben standardmäßig 20 Schritte, konfigurierbar über `MAX_PIPELINE_STEPS`. Setzen Sie `MAX_PIPELINE_STEPS=0`, um das Limit aufzuheben.
### Pipelines speichern und verwalten {#save-and-manage-pipelines}
| `DELETE` | `/api/v1/pipeline/:id` | Löschen (Eigentümer oder Admin) |
| `GET` | `/api/v1/pipeline/tools` | Tool-IDs auflisten, die für Pipeline-Schritte gültig sind |
## Fortschrittsverfolgung {#progress-tracking}
Lang laufende Jobs, eingereihte Tools, Batch-Jobs und Pipelines geben Echtzeit-Fortschritt über Server-Sent Events aus. Der Fortschritts-Stream ist öffentlich und wird über die Job-ID gekennzeichnet, sodass Clients keinen Authorization-Header senden müssen, um ihn zu lesen.
```bash
# Connect to the SSE stream (jobId is in the JSON response body from the tool endpoint)
Sie können den Abbruch eines eingereihten oder laufenden Jobs mit `POST /api/v1/jobs/:jobId/cancel` anfordern. Die Antwort ist `{"canceled":true|false}`.
## Dateibibliothek {#file-library}
Dauerhafte Dateispeicherung mit Versionsverlauf.
| Methode | Pfad | Beschreibung |
|--------|------|-------------|
| `POST` | `/api/v1/upload` | Dateien in den Arbeitsbereich hochladen (temporäre Verarbeitung) |
| `POST` | `/api/v1/files/upload` | Dateien in die dauerhafte Dateibibliothek hochladen |
| `POST` | `/api/v1/files/save-result` | Ein Tool-Verarbeitungsergebnis als neue Dateiversion speichern |
| `GET` | `/api/v1/files/:id/preview` | Eine zwischengespeicherte oder erzeugte browserkompatible Vorschau für eine gespeicherte PDF-, Office-Dokument-, Video- oder Audiodatei streamen |
| `POST` | `/api/v1/preview/generate` | Eine On-Demand-MP4- oder -MP3-Vorschau für eine hochgeladene Mediendatei erzeugen, ohne sie zuerst zu speichern |
| `GET` | `/api/v1/download/:jobId/:filename` | Eine verarbeitete Datei aus einem Arbeitsbereich herunterladen |
Um ein Tool-Ergebnis automatisch in der Bibliothek zu speichern, fügen Sie `fileId` als multipart-Formularfeld hinzu, das auf eine vorhandene Bibliotheksdatei verweist. Das verarbeitete Ergebnis wird als neue Version gespeichert.
## API-Schlüssel-Verwaltung {#api-key-management}
| Methode | Pfad | Zugriff | Beschreibung |
|--------|------|--------|-------------|
| `POST` | `/api/v1/api-keys` | Auth | Neuen Schlüssel generieren - einmal angezeigt |
| `GET` | `/api/v1/api-keys` | Auth | Schlüssel auflisten (Name, id, lastUsedAt - nicht der Rohschlüssel) |
Die Laufzeitkonfiguration verwendet eine geschlossene Menge erkannter Schlüssel. Zum Lesen ist `settings:read` und zum Schreiben `settings:write` erforderlich; Sicherheits- und Compliance-Schlüssel erfordern zusätzlich `security:manage` bzw. `compliance:manage`. Geheime Einstellungen erfordern die vollständige Administratorberechtigung, während Zugangsdaten und Zustände, die von dedizierten Endpunkten verwaltet werden, hier schreibgeschützt sind. Massenaktualisierungen werden vollständig validiert, bevor ein Wert geschrieben wird.
Benutzerspezifische Einstellungen sind von den Instanzeinstellungen getrennt. Jeder authentifizierte Benutzer kann seine eigene Einstellungs-Map lesen und aktualisieren.
| Methode | Pfad | Beschreibung |
|--------|------|-------------|
| `GET` | `/api/v1/preferences` | Die Einstellungen des aktuellen Benutzers als `{ "preferences": { ... } }` abrufen |
| `PUT` | `/api/v1/preferences` | Einen oder mehrere Einstellungsschlüssel für den aktuellen Benutzer per Upsert setzen |
## Rollen {#roles}
Benutzerdefinierte Rollenverwaltung mit granularen Berechtigungen.
| Methode | Pfad | Zugriff | Beschreibung |
|--------|------|--------|-------------|
| `GET` | `/api/v1/roles` | Admin (`audit:read`) | Alle Rollen mit Benutzeranzahl auflisten |
| `POST` | `/api/v1/roles` | Admin (`security:manage`) | Eine benutzerdefinierte Rolle erstellen (`name`, `description`, `permissions`) |
| `PUT` | `/api/v1/roles/:id` | Admin (`security:manage`) | Eine benutzerdefinierte Rolle aktualisieren (integrierte Rollen können nicht geändert werden) |
| `DELETE` | `/api/v1/roles/:id` | Admin (`security:manage`) | Eine benutzerdefinierte Rolle löschen (integrierte Rollen können nicht gelöscht werden; betroffene Benutzer fallen auf die Rolle `user` zurück) |
| `limit` | Einträge pro Seite (Standard: 50, max.: 100) |
| `action` | Nach Aktionstyp filtern (z.B. `ROLE_CREATED`, `ROLE_DELETED`) |
| `ip` | Nach Quell-IP-Adresse filtern |
| `from` | Einträge nach diesem ISO-8601-Datum filtern |
| `to` | Einträge vor diesem ISO-8601-Datum filtern |
## Analytics {#analytics}
| Methode | Pfad | Zugriff | Beschreibung |
|--------|------|--------|-------------|
| `GET` | `/api/v1/config/analytics` | Öffentlich | Die effektive Analytics-Konfiguration abrufen (PostHog-Schlüssel, Sentry-DSN, Abtastrate). Schlüssel, DSN und Instanz-ID sind leer, wenn Analytics deaktiviert ist, entweder durch das Kompilierzeit-Baking oder die Instanzeinstellung `analyticsEnabled`. |
| `POST` | `/api/v1/feedback` | Auth | Explizites Benutzer-Feedback an das konfigurierte PostHog-Projekt als `feedback_submitted` übermitteln. Die Route beachtet das Analytics-Gate, begrenzt die Übermittlungsrate, entfernt Kontaktfelder, sofern `contactOk` nicht true ist, und akzeptiert niemals Dateiinhalte, Dateinamen, Upload-Pfade oder rohen privaten Fehlertext. Wenn Analytics deaktiviert ist, gibt sie `{ "ok": true, "accepted": false }` zurück. |
| `PUT` | `/api/v1/settings` | Admin (`settings:write`) | Den instanzweiten Opt-out setzen. Senden Sie einen JSON-Body `{ "analyticsEnabled": "false" }`, um Analytics für alle zu deaktivieren, oder `"true"`, um es wieder zu aktivieren. |
## Features / KI-Bundles {#features-ai-bundles}
KI-Feature-Bundles verwalten (KI-Modellpakete in der Docker-Umgebung installieren/deinstallieren). Bevorzugen Sie den Tool-Level-Installationsendpunkt, wenn Sie ein Tool aus benutzerdefinierter Automatisierung aktivieren: Einige KI-Tools benötigen mehr als ein gemeinsames Bundle, und dieser Endpunkt überspringt bereits installierte Bundles und reiht nur die fehlenden ein.
OCR ist eine optionale Erweiterung und keine feste Abhängigkeit. Seine `fast` Tesseract-Stufe funktioniert ohne Packung; `POST /api/v1/admin/features/ocr/install` installiert das signierte RapidOCR-Paket für `balanced` und `best` auf Linux amd64 oder arm64. Die genaue OCR-Laufzeit verwendet CPU auf reinen CPU- und NVIDIA-Hosts und erfordert mindestens 4 GiB effektiven Speicher (das konfigurierte Container-cgroup-Limit, andernfalls Hostspeicher). SnapOtter meldet `requiredMemoryBytes`, `effectiveMemoryBytes` und einen `insufficient-memory`-Kompatibilitätsgrund und lehnt eine inkompatible Installation vor dem Download ab. Dieser Speicherbedarf gilt nicht für `fast`. Das Paket muss je nach Ziel zwischen 208 und 234 MiB heruntergeladen und zwischen 409 und 488 MiB installiert werden. Der signierte Index bindet die genauen Größen, die während der Installation erzwungen werden.
| `GET` | `/api/v1/features` | Auth | Alle Feature-Bundles und ihren Installationsstatus auflisten |
| `POST` | `/api/v1/admin/features/:bundleId/install` | Admin (`features:manage`) | Ein Feature-Bundle installieren (asynchron, gibt `jobId` zur Fortschrittsverfolgung zurück) |
| `POST` | `/api/v1/admin/tools/:toolId/features/install` | Admin (`features:manage`) | Jedes von einem Tool benötigte Bundle installieren; gibt den Status queued/skipped pro Bundle zurück |
| `POST` | `/api/v1/admin/features/:bundleId/uninstall` | Admin (`features:manage`) | Ein Feature-Bundle deinstallieren und Modelldateien bereinigen |
| `GET` | `/api/v1/admin/features/disk-usage` | Admin (`features:manage`) | Den gesamten Speicherplatzverbrauch der KI-Modelle abrufen |
| `POST` | `/api/v1/admin/features/import` | Admin (`features:manage`) | Importieren Sie ein Legacy-KI-Bundle (`file`) oder eine signierte Offline-OCR-Version (`index` plus `archive`). |
Ein Air-Gap-OCR-Import muss das signierte `ocr-runtime-index.json` der Version und das passende Plattformarchiv enthalten. SnapOtter wendet dieselben Ed25519-Signatur-, Artefakt-Hash-, Kompatibilitäts-, Extraktions- und Rauchtestprüfungen an, die auch bei der Online-Installation verwendet werden:
```bash
curl -X POST http://localhost:1349/api/v1/admin/features/import \
-H "Authorization: Bearer <admin-token>"\
-F "index=@ocr-runtime-index.json"\
-F "archive=@ocr-linux-amd64-cpu-py312.tar.gz"
```
Verwenden Sie das `linux-arm64-cpu-py311`-Archiv auf arm64. Ein signiertes Artefakt für ein anderes Ziel wird abgelehnt und nicht installiert.
**Vollständiger integrierter Admin** bedeutet, dass der authentifizierte Akteur die Rolle `admin` und den vollständigen effektiven Satz von Admin-Berechtigungen besitzt. Ein API-Schlüsselbereich, der auch nur eine Admin-Berechtigung auslässt, erfüllt die Anforderungen nicht.