DOT to TIFF API
POST /v2/convert/dot/to/tiff returns a separate TIFF for each page of a Word 97-2003 template. The files are stored without compression, so the sample asks for ImageResolution=60 and ColorSpace=gray: two 510 × 660 grayscale pages of 336,798 bytes each.
- Endpoint
- POST /v2/
convert/ dot/ to/ tiff - Accepts
- dot
- Sample timing
- 0.552 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/dot/to/tiff \
-H "Authorization: Bearer $PDFCONVERSIONAPI_KEY" \
-F File=@meeting-minutes.dot \
--form-string ImageResolution=60 \
--form-string ColorSpace=gray \
-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/dot/to/tiff",
headers={"Authorization": f"Bearer {key}"},
files=[("File", open("meeting-minutes.dot", "rb"))],
data={
"ImageResolution": "60",
"ColorSpace": "gray",
},
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 = "meeting-minutes.dot";
form.append("File", new Blob([await readFile(file)]), file);
form.append("ImageResolution", "60");
form.append("ColorSpace", "gray");
const url = "https://api.pdfconversionapi.com/v2/convert/dot/to/tiff";
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.552,
"Files": [
{
"FileName": "meeting-minutes-1.tiff",
"FileExt": "tiff",
"FileSize": 336798,
"FileData": "SUkqAPAiBQA8AAAAAQAAADwA…"
},
{
"FileName": "meeting-minutes-2.tiff",
"FileExt": "tiff",
"FileSize": 336798,
"FileData": "SUkqAPAiBQA8AAAAAQAAADwA…"
}
]
}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
- meeting-minutes.dot (29 KB)
- Output
- meeting-minutes-1.tiff (329 KB)meeting-minutes-2.tiff (329 KB)
- Source
- A two-page meeting minutes template for a fictional neighborhood association, written for this site and saved as a Word 97-2003 template, with fill-in tables and bracketed placeholders. (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 |
|---|---|
ImageResolutioninteger, default 150 | Resolution of the drawing, stored in the TIFF as pixels per inch when sent. Size grows with its square: a color page is 6,311,516 bytes at the default 150 and 2,805,234 at 100.Values: 36–600 |
ColorSpaceenum, default default | gray stores one 8-bit channel instead of three, a third of the size (336,798 bytes per page at 60 DPI against 1,010,026 in color); monochrome also stores one channel, with only the values 0 and 255; rgb gives the same three-channel pages as the default.Values: default, rgb, gray, monochrome |
MultiPageboolean, default false | true puts every page in one LZW-compressed TIFF, meeting-minutes.tiff: with the sample's settings that file is 26,095 bytes, against 336,798 for each separate page. ConvertAPI does not document it for DOT to TIFF, so one uncompressed file per page stays the default. |
PageRangestring | Which pages to render. PageRange=2 returns meeting-minutes-2.tiff alone; 3 returns 400 with the page count.Values: e.g. 1, 2, 1-2 |
ImageWidthinteger | Scale pages to this many pixels wide: at 400 a color page is 621,810 bytes.Values: 1–20,000 |
ImageHeightinteger | Scale pages to this height instead.Values: 1–20,000 |
TransparentColorstring | Adds an alpha channel to color output and clears it for one exact color; white makes 94% of page 1 transparent at 150 DPI, and the fourth channel makes the page 8,415,286 bytes. |
BackgroundColorstring | Color painted under the unpainted template paper; white by default. |
Passwordstring | Opens a protected Word 97-2003 template. |
FileNamestring | Stem for the page files, such as minutes for minutes-1.tiff. |
StoreFileboolean, default false | Return links valid for 3 hours instead of the TIFF data. |
Not supported yet
Setting one of these to anything but its default returns 400.
| Option | What to do instead |
|---|---|
IncludeMarkup | true returns 400 "IncludeMarkup is not supported yet for DOT files". |
UpdateTableOfContents | true returns 400 for DOT files. |
What carries over, and what doesn't
Kept
- Each page as its own file:
meeting-minutes-1.tiffandmeeting-minutes-2.tiff - The DPI you asked for, in the resolution tags (60 pixels per inch in the sample)
- In grayscale, 254 distinct gray levels on page 1, enough for the gray placeholders and the shaded header rows to stay readable
- The header, logo, tables and the "Minutes template, page 1 of 2" footer
Lost or not yet supported
- Compression, unless you send
MultiPage=true. Separate pages are stored raw, which is why a color page at 150 DPI is over 6 MB. - A single file by default: each page comes back on its own unless you ask for
MultiPage=true. - Color, in the sample, because it asks for gray; leave
ColorSpaceout for full RGB pages.
Limits
- At most 2,000 pages per request; above that, 413.
- 16,000 pixels per side and 100 million pixels per page.
- Requests up to 10 MB on the Free plan or 100 MB on paid plans, all files and fields together; 120 seconds per conversion, then 504.
Where teams use it
Loading blank forms into imaging systems
Capture and imaging systems that are set up with sample pages of each form often take TIFF. One image per page of the template matches how they register page layouts.
Printing services that want raster pages
Some print and mail vendors take one TIFF per page. Send the template with ImageResolution=300 for print quality, and expect large files because they are not compressed.
Questions
How do I get one multi-page TIFF?
Send MultiPage=true. ConvertAPI does not document MultiPage for DOT to TIFF, so one file per page stays the default, but with the option the sample's two pages come back as frames of meeting-minutes.tiff, compressed with LZW.
Why are the files so large?
They are uncompressed: width × height × channels bytes plus a small header. At 150 DPI a Letter page is 1,275 × 1,650 pixels with three channels, 6.3 MB. Grayscale cuts that to a third, and lower ImageResolution cuts it further.
Is monochrome output a 1-bit fax TIFF?
No. Every pixel is black or white, but it is stored as one byte, not one bit, and without CCITT compression. Systems that need Group 4 fax images will have to convert the file again.
Convert your first DOT file in a minute.