Skip to content

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.

curl https://indox.org/api/v1/pdf_handler/formats/
{
  "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 / ymljson 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 pdfpdf, 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.