---
seo_title: Conversion Matrix: Every Format Pair | EnConvert
meta_desc: Every input format EnConvert accepts and every output it produces, as one scannable table with the endpoint path and docs link for each conversion pair.
keywords: conversion matrix, supported conversions, file conversion endpoints, convert api endpoint list, input output format matrix, image conversion endpoints, document to pdf endpoints, data format conversion endpoints
---

# 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.

<div class="alert alert-info">
<strong>Two endpoints accept many inputs at once.</strong> <code>anything-to-pdf</code> takes 36 file extensions and always returns a PDF; <code>anything-to-markdown</code> takes 22 and always returns one UTF-8 <code>.md</code> file.
Both are listed once in the Documents table below rather than repeated for every input type they cover.
</div>

## 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 | PDF | `POST /v1/convert/url-to-pdf` | [url-to-pdf](/docs/endpoints/convert/web-pages/url-to-pdf.md) |
| URL | PNG screenshot | `POST /v1/convert/url-to-screenshot` | [url-to-screenshot](/docs/endpoints/convert/web-pages/url-to-screenshot.md) |
| URL | Markdown | `POST /v1/convert/url-to-markdown` | [url-to-markdown](/docs/endpoints/convert/web-pages/url-to-markdown.md) |
| Website (crawled or from `sitemap.xml`) | ZIP of PDFs | `POST /v1/convert/website-to-pdf` | [website-to-pdf](/docs/endpoints/convert/web-pages/website-to-pdf.md) |
| Website (crawled or from `sitemap.xml`) | ZIP of PNGs | `POST /v1/convert/website-to-screenshot` | [website-to-screenshot](/docs/endpoints/convert/web-pages/website-to-screenshot.md) |

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) | PDF | `POST /v1/convert/anything-to-pdf` | [anything-to-pdf](/docs/endpoints/convert/documents/anything-to-pdf.md) |
| 22 file types (PDF, Office, OpenDocument, RTF, CSV, HTML, Markdown, text, EPUB) | Markdown | `POST /v1/convert/anything-to-markdown` | [anything-to-markdown](/docs/endpoints/convert/documents/anything-to-markdown.md) |
| HTML (`.html`, `.htm`) | PDF | `POST /v1/convert/html-to-pdf` | [html-to-pdf](/docs/endpoints/convert/documents/html-to-pdf.md) |
| Markdown (`.md`, `.markdown`) | PDF | `POST /v1/convert/markdown-to-pdf` | [markdown-to-pdf](/docs/endpoints/convert/documents/markdown-to-pdf.md) |
| Word (`.doc`, `.docx`) | PDF | `POST /v1/convert/doc-to-pdf` | [doc-to-pdf](/docs/endpoints/convert/documents/doc-to-pdf.md) |
| Excel (`.xls`, `.xlsx`) | PDF | `POST /v1/convert/excel-to-pdf` | [excel-to-pdf](/docs/endpoints/convert/documents/excel-to-pdf.md) |
| PowerPoint (`.ppt`, `.pptx`) | PDF | `POST /v1/convert/ppt-to-pdf` | [ppt-to-pdf](/docs/endpoints/convert/documents/ppt-to-pdf.md) |
| Apple Pages (`.pages`) | PDF | `POST /v1/convert/pages-to-pdf` | [pages-to-pdf](/docs/endpoints/convert/documents/pages-to-pdf.md) |
| Apple Numbers (`.numbers`) | PDF | `POST /v1/convert/numbers-to-pdf` | [numbers-to-pdf](/docs/endpoints/convert/documents/numbers-to-pdf.md) |
| OpenDocument Text (`.odt`) | PDF | `POST /v1/convert/odt-to-pdf` | [odt-to-pdf](/docs/endpoints/convert/documents/odt-to-pdf.md) |
| OpenDocument Spreadsheet (`.ods`) | PDF | `POST /v1/convert/ods-to-pdf` | [ods-to-pdf](/docs/endpoints/convert/documents/ods-to-pdf.md) |
| OpenDocument Presentation (`.odp`) | PDF | `POST /v1/convert/odp-to-pdf` | [odp-to-pdf](/docs/endpoints/convert/documents/odp-to-pdf.md) |
| OpenDocument Spreadsheet Template (`.ots`) | PDF | `POST /v1/convert/ots-to-pdf` | [ots-to-pdf](/docs/endpoints/convert/documents/ots-to-pdf.md) |

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](/docs/endpoints/convert/data-formats/json-to-xml.md) |
| XML (`.xml`) | JSON | `POST /v1/convert/xml-to-json` | [xml-to-json](/docs/endpoints/convert/data-formats/xml-to-json.md) |
| JSON (`.json`) | YAML | `POST /v1/convert/json-to-yaml` | [json-to-yaml](/docs/endpoints/convert/data-formats/json-to-yaml.md) |
| YAML (`.yaml`, `.yml`) | JSON | `POST /v1/convert/yaml-to-json` | [yaml-to-json](/docs/endpoints/convert/data-formats/yaml-to-json.md) |
| JSON (`.json`) | CSV | `POST /v1/convert/json-to-csv` | [json-to-csv](/docs/endpoints/convert/data-formats/json-to-csv.md) |
| CSV (`.csv`) | JSON | `POST /v1/convert/csv-to-json` | [csv-to-json](/docs/endpoints/convert/data-formats/csv-to-json.md) |
| JSON (`.json`) | TOML | `POST /v1/convert/json-to-toml` | [json-to-toml](/docs/endpoints/convert/data-formats/json-to-toml.md) |
| TOML (`.toml`) | JSON | `POST /v1/convert/toml-to-json` | [toml-to-json](/docs/endpoints/convert/data-formats/toml-to-json.md) |
| CSV (`.csv`) | XML | `POST /v1/convert/csv-to-xml` | [csv-to-xml](/docs/endpoints/convert/data-formats/csv-to-xml.md) |
| XML (`.xml`) | CSV | `POST /v1/convert/xml-to-csv` | [xml-to-csv](/docs/endpoints/convert/data-formats/xml-to-csv.md) |
| Markdown (`.md`, `.markdown`) | HTML | `POST /v1/convert/markdown-to-html` | [markdown-to-html](/docs/endpoints/convert/data-formats/markdown-to-html.md) |

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](/docs/endpoints/convert/images/jpeg-to-png.md) |
| PNG | JPEG | `POST /v1/convert/png-to-jpeg` | [png-to-jpeg](/docs/endpoints/convert/images/png-to-jpeg.md) |
| JPEG | SVG | `POST /v1/convert/jpeg-to-svg` | [jpeg-to-svg](/docs/endpoints/convert/images/jpeg-to-svg.md) |
| SVG | JPEG | `POST /v1/convert/svg-to-jpeg` | [svg-to-jpeg](/docs/endpoints/convert/images/svg-to-jpeg.md) |
| JPEG | HEIC | `POST /v1/convert/jpeg-to-heic` | [jpeg-to-heic](/docs/endpoints/convert/images/jpeg-to-heic.md) |
| HEIC | JPEG | `POST /v1/convert/heic-to-jpeg` | [heic-to-jpeg](/docs/endpoints/convert/images/heic-to-jpeg.md) |
| JPEG | WebP | `POST /v1/convert/jpeg-to-webp` | [jpeg-to-webp](/docs/endpoints/convert/images/jpeg-to-webp.md) |
| WebP | JPEG | `POST /v1/convert/webp-to-jpeg` | [webp-to-jpeg](/docs/endpoints/convert/images/webp-to-jpeg.md) |
| PNG | SVG | `POST /v1/convert/png-to-svg` | [png-to-svg](/docs/endpoints/convert/images/png-to-svg.md) |
| SVG | PNG | `POST /v1/convert/svg-to-png` | [svg-to-png](/docs/endpoints/convert/images/svg-to-png.md) |
| PNG | HEIC | `POST /v1/convert/png-to-heic` | [png-to-heic](/docs/endpoints/convert/images/png-to-heic.md) |
| HEIC | PNG | `POST /v1/convert/heic-to-png` | [heic-to-png](/docs/endpoints/convert/images/heic-to-png.md) |
| PNG | WebP | `POST /v1/convert/png-to-webp` | [png-to-webp](/docs/endpoints/convert/images/png-to-webp.md) |
| WebP | PNG | `POST /v1/convert/webp-to-png` | [webp-to-png](/docs/endpoints/convert/images/webp-to-png.md) |
| SVG | HEIC | `POST /v1/convert/svg-to-heic` | [svg-to-heic](/docs/endpoints/convert/images/svg-to-heic.md) |
| HEIC | SVG | `POST /v1/convert/heic-to-svg` | [heic-to-svg](/docs/endpoints/convert/images/heic-to-svg.md) |
| SVG | WebP | `POST /v1/convert/svg-to-webp` | [svg-to-webp](/docs/endpoints/convert/images/svg-to-webp.md) |
| WebP | SVG | `POST /v1/convert/webp-to-svg` | [webp-to-svg](/docs/endpoints/convert/images/webp-to-svg.md) |
| HEIC | WebP | `POST /v1/convert/heic-to-webp` | [heic-to-webp](/docs/endpoints/convert/images/heic-to-webp.md) |
| WebP | HEIC | `POST /v1/convert/webp-to-heic` | [webp-to-heic](/docs/endpoints/convert/images/webp-to-heic.md) |
| PDF | JPEG, or a ZIP of JPEGs | `POST /v1/convert/pdf-to-jpeg` | [pdf-to-jpeg](/docs/endpoints/convert/images/pdf-to-jpeg.md) |
| PNG, JPEG or WebP | Same format as the input | `POST /v1/convert/compress-image` | [compress-image](/docs/endpoints/convert/images/compress-image.md) |

Three details to code around:

- The four `*-to-svg` endpoints 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-jpeg` returns a raw JPEG for a single-page PDF and a ZIP of `page_1.jpeg` onward for a multi-page one, so write your client to handle both.
- `compress-image` keeps the input format. PNG in, PNG out.

<div class="alert alert-warning">
<strong>Uploads are capped per plan.</strong> A file over your plan's ceiling returns <code>413</code> before any conversion work starts. The per-plan sizes are on <a href="/docs/reference/rate-limits">Rate Limits and Quotas</a>.
</div>

## Not listed here?

Two places to look next.

[Supported Formats](/docs/reference/supported-formats.md) 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](/docs/endpoints/perceive.md) 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.
