Dateien und Uploads
Erstellen, auflisten, herunterladen und löschen Sie persistente Dateien oder assemblieren Sie eine Datei aus mehrteiligen Upload-Teilen.
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 abgeschlosseneuser_data-Datei kann bis zu52,428,800Bytes enthalten. - Verwenden Sie
POST /v1/filesmitpurpose=batchfür eine direkte Batch-Eingabe von bis zu95,000,000Bytes. - Verwenden Sie die Uploads API, um Teile zu senden, bevor Sie die endgültige Datei zusammenstellen.
Jeder Teil kann bis zu
67,108,864Bytes enthalten; eine abgeschlosseneuser_data-Datei ist auf52,428,800Bytes und eine abgeschlossenebatch-Datei auf209,715,200Bytes begrenzt. Ein unvollendeter Upload läuft nach einer Stunde ab. - Aktive Dateien und laufende Reservierungen teilen sich ein Kontospeicherlimit von
5,368,709,120Bytes.
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:
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:
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 behandelt das File-Objekt sowie die Operationen Erstellen, Auflisten, Abrufen, Inhalt und Löschen.
- Uploads API behandelt das Upload-Objekt sowie die Operationen Erstellen, Teil hinzufügen, Abschließen und Abbrechen.
- Batches API 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.
INPUT_FILE_ID=$(curl -sS https://runapi.ai/v1/files \
-H "Authorization: Bearer $RUNAPI_API_KEY" \
-F purpose=batch \
-F [email protected] | 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.
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 [email protected] | 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:
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.
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.