Skip to main content
POST
Upload a document and receive it as a single Markdown string plus a flat list of content blocks in reading order. Accepts a single PDF or image (.pdf, .png, .jpg, .jpeg). PDFs are parsed page by page; an image is treated as a single page.

Authentication

string
required
Your API key as a bearer token: Bearer sk-pr-....

Request

Send the document as multipart/form-data.
file
required
The document to parse. Must be a PDF or image (.pdf, .png, .jpg, .jpeg), up to 50 pages.
string
default:"mineru2.5-pro-2605"
The parsing model to use. mineru2.5-pro-2605 is currently the only option and is used by default if omitted.Models are versioned and never change behavior once released. For production, we recommend pinning this explicitly so a future default model never alters your results without you opting in.

Coming soon

These options are planned but not yet available – the endpoint doesn’t accept them today, and the features they control are currently off. The response fields they populate (text_level, img_path, content) are still returned on every block, but are always null for now.
boolean
Coming soon. Detect heading levels. When available, title blocks will carry a text_level (1–4) and headings will render with matching # depth in markdown. Today, titles are returned flat.
boolean
Coming soon. Crop images, tables, and charts to hosted storage and return their URLs as img_path on the relevant blocks (and as image links in markdown). Today, those blocks carry no URL.
boolean
Coming soon. Generate a short text description of each image and chart block, returned as content. Today, no description is generated.

Response

string
The whole document rendered as a single Markdown string – headings, with tables and equations inline. (Per-level heading depth and hosted image links are coming soon – see title_levels and extract_images.)
integer
The number of pages parsed. 1 for an image.
object[]
A flat list of content blocks in reading order across the whole document (this mirrors MinerU’s content_list). Every block carries the full set of fields below; which ones are populated depends on type (the rest are null). Additional fields (e.g. captions and footnotes) may also appear and are passed through as-is.

Errors

ParseRouter uses standard HTTP status codes. Error responses have the shape { "detail": "..." }.
You’re only charged for successful parses (200). Failed requests – including 400, 413, and 503 – never consume credits.