---
seo_title: JPEG to SVG API: Embed JPG in SVG Programmatically | EnConvert
meta_desc: Wrap a JPEG in an SVG with POST /v1/convert/jpeg-to-svg. The API base64-embeds the image in an SVG image element, giving you a raster wrapper rather than vectorization.
keywords: jpeg to svg api, jpg to svg api, convert jpeg to svg programmatically, embed jpeg in svg, jpg to svg converter api, base64 image in svg api, raster image svg wrapper
---

# 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

<div class="alert alert-warning">
<strong>Not vectorization:</strong> This endpoint embeds the raster image inside an SVG container. It does not trace or convert the image to vector paths. The output file will be larger than the input due to base64 encoding (~33% overhead).
</div>

---

## 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`)

```json
{
    "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

```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

```javascript
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

```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

```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`.
