Conversion Matrix#
All 51 conversion endpoints in one place: what each one takes in, what it hands back, and where its reference page is. Find your input in the left column, copy the path from the middle, click through for parameters and code samples. A pair that is not in these tables is not supported.
anything-to-pdf takes 36 file extensions and always returns a PDF; anything-to-markdown takes 22 and always returns one UTF-8 .md file.
Both are listed once in the Documents table below rather than repeated for every input type they cover.
Web Pages#
Five endpoints that render a live URL in a real browser. These take a JSON body, not a file upload.
| Input | Output | Endpoint | Docs |
|---|---|---|---|
| URL | POST /v1/convert/url-to-pdf |
url-to-pdf | |
| URL | PNG screenshot | POST /v1/convert/url-to-screenshot |
url-to-screenshot |
| URL | Markdown | POST /v1/convert/url-to-markdown |
url-to-markdown |
Website (crawled or from sitemap.xml) |
ZIP of PDFs | POST /v1/convert/website-to-pdf |
website-to-pdf |
Website (crawled or from sitemap.xml) |
ZIP of PNGs | POST /v1/convert/website-to-screenshot |
website-to-screenshot |
The three url-to-* endpoints accept a single URL string or a list, and run synchronously for one URL. The two website-to-* endpoints discover the pages themselves and are async only: they always answer 202 with a batch_id and an output_format of zip. Screenshots are PNG; there is no JPEG screenshot option.
Documents#
Thirteen endpoints, each a multipart/form-data upload with the document in the file field.
| Input | Output | Endpoint | Docs |
|---|---|---|---|
| 36 file types (Office, iWork, OpenDocument, RTF, CSV, HTML, Markdown, text, EPUB, images, SVG, PDF) | POST /v1/convert/anything-to-pdf |
anything-to-pdf | |
| 22 file types (PDF, Office, OpenDocument, RTF, CSV, HTML, Markdown, text, EPUB) | Markdown | POST /v1/convert/anything-to-markdown |
anything-to-markdown |
HTML (.html, .htm) |
POST /v1/convert/html-to-pdf |
html-to-pdf | |
Markdown (.md, .markdown) |
POST /v1/convert/markdown-to-pdf |
markdown-to-pdf | |
Word (.doc, .docx) |
POST /v1/convert/doc-to-pdf |
doc-to-pdf | |
Excel (.xls, .xlsx) |
POST /v1/convert/excel-to-pdf |
excel-to-pdf | |
PowerPoint (.ppt, .pptx) |
POST /v1/convert/ppt-to-pdf |
ppt-to-pdf | |
Apple Pages (.pages) |
POST /v1/convert/pages-to-pdf |
pages-to-pdf | |
Apple Numbers (.numbers) |
POST /v1/convert/numbers-to-pdf |
numbers-to-pdf | |
OpenDocument Text (.odt) |
POST /v1/convert/odt-to-pdf |
odt-to-pdf | |
OpenDocument Spreadsheet (.ods) |
POST /v1/convert/ods-to-pdf |
ods-to-pdf | |
OpenDocument Presentation (.odp) |
POST /v1/convert/odp-to-pdf |
odp-to-pdf | |
OpenDocument Spreadsheet Template (.ots) |
POST /v1/convert/ots-to-pdf |
ots-to-pdf |
The engine differs by input, and that changes what pdf_options will accept. HTML and Markdown go through WeasyPrint and support page size, orientation, margins, headers and footers. The nine LibreOffice-backed endpoints (doc, excel, ppt, odt, ods, odp, ots, pages, numbers) take page geometry from the source document, so they honour grayscale only and return 400 if you set a geometry option explicitly.
Data Formats#
Eleven endpoints, all synchronous multipart/form-data uploads. The extension of the file you send has to match the endpoint you send it to.
| Input | Output | Endpoint | Docs |
|---|---|---|---|
JSON (.json) |
XML | POST /v1/convert/json-to-xml |
json-to-xml |
XML (.xml) |
JSON | POST /v1/convert/xml-to-json |
xml-to-json |
JSON (.json) |
YAML | POST /v1/convert/json-to-yaml |
json-to-yaml |
YAML (.yaml, .yml) |
JSON | POST /v1/convert/yaml-to-json |
yaml-to-json |
JSON (.json) |
CSV | POST /v1/convert/json-to-csv |
json-to-csv |
CSV (.csv) |
JSON | POST /v1/convert/csv-to-json |
csv-to-json |
JSON (.json) |
TOML | POST /v1/convert/json-to-toml |
json-to-toml |
TOML (.toml) |
JSON | POST /v1/convert/toml-to-json |
toml-to-json |
CSV (.csv) |
XML | POST /v1/convert/csv-to-xml |
csv-to-xml |
XML (.xml) |
CSV | POST /v1/convert/xml-to-csv |
xml-to-csv |
Markdown (.md, .markdown) |
HTML | POST /v1/convert/markdown-to-html |
markdown-to-html |
Inputs must be UTF-8. There is no round-trip guarantee across a pair of endpoints: XML and CSV do not carry JSON's type information, so JSON to CSV and back returns strings.
Images#
Twenty-two endpoints, all multipart/form-data uploads. JPEG input covers .jpg and .jpeg, and HEIC input covers .heic and .heif.
| Input | Output | Endpoint | Docs |
|---|---|---|---|
| JPEG | PNG | POST /v1/convert/jpeg-to-png |
jpeg-to-png |
| PNG | JPEG | POST /v1/convert/png-to-jpeg |
png-to-jpeg |
| JPEG | SVG | POST /v1/convert/jpeg-to-svg |
jpeg-to-svg |
| SVG | JPEG | POST /v1/convert/svg-to-jpeg |
svg-to-jpeg |
| JPEG | HEIC | POST /v1/convert/jpeg-to-heic |
jpeg-to-heic |
| HEIC | JPEG | POST /v1/convert/heic-to-jpeg |
heic-to-jpeg |
| JPEG | WebP | POST /v1/convert/jpeg-to-webp |
jpeg-to-webp |
| WebP | JPEG | POST /v1/convert/webp-to-jpeg |
webp-to-jpeg |
| PNG | SVG | POST /v1/convert/png-to-svg |
png-to-svg |
| SVG | PNG | POST /v1/convert/svg-to-png |
svg-to-png |
| PNG | HEIC | POST /v1/convert/png-to-heic |
png-to-heic |
| HEIC | PNG | POST /v1/convert/heic-to-png |
heic-to-png |
| PNG | WebP | POST /v1/convert/png-to-webp |
png-to-webp |
| WebP | PNG | POST /v1/convert/webp-to-png |
webp-to-png |
| SVG | HEIC | POST /v1/convert/svg-to-heic |
svg-to-heic |
| HEIC | SVG | POST /v1/convert/heic-to-svg |
heic-to-svg |
| SVG | WebP | POST /v1/convert/svg-to-webp |
svg-to-webp |
| WebP | SVG | POST /v1/convert/webp-to-svg |
webp-to-svg |
| HEIC | WebP | POST /v1/convert/heic-to-webp |
heic-to-webp |
| WebP | HEIC | POST /v1/convert/webp-to-heic |
webp-to-heic |
| JPEG, or a ZIP of JPEGs | POST /v1/convert/pdf-to-jpeg |
pdf-to-jpeg | |
| PNG, JPEG or WebP | Same format as the input | POST /v1/convert/compress-image |
compress-image |
Three details to code around:
- The four
*-to-svgendpoints do not vectorize. They base64-encode the raster image into an SVG<image>element sized to the original pixels, which adds roughly 33% to the file size. pdf-to-jpegreturns a raw JPEG for a single-page PDF and a ZIP ofpage_1.jpegonward for a multi-page one, so write your client to handle both.compress-imagekeeps the input format. PNG in, PNG out.
413 before any conversion work starts. The per-plan sizes are on Rate Limits and Quotas.
Not listed here?#
Two places to look next.
Supported Formats has the raw extension lists rather than the pairs, including all 36 inputs anything-to-pdf accepts and all 22 that anything-to-markdown accepts.
Perceive is the endpoint for reading a page rather than converting it. One render of a URL returns Markdown, cleaned HTML, a screenshot, a PDF, the link and image inventory, and structured data together, which is usually what you want for an agent or a RAG pipeline.
Some missing pairs are still reachable in two steps or through a catch-all. There is no png-to-pdf endpoint, for example, but anything-to-pdf accepts .png and returns a single-page PDF. What does not exist at all is OCR, audio and video conversion. That is also why sending an image to anything-to-markdown returns 400: there is no text layer to read and no OCR pass behind it.