DEVELOPER API · V1

PaddleOCR 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 der Taste Pro API; auf jedem Endpunkt erforderlich.
Header anfordern
>
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.

Körperparameter · 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: []
Beispiel anfordern · 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 anstelle von Multipart. source_url muss ein öffentliches HTTP/HTTPS Dokument, Bild oder eine HTML URL sein. Die Quelle muss ein positives Content-Length und ein unterstütztes Format aus Headern oder Dateinamen bereitstellen; Fehlende, widersprüchliche oder geänderte Metadaten führen zum Scheitern der Aufgabe. Private Adressen, URLs mit Anmeldeinformationen sowie komprimierte oder geblockte Antworten werden abgelehnt. Höchstens 5 Weiterleitungen. Die Erstellung gibt queued zurück; Abruffehler treten später in task.error auf.

Körperparameter · 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 /or latex, kein JSON-String. Markdown und JSON sind bereits enthalten.Standard: []
Beispiel anfordern · 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..

Parameter abfragen

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.
Beispiel anfordern · 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 als 1.. Es dauert 0, bis die Überprüfung der URL-Datei abgeschlossen ist.
created_atstring (RFC3339)Zeichnen Sie die Erstellungszeit in RFC3339 auf.
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.

Holen Sie sich Aufgabe results

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.
Beispiel anfordern · 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 als 1.. Es dauert 0, bis die Überprüfung der URL-Datei abgeschlossen ist.
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)Zeichnen Sie die Erstellungszeit in RFC3339 auf.

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 Web teilen 5 tägliche plus 1,000 monatliche Einheiten, wobei zuerst die täglichen Einheiten verwendet werden. Die Nutzung ist nach der Validierung reserviert und wird berechnet, wenn das Basisanalyseergebnis gespeichert wird. Bestätigter Analysefehler oder Abbruch gibt Reservierungen frei. Bei einem Veröffentlichung/export-Fehler wird die erfolgreiche Analyse nicht rückerstattet; failed oder die Ausführung aufgrund einer Zeitüberschreitung gibt nicht belastete Reservierungen automatisch frei. Für Exporte fallen keine weiteren Gebühren an.

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.
runningVerarbeitung, einschließlich Parsen, Speichern von results- und API-Paketen.
completedDas Endergebnis kann abgefragt und heruntergeladen werden.
failedVerarbeitung failed; lesen Sie error. Erstellen Sie nicht automatisch eine Ersatzaufgabe.
expiredDie Frist zur Aufbewahrung der Ergebnisse in expires_at ist abgelaufen; keine Download-URLs.

ZIP results 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.