JPEG to SVG API#
Convert a JPEG to SVG format with POST /v1/convert/jpeg-to-svg, which base64-encodes the JPEG and embeds it as a data URI inside an SVG <image> element. This is not vectorization. The output is the full raster image wrapped in an SVG container, which is useful for workflows that require SVG but accept embedded raster content. Responses return either raw bytes for direct download or JSON metadata with a presigned download URL.
Endpoint#
POST /v1/convert/jpeg-to-svg
Content-Type: multipart/form-data
Accepted input: .jpeg or .jpg files
Output format: .svg (image/svg+xml)
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 .jpeg or .jpg image file to convert. |
output_filename |
string |
No | Input filename | Custom output filename. The .svg 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#
- The JPEG is base64-encoded and embedded inside an SVG
<image>element as a data URI - The SVG dimensions and viewBox match the original image's pixel dimensions
- This is NOT vectorization -- the output contains the full raster image data, not vector paths
- Useful for workflows that require SVG format but accept embedded raster content
Response#
Direct Download (direct_download=true, default)#
HTTP 200 OK
Content-Type: image/svg+xml
Content-Disposition: inline; filename="photo_20260405_123456789.svg"
Returns raw image bytes.
Metadata Response (direct_download=false)#
{
"presigned_url": "https://spaces.example.com/...",
"object_key": "env/files/{project_id}/jpeg-to-svg/photo_20260405_123456789.svg",
"filename": "photo_20260405_123456789.svg",
"file_size": 45678,
"conversion_time_seconds": 0.5
}
Code Examples#
Python#
import requests
with open("photo.jpg", "rb") as f:
response = requests.post(
"https://api.enconvert.com/v1/convert/jpeg-to-svg",
headers={"X-API-Key": "sk_your_private_key"},
files={"file": ("photo.jpg", f)}
)
with open("photo_20260405_123456789.svg", "wb") as out:
out.write(response.content)
Node.js#
const form = new FormData();
form.append("file", fs.createReadStream("photo.jpg"));
const response = await fetch("https://api.enconvert.com/v1/convert/jpeg-to-svg", {
method: "POST",
headers: { "X-API-Key": "sk_your_private_key" },
body: form
});
fs.writeFileSync("photo_20260405_123456789.svg", Buffer.from(await response.arrayBuffer()));
PHP#
$ch = curl_init("https://api.enconvert.com/v1/convert/jpeg-to-svg");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["X-API-Key: sk_your_private_key"],
CURLOPT_POSTFIELDS => ["file" => new CURLFile("photo.jpg")]
]);
$output = curl_exec($ch);
curl_close($ch);
file_put_contents("photo_20260405_123456789.svg", $output);
Go#
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, _ := writer.CreateFormFile("file", "photo.jpg")
file, _ := os.Open("photo.jpg")
io.Copy(part, file)
writer.Close()
req, _ := http.NewRequest("POST", "https://api.enconvert.com/v1/convert/jpeg-to-svg", 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 .jpeg or .jpg file |
400 Bad Request |
Image conversion failed (corrupt or unsupported file) |
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) |
| Monthly conversions | Plan-dependent |
Frequently asked questions#
How do I convert a JPG to SVG with a REST API?#
Send a multipart/form-data POST request to /v1/convert/jpeg-to-svg with your .jpeg or .jpg file in the file field, authenticated via X-API-Key or a Bearer JWT token. The API returns an SVG with your image base64-embedded in an <image> element.
Does the JPEG to SVG API vectorize my image?#
No. This endpoint does not trace or convert the image to vector paths. It embeds the raster JPEG inside an SVG container as a base64 data URI. The SVG dimensions and viewBox match the original image's pixel dimensions.
Why is the SVG output larger than my JPEG input?#
Base64 encoding adds roughly 33% overhead, so the output file is larger than the input since it contains the full raster image data encoded as text.
Can I get a download URL instead of raw file 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.