Install
openclaw skills install upstage-document-parseParse documents (PDF, images, DOCX, PPTX, XLSX, HWP) using Upstage Document Parse API. Extracts text, tables, figures, and layout elements with bounding boxe...
openclaw skills install upstage-document-parseExtract structured content from documents using Upstage's Document Parse API.
PDF (up to 1000 pages with async), PNG, JPG, JPEG, TIFF, BMP, GIF, WEBP, DOCX, PPTX, XLSX, HWP
clawhub install upstage-document-parse
openclaw config set skills.entries.upstage-document-parse.apiKey "your-api-key"
Or add to ~/.openclaw/openclaw.json:
{
"skills": {
"entries": {
"upstage-document-parse": {
"apiKey": "your-api-key"
}
}
}
}
Just ask the agent to parse your document:
"Parse this PDF: ~/Documents/report.pdf"
"Parse: ~/Documents/report.jpg"
For small documents (recommended < 20 pages).
| Parameter | Type | Default | Description |
|---|---|---|---|
model | string | required | Use document-parse (latest) or document-parse-nightly |
document | file | required | Document file to parse |
mode | string | standard | standard (text-focused), enhanced (complex tables/images), auto |
ocr | string | auto | auto (images only) or force (always OCR) |
output_formats | string | ['html'] | text, html, markdown (array format) |
coordinates | boolean | true | Include bounding box coordinates |
base64_encoding | string | [] | Elements to base64: ["table"], ["figure"], etc. |
chart_recognition | boolean | true | Convert charts to tables (Beta) |
merge_multipage_tables | boolean | false | Merge tables across pages (Beta, max 20 pages if true) |
curl -X POST "https://api.upstage.ai/v1/document-digitization" \
-H "Authorization: Bearer $UPSTAGE_API_KEY" \
-F "document=@/path/to/file.pdf" \
-F "model=document-parse"
curl -X POST "https://api.upstage.ai/v1/document-digitization" \
-H "Authorization: Bearer $UPSTAGE_API_KEY" \
-F "document=@report.pdf" \
-F "model=document-parse" \
-F "output_formats=['markdown']"
curl -X POST "https://api.upstage.ai/v1/document-digitization" \
-H "Authorization: Bearer $UPSTAGE_API_KEY" \
-F "document=@complex.pdf" \
-F "model=document-parse" \
-F "mode=enhanced" \
-F "output_formats=['html', 'markdown']"
curl -X POST "https://api.upstage.ai/v1/document-digitization" \
-H "Authorization: Bearer $UPSTAGE_API_KEY" \
-F "document=@scan.pdf" \
-F "model=document-parse" \
-F "ocr=force"
curl -X POST "https://api.upstage.ai/v1/document-digitization" \
-H "Authorization: Bearer $UPSTAGE_API_KEY" \
-F "document=@invoice.pdf" \
-F "model=document-parse" \
-F "base64_encoding=['table']"
{
"api": "2.0",
"model": "document-parse-251217",
"content": {
"html": "<h1>...</h1>",
"markdown": "# ...",
"text": "..."
},
"elements": [
{
"id": 0,
"category": "heading1",
"content": { "html": "...", "markdown": "...", "text": "..." },
"page": 1,
"coordinates": [{"x": 0.06, "y": 0.05}, ...]
}
],
"usage": { "pages": 1 }
}
paragraph, heading1, heading2, heading3, list, table, figure, chart, equation, caption, header, footer, index, footnote
For documents up to 1000 pages. Documents are processed in batches of 10 pages.
curl -X POST "https://api.upstage.ai/v1/document-digitization/async" \
-H "Authorization: Bearer $UPSTAGE_API_KEY" \
-F "document=@large.pdf" \
-F "model=document-parse" \
-F "output_formats=['markdown']"
Response:
{"request_id": "uuid-here"}
curl "https://api.upstage.ai/v1/document-digitization/requests/{request_id}" \
-H "Authorization: Bearer $UPSTAGE_API_KEY"
Response includes download_url for each batch (available for 30 days).
curl "https://api.upstage.ai/v1/document-digitization/requests" \
-H "Authorization: Bearer $UPSTAGE_API_KEY"
submitted: Request receivedstarted: Processing in progresscompleted: Ready for downloadfailed: Error occurred (check failure_message)import requests
api_key = "up_xxx"
# Sync
with open("doc.pdf", "rb") as f:
response = requests.post(
"https://api.upstage.ai/v1/document-digitization",
headers={"Authorization": f"Bearer {api_key}"},
files={"document": f},
data={"model": "document-parse", "output_formats": "['markdown']"}
)
print(response.json()["content"]["markdown"])
# Async for large docs
with open("large.pdf", "rb") as f:
r = requests.post(
"https://api.upstage.ai/v1/document-digitization/async",
headers={"Authorization": f"Bearer {api_key}"},
files={"document": f},
data={"model": "document-parse"}
)
request_id = r.json()["request_id"]
# Poll for results
import time
while True:
status = requests.get(
f"https://api.upstage.ai/v1/document-digitization/requests/{request_id}",
headers={"Authorization": f"Bearer {api_key}"}
).json()
if status["status"] == "completed":
break
time.sleep(5)
from langchain_upstage import UpstageDocumentParseLoader
loader = UpstageDocumentParseLoader(
file_path="document.pdf",
output_format="markdown",
ocr="auto"
)
docs = loader.load()
You can also set the API key as an environment variable:
export UPSTAGE_API_KEY="your-api-key"
mode=enhanced for complex tables, charts, imagesmode=auto to let API decide per pageocr=force for scanned PDFs or imagesmerge_multipage_tables=true combines split tables (max 20 pages with enhanced mode)