PDF to JPEG API#
Convert a PDF to JPEG images with the POST /v1/convert/pdf-to-jpeg endpoint, which renders every PDF page as a raster image. Single-page PDFs return a JPEG file directly; multi-page PDFs return a ZIP archive containing one JPEG per page. Responses return raw file bytes by default, or JSON metadata with a presigned download URL when direct_download=false.
Endpoint#
POST /v1/convert/pdf-to-jpeg
Content-Type: multipart/form-data
Accepted input: .pdf files
Output format: .jpeg (image/jpeg) for single-page PDFs, .zip (application/zip) for multi-page PDFs
Authentication#
Requires either a private API key or a JWT token from a public key.
X-API-Key: sk_your_private_key
Or:
Authorization: Bearer <jwt_token>
Request Parameters#
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
file |
file | Yes | -- | The .pdf file to convert. |
output_filename |
string |
No | Input filename | Custom output filename. The .jpeg or .zip extension is added automatically. |
direct_download |
boolean |
No | true |
When true, returns raw file bytes. When false, returns JSON metadata with a presigned download URL. |
Conversion Details#
- Uses PyMuPDF to render PDF pages to raster images at 2x resolution (144 DPI)
- Uses Pillow for JPEG encoding with maximum quality
- Transparency is flattened onto a white background (JPEG does not support alpha)
- Single-page PDFs return a
.jpegfile directly - Multi-page PDFs return a
.ziparchive containingpage_1.jpeg,page_2.jpeg, etc. - Output format is automatically determined based on the number of pages
Response#
Direct Download (direct_download=true, default)#
Single-page PDF:
HTTP 200 OK
Content-Type: image/jpeg
Content-Disposition: inline; filename="document_20260405_123456789.jpeg"
Returns raw JPEG image bytes.
Multi-page PDF:
HTTP 200 OK
Content-Type: application/zip
Content-Disposition: inline; filename="document_20260405_123456789.zip"
Returns a ZIP archive containing one JPEG per page.
Metadata Response (direct_download=false)#
{
"presigned_url": "https://spaces.example.com/...",
"object_key": "env/files/{project_id}/pdf-to-jpeg/document_20260405_123456789.jpeg",
"filename": "document_20260405_123456789.jpeg",
"file_size": 45678,
"conversion_time_seconds": 1.2
}
Code Examples#
Python#
import requests
with open("document.pdf", "rb") as f:
response = requests.post(
"https://api.enconvert.com/v1/convert/pdf-to-jpeg",
headers={"X-API-Key": "sk_your_private_key"},
files={"file": ("document.pdf", f)}
)
# Check if response is a ZIP (multi-page) or JPEG (single-page)
content_type = response.headers.get("Content-Type", "")
if "zip" in content_type:
with open("document_pages.zip", "wb") as out:
out.write(response.content)
else:
with open("document_20260405_123456789.jpeg", "wb") as out:
out.write(response.content)
Node.js#
const form = new FormData();
form.append("file", fs.createReadStream("document.pdf"));
const response = await fetch("https://api.enconvert.com/v1/convert/pdf-to-jpeg", {
method: "POST",
headers: { "X-API-Key": "sk_your_private_key" },
body: form
});
const contentType = response.headers.get("content-type");
const buffer = Buffer.from(await response.arrayBuffer());
if (contentType.includes("zip")) {
fs.writeFileSync("document_pages.zip", buffer);
} else {
fs.writeFileSync("document_20260405_123456789.jpeg", buffer);
}
PHP#
$ch = curl_init("https://api.enconvert.com/v1/convert/pdf-to-jpeg");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["X-API-Key: sk_your_private_key"],
CURLOPT_POSTFIELDS => ["file" => new CURLFile("document.pdf")]
]);
$output = curl_exec($ch);
$contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
curl_close($ch);
if (str_contains($contentType, "zip")) {
file_put_contents("document_pages.zip", $output);
} else {
file_put_contents("document_20260405_123456789.jpeg", $output);
}
Go#
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, _ := writer.CreateFormFile("file", "document.pdf")
file, _ := os.Open("document.pdf")
io.Copy(part, file)
writer.Close()
req, _ := http.NewRequest("POST", "https://api.enconvert.com/v1/convert/pdf-to-jpeg", body)
req.Header.Set("Content-Type", writer.FormDataContentType())
req.Header.Set("X-API-Key", "sk_your_private_key")
resp, _ := http.DefaultClient.Do(req)
Error Responses#
| Status | Condition |
|---|---|
400 Bad Request |
File is not a .pdf file |
400 Bad Request |
PDF has no pages |
400 Bad Request |
Image conversion failed (corrupt or unsupported PDF) |
401 Unauthorized |
Missing or invalid API key / JWT token |
402 Payment Required |
Monthly ops allowance exhausted |
402 Payment Required |
Storage limit reached |
413 Payload Too Large |
File exceeds plan's maximum file size |
Limits#
| Limit | Value |
|---|---|
| Max file size | Plan-dependent (Founding: 5 MB) |
| Render resolution | 144 DPI (2x scale) |
| Output quality | Maximum (JPEG quality 100) |
| Monthly conversions | Plan-dependent |
Frequently asked questions#
How do I convert a PDF to JPEG images with a REST API?#
Send a multipart/form-data POST request to /v1/convert/pdf-to-jpeg with the .pdf file in the file field, authenticated via X-API-Key or a Bearer JWT. You get raw file bytes back by default, or set direct_download=false to receive JSON with a presigned download URL.
How does the API handle multi-page PDFs?#
Single-page PDFs return a .jpeg file directly, while multi-page PDFs return a .zip archive containing page_1.jpeg, page_2.jpeg, and so on. The output format is determined automatically from the page count, so check the Content-Type header (image/jpeg vs application/zip) when saving the response.
What resolution are PDF pages rendered at?#
Pages are rendered with PyMuPDF at 2x resolution (144 DPI) and encoded as JPEG at maximum quality (100). Neither setting is configurable.
Does PDF to JPEG conversion keep transparency?#
No. JPEG does not support an alpha channel, so transparency is flattened onto a white background.
Why does the PDF to JPEG endpoint return a 400 error?#
400 Bad Request is returned when the file is not a .pdf, when the PDF has no pages, or when the conversion fails because the PDF is corrupt or unsupported.