svg-to-jpeg
Rasterize an SVG image to JPEG format. The SVG is rendered to pixels using CairoSVG, then converted to JPEG with transparent areas composited onto a white background.
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_live_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. |
Conversion Details
- Uses CairoSVG to render the SVG to a PNG intermediate, then Pillow to convert to JPEG
- Output resolution is determined by the SVG's own
width,height, andviewBoxattributes (default 96 DPI) - 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)
Resolution note: The output pixel dimensions are determined by the SVG's own size attributes. For higher resolution output, increase the
width and height attributes in your SVG before uploading.
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_live_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_live_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_live_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_live_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) |
401 Unauthorized |
Missing or invalid API key / JWT token |
402 Payment Required |
Monthly conversion limit reached |
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 (Free: 5 MB) |
| Output quality | Maximum (not configurable) |
| Monthly conversions | Plan-dependent |