---
title: Dateien und Uploads | RunAPI
description: Erstellen, auflisten, herunterladen und löschen Sie persistente Dateien
  oder assemblieren Sie eine Datei aus mehrteiligen Upload-Teilen.
url: https://runapi.ai/de/docs/resources/files.md
canonical: https://runapi.ai/de/docs/resources/files
locale: de
---

> HTML-Version: https://runapi.ai/de/docs/resources/files
> Website-Index für KI-Agenten: https://runapi.ai/llms.txt

# Dateien und Uploads

Die Files API speichert unveränderliche, kontobezogene `user_data`-, `batch`- und
`batch_output`-Files und gibt stabile File-IDs anstelle von Speicher-URLs zurück. Verwenden Sie eine File-ID, wenn eine API eine wiederverwendbare File-Ressource akzeptiert, und
verwenden Sie den Content-Endpunkt, wenn Ihre Anwendung die exakten gespeicherten
Bytes benötigt.

## Einen Upload-Ablauf auswählen

* Verwenden Sie `POST /v1/files`, um eine Datei aus einer einzelnen Multipart-Anfrage zu erstellen. Eine
  abgeschlossene `user_data`-Datei kann bis zu `52,428,800` Bytes enthalten.
* Verwenden Sie `POST /v1/files` mit `purpose=batch` für eine direkte Batch-Eingabe von bis zu
  `95,000,000` Bytes.
* Verwenden Sie die Uploads API, um Teile zu senden, bevor Sie die endgültige Datei zusammenstellen.
  Jeder Teil kann bis zu `67,108,864` Bytes enthalten; eine abgeschlossene `user_data`-Datei ist auf
  `52,428,800` Bytes und eine abgeschlossene `batch`-Datei auf `209,715,200` Bytes begrenzt. Ein
  unvollendeter Upload läuft nach einer Stunde ab.
* Aktive Dateien und laufende Reservierungen teilen sich ein Kontospeicherlimit von `5,368,709,120` Bytes.

`POST /api/v1/files` ist ein separater temporärer Upload-Ablauf, der eine
temporäre URL zurückgibt. Das SDK `files.create` und die CLI `runapi files create` verwenden
weiterhin diesen Ablauf. Verwenden Sie `files.createFile` oder `files.create_file`, bzw. die CLI
`runapi files create-file`, wenn Sie ein dauerhaftes File-Objekt benötigen.

## Eine Anfrage authentifizieren

Dateien und Uploads verwenden einen Standard-RunAPI-API-Schlüssel. Senden Sie ihn als Bearer-Token:

```shell
export RUNAPI_API_KEY="runapi_..."
```

Jede Datei-, Upload-, Part- und Inhaltsanfrage ist auf das authentifizierte Konto beschränkt. Eine ID, die einem anderen Konto gehört, gibt `404` zurück, ohne preiszugeben, ob diese Ressource existiert.

## Eine File mit einem kompatiblen Client erstellen

Richten Sie einen OpenAI-kompatiblen Client auf die RunAPI-Basis-URL `/v1` aus. Es sind keine RunAPI-spezifischen Anforderungsfelder erforderlich:

```python
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["RUNAPI_API_KEY"],
    base_url="https://runapi.ai/v1",
)

with open("knowledge.pdf", "rb") as source:
    file = client.files.create(file=source, purpose="user_data")

metadata = client.files.retrieve(file.id)
client.files.content(file.id).write_to_file("knowledge-copy.pdf")
client.files.delete(file.id)
```

Der zurückgegebene File enthält niemals eine Speicherkennung, ein Backend oder eine
Bearer-URL.

## API-Referenz

* [Persistent Files API](https://runapi.ai/de/docs/api/protocol/files.md) behandelt das File-Objekt sowie die Operationen
  Erstellen, Auflisten, Abrufen, Inhalt und Löschen.
* [Uploads API](https://runapi.ai/de/docs/api/protocol/uploads.md) behandelt das Upload-Objekt sowie die Operationen
  Erstellen, Teil hinzufügen, Abschließen und Abbrechen.
* [Batches API](https://runapi.ai/de/docs/api/protocol/batches.md) behandelt die Erstellung, den Status, die Auflistung
  und den Abbruch von Moderation-Batches.

## Moderation in einem Batch ausführen

Erstellen Sie eine JSONL-Eingabe-File mit einer Moderationsanfrage pro Zeile. Jede
Zeile verwendet die kompatible Batch-Form: `custom_id`, `method`, `url` auf
`/v1/moderations` gesetzt und einen `body` mit dem Moderationsmodell und der Eingabe. Eine `purpose=batch`-File kann bis zu 50.000 Anfragen enthalten. Die
Batch-Funktion akzeptiert derzeit den `/v1/moderations`-Endpunkt mit einem
`24h`-Abschlussfenster.

```shell
INPUT_FILE_ID=$(curl -sS https://runapi.ai/v1/files \
  -H "Authorization: Bearer $RUNAPI_API_KEY" \
  -F purpose=batch \
  -F file=@moderation.jsonl | jq -r .id)

BATCH_ID=$(curl -sS https://runapi.ai/v1/batches \
  -H "Authorization: Bearer $RUNAPI_API_KEY" \
  -H "Content-Type: application/json" \
  -d "$(jq -n --arg file "$INPUT_FILE_ID" '{input_file_id:$file,endpoint:"/v1/moderations",completion_window:"24h"}')" \
  | jq -r .id)

curl -sS "https://runapi.ai/v1/batches/$BATCH_ID" \
  -H "Authorization: Bearer $RUNAPI_API_KEY"
```

Verwende `GET /v1/batches`, um Aufgaben aufzulisten, wiederhole `GET /v1/batches/{batch_id}`
bis der Status terminal ist, oder rufe `POST
/v1/batches/{batch_id}/cancel` auf, solange er noch läuft. Abgeschlossene
Ausgabe- und Fehler-JSONL sind als `batch_output`-Files verfügbar; rufe
ihre Metadaten mit `GET /v1/files/{file_id}` und die genauen Bytes mit `GET
/v1/files/{file_id}/content` ab.

## Lebenszyklus von Multipart-Uploads

Erstellen Sie einen Upload mit der endgültigen Byte-Anzahl, dem Dateinamen, dem MIME-Typ und
`purpose=user_data`. Fügen Sie einen oder mehrere Parts hinzu und übergeben Sie deren IDs in der Zusammensetzungsreihenfolge an `complete`. Der Abschluss gibt den Upload mit seiner fertigen File zurück.

```shell
UPLOAD_ID=$(curl -sS https://runapi.ai/v1/uploads \
  -H "Authorization: Bearer $RUNAPI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"bytes":1048576,"filename":"archive.bin","mime_type":"application/octet-stream","purpose":"user_data"}' \
  | jq -r .id)

PART_ID=$(curl -sS "https://runapi.ai/v1/uploads/$UPLOAD_ID/parts" \
  -H "Authorization: Bearer $RUNAPI_API_KEY" \
  -F data=@archive.part-01 | jq -r .id)

curl -sS "https://runapi.ai/v1/uploads/$UPLOAD_ID/complete" \
  -H "Authorization: Bearer $RUNAPI_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"part_ids\":[\"$PART_ID\"]}"
```

Brechen Sie einen unvollständigen Upload mit `POST /v1/uploads/{upload_id}/cancel` ab.
Das wiederholte Senden derselben Abschlussabsicht oder Stornierung ist sicher; ein konkurrierender Abschluss, eine Stornierung oder ein Ablauf gibt `409
upload_state_conflict` zurück, wenn ein anderes terminales Ergebnis bereits eingetreten ist.

## CLI- und SDK-Ressourcen

Die CLI stellt den vollständigen Lebenszyklus bereit:

```shell
runapi files create-file knowledge.pdf
runapi files list --order desc
runapi files retrieve file_123
runapi files content file_123 --output knowledge-copy.pdf
runapi files delete file_123

runapi uploads create --bytes 1048576 --filename archive.bin --mime-type application/octet-stream
runapi uploads add-part upload_123 archive.part-01
runapi uploads complete upload_123 --part-id part_123
runapi uploads cancel upload_123
```

Jeder Provider-Client stellt `files` und `uploads` bereit. JavaScript und PHP verwenden `createFile` / `deleteFile` / `addPart`; Python und Ruby verwenden `create_file` / `delete_file` / `add_part`; Go verwendet `CreateFile` / `DeleteFile` / `AddPart`; Java verwendet `createFile` / `deleteFile` / `addPart`. Auflisten, Abrufen, Inhalt, Erstellen, Abschließen und Abbrechen folgen der üblichen Namenskonvention der jeweiligen Sprache. Informationen zur Paketinstallation finden Sie unter [SDKs](https://runapi.ai/de/docs/resources/sdks.md).

## Lebenszyklusverhalten

Dateiinhalte sind unveränderlich. Das Löschen einer Datei entfernt sie sofort aus aktiven Auflistungen und plant die Speicherbereinigung. Der Upload-Abschluss setzt Parts nur in der angegebenen Reihenfolge zusammen, und ein erfolgreicher Abschluss erstellt eine Datei. Behalten Sie die ursprüngliche Part-ID-Reihenfolge bei, wenn Sie eine unsichere Abschlussantwort wiederholen.

---

## Mehr von RunAPI

- [Startseite](https://runapi.ai/de/.md)
- [Modellkatalog](https://runapi.ai/de/models.md)
- [Preise](https://runapi.ai/de/pricing.md)
- [Anbieter](https://runapi.ai/de/models)
- [Dokumentation](https://runapi.ai/de/docs/guides)
- [SDKs](https://runapi.ai/de/sdk.md)
- [CLI](https://runapi.ai/de/cli.md)
- [MCP Server](https://runapi.ai/de/mcp.md)
- [Claude Code vs Cursor](https://runapi.ai/de/claude-code-vs-cursor.md)
- [Cursor API-Einrichtung](https://runapi.ai/de/cursor-api-setup.md)
- [RunAPI vs OpenRouter](https://runapi.ai/de/openrouter-alternative.md)
- [Enterprise](https://runapi.ai/de/contact.md)
- [Kontakt](https://runapi.ai/de/contact.md)
- [Bedingungen](https://runapi.ai/de/terms.md)
- [Datenschutz](https://runapi.ai/de/privacy.md)
- [Website-Index für KI-Agenten](https://runapi.ai/llms.txt)

Kontakt: contact@runapi.ai

## Strukturierte Daten

```json
[
  {
    "@context": "https://schema.org",
    "inLanguage": "de",
    "@type": "WebSite",
    "name": "RunAPI",
    "url": "https://runapi.ai/de",
    "potentialAction": {
      "@type": "SearchAction",
      "target": {
        "@type": "EntryPoint",
        "urlTemplate": "https://runapi.ai/de/models?q={search_term_string}"
      },
      "query-input": "required name=search_term_string"
    }
  },
  {
    "@context": "https://schema.org",
    "inLanguage": "de",
    "@type": "Organization",
    "name": "RunAPI",
    "url": "https://runapi.ai/de",
    "logo": {
      "@type": "ImageObject",
      "url": "https://runapi.ai/deicon.svg"
    },
    "sameAs": [
      "https://github.com/runapi-ai"
    ]
  },
  {
    "@context": "https://schema.org",
    "inLanguage": "de",
    "@type": "TechArticle",
    "headline": "Dateien und Uploads",
    "description": "Erstellen, auflisten, herunterladen und löschen Sie persistente Dateien oder assemblieren Sie eine Datei aus mehrteiligen Upload-Teilen.",
    "url": "https://runapi.ai/de/docs/resources/files",
    "mainEntityOfPage": "https://runapi.ai/de/docs/resources/files"
  }
]
```
