AI to TIFF API
POST an .ai file to /v2/convert/ai/to/tiff and its artboards come back as the pages of one TIFF. The sample asks for 300 DPI: two 800 × 600 pages, LZW-compressed, 76,196 bytes, with 300 DPI in the resolution tags.
- Endpoint
- POST /v2/
convert/ ai/ to/ tiff - Accepts
- ai
- Sample timing
- 31 ms 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/ai/to/tiff \
-H "Authorization: Bearer $PDFCONVERSIONAPI_KEY" \
-F File=@quillback-ridge-logo-sheet.ai \
--form-string ImageResolution=300 \
-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/ai/to/tiff",
headers={"Authorization": f"Bearer {key}"},
files=[
("File", open("quillback-ridge-logo-sheet.ai", "rb")),
],
data={
"ImageResolution": "300",
},
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 = "quillback-ridge-logo-sheet.ai";
form.append("File", new Blob([await readFile(file)]), file);
form.append("ImageResolution", "300");
const url = "https://api.pdfconversionapi.com/v2/convert/ai/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.031,
"Files": [
{
"FileName": "quillback-ridge-logo-sheet.tiff",
"FileExt": "tiff",
"FileSize": 76196,
"FileData": "SUkqAOCzAAAsAQAAAQAAACwB…"
}
]
}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
- quillback-ridge-logo-sheet.ai (10 KB)
- Output
- quillback-ridge-logo-sheet.tiff (74 KB)
- Source
- A two-artboard logo sheet for a fictional trail club, a full-color badge and a one-color version, which we wrote as a PDF-compatible Illustrator file with the lettering already in outlines. (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 | Drawing resolution, also written to XResolution, YResolution and ResolutionUnit (inch) on every page when you send it. ConvertAPI's default is 200.Values: 36–600 |
MultiPageboolean, default true | false returns one TIFF per artboard (-1.tiff, -2.tiff). Those single files are not compressed: 360,210 bytes each at 150 DPI, against 35,387 bytes for both pages together.Values: true, false |
PageRangestring | Artboards to include. One artboard gives a single-page TIFF, written like the MultiPage=false files.Values: 1, 2-4, 1,3, last |
ImageWidthinteger | Page width in pixels; the artboard is drawn at the scale it needs.Values: 1–20000 |
ImageHeightinteger | Page height in pixels, alone or with ImageWidth as a box to fit in.Values: 1–20000 |
ScaleProportionsboolean, default true | false stretches each artboard to the exact width and height. |
ScaleIfLargerboolean, default false | true keeps the 150 DPI size when the requested one is bigger. |
ScaleImageboolean, default true | false crops the requested size from each page's top-left corner. |
BackgroundColorstring, default white | Color under the artwork on every page.Values: Color names, #RRGGBB or R,G,B |
TransparentColorstring | Pixels of exactly this color get alpha 0 on every page, which adds a fourth channel: white cleared 85,569 pixels on page 1 of the sample at 150 DPI, and the file grew from 35,387 to 47,799 bytes.Values: Color names, #RRGGBB or R,G,B |
ColorSpaceenum, default default | gray and monochrome work on every artboard: both sample artboards became 8-bit, one-channel gray pages, 18,040 bytes together in gray at 150 DPI and 5,598 in black and white. rgb gives the same 3-channel file as the default (35,387 bytes). cmyk returns 400.Values: default, rgb, gray, monochrome |
Passwordstring | Opens a password-protected .ai file with its open or owner password. Our encrypted copy of the sample gave the same multi-page TIFF bytes as the original; without the password it returned 422. |
FileNamestring | Name of the TIFF (or the base of the numbered files). |
StoreFileboolean, default false | Returns a URL valid for 3 hours instead of the data. |
Not supported yet
Setting one of these to anything but its default returns 400.
| Option | What to do instead |
|---|---|
ImageQuality | TIFF pages are lossless. ConvertAPI's default of 75 is accepted; other values return 400 "ImageQuality is not supported yet for AI → TIFF". |
What carries over, and what doesn't
Kept
- All artboards in one file, in file order
- The DPI you set, in each page's resolution tags with inch as the unit
- Lossless pixels, LZW-compressed in the multi-page file
- 8-bit RGB with 3 samples per pixel and no alpha channel. Only
TransparentColoradds a fourth channel for alpha; it has no ExtraSamples tag, but the readers we tried treat it as alpha - Vector-sharp drawing at the chosen DPI: 800 × 600 per page at 300
Lost or not yet supported
- Compression when there is only one page: single-artboard and
MultiPage=falseTIFFs are uncompressed. - CMYK pages. Output is RGB and
ColorSpace=cmykreturns 400, so a print shop that requires CMYK TIFF needs another step. - Layers and paths: each page is a flat raster.
Limits
- One .ai per request, up to 2,000 artboards.
- Requests up to 10 MB on the Free plan or 100 MB on paid plans, all files and fields together.
- Each page at most 16,000 px on a side and 100,000,000 pixels (413).
ImageResolution36 to 600;ImageWidthandImageHeight1 to 20,000.- 120 seconds per request before a 504.
Where teams use it
Prepress and archive systems that take TIFF
Send every artboard of a logo or label sheet as one file with the DPI the system expects in its tags, instead of exporting and merging pages by hand.
Document management imports
Systems that store multi-page TIFF can receive all artboards of an .ai file as a single document, in the order the file stores them.
Questions
Do I get one TIFF or one per artboard?
One multi-page TIFF by default, named after the upload (quillback-ridge-logo-sheet.tiff). Send MultiPage=false for separate numbered files.
Why is a single-page TIFF so much larger?
Only the multi-page file is LZW-compressed. A single page is written raw: 360,210 bytes for a 400 × 300 RGB page, while both sample artboards at that size took 35,387 bytes together as a multi-page file.
Can I get a CMYK TIFF for print?
Not yet. ColorSpace=cmyk returns 400 "ColorSpace cmyk is not supported yet; use rgb, gray or monochrome". CMYK artwork is converted to RGB when it is drawn.
How do I make a 300 DPI TIFF?
Send ImageResolution=300. Pixels follow from the artboard size (192 pt × 300 ÷ 72 = 800 px) and the tags say 300 DPI, so the page measures 2.67 × 2 inches, the artboard's own size.
Convert your first AI file in a minute.