VSD to TIFF API
POST a VSD to /v2/convert/vsd/to/tiff and get TIFF images of its pages: one multi-page TIFF for a drawing with several pages, a plain TIFF for one page. The sample sends ImageResolution=72 and ColorSpace=gray to keep its single A4 page to 500,593 bytes.
- Endpoint
- POST /v2/
convert/ vsd/ to/ tiff - Accepts
- vsd
- Sample timing
- 0.479 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/vsd/to/tiff \
-H "Authorization: Bearer $PDFCONVERSIONAPI_KEY" \
-F File=@single-shape.vsd \
--form-string ImageResolution=72 \
--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/vsd/to/tiff",
headers={"Authorization": f"Bearer {key}"},
files=[("File", open("single-shape.vsd", "rb"))],
data={
"ImageResolution": "72",
"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 = "single-shape.vsd";
form.append("File", new Blob([await readFile(file)]), file);
form.append("ImageResolution", "72");
form.append("ColorSpace", "gray");
const url = "https://api.pdfconversionapi.com/v2/convert/vsd/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.479,
"Files": [
{
"FileName": "single-shape-1.tiff",
"FileExt": "tiff",
"FileSize": 500593,
"FileData": "SUkqAMOiBwBIAAAAAQAAAEgA…"
}
]
}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
- single-shape.vsd (11 KB)
- Output
- single-shape-1.tiff (489 KB)
- Source
- A one-page Visio 2003-2010 drawing with a single labeled rectangle, taken from an open-source office suite's public test files (MPL-2.0); we did not make it (MPL-2.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 | DPI to draw at, written to the TIFF when sent. The sample page is 595 × 841 pixels at 72 DPI; at 150 it is 1240 × 1753.Values: 36–600 |
ColorSpaceenum, default default | gray stores a one-page TIFF as 8-bit gray: 500,593 bytes for the sample at 72 DPI. By default the page is 8-bit RGB with no alpha channel, 6,521,426 bytes at 150 DPI, and rgb returns the same file. cmyk returns 400.Values: default, rgb, gray, grayscale, monochrome |
MultiPageboolean, default true | Combines two or more pages into one LZW-compressed TIFF. With one page, as in the sample, true and false give the same file. |
ImageWidthinteger | Draw pages to this pixel width instead.Values: 1–20000 |
ImageHeightinteger | Or to this pixel height.Values: 1–20000 |
PageRangestring | Pages to include.Values: e.g. 1, 2-3, 2-last |
FileNamestring | Name stem; the sample's page is single-shape-1.tiff. |
StoreFileboolean, default false | Return a link to each stored TIFF (3 hours) rather than the bytes. |
Not supported yet
Setting one of these to anything but its default returns 400.
| Option | What to do instead |
|---|---|
PageSize | The drawing's page size is kept; PageSize returns 400 for VSD files. |
Also refused when set: PageOrientation.
What carries over, and what doesn't
Kept
- The drawing's page size at the DPI you choose: A4 at 72 DPI is 595 × 841 pixels
- The DPI recorded in the TIFF's resolution tags when
ImageResolutionis sent - Shapes and labels drawn from the vector page
- Lossless storage: the page is either raw or LZW-compressed, never lossy
Lost or not yet supported
- A one-page TIFF isn't compressed. At the default 150 DPI in color the sample page is 6,521,426 bytes, which is why the sample asks for 72 DPI and gray.
- Only drawings with two or more pages get the LZW-compressed multi-page TIFF.
- No 1-bit or CCITT fax pages.
- Text in the image isn't searchable, and it is drawn in the server's fonts (Liberation Sans for the sample's label).
Limits
- Binary VSD files, tested with the Visio 2003–2010 format.
- Up to 2,000 pages per request; a page over 16,000 pixels on a side or 100 million pixels returns 413.
ImageResolutionoutside 36–600 returns 400.- Requests up to 10 MB on the Free plan or 100 MB on paid plans, all files and fields together.
- Conversions over 120 seconds return 504.
Where teams use it
Moving old diagrams into a TIFF-based archive
Imaging and records systems that store pages as TIFF can take each legacy VSD drawing as images, at the DPI the archive uses.
Gray page images for document review
A gray TIFF at a modest DPI is small enough to load into review tools page by page while keeping labels legible.
Questions
Why is the TIFF so large without options?
A one-page drawing gives a single TIFF, and single pages are stored without compression: 1240 × 1753 pixels × 3 bytes at 150 DPI is 6.5 MB. Lower ImageResolution, add ColorSpace=gray, or use PNG when you don't need TIFF.
When do I get a multi-page TIFF?
When the drawing has two or more pages and MultiPage is left at true. Those pages are joined into one file and compressed with LZW.
Can I fix the DPI for an archive?
Yes. ImageResolution sets both the drawing resolution and the TIFF's resolution tags, so ImageResolution=200 gives a 200 DPI image of the right physical size.
Convert your first VSD file in a minute.