MOBI to TIFF API
POST a .mobi file to /v2/convert/mobi/to/tiff and the book comes back as one multi-page TIFF. With ImageResolution=100, the six-page lighthouse sample is a 521,335-byte file of six 850 × 1100 frames, LZW-compressed and tagged 100 dpi.
- Endpoint
- POST /v2/
convert/ mobi/ to/ tiff - Accepts
- mobi
- Sample timing
- 0.194 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/mobi/to/tiff \
-H "Authorization: Bearer $PDFCONVERSIONAPI_KEY" \
-F File=@cape-merrow-light.mobi \
--form-string ImageResolution=100 \
-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/mobi/to/tiff",
headers={"Authorization": f"Bearer {key}"},
files=[("File", open("cape-merrow-light.mobi", "rb"))],
data={
"ImageResolution": "100",
},
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 = "cape-merrow-light.mobi";
form.append("File", new Blob([await readFile(file)]), file);
form.append("ImageResolution", "100");
const url = "https://api.pdfconversionapi.com/v2/convert/mobi/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.194,
"Files": [
{
"FileName": "cape-merrow-light.tiff",
"FileExt": "tiff",
"FileSize": 521335,
"FileData": "SUkqAH4dAgBkAAAAAQAAAGQA…"
}
]
}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
- cape-merrow-light.mobi (29 KB)
- Output
- cape-merrow-light.tiff (509 KB)
- Source
- A short fictional e-book about a lighthouse keeper's year, with a cover, a map and a chart, written and drawn by us and packed as a MOBI file by our own script. (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 |
|---|---|
MultiPageboolean, default true | Puts every page in one TIFF called cape-merrow-light.tiff. false gives one file per page, each uncompressed. |
ImageResolutioninteger, default 150 | Drawing resolution, stored in the TIFF when sent. Without it the sample is six 1275 × 1650 frames in 922,204 bytes, with resolution tags of 1 × 1 and no unit.Values: 36–600 |
PageRangestring | Frames to include; a single page is returned uncompressed (701,460 bytes for page 1 at 50 dpi).Values: 1, 3-5, 4-, 2-last |
ImageWidthinteger | Frame width in pixels.Values: 1–20,000 |
ImageHeightinteger | Frame height in pixels.Values: 1–20,000 |
PageSizeenum, default letter | Paper size; with a5 the sample becomes nine frames.Values: a0–a9, b0–b5, letter, legal, ledger |
BaseFontSizenumber, default 12 | Text size, and with it the size of the chapter headings.Values: 1–50 (points) |
MarginTopnumber, default 40 | Margin above, in points.Values: 0–200 (points) |
MarginRightnumber, default 40 | Margin on the right, in points.Values: 0–200 (points) |
MarginBottomnumber, default 40 | Margin below, in points.Values: 0–200 (points) |
MarginLeftnumber, default 40 | Margin on the left, in points.Values: 0–200 (points) |
ColorSpaceenum, default default | Gray or black-and-white pixels in one 8-bit channel, combined TIFFs included (111,372 bytes for the six frames at 50 dpi).Values: default, rgb, gray, monochrome |
BackgroundColorstring, default white | Page color behind the text and pictures.Values: Color names, #RRGGBB or R,G,B |
TransparentColorstring | An exact color made transparent in the frames.Values: Color names, #RRGGBB or R,G,B |
FileNamestring | Name for the TIFF without the extension. |
StoreFileboolean, default false | Return a 3-hour download link instead of the TIFF data. |
What carries over, and what doesn't
Kept
- All six pages of the sample in one file, in reading order, one frame per MOBI page break
- The cover drawing, the fog-hours GIF and the channel map on their pages
- Bold and italic text, headings, the indented quote and the bullet list
- Lossless LZW frames, tagged 100 × 100 dpi in the sample
Lost or not yet supported
- Compression for one-page results: a single frame is written as raw RGB, 3 bytes per pixel.
- The book's centering, font sizes and table borders, which MOBI 6 stores as HTML attributes that our layout does not apply.
- A cover kept only in the MOBI header, and the book's title and author metadata.
- Selectable text and links; ask for PDF when you need them.
- 1-bit fax compression (CCITT Group 4), which is not available.
Limits
- One book per request.
- Requests up to 10 MB on the Free plan or 100 MB on paid plans, all files and fields together.
- Up to 2,000 frames per request, and each output file up to 512 MB.
- DRM-protected books return 422; HUFF/CDIC compression returns 404.
- Book text over 64 MB returns 413.
- 120 seconds per conversion.
Where teams use it
Preserving the pages of a retired format
An archive that is retiring MOBI files can keep a page-image copy of each unprotected book as one TIFF, alongside a PDF from /v2/convert/mobi/to/pdf for the text.
Loading e-books into document imaging systems
Systems that file scanned documents as multi-page TIFF can take a MOBI book the same way, one frame per page, at the resolution the system is set up for.
Questions
How big is a TIFF of a MOBI book?
The sample's six pages are 922,204 bytes at the default 150 dpi and 521,335 bytes at 100 dpi, as one LZW-compressed file. Size grows with the page count and the resolution.
Why is a single page so large?
Only TIFFs with two or more frames are compressed. PageRange=1 returns page 1 uncompressed, 701,460 bytes even at 50 dpi. Ask for PNG if you need one page.
Where do the page breaks fall?
Wherever the book has <mbp:pagebreak/>, and wherever a page fills up. The sample puts a break before each chapter, so on Letter each section is one frame; on A5 the title page and chapters 2 and 3 each run over two frames, so the book has nine.
Convert your first MOBI file in a minute.