DEVELOPER API · V1

MinerU API-Dokumentation – Dokumentenanalyse für Markdown & JSON

Dokument hochladen, Aufgabe abfragen, Markdown, JSON und Bilder als ZIP laden. Erklärt Authentifizierung, Endpunkte und Limits. Für den API-Zugriff ist eine Pro-Mitgliedschaft erforderlich.

Erste Schritte

Übersicht

Erstellen Sie eine Aufgabe pro Datei oder URL, fragen Sie deren status ab und laden Sie dann die ZIP herunter. Anfragen sind asynchron. Pro Monthly und Pro Annual unterstützen den API; Kostenlos nicht.

API Basis-URL
https://YOUR_API_HOST/api/open/v1

Ersetzen Sie YOUR_API_HOST durch Ihre API-Domäne. Alle unten aufgeführten Pfade verwenden diese Basis-URL. Die Beispiele verwenden Platzhalter-IDs und signierte URLs.

Authentifizierung

Senden Sie bei jeder API-Anfrage Authorization: Bearer gefolgt von Ihrem Pro API-Schlüssel. Holen Sie sich den Schlüssel mit der Schlüsseltaste API oder setzen Sie ihn zurück. Bei den Schlüsseln wird die Groß-/Kleinschreibung beachtet: sk- plus 24 zufällige Buchstaben und Ziffern. Benutzeranmeldungs-JWTs authentifizieren diese Endpunkte nicht.

FeldTypErforderlichBeschreibung
AuthorizationstringJaBearer, gefolgt von Ihrem Pro-API-Schlüssel; für jeden Endpunkt erforderlich.
Anfrageheader
Authorization: Bearer sk-YOUR_API_KEY

Bewahren Sie den Schlüssel auf Ihrem Server auf. Stellen Sie es nicht im öffentlichen Frontend code, in Repositorys oder bei Download-Anfragen bereit. Downloads verwenden ihre eigene signierte URL. Durch das Zurücksetzen des Schlüssels wird der alte Schlüssel sofort ungültig. Für den API-Zugriff ist außerdem eine aktive Pro-Mitgliedschaft erforderlich.

Schnellstart

Ersetzen Sie den Host API, legen Sie MINERU_API_KEY fest und stellen Sie paper.pdf bereit. Diese Beispiele werden einmal hochgeladen, alle 3 Sekunden bis zu 30 Minuten abgefragt und dann ZIP auf die Festplatte gestreamt. Das Polling-Timeout ist ein Client-Limit und bricht den Server-Task nicht ab. Verwenden Sie die Aufgaben-ID, um mit der Abfrage fortzufahren. Python benötigt das Paket requests; Node.js benötigt Version 20+; cURL verwendet Bash und jq.

Python
# pip install requests
import os
import time
import requests

API = "https://YOUR_API_HOST/api/open/v1"
headers = {"Authorization": "Bearer " + os.environ["MINERU_API_KEY"]}
with open("paper.pdf", "rb") as source:
    response = requests.post(API + "/tasks", headers=headers, files={"file": ("paper.pdf", source, "application/pdf")},
        data={"force_ocr": "true", "extra_formats": '["docx","html"]'}, timeout=120)
response.raise_for_status()
body = response.json()
if body["code"] != 0:
    raise RuntimeError(body["code"] + ": " + body["msg"])
task_id = body["data"]["task_id"]

deadline = time.monotonic() + 1800
while time.monotonic() < deadline:
    response = requests.get(API + "/tasks/" + task_id, headers=headers, timeout=30)
    response.raise_for_status()
    body = response.json()
    if body["code"] != 0:
        raise RuntimeError(body["code"] + ": " + body["msg"])
    data = body["data"]
    task = data["task"]
    if task["status"] == "completed":
        url = data["results"].get("full_zip_url")
        if not url:
            raise RuntimeError("ZIP unavailable; check expires_at")
        # Download separately: do not send the API key to the download host.
        with requests.get(url, stream=True, timeout=120) as download:
            download.raise_for_status()
            with open("result.zip", "wb") as output:
                for chunk in download.iter_content(1024 * 1024):
                    output.write(chunk)
        print("Saved result.zip")
        break
    if task["status"] in {"failed", "expired"}:
        raise RuntimeError(task["status"] + ": " + task["error"])
    time.sleep(3)
else:
    raise TimeoutError("Polling timed out; task ID: " + task_id)

API Endpunkte

Erstellen Sie eine Aufgabe

POST/api/open/v1/tasks

Ein Endpunkt: POST /api/open/v1/tasks. Wählen Sie eine Eingabemethode: Laden Sie eine Datei mit multipart/form-data hoch oder senden Sie source_url mit JSON. Beide geben data.task_id für denselben Aufgabenabfragefluss zurück. Jede akzeptierte Einreichung erstellt eine neue Aufgabe.

Chemische Aufgaben akzeptieren nur PDF und Bilder. force_ocr und extra_formats sind nicht verfügbar.

Option 1: Datei hochladen

Laden Sie genau eine Datei direkt auf den API-Server hoch. Lassen Sie Ihren HTTP-Client die Multipart-Grenze festlegen; Stellen Sie Content-Type nicht manuell ein. Nur Datei und optional force_ocr und extra_formats senden. Der Server prüft die empfangenen Bytes und Einheiten vor dem Speichern und Einreihen in die Warteschlange. Es ist keine separate Anfrage zum Abschluss des Uploads erforderlich.

Parameter im Request-Body · multipart/form-data
FeldTypErforderlichBeschreibung
filebinaryJaEine Datei; Der Dateiname muss eine unterstützte Erweiterung enthalten.
parse_typestring (0 | 1)Nein0: allgemeine Dokumente (Standard); 1: chemische Strukturen.Standard: 0
force_ocrstring (true | false)Neintrue / false; Nur für PDF. Aktiviert: vorhandene Textebene ignorieren und OCR nutzen. Deaktiviert: automatisch erkennen. Andere Formate bleiben unverändert.Standard: false
extra_formatsstring (JSON)NeinJSON-codierter Array-String, e.g. ["docx","html"]. Werte: html, docx, latex.Standard: []
Beispielanfrage · cURL
curl --fail-with-body "https://YOUR_API_HOST/api/open/v1/tasks" \
  -H "Authorization: Bearer $API_KEY" \
  -F '[email protected]' \
  -F 'force_ocr=true' \
  -F 'extra_formats=["docx","html"]'
Antwortfelder · 200 OK

HTTP 200 bedeutet, dass die Aufgabe erstellt wurde. code ist 0, msg ist ok und die Daten enthalten nur task_id. Fragen Sie die Aufgabe ab, um ihre status und results zu erhalten.

FeldTypBeschreibung
codeinteger0 bei erfolgreicher Aufgabenerstellung.
data.task_idstring (UUID)Aufgabe UUID wurde bei der Erstellung als data.task_id zurückgegeben.
msgstringok bei erfolgreicher Aufgabenerstellung.
Antwortbeispiel
{
  "code": 0,
  "data": {
    "task_id": "a90e6ab6-44f3-4554-b459-b62fe4c6b436"
  },
  "msg": "ok"
}

Option 2: Senden Sie eine URL

Senden Sie JSON statt multipart. source_url muss eine öffentliche HTTP/HTTPS-URL für ein Dokument, ein Bild oder HTML sein. Die Quelle muss einen positiven Content-Length-Wert und ein unterstütztes Format über Header oder Dateinamen angeben. Fehlende, widersprüchliche oder geänderte Metadaten führen zum Fehler. Private Adressen, URLs mit Zugangsdaten sowie komprimierte Antworten oder Antworten mit chunked-Übertragung werden abgelehnt. Maximal 5 Weiterleitungen sind erlaubt. Beim Erstellen wird queued zurückgegeben; Abruffehler stehen später in task.error.

Parameter im Request-Body · application/json
FeldTypErforderlichBeschreibung
source_urlstringJaÖffentliche Quell-URL HTTP/HTTPS, vorbehaltlich der Metadaten- und Größenvalidierung.
parse_typeinteger (0 | 1)Nein0: allgemeine Dokumente (Standard); 1: chemische Strukturen.Standard: 0
force_ocrbooleanNeintrue / false; Nur für PDF. Aktiviert: vorhandene Textebene ignorieren und OCR nutzen. Deaktiviert: automatisch erkennen. Andere Formate bleiben unverändert.Standard: false
extra_formatsstring[]NeinArray aus html, docx und/oder latex, kein JSON-String. Markdown und JSON sind bereits enthalten.Standard: []
Beispielanfrage · cURL
curl --fail-with-body "https://YOUR_API_HOST/api/open/v1/tasks" \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  --data '{"source_url":"https://example.com/paper.pdf","force_ocr":true,"extra_formats":["docx","html"]}'
Antwortfelder · 200 OK

HTTP 200 bedeutet, dass die Aufgabe erstellt wurde. code ist 0, msg ist ok und die Daten enthalten nur task_id. Fragen Sie die Aufgabe ab, um ihre status und results zu erhalten.

FeldTypBeschreibung
codeinteger0 bei erfolgreicher Aufgabenerstellung.
data.task_idstring (UUID)Aufgabe UUID wurde bei der Erstellung als data.task_id zurückgegeben.
msgstringok bei erfolgreicher Aufgabenerstellung.
Antwortbeispiel
{
  "code": 0,
  "data": {
    "task_id": "a90e6ab6-44f3-4554-b459-b62fe4c6b436"
  },
  "msg": "ok"
}
Chemische Aufgabe · cURL
curl --fail-with-body "https://YOUR_API_HOST/api/open/v1/tasks" \
  -H "Authorization: Bearer $API_KEY" \
  -F '[email protected]' \
  -F 'parse_type=1'

Aufgaben auflisten

GET/api/open/v1/tasks

Listet Ihre Web- und API-Aufgaben zusammen auf, die neuesten zuerst. Elemente enthalten nur task_id, status, credits, created_at und Dateiname, Größe, mime_type und source_type. Abfragedetails für Dateimetadaten, Fehlergrund, Ablauf und Ergebnis-URLs. page_size akzeptiert 1–100; Ungültige Werte sind standardmäßig 20.. Die Seite darunter ist standardmäßig 1. Standard ist 1..

Abfrageparameter

FeldTypErforderlichBeschreibung
pageintegerNein1-basierte Seitenzahl; ungültig oder kleiner als 1 verwendet 1.Standard: 1
page_sizeintegerNeinElemente pro Seite, 1–100; Ungültige Werte verwenden 20.Standard: 20
searchstringNeinFiltern Sie nach Dateinamen für alle Ihre Aufgaben (bis zu 255 Zeichen).
statusstringNeinOptionaler status-Filter: queued, running, completed, failed oder expired. Trennen Sie mehrere Status durch Kommas.
Beispielanfrage · cURL
curl --fail-with-body "https://YOUR_API_HOST/api/open/v1/tasks?page=1&page_size=20" \
  -H "Authorization: Bearer $API_KEY"

Antwortfelder · 200 OK

FeldTypBeschreibung
data.itemsTaskSummary[]Aufgabenzusammenfassungen, die nur Felder in der Tabelle TaskSummary enthalten.
data.has_morebooleanOb eine andere Seite verfügbar ist.
data.pageinteger1-basierte Seitenzahl; ungültig oder kleiner als 1 verwendet 1.
data.page_sizeintegerElemente pro Seite, 1–100; Ungültige Werte verwenden 20.
Antwortbeispiel
{
  "code": 0,
  "msg": "ok",
  "data": {
    "items": [
      {
        "task_id": "a90e6ab6-44f3-4554-b459-b62fe4c6b436",
        "parse_type": 0,
        "status": "completed",
        "credits": 2,
        "created_at": "2026-10-12T07:04:05Z",
        "file": {
          "name": "paper.pdf",
          "size": 12345,
          "mime_type": "application/pdf",
          "source_type": "upload"
        }
      }
    ],
    "has_more": false,
    "page": 1,
    "page_size": 20
  }
}

TaskSummary

FeldTypBeschreibung
task_idstring (UUID)Aufgabe UUID wurde bei der Erstellung als data.task_id zurückgegeben.
parse_typeinteger (0 | 1)0: allgemeine Dokumente (Standard); 1: chemische Strukturen.
statusstringGesamtaufgabenstatus; siehe Aufgabenstatus.
creditsintegerAbrechenbare Anzahl: PDF-Seiten, PPT-Folien oder Excel-Arbeitsblätter. Word, HTML und Bilder zählen jeweils als 1 Einheit. Bis zum Abschluss der Prüfung einer URL-Datei ist der Wert 0.
created_atstring (RFC3339)Erstellungszeitpunkt des Datensatzes im Format RFC3339.
file.namestringGespeicherter Eingabedateiname; URL-Aufgaben zeigen möglicherweise zunächst den Quellhost an.
file.sizeinteger (int64)Tatsächlich gespeicherte Bytes; 0 vor dem URL-Download.
file.mime_typestringGespeicherter MIME-Typ; kann beim Abrufen leer sein.
file.source_typestringupload oder url.

Aufgabenergebnisse abrufen

GET/api/open/v1/tasks/{id}

Lesen Sie data.task.status. results ist immer ein Wörterbuch: leer für queued, running, failed oder expired und enthält Dokument-URLs, wenn completed. Die ZIP-URL ist results.full_zip_url. Fehlgeschlagene Aufgaben geben HTTP 200 mit code task_failed und den Grund in msg zurück; expired results verwenden code result_expired.

Pfadparameter

FeldTypErforderlichBeschreibung
idstring (UUID)JaAufgabe UUID wurde bei der Erstellung als data.task_id zurückgegeben.
Beispielanfrage · cURL
curl --fail-with-body "https://YOUR_API_HOST/api/open/v1/tasks/$TASK_ID" \
  -H "Authorization: Bearer $API_KEY"

Antwortfelder · 200 OK

FeldTypBeschreibung
data.taskTaskAufgabenobjekt, wird immer bei erfolgreicher Detailsuche zurückgegeben.
data.fileFileEingabedateiobjekt; URL-Metadaten sind möglicherweise noch nicht fertig.
data.resultsobjectEin Wörterbuch mit Datei- und Bild-URLs. Unvollendete, failed- oder expired-Aufgaben geben ein leeres Wörterbuch zurück.
Verarbeitungsantwort · running
{
  "code": 0,
  "msg": "ok",
  "data": {
    "task": {
      "task_id": "a90e6ab6-44f3-4554-b459-b62fe4c6b436",
      "parse_type": 0,
      "status": "running",
      "credits": 2,
      "force_ocr": true,
      "expires_at": "2026-10-19T07:04:05Z",
      "error": "",
      "created_at": "2026-10-12T07:04:05Z"
    },
    "file": {
      "name": "paper.pdf",
      "size": 12345,
      "mime_type": "application/pdf",
      "suffix": "pdf",
      "source_type": "upload",
      "source_url": ""
    },
    "results": {}
  }
}
Antwortbeispiel · completed
{
  "code": 0,
  "msg": "ok",
  "data": {
    "task": {
      "task_id": "a90e6ab6-44f3-4554-b459-b62fe4c6b436",
      "parse_type": 0,
      "status": "completed",
      "credits": 2,
      "force_ocr": true,
      "expires_at": "2026-10-19T07:04:05Z",
      "error": "",
      "created_at": "2026-10-12T07:04:05Z"
    },
    "file": {
      "name": "paper.pdf",
      "size": 12345,
      "mime_type": "application/pdf",
      "suffix": "pdf",
      "source_type": "upload",
      "source_url": ""
    },
    "results": {
      "original_url": "https://downloads.example.com/uploads/4001a517-cd93-47a6-a56a-e53d2a0828df/aa0e6ab6-44f3-4554-b459-b62fe4c6b437.pdf?token=SIGNED_TOKEN",
      "markdown_url": "https://downloads.example.com/results/a90e6ab6-44f3-4554-b459-b62fe4c6b436/preview/markdown.md?token=SIGNED_TOKEN",
      "middle_json_url": "https://downloads.example.com/results/a90e6ab6-44f3-4554-b459-b62fe4c6b436/preview/middle_json.json?token=SIGNED_TOKEN",
      "structured_json_url": "https://downloads.example.com/results/a90e6ab6-44f3-4554-b459-b62fe4c6b436/preview/structured_content.json?token=SIGNED_TOKEN",
      "images": {
        "images/001.jpg": "https://downloads.example.com/results/a90e6ab6-44f3-4554-b459-b62fe4c6b436/preview/images/001.jpg?token=SIGNED_TOKEN"
      },
      "full_zip_url": "https://downloads.example.com/results/a90e6ab6-44f3-4554-b459-b62fe4c6b436/exports/6b0e6ab6-44f3-4554-b459-b62fe4c6b439.zip?token=SIGNED_TOKEN"
    }
  }
}
Fehlgeschlagene Aufgabenantwort · HTTP 200
{
  "code": "task_failed",
  "msg": "MinerU job ended: failed",
  "data": {
    "task": {
      "task_id": "a90e6ab6-44f3-4554-b459-b62fe4c6b436",
      "parse_type": 0,
      "status": "failed",
      "credits": 2,
      "force_ocr": true,
      "expires_at": "2026-10-19T07:04:05Z",
      "error": "MinerU job ended: failed",
      "created_at": "2026-10-12T07:04:05Z"
    },
    "file": {
      "name": "paper.pdf",
      "size": 12345,
      "mime_type": "application/pdf",
      "suffix": "pdf",
      "source_type": "upload",
      "source_url": ""
    },
    "results": {}
  }
}
Chemische Aufgabe · abgeschlossen
{
  "code": 0,
  "msg": "ok",
  "data": {
    "task": {
      "task_id": "a90e6ab6-44f3-4554-b459-b62fe4c6b436",
      "parse_type": 1,
      "status": "completed",
      "credits": 2,
      "force_ocr": false,
      "expires_at": "2026-10-19T07:04:05Z",
      "error": "",
      "created_at": "2026-10-12T07:04:05Z"
    },
    "file": {
      "name": "paper.pdf",
      "size": 12345,
      "mime_type": "application/pdf",
      "suffix": "pdf",
      "source_type": "upload",
      "source_url": ""
    },
    "results": {
      "original_url": "https://downloads.example.com/uploads/4001a517-cd93-47a6-a56a-e53d2a0828df/aa0e6ab6-44f3-4554-b459-b62fe4c6b437.pdf?token=SIGNED_TOKEN",
      "json_url": "https://downloads.example.com/results/a90e6ab6-44f3-4554-b459-b62fe4c6b436/molecular_structures.json?token=SIGNED_TOKEN"
    }
  }
}

Task

FeldTypBeschreibung
task_idstring (UUID)Aufgabe UUID wurde bei der Erstellung als data.task_id zurückgegeben.
parse_typeinteger (0 | 1)0: allgemeine Dokumente (Standard); 1: chemische Strukturen.
statusstringGesamtaufgabenstatus; siehe Aufgabenstatus.
creditsintegerAbrechenbare Anzahl: PDF-Seiten, PPT-Folien oder Excel-Arbeitsblätter. Word, HTML und Bilder zählen jeweils als 1 Einheit. Bis zum Abschluss der Prüfung einer URL-Datei ist der Wert 0.
force_ocrbooleantrue / false; Nur für PDF. Aktiviert: vorhandene Textebene ignorieren und OCR nutzen. Deaktiviert: automatisch erkennen. Andere Formate bleiben unverändert.
expires_atstring | null (RFC3339)Aufbewahrungsfrist für Aufgaben; kann null sein, bevor Ergebnisse/failure aufgezeichnet werden.
errorstringVerarbeitung von error oder Wiederherstellungsnachricht; leer, wenn keine vorhanden ist.
created_atstring (RFC3339)Erstellungszeitpunkt des Datensatzes im Format RFC3339.

File

FeldTypBeschreibung
namestringGespeicherter Eingabedateiname; URL-Aufgaben zeigen möglicherweise zunächst den Quellhost an.
sizeinteger (int64)Tatsächlich gespeicherte Bytes; 0 vor dem URL-Download.
mime_typestringGespeicherter MIME-Typ; kann beim Abrufen leer sein.
suffixstringKleinbuchstabenerweiterung ohne Punkt; kann beim Abrufen leer sein.
source_typestringupload oder url.
source_urlstringVom Benutzer übermittelte Quell-URL; leer für hochgeladene Dateien.

results

FeldTypBeschreibung
original_urlstringSignierte Originaldatei-URL.
json_urlstringDownload-URL für chemisches JSON; nur bei parse_type=1.
markdown_urlstringSignierte native markdown.md-URL zum Vorschaulesen.
middle_json_urlstringSignierte middle_json.json-URL mit Seiten, Blockstruktur und normalisierten Begrenzungsrahmen.
structured_json_urlstringSignierte structured_content.json URL; wird weggelassen, wenn die Ressource nicht vorhanden ist.
imagesRecord<string, string>Karte nativer relativer Pfade zu signierten Bild-URLs; leeres Objekt, wenn keine Bilder vorhanden sind.
full_zip_urlstringresults.full_zip_url ist die signierte endgültige API ZIP URL, die nur zurückgegeben wird, wenn completed und beibehalten wird.

Referenzhinweise

Formate und Grenzen

Pro-Limits: 200 MiB pro Dokument, 50 MiB pro Bild und 500 abrechenbare Einheiten. API und Weboberfläche teilen sich täglich 5 und monatlich 1000 Einheiten; die täglichen Einheiten werden zuerst genutzt. Nach der Validierung wird Kontingent reserviert und nach dem Speichern des grundlegenden Analyseergebnisses abgebucht. Bei bestätigtem Analysefehler oder Abbruch wird die Reservierung freigegeben. Fehler bei der Veröffentlichung oder beim Export erstatten keine bereits erfolgreich durchgeführte Analyse. Bei fehlgeschlagener oder zeitüberschrittener Ausführung werden noch nicht abgebuchte Reservierungen automatisch freigegeben. Für Exporte wird kein zusätzliches Kontingent abgebucht.

FormatDateinamenerweiterungenAbrechenbare Einheiten
PDF.pdfPhysische PDF Seiten
Word.doc, .docx1 Einheit pro Datei
PowerPoint.ppt, .pptxAnzahl der Folien
Excel.xls, .xlsxAnzahl der Arbeitsblätter
Bilder.png, .jpg, .jpeg, .webp, .gif, .bmp, .tif, .tiff1 Einheit pro Datei
HTML.html, .htm1 Einheit pro Datei

Das Upload-Format wird durch die Dateinamenerweiterung bestimmt, ohne Berücksichtigung der Groß-/Kleinschreibung. PDF, PowerPoint und Excel müssen über lesbare Seiten-/unit-Metadaten verfügen. MIME wird nicht zur Validierung hochgeladener Inhalte verwendet. Leere Dateien, nicht unterstützte Erweiterungen, verschlüsselte oder nicht lesbare PDFs und Eingaben, die das Limit überschreiten, werden abgelehnt. Das Parsen von HTML ist statisch und führt kein JavaScript aus. 1 MiB = 1,048,576 Bytes.

Aufgabenstatus

Rufen Sie weiterhin queued oder running ab. Herunterladen auf completed; Lesen Sie error und hören Sie bei failed auf. expired bedeutet, dass die Aufbewahrung beendet ist. status beschreibt die gesamte Aufgabe; API-Aufgaben werden erst abgeschlossen, wenn die letzten ZIP fertig sind.

task.statusBeschreibung
queuedAkzeptiert; Warten auf Verarbeitung oder Abrufen der URL-Eingabe.
runningIn Bearbeitung: umfasst das Parsen, Speichern der Ergebnisse und Erstellen des API-ZIP-Archivs.
completedDas Endergebnis kann abgefragt und heruntergeladen werden.
failedVerarbeitung fehlgeschlagen. Lesen Sie das Feld error. Erstellen Sie nicht automatisch eine Ersatzaufgabe.
expiredDie Frist zur Aufbewahrung der Ergebnisse in expires_at ist abgelaufen; keine Download-URLs.

ZIP-Ergebnisse und Downloads

Das API erzeugt ein letztes ZIP. Markdown, mittlere JSON, strukturierte JSON und gespeicherte Bilder sind standardmäßig enthalten. extra_formats unterstützt nur html, docx und latex; Die angeforderten Dateien werden demselben ZIP hinzugefügt. Erstellen Sie keinen separaten Webexportauftrag für eine API-Aufgabe. Keine Extras bedeutet, dass results.full_zip_url auf base.zip zeigt; Extras bedeuten, dass es auf die Datei exports/a ZIP verweist.

Chemische Aufgaben liefern results.original_url und results.json_url, ohne ZIP und weitere Exportformate.

Chemische Ergebnisse sind ein JSON-Array mit allen nativen MolParser-Feldern je Molekül. Ohne Moleküle wird [] zurückgegeben.

molecular_structures.json
source, input_index, page_index, bbox, confidence, raw_caption, caption, smi, esmi, cxsmiles, markush, sru, groups
ZIP
result.zip
├── markdown.md
├── middle_json.json
├── structured_content.json
├── images/
│   └── …
├── model_output.json       (optional)
├── result.html             (extra_formats: html)
├── result.docx             (extra_formats: docx)
└── result.tex              (extra_formats: latex)

Ergebnisse werden 7 Tage aufbewahrt. results.full_zip_url wird für höchstens 15 Minuten und nie über die Aufbewahrungsfrist hinaus signiert. Mit einem einfachen GET herunterladen, ohne Authorization. Wenn die Signatur abläuft, während sie noch erhalten bleibt, fragen Sie die Details erneut nach einer neuen URL ab. Vorschaubild-Links dauern höchstens 2 Stunden; Andere Dateilinks dauern höchstens 15 Minuten.

ZIP-Dokumente behalten native relative Bildverweise und enthalten gespeicherte Bilder, sodass diese Verweise nicht von CDN-Signaturen abhängen. Extrahieren Sie das gesamte Archiv und behalten Sie die Ordnerstruktur bei. Remote-Bilder, auf die durch die Eingabe HTML verwiesen wird, werden nicht automatisch archiviert und verweisen möglicherweise weiterhin auf die Quellwebsite.

Fehler und Wiederherstellung

code 0 bedeutet Erfolg. Ein anderer code bezeichnet die Fehlerkategorie; msg nennt den Grund. Abfragen fehlgeschlagener oder abgelaufener Aufgaben liefern HTTP 200 mit task_failed oder result_expired und einem leeren results-Objekt.

HTTP 402
{
  "code": "quota_exceeded",
  "data": null,
  "msg": "not enough available pages/units"
}
HTTPcodeBeschreibung
200task_failedAnalyse fehlgeschlagen. Den Grund finden Sie in msg.
200result_expiredDie Ergebnisse sind abgelaufen.
400invalid_requestUngültige Parameter oder Datei. Den Grund finden Sie in msg.
400too_many_pagesDas Dokument überschreitet das Seitenlimit oder das Limit abrechenbarer Einheiten.
401unauthorizedAPI-Authentifizierung fehlgeschlagen.
402quota_exceededNicht genügend verfügbares Kontingent.
403user_disabledDas Konto ist deaktiviert.
403pro_requiredEine aktive Pro-Mitgliedschaft ist erforderlich.
404not_foundAufgabe nicht gefunden oder Zugriff verweigert.
413file_too_largeDie Datei überschreitet das Größenlimit Ihres Tarifs.
500internal_errorSerververarbeitung fehlgeschlagen. Den Grund finden Sie in msg.