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.
Parse a document
Make your first request with curl.
Extract structured data
Return JSON that matches your schema.
openparser@1 schema
Reference for @openparser/schema types.
API reference
Interactive endpoint docs and schemas.
Use a client library
HTTP, CLI, TypeScript, and Python guides.
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.pdfconst 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
| Goal | Endpoint |
|---|---|
| Read text and layout | POST /parse |
| Extract fields into JSON | POST /extract |
| Start work without waiting | POST /parse/async or POST /extract/async |
| Process up to 100 documents | POST /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.