Zum Inhalt springen

Dateien

Dateien

Dokumente lädst du in drei Schritten hoch. Bodo prüft Typ, Größe, Prüfsumme und Dateisignatur, bevor ein Dokument sichtbar wird.

Hochladen in drei Schritten

  1. 1. Upload-Sitzung anlegen

    POST /v1/uploads mit Name, Typ, Größe und SHA-256. Die Antwort nennt Methode, Adresse und Header für die Datei; das Ziel gilt 15 Minuten, die Sitzung 24 Stunden.

  2. 2. Rohbytes senden

    Genau mit Methode, Adresse und Headern aus der Antwort, ohne Authorization und ohne Multipart. Die Antwort des Speichers wertest du nicht aus.

  3. 3. Dokument anlegen

    POST /v1/documents mit der uploadId antwortet 202 mit einem Vorgang. Ist die Prüfung durch, steht das Dokument im Vorgang und das Ereignis document.created geht hinaus.

Mit dem SDK

Das SDK geht alle drei Schritte und wartet auf den Vorgang.
// Portal D3 · Files and upload — session, raw bytes, document; the SDK follows method, URL and
// headers of the session (no Authorization to the storage) and waits for the operation.
// Run: BODO_API_KEY=bodo_uk_test_… bun examples/upload-document.ts ./vertrag.pdf
import { readFile } from "node:fs/promises";
import { basename } from "node:path";
import { Bodo } from "@bodo/api";

const bodo = new Bodo({ apiKey: process.env.BODO_API_KEY, preview: true });
const path = process.argv[2] ?? "vertrag.pdf";

const operation = await bodo.uploads.uploadDocument({
  bytes: await readFile(path),
  fileName: basename(path),
  contentType: "application/pdf",
});
const done = await bodo.operations.wait(operation.id); // throws BodoApiError when the check fails
console.log(done.status, done.result);

Was abgewiesen wird

FallAntwort
Typ nicht erlaubt oder Datei größer als 50 MB422 VALIDATION_FAILED mit Feldfehler, schon beim Anlegen der Sitzung
Dokument angelegt, bevor die Datei vollständig ist409 UPLOAD_INCOMPLETE
Größe oder SHA-256 passen nicht zur Sitzung422 UPLOAD_CHECKSUM_MISMATCH
Signatur der Datei passt nicht zum Typ422 UPLOAD_REJECTED, es entsteht kein Dokument

Herunterladen

GET /v1/documents/{id}/content antwortet 302 mit einer signierten Adresse, die 5 Minuten gilt. Folge der Weiterleitung ohne Authorization; die Adresse gibst du nicht weiter.