DEVELOPER API · V1

وثائق MinerU API — تحليل المستندات إلى Markdown و JSON

ارفع مستندًا وتابع المهمة ثم نزّل Markdown و JSON والصور في ملف ZIP. يشرح المصادقة ونقاط الوصول والحدود. يتطلب الوصول إلى API اشتراك Pro.

البدء

نظرة عامة

أنشئ مهمة واحدة لكل ملف أو عنوان URL، واستطلع status، ثم قم بتنزيل ZIP. الطلبات غير متزامنة. الدعم الشهري والسنوي الاحترافي لـ API؛ مجاني لا.

API عنوان URL الأساسي
https://YOUR_API_HOST/api/open/v1

استبدل YOUR_API_HOST بالنطاق API الخاص بك. تستخدم جميع المسارات أدناه عنوان URL الأساسي هذا. تستخدم الأمثلة معرفات العناصر النائبة وعناوين URL الموقعة.

التوثيق

أرسل Authorization: Bearer متبوعًا بمفتاح Pro API الخاص بك في كل طلب API. احصل على المفتاح أو أعد ضبطه باستخدام زر المفتاح API. المفاتيح حساسة لحالة الأحرف: sk- plus 24 أحرف وأرقام عشوائية. لا تقوم JWTs بتسجيل دخول المستخدم بمصادقة نقاط النهاية هذه.

الميدانالنوعمطلوبالوصف
AuthorizationstringنعمBearer متبوعًا بمفتاح Pro API؛ مطلوب في كل نقطة النهاية.
ترويسات الطلب
Authorization: Bearer sk-YOUR_API_KEY

احتفظ بالمفتاح على الخادم الخاص بك. لا تعرضه في الواجهة الأمامية العامة code أو المستودعات أو طلبات التنزيل. تستخدم التنزيلات عنوان URL الموقع الخاص بها. تؤدي إعادة ضبط المفتاح إلى إبطال صلاحية المفتاح القديم على الفور؛ يتطلب الوصول إلى API أيضًا عضوية Pro نشطة.

بداية سريعة

استبدل المضيف API واضبط MINERU_API_KEY وقم بتوفير paper.pdf. يتم تحميل هذه الأمثلة مرة واحدة، والاستطلاع كل 3 ثانية لمدة تصل إلى 30 دقيقة، ثم يتم بث ZIP إلى القرص. تعد مهلة الاستقصاء حدًا للعميل ولا تؤدي إلى إلغاء مهمة الخادم. استخدم معرف المهمة لمتابعة الاستعلام. يتطلب Python مكتبة requests؛ Node.js يحتاج إلى الإصدار 20+؛ cURL يستخدم Bash و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 نقاط النهاية

إنشاء مهمة

POST/api/open/v1/tasks

نقطة نهاية واحدة: POST /api/open/v1/tasks. اختر طريقة إدخال واحدة: قم بتحميل ملف باستخدام multipart/form-data، أو أرسل source_url باستخدام JSON. يقوم كلاهما بإرجاع data.task_id لنفس تدفق استعلام المهمة. يقوم كل إرسال مقبول بإنشاء مهمة جديدة.

الوضع الكيميائي يقبل PDF والصور فقط. لا يدعم force_ocr أو extra_formats.

الخيار 1 : رفع ملف

قم بتحميل ملف واحد بالضبط مباشرة إلى خادم API. اسمح لعميل HTTP بتعيين الحدود متعددة الأجزاء؛ لا تقم بتعيين Content-Type يدويًا. إرسال الملف فقط واختياري force_ocr و extra_formats. يتحقق الخادم من البايتات والوحدات المستلمة قبل تخزينها ووضعها في قائمة الانتظار. ليس هناك حاجة إلى طلب منفصل لإكمال التحميل.

معلمات الجسم · multipart/form-data
الميدانالنوعمطلوبالوصف
filebinaryنعمملف واحد؛ يجب أن يتضمن اسم الملف امتدادًا مدعومًا.
parse_typestring (0 | 1)لا0: مستندات عامة (افتراضي)؛ 1: بنى كيميائية.افتراضي: 0
force_ocrstring (true | false)لاtrue / false; لملفات PDF فقط. عند التفعيل: تجاهل طبقة النص واستخدم OCR. عند الإيقاف: اكتشاف تلقائي. لا تتأثر التنسيقات الأخرى.افتراضي: false
extra_formatsstring (JSON)لاسلسلة نصية لمصفوفة بترميز JSON، مثل ["docx","html"]. القيم المسموحة: html وdocx وlatex.افتراضي: []
مثال على الطلب · 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"]'
حقول الرد · 200 OK

HTTP 200 يعني أنه تم إنشاء المهمة. code هو 0, msg هو ok، وتحتوي البيانات على task_id فقط. الاستعلام عن المهمة للحصول على status وresults.

الميدانالنوعالوصف
codeinteger0 نجاح إنشاء المهام.
data.task_idstring (UUID)تم إرجاع المهمة UUID بالشكل data.task_id عند إنشائها.
msgstringok نجاح إنشاء المهام.
مثال الرد
{
  "code": 0,
  "data": {
    "task_id": "a90e6ab6-44f3-4554-b459-b62fe4c6b436"
  },
  "msg": "ok"
}

الخيار 2: إرسال عنوان URL

أرسل JSON بدلاً من متعدد الأجزاء. يجب أن يكون source_url مستندًا أو صورة أو عنوان URL HTML عامًا HTTP/HTTPS. يجب أن يعرض المصدر Content-Length موجبًا وتنسيقًا مدعومًا من الرؤوس أو اسم الملف؛ البيانات التعريفية المفقودة أو المتضاربة أو المتغيرة تفشل في المهمة. يتم رفض العناوين الخاصة وعناوين URL التي تحتوي على بيانات الاعتماد والاستجابات المضغوطة أو المقسمة. على الأكثر 5 عمليات إعادة التوجيه. إرجاع الخلق queued؛ تظهر حالات فشل الجلب لاحقًا في task.error.

معلمات الجسم · application/json
الميدانالنوعمطلوبالوصف
source_urlstringنعمعنوان URL العام للمصدر HTTP/HTTPS، يخضع للبيانات الوصفية والتحقق من الحجم.
parse_typeinteger (0 | 1)لا0: مستندات عامة (افتراضي)؛ 1: بنى كيميائية.افتراضي: 0
force_ocrbooleanلاtrue / false; لملفات PDF فقط. عند التفعيل: تجاهل طبقة النص واستخدم OCR. عند الإيقاف: اكتشاف تلقائي. لا تتأثر التنسيقات الأخرى.افتراضي: false
extra_formatsstring[]لامصفوفة تحتوي على html وdocx و/أو latex، وليست سلسلة JSON. يتضمن الناتج Markdown وJSON افتراضيًا.افتراضي: []
مثال على الطلب · 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"]}'
حقول الرد · 200 OK

HTTP 200 يعني أنه تم إنشاء المهمة. code هو 0, msg هو ok، وتحتوي البيانات على task_id فقط. الاستعلام عن المهمة للحصول على status وresults.

الميدانالنوعالوصف
codeinteger0 نجاح إنشاء المهام.
data.task_idstring (UUID)تم إرجاع المهمة UUID بالشكل data.task_id عند إنشائها.
msgstringok نجاح إنشاء المهام.
مثال الرد
{
  "code": 0,
  "data": {
    "task_id": "a90e6ab6-44f3-4554-b459-b62fe4c6b436"
  },
  "msg": "ok"
}
مهمة كيميائية · 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'

قائمة المهام

GET/api/open/v1/tasks

يسرد مهام الويب وAPI معًا، الأحدث أولاً. تحتوي العناصر فقط على task_id وstatus وcredits وcreated_at واسم الملف وحجمه وmime_type وsource_type. تفاصيل الاستعلام عن بيانات تعريف الملف وسبب الفشل وانتهاء الصلاحية وعناوين URL للنتائج. page_size يقبل 1–100؛ القيم الافتراضية غير الصالحة هي 20. الصفحة الموجودة أسفل 1 الافتراضية هي 1.

معلمات الاستعلام

الميدانالنوعمطلوبالوصف
pageintegerلارقم الصفحة المستند إلى 1؛ غير صالح أو أقل من 1 يستخدم 1.افتراضي: 1
page_sizeintegerلاالعناصر لكل صفحة، 1–100; تستخدم القيم غير الصالحة 20.افتراضي: 20
searchstringلاقم بالتصفية حسب اسم الملف لجميع مهامك (حتى 255 حرفًا).
statusstringلامرشح status اختياري: queued، running، completed، failed أو expired. افصل بين الحالات المتعددة بفواصل.
مثال على الطلب · cURL
curl --fail-with-body "https://YOUR_API_HOST/api/open/v1/tasks?page=1&page_size=20" \
  -H "Authorization: Bearer $API_KEY"

حقول الرد · 200 OK

الميدانالنوعالوصف
data.itemsTaskSummary[]ملخصات المهام التي تحتوي فقط على الحقول الموجودة في الجدول TaskSummary.
data.has_morebooleanهل تتوفر صفحة أخرى.
data.pageintegerرقم الصفحة المستند إلى 1؛ غير صالح أو أقل من 1 يستخدم 1.
data.page_sizeintegerالعناصر لكل صفحة، 1–100; تستخدم القيم غير الصالحة 20.
مثال الرد
{
  "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

الميدانالنوعالوصف
task_idstring (UUID)تم إرجاع المهمة UUID بالشكل data.task_id عند إنشائها.
parse_typeinteger (0 | 1)0: مستندات عامة (افتراضي)؛ 1: بنى كيميائية.
statusstringحالة المهمة الشاملة؛ راجع حالات المهمة.
creditsintegerالعدد القابل للفوترة: PDF صفحة، PPT شرائح أو Excel أوراق عمل؛ يتم احتساب Word وHTML والصور كـ 1. وهو 0 حتى انتهاء فحص ملف URL.
created_atstring (RFC3339)وقت إنشاء السجل بتنسيق RFC3339.
file.namestringاسم ملف الإدخال المخزن؛ قد تظهر مهام URL في البداية المضيف المصدر.
file.sizeinteger (int64)البايتات المخزنة الفعلية؛ 0 قبل تنزيل عنوان URL.
file.mime_typestringنوع مخزن MIME ؛ قد تكون فارغة أثناء الجلب.
file.source_typestringupload أو url.

الحصول على نتائج المهمة

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

إقرأ data.task.status. results هو دائمًا قاموس: فارغ لـ queued، running، failed أو expired، ويحتوي على عناوين URL للمستندات عندما completed. عنوان URL ZIP هو results.full_zip_url. تُرجع المهام الفاشلة HTTP 200 مع code task_failed والسبب في msg؛ expired results استخدم code result_expired.

معلمات المسار

الميدانالنوعمطلوبالوصف
idstring (UUID)نعمتم إرجاع المهمة UUID بالشكل data.task_id عند إنشائها.
مثال على الطلب · cURL
curl --fail-with-body "https://YOUR_API_HOST/api/open/v1/tasks/$TASK_ID" \
  -H "Authorization: Bearer $API_KEY"

حقول الرد · 200 OK

الميدانالنوعالوصف
data.taskTaskكائن المهمة، يتم إرجاعه دائمًا عند البحث الناجح عن التفاصيل.
data.fileFileكائن ملف الإدخال؛ قد لا تكون البيانات التعريفية لعنوان URL جاهزة بعد.
data.resultsobjectقاموس عناوين URL للملفات والصور. تقوم المهام غير المكتملة، failed أو expired بإرجاع قاموس فارغ.
معالجة الرد · 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": {}
  }
}
مثال الرد · 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"
    }
  }
}
فشل الاستجابة للمهمة · 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": {}
  }
}
مهمة كيميائية · مكتملة
{
  "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

الميدانالنوعالوصف
task_idstring (UUID)تم إرجاع المهمة UUID بالشكل data.task_id عند إنشائها.
parse_typeinteger (0 | 1)0: مستندات عامة (افتراضي)؛ 1: بنى كيميائية.
statusstringحالة المهمة الشاملة؛ راجع حالات المهمة.
creditsintegerالعدد القابل للفوترة: PDF صفحة، PPT شرائح أو Excel أوراق عمل؛ يتم احتساب Word وHTML والصور كـ 1. وهو 0 حتى انتهاء فحص ملف URL.
force_ocrbooleantrue / false; لملفات PDF فقط. عند التفعيل: تجاهل طبقة النص واستخدم OCR. عند الإيقاف: اكتشاف تلقائي. لا تتأثر التنسيقات الأخرى.
expires_atstring | null (RFC3339)الموعد النهائي للاحتفاظ بالمهمة؛ قد يكون null قبل تسجيل النتائج/failure.
errorstringمعالجة error أو رسالة الاسترداد؛ فارغة عندما لا شيء.
created_atstring (RFC3339)وقت إنشاء السجل بتنسيق RFC3339.

File

الميدانالنوعالوصف
namestringاسم ملف الإدخال المخزن؛ قد تظهر مهام URL في البداية المضيف المصدر.
sizeinteger (int64)البايتات المخزنة الفعلية؛ 0 قبل تنزيل عنوان URL.
mime_typestringنوع مخزن MIME ؛ قد تكون فارغة أثناء الجلب.
suffixstringامتداد صغير بدون نقطة؛ قد تكون فارغة أثناء الجلب.
source_typestringupload أو url.
source_urlstringعنوان URL المصدر المقدم من المستخدم؛ فارغ للملفات المرفوعة.

results

الميدانالنوعالوصف
original_urlstringعنوان URL للملف الأصلي الموقّع.
json_urlstringرابط تنزيل JSON الكيميائي؛ يُرجع فقط عند parse_type=1.
markdown_urlstringعنوان URL الأصلي الموقّع markdown.md لمعاينة القراءة.
middle_json_urlstringعنوان URL موقّع للملف middle_json.json، الذي يحتوي على الصفحات وبنية الكتل ومربعات الإحاطة ذات الإحداثيات المطبّعة.
structured_json_urlstringموقع structured_content.json URL؛ تم حذفه إذا كان المورد غائبا.
imagesRecord<string, string>خريطة للمسارات النسبية الأصلية لعناوين URL للصور الموقعة؛ كائن فارغ عندما لا تكون هناك صور.
full_zip_urlstringresults.full_zip_url هو عنوان URL النهائي API ZIP الموقع، ويتم عرضه فقط عند completed ويتم الاحتفاظ به.

ملاحظات مرجعية

التنسيقات والحدود

حدود Pro هي 200 MiB لكل مستند و50 MiB لكل صورة و500 وحدة قابلة للفوترة. تشترك API والموقع في 5 وحدات يومية و1000 وحدة شهرية، وتُستخدم الوحدات اليومية أولًا. تُحجز الحصة بعد التحقق وتُخصم عند حفظ نتيجة التحليل الأساسية. عند تأكيد فشل التحليل أو إيقافه، يُلغى الحجز. لا يعيد فشل نشر النتائج أو تصديرها الحصة المستهلكة في تحليل ناجح. إذا فشل التنفيذ أو انتهت مهلته، تُحرر الحجوزات التي لم تُخصم تلقائيًا. لا يستهلك التصدير حصة إضافية.

التنسيقامتدادات أسماء الملفاتوحدات قابلة للفوترة
PDF.pdfصفحات PDF المادية
Word.doc, .docx1 وحدة لكل ملف
PowerPoint.ppt, .pptxعدد الشرائح
Excel.xls, .xlsxعدد أوراق العمل
صور.png, .jpg, .jpeg, .webp, .gif, .bmp, .tif, .tiff1 وحدة لكل ملف
HTML.html, .htm1 وحدة لكل ملف

يتم تحديد تنسيق التحميل من خلال امتداد اسم الملف، بشكل غير حساس لحالة الأحرف. يجب أن تحتوي PDF وPowerPoint وExcel على بيانات تعريف صفحة /unit قابلة للقراءة. لا يُستخدم MIME للتحقق من صحة المحتويات التي تم تحميلها. يتم رفض الملفات الفارغة والامتدادات غير المدعومة وملفات PDF المشفرة أو غير القابلة للقراءة والإدخال الزائد عن الحد. تحليل HTML ثابت ولا يقوم بتشغيل JavaScript. 1 MiB = 1,048,576 بايت.

حالات المهمة

استمر في الاقتراع queued أو running. التنزيل على completed; اقرأ error وتوقف عند failed. expired يعني أن الاحتفاظ بالبيانات قد انتهى. يصف status المهمة بأكملها؛ تكتمل مهام API فقط عندما تكون ZIP النهائية جاهزة.

task.statusالوصف
queuedمقبولة؛ في انتظار المعالجة أو جلب إدخال URL.
runningقيد المعالجة، بما يشمل التحليل وحفظ النتائج وإنشاء أرشيف ZIP لواجهة API.
completedالنتيجة النهائية جاهزة للاستعلام والتحميل.
failedفشلت المعالجة. اقرأ الحقل error، ولا تنشئ مهمة بديلة تلقائيًا.
expiredلقد انقضى الموعد النهائي للاحتفاظ بالنتيجة في expires_at؛ لا توجد عناوين URL للتنزيل.

نتائج ZIP والتنزيلات

ينتج API ZIP نهائيًا. يتم تضمين الصور Markdown والوسطى JSON والصور المنظمة JSON والصور المحفوظة بشكل افتراضي. extra_formats يدعم html، docx وlatex فقط؛ تتم إضافة الملفات المطلوبة إلى نفس ZIP. لا تقم بإنشاء مهمة تصدير ويب منفصلة لمهمة API. عدم وجود إضافات يعني أن results.full_zip_url يشير إلى base.zip؛ الإضافات تعني أنها تشير إلى ملف Export/a ZIP.

تُرجع المهام الكيميائية results.original_url وresults.json_url، دون ZIP أو صيغ تصدير إضافية.

النتيجة مصفوفة JSON تحتفظ بجميع حقول MolParser الأصلية لكل جزيء. عند عدم وجود جزيئات تُرجع [].

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)

تُحفظ النتائج لمدة 7 أيام. يتم التوقيع على results.full_zip_url لمدة 15 دقيقة على الأكثر ولا يتجاوز الاحتفاظ بها أبدًا. قم بالتنزيل باستخدام GET عادي، بدون Authorization. إذا انتهت صلاحية التوقيع مع استمرار الاحتفاظ به، فاستفسر عن التفاصيل مرة أخرى للحصول على عنوان URL جديد. تدوم روابط معاينة الصور لمدة 2 ساعة على الأكثر؛ تستمر روابط الملفات الأخرى لمدة 15 دقيقة على الأكثر.

تحتفظ مستندات ZIP بمراجع الصور النسبية الأصلية وتتضمن الصور المحفوظة، لذلك لا تعتمد تلك المراجع على توقيعات CDN. قم باستخراج الأرشيف بالكامل واحتفظ ببنية المجلد الخاص به. لا تتم أرشفة الصور البعيدة المشار إليها بواسطة إدخال HTML تلقائيًا وقد تظل تشير إلى موقع الويب المصدر.

الأخطاء والإسترجاع

تعني القيمة 0 في code النجاح. يحدد code غير الصفري فئة الخطأ، ويوضح msg السبب. تعيد استعلامات المهام الفاشلة أو المنتهية HTTP 200 مع task_failed أو result_expired وكائن results فارغ.

HTTP 402
{
  "code": "quota_exceeded",
  "data": null,
  "msg": "not enough available pages/units"
}
HTTPcodeالوصف
200task_failedفشل التحليل. راجع msg لمعرفة السبب.
200result_expiredانتهت صلاحية النتائج.
400invalid_requestالمعلمات أو الملف غير صالح. راجع msg لمعرفة السبب.
400too_many_pagesيتجاوز المستند حد الصفحات أو الوحدات القابلة للفوترة.
401unauthorizedفشلت مصادقة API.
402quota_exceededالحصة المتاحة غير كافية.
403user_disabledالحساب معطّل.
403pro_requiredيلزم اشتراك Pro فعّال.
404not_foundالمهمة غير موجودة أو لا تملك صلاحية الوصول.
413file_too_largeيتجاوز الملف حد الحجم في خطتك.
500internal_errorفشلت المعالجة على الخادم. راجع msg لمعرفة السبب.