Document Formats¶
GET /api/v1/pdf_handler/formats/ is the authoritative list of what the running
deployment can convert. Read it at runtime rather than hard-coding a table —
routes are filtered to the ones the deployment can actually perform.
{
"service": "doc",
"engines": {
"pandoc": {
"group": "pandoc",
"credits": 1,
"inputs": ["html", "md", "rst", "tex", "txt"],
"outputs": ["docx", "html", "md", "odt", "pdf", "rst", "rtf", "tex", "txt"]
}
}
}
| Field | Meaning |
|---|---|
service |
Always doc for this API. |
engines |
One entry per converter, with its own inputs and outputs. Abridged above; the live response lists them all. |
total_formats |
How many distinct formats the catalog covers. |
total_routes |
How many input → output routes it covers. |
Both totals depend on which converters a deployment has available, so read them rather than assuming a number.
Format families¶
Conversions are grouped by the engine that performs them. Formats are named by extension, without the dot, and are case-insensitive.
Office and OpenDocument¶
Inputs: abw, csv, doc, docx, htm, html, lwp, odg, odp, ods,
odt, pdf, pps, ppsx, ppt, pptm, pptx, rtf, tsv, txt, wpd,
wps, xls, xlsx, zabw
Outputs: csv, doc, docx, html, odp, ods, odt, pdf, ppt,
pptx, rtf, tsv, txt, xls, xlsx
Lightweight markup¶
Inputs: html, md, rst, tex, txt
Outputs: docx, html, md, odt, pdf, rst, rtf, tex, txt
Ebooks¶
Inputs: azw, azw3, azw4, cbc, cbr, cbz, chm, docx, epub,
fb2, htm, html, htmlz, lit, lrf, mobi, odt, pdb, pdf,
pml, prc, rb, rtf, snb, tcr, txt, txtz
Outputs: azw3, epub, lrf, mobi, oeb, pdb, pdf, rtf, txt
Archives¶
Inputs: 7z, ace, alz, arc, arj, bz, bz2, cab, cpio, deb,
dmg, gz, img, iso, jar, lha, lz, lzma, lzo, rar, rpm,
rz, tar, tar.7z, tar.bz, tar.bz2, tar.gz, tar.lzo, tar.xz,
tar.z, tbz, tbz2, tgz, tz, tzo, xz, z, zip
Outputs: 7z, rar, tar, tar.bz2, tar.gz, zip
Fonts¶
Inputs and outputs: eot, otf, ttf, woff, woff2
The dedicated Font Conversion API covers more formats and adds a validation endpoint.
Images¶
Inputs: jpg, jpeg, png — Output: pdf
Data and API specs¶
yaml / yml → json or md, and an OpenAPI/Swagger document → Markdown
reference (swagger-md).
Checking one pair before you convert¶
GET /operations/?input=docx&output=pdf reports which engines can perform a
pair, what each costs in credits, and which one runs by default.
{
"specVersion": "2025-01",
"data": [
{
"operation": "convert",
"input_format": "docx",
"output_format": "pdf",
"engine": "libreoffice",
"credits": 1,
"default": true,
"options": [],
"meta": { "group": "office" }
}
]
}
An empty data array means the pair is not available — POST /convert/ would
answer 400 unsupported_conversion. For pdf → pdf, options lists every
PDF operation you can pass; see Editing a PDF.
Detected, not trusted¶
The uploaded bytes are inspected, not just the filename. A file whose contents
do not match its extension is rejected with 400 file_content_mismatch,
reporting both the claimed and the detected type.