SVG to JPEG API#
Rasterize SVG images to JPEG programmatically with POST /v1/convert/svg-to-jpeg. The endpoint renders the SVG to pixels using CairoSVG, composites transparent areas onto a white background, and returns a JPEG. Optional width and height parameters set the output dimensions in pixels. Responses return either raw image bytes for direct download or JSON metadata with a presigned download URL.
Endpoint#
POST /v1/convert/svg-to-jpeg
Content-Type: multipart/form-data
Accepted input: .svg files
Output format: .jpeg (image/jpeg)
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 .svg image file to convert. |
output_filename |
string |
No | Input filename | Custom output filename. The .jpeg extension is added automatically. |
direct_download |
boolean |
No | true |
When true, returns raw image bytes. When false, returns JSON metadata with a presigned download URL. |
width |
integer |
No | SVG's own size | Output width in pixels (1-10000). When height is omitted, the height is derived from the SVG's aspect ratio. |
height |
integer |
No | SVG's own size | Output height in pixels (1-10000). When width is omitted, the width is derived from the SVG's aspect ratio. |
Conversion Details#
- Uses CairoSVG to render the SVG to a PNG intermediate, then Pillow to convert to JPEG
- By default, output resolution is determined by the SVG's own
width,height, andviewBoxattributes (default 96 DPI); thewidth/heightrequest parameters override it - If the SVG has no explicit dimensions, CairoSVG uses its own defaults
- Transparent areas are composited onto a white background
- Output quality is set to maximum (100)
width and/or height (pixels, 1-10000) to set the output size. One dimension alone scales the image proportionally from the SVG's aspect ratio; both together set the exact canvas size (which may change the aspect ratio). Requests above 25,000,000 total output pixels are rejected with 400. Without these parameters, the SVG's own size attributes decide the resolution.
Response#
Direct Download (direct_download=true, default)#
HTTP 200 OK
Content-Type: image/jpeg
Content-Disposition: inline; filename="icon_20260405_123456789.jpeg"
Returns raw image bytes.
Metadata Response (direct_download=false)#
{
"presigned_url": "https://spaces.example.com/...",
"object_key": "env/files/{project_id}/svg-to-jpeg/icon_20260405_123456789.jpeg",
"filename": "icon_20260405_123456789.jpeg",
"file_size": 45678,
"conversion_time_seconds": 0.5
}
Code Examples#
Python#
import requests
with open("icon.svg", "rb") as f:
response = requests.post(
"https://api.enconvert.com/v1/convert/svg-to-jpeg",
headers={"X-API-Key": "sk_your_private_key"},
files={"file": ("icon.svg", f)}
)
with open("icon_20260405_123456789.jpeg", "wb") as out:
out.write(response.content)
Node.js#
const form = new FormData();
form.append("file", fs.createReadStream("icon.svg"));
const response = await fetch("https://api.enconvert.com/v1/convert/svg-to-jpeg", {
method: "POST",
headers: { "X-API-Key": "sk_your_private_key" },
body: form
});
fs.writeFileSync("icon_20260405_123456789.jpeg", Buffer.from(await response.arrayBuffer()));
PHP#
$ch = curl_init("https://api.enconvert.com/v1/convert/svg-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("icon.svg")]
]);
$output = curl_exec($ch);
curl_close($ch);
file_put_contents("icon_20260405_123456789.jpeg", $output);
Go#
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, _ := writer.CreateFormFile("file", "icon.svg")
file, _ := os.Open("icon.svg")
io.Copy(part, file)
writer.Close()
req, _ := http.NewRequest("POST", "https://api.enconvert.com/v1/convert/svg-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 .svg file |
400 Bad Request |
Image conversion failed (corrupt or unsupported file) |
400 Bad Request |
width/height out of range (1-10000) or total output pixels above 25,000,000 |
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) |
| Output quality | Maximum (not configurable) |
| Max output size | 10000 px per dimension, 25,000,000 px total |
| Monthly conversions | Plan-dependent |
Frequently asked questions#
How do I convert an SVG to JPG with a REST API?#
Send a multipart/form-data POST request to /v1/convert/svg-to-jpeg with your .svg file in the file field, authenticated via X-API-Key or a Bearer JWT token. CairoSVG renders the SVG to a PNG intermediate, then Pillow converts it to JPEG.
How do I control the output resolution when rasterizing an SVG?#
Pass the width and/or height form fields (in pixels, up to 10000 per dimension). A single dimension scales the output proportionally from the SVG's aspect ratio; both dimensions set the exact output size. Without them, the SVG's own width, height, and viewBox attributes decide the resolution.
What happens to transparent areas in the SVG?#
JPEG has no transparency, so transparent areas are composited onto a white background in the output.
Can I get a download URL instead of raw image bytes?#
Yes. Set direct_download=false and the API returns JSON metadata including a presigned_url, object_key, filename, file_size, and conversion_time_seconds.