---
title: "Dateien"
description: "Dokumente lädst du in drei Schritten hoch. Bodo prüft Typ, Größe, Prüfsumme und Dateisignatur, bevor ein Dokument sichtbar wird."
lang: de
url: https://developers.bodo-app.com/guides/files/
apiVersion: 2026-11-01
---

# 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. 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. 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. 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.

TypeScript · SDK:

```typescript
// 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);
```

Python · SDK:

```python
# 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_… python examples/upload_document.py ./vertrag.pdf
import os
import pathlib
import sys

from bodo_api import Bodo

path = pathlib.Path(sys.argv[1] if len(sys.argv) > 1 else "vertrag.pdf")
with Bodo(api_key=os.environ["BODO_API_KEY"], preview=True) as bodo:
    operation = bodo.uploads.upload_document(
        path.read_bytes(),
        file_name=path.name,
        content_type="application/pdf",
    )
    done = bodo.operations.wait(operation.id)  # raises BodoApiError when the check fails
    print(done.status, done.result)
```

## Was abgewiesen wird

| Fall | Antwort |
| --- | --- |
| Typ nicht erlaubt oder Datei größer als 50 MB | [422 VALIDATION_FAILED](/problems/VALIDATION_FAILED/) mit Feldfehler, schon beim Anlegen der Sitzung |
| Dokument angelegt, bevor die Datei vollständig ist | [409 UPLOAD_INCOMPLETE](/problems/UPLOAD_INCOMPLETE/) |
| Größe oder SHA-256 passen nicht zur Sitzung | [422 UPLOAD_CHECKSUM_MISMATCH](/problems/UPLOAD_CHECKSUM_MISMATCH/) |
| Signatur der Datei passt nicht zum Typ | [422 UPLOAD_REJECTED](/problems/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.
