HWP and HWPX conversion API and MCP tools
Read Korean word-processor documents (HWP 5.x and HWPX) from code or an AI assistant: plain text with structure, Markdown, or an editable DOCX. Korean government forms, notices and contracts are often only published as HWP; these endpoints turn them into formats your code and models can use.
Endpoints
| Endpoint | Returns |
|---|---|
POST /v1/hwp/text | JSON: text, and blocks in reading order (paragraphs; tables with rows, cells and merged ranges; tables inside table cells), stats (sections, paragraphs, tables, pages) |
POST /v1/hwp/markdown | JSON: markdown (paragraphs, tables as Markdown tables) |
POST /v1/hwp/docx | JSON: outputs[0] with the DOCX as base64 (paragraphs and tables) |
POST /v1/hwp/pdf | Not available on the server (error browser_only). Page rendering needs fonts and runs in the browser: HWP to PDF |
curl -X POST https://toolsthatdontupload.com/v1/hwp/markdown \
-H "X-API-Key: YOUR_KEY" -F file=@notice.hwp
Or JSON: {"name": "notice.hwp", "base64": "..."}.
OpenAPI description: /openapi/files.json.
MCP
The MCP server has hwp_to_markdown, hwp_to_text and hwp_to_docx with the arguments name and base64 (up to 10 MB).
Plugins for MarkItDown and Docling
Open-source (MIT) plugins let MarkItDown and Docling read .hwp and .hwpx files through this API. With the API backend the document is sent to our server, as described under "Limits, cost and your files"; with TTDU_HWP_BACKEND=local the plugins call the offline local runner on the same computer instead, and the document stays there. Source, settings and error types: github.com/etacbae6768-a11y/ttdu-hwp-plugins.
pip install markitdown-ttdu-hwp # MarkItDown
markitdown --use-plugins notice.hwp
pip install docling-ttdu-hwp # Docling
What is kept
- Body paragraphs in order, line breaks and tabs, and tables with merged cells (merged positions are empty). Tables inside table cells come right after their parent table.
- Not kept: layout, fonts, colors, images and drawings. Headers, footers, footnotes and text boxes may be missing. Use the browser tools for a faithful page view.
- Encrypted, distribution-protected (DRM) or damaged documents return 422 with a code (
unsupported,invalid_input) or 413 when a damaged file asks for more memory than allowed.
Limits, cost and your files
One conversion counts as one file call: one of the 20 free file calls a day for a key (otherwise 60 credits), or one of 20 calls a day per IP address without a key. One file up to 15 MB (10 MB through MCP). Your document is sent to our server (a Cloudflare Worker) and processed in memory for that one request; we do not store the document or the result. The usual minimal request record applies (privacy policy).
Tested
On 2026-11-07, 51 sample files (5 real public documents, 1 ministry handbook, 40 generated documents with tables, 5 broken or encrypted files): the server gave exactly the same text and structure as our browser tool in all 46 readable files and the same error code in all 5 others. Against an independent reader the text agreed in 99.9 to 100% of characters, and the 40 generated documents matched their known paragraphs and tables exactly.
Notices
Built with @rhwp/core 0.8.6 (MIT); see licenses. This product was developed with reference to the HWP document file (.hwp) specification published by Hancom Inc. Hangul Word Processor (HWP) is a trademark of Hancom Inc. This service is not affiliated with Hancom.