PPT to PPTX API
POST /v2/convert/ppt/to/pptx opens a PowerPoint 97-2003 deck and saves it in the current .pptx format. The sample's 81,408-byte .ppt came back as a 26,757-byte .pptx with all six slides, the hidden one still hidden.
- Endpoint
- POST /v2/
convert/ ppt/ to/ pptx - Accepts
- ppt
- Sample timing
- 0.566 s median of 5 runsHow we measure
- Request size
- Up to 10 MB on the Free plan or 100 MB on paid plans, all files together
Request and response
Every sample below ran against the API before this page was published. Set PDFCONVERSIONAPI_KEY to your key and run it as is.
curl -sS -X POST \
https://api.pdfconversionapi.com/v2/convert/ppt/to/pptx \
-H "Authorization: Bearer $PDFCONVERSIONAPI_KEY" \
-F File=@eastgate-pantry-orientation.ppt \
-o response.json
# FileData is base64. Save the first file in converted/,
# or print the JSON error.
if jq -e '.Files' response.json > /dev/null; then
mkdir -p converted
name=$(jq -r '.Files[0].FileName' response.json)
jq -r '.Files[0].FileData' response.json \
| base64 --decode > "converted/$name"
else
cat response.json
fiimport base64
import os
import requests
key = os.environ["PDFCONVERSIONAPI_KEY"]
response = requests.post(
"https://api.pdfconversionapi.com/v2/convert/ppt/to/pptx",
headers={"Authorization": f"Bearer {key}"},
files=[
("File", open("eastgate-pantry-orientation.ppt", "rb")),
],
timeout=180,
)
result = response.json()
if not response.ok:
raise SystemExit(f"{result['Code']}: {result['Message']}")
os.makedirs("converted", exist_ok=True)
for file in result["Files"]:
path = os.path.join("converted", file["FileName"])
with open(path, "wb") as out:
out.write(base64.b64decode(file["FileData"]))
print(path, file["FileSize"], "bytes")
import { mkdir, readFile, writeFile } from "node:fs/promises";
import { join } from "node:path";
const form = new FormData();
const file = "eastgate-pantry-orientation.ppt";
form.append("File", new Blob([await readFile(file)]), file);
const url = "https://api.pdfconversionapi.com/v2/convert/ppt/to/pptx";
const key = process.env.PDFCONVERSIONAPI_KEY;
const response = await fetch(url, {
method: "POST",
headers: { Authorization: `Bearer ${key}` },
body: form,
});
const result = await response.json();
if (!response.ok) {
throw new Error(`${result.Code}: ${result.Message}`);
}
await mkdir("converted", { recursive: true });
for (const file of result.Files) {
const path = join("converted", file.FileName);
await writeFile(path, Buffer.from(file.FileData, "base64"));
console.log(path, file.FileSize, "bytes");
}
{
"ConversionCost": 1,
"ConversionTime": 0.566,
"Files": [
{
"FileName": "eastgate-pantry-orientation.pptx",
"FileExt": "pptx",
"FileSize": 26757,
"FileData": "UEsDBBQAAAgIAFt3ZF1gxYga…"
}
]
}Response from our test run on 2026-11-03. ConversionTime shows the median of 5 runs. FileData is shortened here; the real response carries the whole file as base64.
The sample, converted
The same file the code sends. Download the input and the output and compare them yourself.

- Input
- eastgate-pantry-orientation.ppt (80 KB)
- Output
- eastgate-pantry-orientation.pptx (26 KB)
- Source
- A six-slide volunteer orientation deck for a fictional food pantry, made by us and saved in the PowerPoint 97-2003 format; slide 5 is hidden and slide 3 has speaker notes. (CC0-1.0). How it was made
- Made by
- 2026-11-04, API build
9eeeb0640aba
Parameters
Send these as form fields next to the file. Names are case-insensitive. If you set one of the documented options below that we don't support yet, the request fails with a 400 that names it instead of returning a file made without it.
| Parameter | What it does |
|---|---|
Passwordstring | Documented, but encrypted .ppt files can't be opened yet: a copy of the sample saved with a password in PowerPoint returned 422 "the input file is password-protected" with the right password. With a deck that has no password it is ignored. |
FileNamestring | Name of the new deck; the extension is always .pptx. |
Not supported yet
Setting one of these to anything but its default returns 400.
| Option | What to do instead |
|---|---|
ConvertHiddenSlides | Not needed: every slide is kept, hidden ones still marked hidden. true returns 400 "ConvertHiddenSlides is not supported yet for PPT files". |
What carries over, and what doesn't
Kept
- All six slides in order, with slide 5 still hidden
- Speaker notes: the note on slide 3 is in the new deck
- The table as a real table you can edit, and the pie chart as a chart with its four values
- Pictures, here the floor plan, and the slide size of 10 × 7.5 inches
- Title, author, comments and dates from the file's properties
Lost or not yet supported
- The chart's spreadsheet. The pie chart arrives with its values in the chart part but without an embedded workbook, so there is no data sheet to open and edit.
- Unused layouts. The new deck has one master with the three layouts its slides use (title, title and content, title only), so PowerPoint's layout menu offers just those.
- The application name stored in the file, which is set to "PDF Conversion API".
Limits
- Only PowerPoint 97-2003 .ppt files. A .pptx renamed to .ppt returns 422 "it could not be opened as PPT"; send it to
/v2/convert/pptx/to/pptxinstead. - Requests up to 10 MB on the Free plan or 100 MB on paid plans; 120 seconds per conversion before a 504.
- Macros in a deck are never run during the conversion.
- Encrypted .ppt files return 422 "the input file is password-protected" for now, even with the correct
Password.
Where teams use it
Upgrading a shared drive of old decks
Tools that read .pptx, including our other PPTX routes, can't open the binary format. Convert old files once and keep the .pptx copies next to them.
Getting decks ready for text extraction or rendering
Convert to .pptx first when the next step only reads Office Open XML. The output of the sample went straight into /v2/convert/pptx/to/png for the preview on this page.
Questions
Is anything lost when a .ppt becomes .pptx?
In our sample, no slide content: titles, bullets, the table, the pie chart, the picture, the notes and the hidden flag all came through. What changes is underneath: the chart has no embedded workbook, and the masters and layouts are rebuilt.
Why is the .pptx so much smaller than the .ppt?
The .pptx format is a ZIP archive, so its XML is compressed, while a .ppt stores records uncompressed in blocks. The sample went from 81,408 to 26,757 bytes.
Can I also convert .pps slide shows to .pptx?
Yes, at /v2/convert/pps/to/pptx. A show file keeps its timings and transitions in the new deck, which then opens for editing instead of starting the show.
Do my files stay the same on each run?
The slides and their content do, but the file can differ by a few bytes between requests, so don't compare outputs by checksum.
Convert your first PPT file in a minute.