Design
Sprache

Files API und PDFs

Die OpenAI-kompatible Files API von GetVibe API und PDF-Eingaben: Base64, ein Link oder eine file_id für chat/completions, responses und messages, welche Modelle die Bilder in einem PDF sehen, Limits und Fehler.

OpenAI-kompatible Files API zum Hochladen, Lesen und Löschen von Dateien. Für jeden Vorgang ist ein API-Schlüssel erforderlich; eine Datei ist nur für dasselbe Clientkonto zugänglich, das sie hochgeladen hat.

Eine Datei hochladen

POSThttps://getvibeapi.com/v1/files

Senden Sie multipart/form-data mit den erforderlichen Feldern file und purpose. Zulässige Zwecke: assistants, batch, fine-tune, vision und user_data. Die maximale Dateigröße beträgt 50 MiB (52 428 800 Bytes); bei Überschreitung wird 413 zurückgegeben.

curl -X POST https://getvibeapi.com/v1/files \
  -H "Authorization: Bearer $GETVIBE_API_KEY" \
  -F "purpose=user_data" \
  -F "file=@./report.pdf"

Metadaten oder Inhalte abrufen oder löschen

GEThttps://getvibeapi.com/v1/files/{file_id}
GEThttps://getvibeapi.com/v1/files/{file_id}/content
DELETEhttps://getvibeapi.com/v1/files/{file_id}

Der Upload gibt ein file-Objekt mit einem undurchsichtigen id, Namen, Größe, Zweck und Erstellungszeitpunkt zurück. GET ohne /content gibt diese Metadaten zurück; GET /content lädt die Rohdaten herunter. Nach einem erfolgreichen DELETE geben beide GET-Anfragen 404 zurück. Die vorhandene Datei eines anderen Kontos gibt 403 zurück, eine unbekannte Kennung 404.

Sicherer Workflow

  1. Laden Sie die Datei hoch und behalten Sie nur das zurückgegebene file_id.
  2. Verifizieren Sie die Metadaten mit demselben Schlüssel; bei der Verwendung von Responses übergeben Sie diese ID in input_file.file_id.
  3. Laden Sie keine Geheimnisse hoch und löschen Sie die Datei, nachdem Sie fertig sind. Eine gelöschte Datei kann nicht wiederhergestellt werden.

PDF in Modellanfragen

Jedes Textmodell akzeptiert PDFs in allen drei API-Formaten. Kurz gesagt: Senden Sie die Datei auf eine der drei folgenden Arten – standardmäßig extrahieren wir kostenlos den Text und übergeben ihn an das Modell. Das Modell liest den Text und die Tabellen, aber nicht die Bilder im PDF oder Scans. Wenn Bilder, Layout oder ein Scan wichtig sind, wählen Sie ein Modell aus der folgenden Tabelle und deaktivieren Sie die Textextraktion. Alles auf dieser Seite wurde am 2. November 2026 mit Live-Anfragen und einem dreiseitigen PDF mit Text, einer Tabelle und einem Bild überprüft.

Drei Möglichkeiten, ein PDF zu senden

MethodeVorgehensweiseWann Sie es verwenden sollten
Base64 in der AnfrageChat: {"type":"file","file":{"filename":"report.pdf","file_data":"data:application/pdf;base64,…"}}; Responses: {"type":"input_file","filename":"report.pdf","file_data":"data:…"}; Messages: {"type":"document","source":{"type":"base64","media_type":"application/pdf","data":"…"}}Ein einzelnes Dokument. Funktioniert mit allen drei Endpunkten. Dateien bis zu 20 MiB.
Öffentlicher LinkChat: "file":{"file_url":"https://…"}; Responses: {"type":"input_file","file_url":"https://…"}; Messages: "source":{"type":"url","url":"https://…"}Die Datei ist bereits online. Wir laden sie selbst herunter: nur HTTPS, ohne Anmeldung oder Passwort; der Server muss mit application/pdf antworten, bis zu 20 MiB, innerhalb von 10 Sekunden und mit höchstens 3 Weiterleitungen.
file_id nach dem UploadMit POST /v1/files und purpose=user_data hochladen, dann: Chat "file":{"file_id":"file-pv-…"}, Responses {"type":"input_file","file_id":"file-pv-…"}, Messages "source":{"type":"file","file_id":"file-pv-…"}Ein Dokument für mehrere Anfragen: Sie müssen nicht jedes Mal Megabytes erneut senden, und ein identisches Anfragepräfix wird zwischengespeichert. Die Datei wird 7 Tage aufbewahrt und ist nur für Ihr Konto sichtbar.

Sofort ausführbare Beispiele

Der Schlüssel wird aus der Umgebungsvariable GETVIBE_API_KEY gelesen. Die Python-Beispiele verwenden unverändert die offiziellen SDKs openai und anthropic – nur die Adresse unterscheidet sich.

/v1/chat/completions

# PDF inline (base64); jq builds the body so a large file does not hit the command-line length limit
# macOS: replace base64 -w0 report.pdf with base64 -i report.pdf
jq -n --rawfile b64 <(base64 -w0 report.pdf) '{model: "deepseek-v4.1-flash", messages: [{role: "user", content: [
    {type: "text", text: "Summarise the document"},
    {type: "file", file: {filename: "report.pdf", file_data: ("data:application/pdf;base64," + $b64)}}]}]}' |
curl https://getvibeapi.com/v1/chat/completions \
  -H "Authorization: Bearer $GETVIBE_API_KEY" -H "Content-Type: application/json" -d @-

/v1/responses

# FILE_ID comes from the upload, see the "curl · file_id" tab above
curl https://getvibeapi.com/v1/responses \
  -H "Authorization: Bearer $GETVIBE_API_KEY" -H "Content-Type: application/json" \
  -d '{"model":"gpt-6.1-sol","input":[{"role":"user","content":[
    {"type":"input_text","text":"What were the sales in Kazan in August?"},
    {"type":"input_file","file_id":"'"$FILE_ID"'"}]}]}'
# base64 instead of file_id:
#   {"type":"input_file","filename":"report.pdf","file_data":"data:application/pdf;base64,…"}

/v1/messages

curl https://getvibeapi.com/v1/messages \
  -H "x-api-key: $GETVIBE_API_KEY" -H "anthropic-version: 2023-06-01" -H "Content-Type: application/json" \
  -d '{"model":"claude-sonnet-5.5","max_tokens":1024,"messages":[{"role":"user","content":[
    {"type":"document","source":{"type":"file","file_id":"'"$FILE_ID"'"}},
    {"type":"text","text":"Summarise the document"}]}]}'
# other sources:
#   "source":{"type":"base64","media_type":"application/pdf","data":"<base64>"}
#   "source":{"type":"url","url":"https://example.com/report.pdf"}

Was das Modell sieht: den Text oder die Datei selbst

Standardmäßig wird der extrahierte Text verwendet. Wir übernehmen die Textebene des PDF und übergeben sie statt der Datei an das Modell. Das ist kostenlos und funktioniert mit jedem Modell, auch mit solchen ohne PDF-Unterstützung. Das Modell sieht Wörter und Zahlen, einschließlich Tabellen (ohne Rahmen, aber mit den richtigen Werten). Was es nicht sieht: Bilder, Diagramme, Stempel, Unterschriften, Farben und Layout. Pro Anfrage werden bis zu 60,000 Zeichen Text übergeben (etwa 28 dicht bedruckte Seiten); der Rest wird abgeschnitten und das Modell darüber informiert, dass das Dokument gekürzt wurde. Der Antwort-Header x-pv-document-shim gibt an, was passiert ist: applied:text_extracted bedeutet, dass das Modell den Text erhalten hat, not-needed:lane_reads_pdf bedeutet, dass es die Datei selbst erhalten hat.

Die Datei selbst. Damit das Modell ganze Seiten einschließlich Bildern und Layout sieht, fügen Sie "plugins":[{"id":"documents","enabled":false}] in den Anfragetext ein (der Header lautet dann not-needed:disabled_by_client). Verwenden Sie dies nur mit Modellen, die in der Tabelle mit „yes“ gekennzeichnet sind: Die anderen antworten mit 400 oder geben an, dass sie keine Datei sehen, und die Eingabe-Tokens der Datei werden trotzdem abgerechnet.

# curl: add the field to the request body
"plugins": [{"id": "documents", "enabled": false}]

# Python (openai SDK)
r = client.chat.completions.create(
    model="gpt-6.1-sol",
    messages=[...],
    extra_body={"plugins": [{"id": "documents", "enabled": False}]},
)
ModellStandardmäßigSieht die Datei selbst (Extraktion deaktiviert)
gpt-6.1-soldie Datei selbstja — bei /chat/completions und /responses
gpt-6-lunatextja — bei /chat/completions und /responses
gpt-5.6-soltextnicht bestätigt — belassen Sie den Standardwert
claude-sonnet-5.5, claude-opus-5.5textnein — das Modell kann die Datei nicht sehen, daher extrahieren wir den Text auch bei deaktiviertem Plugin (Header x-getvibe-warnings: plugin_overridden:documents); für die Datei selbst verwenden Sie gpt-6.1-sol
claude-haiku-5.5textnein — das Modell sieht die Datei nicht
gemini-4-argon, gemini-3.8-flashtextnein — das Modell sieht die Datei nicht, oder 400
qwen3.8-flashtextja — bei /chat/completions; 400 bei /responses
deepseek-v4.1-flash, glm-5.3, kimi-k3textnein — 400

So haben wir getestet: Das Modell wurde nach einem Wort auf Seite 1, einer Zahl aus einer Tabellenzelle und einer Beschreibung eines Bildes gefragt (Formen, Farben und eine als Bild dargestellte Zahl). „Text“ bedeutet, dass es das Wort und die Zahl korrekt nannte und angab, das Bild nicht sehen zu können. „Yes“ bedeutet, dass es auch das Bild korrekt beschrieb. Senden Sie PDFs über /v1/chat/completions oder /v1/responses an GPT-, Gemini- und Qwen-Modelle: auf /v1/messages sehen sie die Datei selbst nicht.

Scans. Ein Scan hat keine Textebene, daher gibt es nichts zu extrahieren und das Modell erhält die Originaldatei (Header not-needed:no_text_layer_unmeasured_lane). Es kommt dann auf das Modell an: gpt-6.1-sol und qwen3.8-flash können unseren Scan lesen, DeepSeek-Modelle antworten mit 400. Wenn Ihr Modell keinen Scan lesen kann, führen Sie OCR auf Ihrer Seite aus und senden Sie den Text oder senden Sie die Seiten als PNG/JPEG-Bilder über image_url an ein Modell, das Bilder akzeptiert.

Limits, Tokens und Dauer

WasLimit
Ein PDF in einer Modellanfrage (base64, Link oder file_id)bis zu 20 MiB pro Datei; die Datei muss mit %PDF- beginnen
Hochladen unter POST /v1/filesbis zu 50 MiB (52,428,800 bytes), aber nur ein PDF bis zu 20 MiB kann in eine Modellanfrage aufgenommen werden
file_id lifetime7 Tage (das Feld expires_at), danach wird die Datei gelöscht
Seitenkein separates Limit; bei Textextraktion bis zu 60,000 Zeichen pro Anfrage; bei der Datei selbst bis zum Kontextfenster des Modells
Über einen Link herunterladenbis zu 10 Sekunden und bis zu 3 Weiterleitungen

So werden Tokens gezählt. Ein PDF wird als gewöhnliche Eingabe-Tokens des gewählten Modells zu dessen Preis abgerechnet; für die Datei oder die Textextraktion fällt keine separate Gebühr an. Das ergibt sich (gemessen einschließlich einer kurzen Frage) wie folgt:

  • Extrahierter Text: ungefähr 700 Tokens pro dicht bedruckter Textseite (10 Seiten — 7,300 Tokens; 40 Seiten, auf 60,000 Zeichen gekürzt — 20,300 Tokens). Eine Seite mit einer kleinen Tabelle — 100–200 Tokens.
  • Die Datei selbst auf GPT-Modellen: etwa 600–700 Tokens pro Seite (10 Seiten – 5,900; 40 – 23,300); auf gemini-4-argon etwa 1,200 pro Seite; auf Claude etwa 1,600 pro Seite. Eine gescannte Seite auf gpt-6.1-sol – etwa 5,800 Tokens.
  • Bei Wiederholung desselben Dokuments wird der Cache genutzt, wenn sich der Anfang der Anfrage nicht ändert: Eine zweite Anfrage mit demselben file_id las 7,168 von 7,309 Tokens aus dem Cache.

Dauer. Die Textextraktion dauert einen Bruchteil einer Sekunde; eine Antwort zu einem 40-seitigen Dokument kam nach 4–12 Sekunden zurück. Verwenden Sie für große Dokumente und lange Antworten stream: true und setzen Sie das Client-Timeout auf mindestens 300 Sekunden.

Fehler und ihre Behebung

AntwortUrsacheWas zu tun ist
400 invalid_pdfThe PDF must start with the %PDF- signature.Dies ist kein PDF, oder das Base64 ist fehlerhaft. Stellen Sie sicher, dass Sie die Datei selbst und nicht ihren Pfad kodieren und dass der Typ application/pdf ist.
400 invalid_pdfThe PDF size must not exceed 20 MiB.Teilen Sie das Dokument auf oder komprimieren Sie die darin enthaltenen Bilder.
413 invalid_request_errorAuf POST /v1/files: Die Datei ist größer als 52,428,800 BytesDie Datei ist größer als 50 MiB: Teilen Sie sie auf.
400 invalid_request_errorfile_id ist nicht verfügbarDie Datei wurde gelöscht, ist abgelaufen (7 days), wurde über ein anderes Konto hochgeladen oder die ID stammt von einem anderen Dienst. Laden Sie die Datei erneut mit demselben Schlüssel hoch.
400 invalid_pdfThe PDF URL must be a public HTTPS URL without credentials.Der Link verwendet http://, enthält eine Anmeldung und ein Passwort, verwendet einen nicht standardmäßigen Port oder die Domain existiert nicht. Geben Sie einen öffentlichen HTTPS-Link an oder senden Sie Base64.
400 invalid_pdfCould not safely fetch the PDF from the URL.Der Link liefert 404, eine Anmeldeseite, HTML statt eines PDFs oder der Server hat nicht innerhalb von 10 Sekunden geantwortet. Öffnen Sie den Link in einem privaten Browserfenster. Wenn die Datei nicht sofort heruntergeladen wird, senden Sie Base64.
400 unsupported_inputDas Modell kann keine PDFs lesen, und die Datei enthält keinen Text (ein Scan).Verwenden Sie ein Modell, das Scans lesen kann (siehe oben), oder führen Sie OCR auf Ihrer Seite aus.
400 invalid_request_errorInvalid request… bei deaktivierter Textextraktion oder bei einem Scan.Das Modell akzeptiert keine PDF-Datei. Entfernen Sie plugins documents enabled:false, damit das Modell den Text erhält, oder wählen Sie ein Modell, das in der Tabelle mit "yes" gekennzeichnet ist.
200, aber „Ich sehe keine Datei“Die Extraktion ist deaktiviert, und das Modell oder der Kanal kann die Datei nicht lesen.Kehren Sie zur standardmäßigen Textextraktion zurück oder wählen Sie ein in der Tabelle mit „yes“ gekennzeichnetes Modell.

Bewährte Vorgehensweisen

  • Benötigen Sie das Dokument in mehreren Anfragen? Laden Sie es einmal hoch und übergeben Sie file_id: Die Anfrage ist kleiner, und das wiederholte Präfix wird zwischengespeichert und kostet weniger.
  • Setzen Sie das PDF und die dauerhaften Anweisungen an den Anfang der Nachricht und die veränderliche Frage ans Ende: So wird der Cache häufiger genutzt.
  • Teilen Sie Dokumente mit mehr als etwa 28 dicht bedruckten Seiten kapitelweise auf: Bei aktivierter Textextraktion erreichen Inhalte jenseits von 60,000 Zeichen das Modell nie.
  • Bei Verträgen, Berichten und Exporten mit einer Textebene genügt die Textextraktion – die günstigste Option mit jedem Modell, einschließlich deepseek-v4.1-flash.
  • Benötigen Sie Diagramme, Stempel oder Scans? Deaktivieren Sie die Extraktion und verwenden Sie ein in der Tabelle mit „yes“ gekennzeichnetes Modell, zum Beispiel gpt-6.1-sol.
  • Nicht-lateinischer Text (Russisch, Chinesisch und andere Sprachen) in einem PDF wird ohne besondere Einstellungen gelesen. Entfernen Sie vor dem Senden das Passwort aus einem PDF.
  • Löschen Sie hochgeladene Dateien mit DELETE /v1/files/{file_id}, sobald Sie sie nicht mehr benötigen.
Die Files API garantiert nicht, dass jede gewählte Modellroute Dateien akzeptiert. Wenn eine Route eine Datei nicht unterstützt, korrigieren Sie die Anfrageform oder wählen Sie ein kompatibles Modell. Ersetzen Sie den zurückgegebenen file_id nicht durch eine Kennung eines Drittanbieters.
GetVibe API Files API und PDFs — Dateien hochladen und PDFs an Modelle senden | GetVibe API