Zum Inhalt springen

Dokumente

Die Dokumente-Ressource bietet vollständige CRUD-Operationen zur Verwaltung von Dokumenten in Sonar.

Dokumente auflisten

Ruft eine paginierte Liste von Dokumenten mit optionalen Filtern ab.

Endpunkt: GET /api/sdk/v1/documents

Parameter (ListDocumentsParams)

ParameterTypErforderlichStandardBeschreibung
pagenumberNein1Seitennummer (Minimum: 1)
limitnumberNein20Einträge pro Seite (Minimum: 1, Maximum: 100)
classificationDocumentClassificationNeinFiltern nach: 'generated', 'uploaded' oder 'signed'
isSignedbooleanNeinNach Signaturstatus filtern
typestringNeinNach MIME-Typ filtern (z.B. 'application/pdf')
uploadFromDocumentUploadSourceNeinNach Upload-Quelle filtern
sessionIdstringNeinNach Sitzungs-ID filtern (MongoDB ObjectId)
fromDatestring | DateNeinDokumente ab diesem Datum filtern (ISO 8601)
toDatestring | DateNeinDokumente bis zu diesem Datum filtern (ISO 8601)

Antwort (ListDocumentsResponse)

FeldTypBeschreibung
docsDocument[]Array von Dokumentobjekten
totalDocsnumberGesamtanzahl der übereinstimmenden Dokumente
limitnumberEinträge pro Seite
totalPagesnumberGesamtanzahl der Seiten
pagenumberAktuelle Seitennummer
pagingCounternumberSeriennummer des ersten Dokuments auf dieser Seite
hasPrevPagebooleanOb eine vorherige Seite existiert
hasNextPagebooleanOb eine nächste Seite existiert
prevPagenumber | nullVorherige Seitennummer oder null
nextPagenumber | nullNächste Seitennummer oder null

Beispiel

// Einfache Auflistung
const response = await sdk.documents.list();
console.log(response.docs); // Document[]
console.log(response.totalDocs); // Gesamtanzahl
// Mit Filtern
const signedPDFs = await sdk.documents.list({
page: 1,
limit: 50,
classification: 'signed',
isSigned: true,
type: 'application/pdf',
fromDate: '2025-01-01T00:00:00Z',
toDate: new Date(),
});
// Paginierungsschleife
let page = 1;
let hasMore = true;
while (hasMore) {
const result = await sdk.documents.list({ page, limit: 100 });
console.log(`Seite ${page}: ${result.docs.length} Dokumente`);
hasMore = result.hasNextPage;
page++;
}

Ein Dokument abrufen

Ruft ein einzelnes Dokument anhand seiner ID ab.

Endpunkt: GET /api/sdk/v1/documents/:id

ParameterTypErforderlichBeschreibung
documentIdstringJaDie Dokumentkennung

Gibt zurück: Document-Objekt Wirft: DocumentNotFoundError, wenn das Dokument nicht existiert.

try {
const doc = await sdk.documents.get('doc_abc123');
console.log(doc.name); // "contract.pdf"
console.log(doc.isSigned); // true
console.log(doc.extension); // "pdf"
console.log(doc.size); // "245632"
} catch (err) {
if (err instanceof DocumentNotFoundError) {
console.log(`Dokument ${err.documentId} nicht gefunden`);
}
}

Ein Dokument herunterladen

Lädt den binären Dateiinhalt eines Dokuments herunter.

Endpunkt: GET /api/sdk/v1/documents/:id/download

ParameterTypErforderlichBeschreibung
documentIdstringJaDie Dokumentkennung

Antwort (DownloadResponse)

FeldTypBeschreibung
dataArrayBufferDie rohen Dateidaten
contentTypestringMIME-Typ (z.B. 'application/pdf')
filenamestringOriginaler Dateiname vom Server
sizenumberGröße in Bytes
import { writeFileSync } from 'fs';
const { data, filename, contentType, size } = await sdk.documents.download('doc_abc123');
// Auf Festplatte speichern
writeFileSync(`./${filename}`, Buffer.from(data));
console.log(`Heruntergeladen: ${filename} (${size} Bytes, ${contentType})`);

Ein Dokument hochladen

Lädt ein neues Dokument in Sonar hoch. Das SDK übernimmt die multipart/form-data-Kodierung automatisch.

Endpunkt: POST /api/sdk/v1/documents/upload

Parameter (UploadDocumentParams)

ParameterTypErforderlichStandardBeschreibung
fileBuffer | Blob | NodeJS.ReadableStreamJaDie hochzuladenden Dateidaten
filenamestringNeinOriginaler Dateiname
contentTypestringNeinapplication/octet-streamMIME-Typ der Datei
namestringNeinAnzeigename für das Dokument
uploadFromDocumentUploadSourceNein'user-documents'Quelle/Kontext des Uploads
identitystringNeinIdentitätsstring für den Uploader
classificationDocumentClassificationNein'uploaded'Dokumentklassifizierungskategorie

Upload-Quellwerte (DocumentUploadSource)

WertBeschreibung
'session-chat'Während einer Chat-Sitzung hochgeladen
'session-call'Während einer Anrufsitzung hochgeladen
'user-documents'Aus der Benutzerdokumentverwaltung hochgeladen
'session-recording'Aus einer Sitzungsaufnahme
'queue-documents'Aus einer Warteschlangen-/Verarbeitungspipeline
'application-settings-appearance'Anwendungseinstellungen-Upload

Dateieingabetypen

Das SDK unterstützt drei Eingabetypen für den file-Parameter:

  1. Buffer (Node.js) — Wird mit dem angegebenen contentType in Blob konvertiert
  2. Blob (Browser/Node.js 18+) — Wird direkt verwendet
  3. ReadableStream (Node.js) — Chunks werden gesammelt, zusammengefügt und als Blob verpackt

Gibt zurück: Document-Objekt (das neu erstellte Dokument)

import { readFileSync, createReadStream } from 'fs';
// Upload aus Buffer
const buffer = readFileSync('./contract.pdf');
const doc = await sdk.documents.upload({
file: buffer,
filename: 'contract.pdf',
contentType: 'application/pdf',
name: 'Q1 Vertrag',
uploadFrom: 'user-documents',
classification: 'uploaded',
});
console.log(`Hochgeladen: ${doc.id}${doc.name}`);
// Upload aus ReadableStream
const stream = createReadStream('./report.xlsx');
const doc2 = await sdk.documents.upload({
file: stream,
filename: 'report.xlsx',
contentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
classification: 'generated',
});
// Upload aus Blob (Browser-Umgebung)
const blob = new Blob([arrayBuffer], { type: 'application/pdf' });
const doc3 = await sdk.documents.upload({
file: blob,
filename: 'scan.pdf',
});

Ein Dokument löschen

Löscht ein Dokument dauerhaft anhand seiner ID. Diese Aktion kann nicht rückgängig gemacht werden.

Endpunkt: DELETE /api/sdk/v1/documents/:id

ParameterTypErforderlichBeschreibung
documentIdstringJaDie Dokumentkennung

Gibt zurück: DeleteDocumentResponse mit { documentId: string } Wirft: ValidationError, wenn documentId leer ist. DocumentNotFoundError, wenn das Dokument nicht existiert. Erforderlicher Bereich: documents:{classification}:delete

// Ein einzelnes Dokument löschen
const { documentId } = await sdk.documents.delete('doc_abc123');
console.log(`Gelöscht: ${documentId}`);
// Mit Fehlerbehandlung
try {
await sdk.documents.delete('doc_abc123');
} catch (err) {
if (err instanceof DocumentNotFoundError) {
console.log(`Dokument ${err.documentId} nicht gefunden`);
}
}

Batch-Löschung von Dokumenten

Löscht mehrere Dokumente in einer einzelnen Anfrage.

Endpunkt: POST /api/sdk/v1/documents/delete

Parameter (BatchDeleteParams)

ParameterTypErforderlichBeschreibung
documentIdsstring[]JaArray von Dokument-IDs zum Löschen (Min.: 1, Max.: 500)

Clientseitige Validierung:

  • Wirft ValidationError, wenn documentIds leer ist
  • Wirft ValidationError, wenn documentIds mehr als 500 Einträge hat

Antwort (BatchDeleteResponse)

FeldTypBeschreibung
deletednumberAnzahl erfolgreich gelöschter Dokumente
failednumberAnzahl fehlgeschlagener Löschungen
totalnumberGesamtanzahl der Dokumente in der Anfrage
const result = await sdk.documents.batchDelete({
documentIds: ['doc_001', 'doc_002', 'doc_003'],
});
console.log(`${result.deleted} von ${result.total} gelöscht`);
if (result.failed > 0) {
console.warn(`${result.failed} Dokumente konnten nicht gelöscht werden`);
}

Vorsignierte Download-URL abrufen

Generiert eine temporäre vorsignierte URL zum Herunterladen eines Dokuments.

Endpunkt: GET /api/sdk/v1/documents/:id/download-url

ParameterTypErforderlichBeschreibung
documentIdstringJaDie Dokumentkennung

Abfrageparameter (DownloadUrlParams)

ParameterTypErforderlichStandardBeschreibung
expiresInnumberNein300URL-Ablauf in Sekunden (Min.: 60, Max.: 3600)

Antwort (DownloadUrlResponse)

FeldTypBeschreibung
documentIdstringDie Dokumentkennung
namestringDokumentname
urlstringVorsignierte Download-URL
expiresInnumberURL-Ablaufzeit in Sekunden
// Download-URL mit Standard-Ablauf abrufen (300s)
const { url, expiresIn } = await sdk.documents.getDownloadUrl('doc_abc123');
console.log(`Download unter: ${url} (läuft in ${expiresIn}s ab)`);
// URL mit benutzerdefiniertem Ablauf abrufen (10 Minuten)
const { url: longUrl } = await sdk.documents.getDownloadUrl('doc_abc123', {
expiresIn: 600,
});
// Client zur Download-URL weiterleiten (Express)
app.get('/download/:id', async (req, res) => {
const { url } = await sdk.documents.getDownloadUrl(req.params.id, {
expiresIn: 120,
});
res.redirect(url);
});

Dokumente als ZIP exportieren

Exportiert mehrere Dokumente gebündelt in einem einzelnen ZIP-Archiv.

Endpunkt: POST /api/sdk/v1/documents/export

Parameter (ExportDocumentsParams)

ParameterTypErforderlichBeschreibung
documentIdsstring[]JaArray von Dokument-IDs zum Exportieren (Min.: 1, Max.: 500)

Clientseitige Validierung:

  • Wirft ValidationError, wenn documentIds leer ist
  • Wirft ValidationError, wenn documentIds mehr als 500 Einträge hat

Gibt zurück: DownloadResponse mit data (ArrayBuffer), contentType ('application/zip'), filename und size.

import { writeFileSync } from 'fs';
const { data, filename, size } = await sdk.documents.export({
documentIds: ['doc_001', 'doc_002', 'doc_003'],
});
writeFileSync(`./${filename}`, Buffer.from(data));
console.log(`Exportiert: ${filename} (${size} Bytes)`);