Overview

Turn PDFs and images into structured content.

Upload a PDF, PNG, or JPEG. OpenParser can return the document's text and layout, or extract fields into a JSON shape you define.

Make a request

curl -X POST 'https://api.openparser.dev/parse' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H "Idempotency-Key: $(uuidgen 2>/dev/null || openssl rand -hex 16)" \
  -F 'request={"ocr_model":"paddleocr-vl-1.6","output_format":"openparser@1"};type=application/json' \
  -F 'file=@./document.pdf'
openparser parse sync ./document.pdf
const parsed = await client.parse.sync(
  { ocr_model: 'paddleocr-vl-1.6', output_format: 'openparser@1' },
  file,
);
from pathlib import Path

parsed = client.parse.sync(
    {"ocr_model": "paddleocr-vl-1.6", "output_format": "openparser@1"},
    file=Path("document.pdf"),
)

A completed request returns a ParsedDocument with plain text, Markdown, pages, and semantic elements. If the document needs more time, the API returns a job ID that you can poll.

Official clients cover the same API as curl: @openparser/cli, @openparser/sdk, and openparser on PyPI. Start with the client guides for installation, retries, async jobs, uploads, and typed errors.

Pick the right endpoint

GoalEndpoint
Read text and layoutPOST /parse
Extract fields into JSONPOST /extract
Start work without waitingPOST /parse/async or POST /extract/async
Process up to 100 documentsPOST /parse/batch or POST /extract/batch

Every request is scoped to the organization that owns the API key. Parse and extract requests are durable: once accepted, they continue even if your client disconnects.

On this page