---
seo_title: SVG to JPEG API: Rasterize SVG to JPG in Code | EnConvert
meta_desc: Rasterize SVG to JPEG with POST /v1/convert/svg-to-jpeg. CairoSVG renders your SVG to pixels and returns a JPEG as raw bytes or a presigned URL. Code examples.
keywords: svg to jpeg api, svg to jpg api, convert svg to jpeg programmatically, rasterize svg api, svg to jpg converter api, render svg to image api, cairosvg jpeg conversion
---

# 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`, and `viewBox` attributes (default 96 DPI); the `width`/`height` request 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)

<div class="alert alert-info">
<strong>Resolution note:</strong> Pass <code>width</code> and/or <code>height</code> (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 <code>400</code>. Without these parameters, the SVG's own size attributes decide the resolution.
</div>

---

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

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

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

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

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

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