---
seo_title: SVG to PNG API: Rasterize SVG Images to PNG | EnConvert
meta_desc: Rasterize SVG to PNG with POST /v1/convert/svg-to-png. CairoSVG renders the SVG at its declared size with transparency preserved; get bytes or a presigned URL.
keywords: svg to png api, svg rasterization api, convert svg to png api, rasterize svg to png, svg to png rest api, svg to png with transparency, cairosvg png rendering api, svg to png resolution
---

# SVG to PNG API

The SVG to PNG API rasterizes an SVG image to PNG format with a single request to `POST /v1/convert/svg-to-png`. Upload a `.svg` file as multipart/form-data and the SVG is rendered to pixels using CairoSVG, with transparency preserved in the PNG output. Optional `width` and `height` parameters set the output dimensions in pixels. The response is raw PNG bytes by default, or JSON metadata with a presigned download URL when `direct_download=false`.

---

## Endpoint

```
POST /v1/convert/svg-to-png
```

**Content-Type:** `multipart/form-data`

**Accepted input:** `.svg` files

**Output format:** `.png` (`image/png`)

---

## 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 `.png` 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 directly to PNG
- 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
- Transparency is **preserved** in the PNG output
- If the SVG has no explicit dimensions, CairoSVG uses its own defaults

<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/png
Content-Disposition: inline; filename="icon_20260405_123456789.png"
```

Returns raw image bytes.

### Metadata Response (`direct_download=false`)

```json
{
    "presigned_url": "https://spaces.example.com/...",
    "object_key": "env/files/{project_id}/svg-to-png/icon_20260405_123456789.png",
    "filename": "icon_20260405_123456789.png",
    "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-png",
        headers={"X-API-Key": "sk_your_private_key"},
        files={"file": ("icon.svg", f)}
    )

with open("icon_20260405_123456789.png", "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-png", {
    method: "POST",
    headers: { "X-API-Key": "sk_your_private_key" },
    body: form
});

fs.writeFileSync("icon_20260405_123456789.png", Buffer.from(await response.arrayBuffer()));
```

### PHP

```php
$ch = curl_init("https://api.enconvert.com/v1/convert/svg-to-png");
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.png", $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-png", 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 rasterize an SVG to PNG with a REST API?

Send a `POST` request to `/v1/convert/svg-to-png` with your `.svg` file as `multipart/form-data`, authenticated via `X-API-Key` or a JWT `Authorization: Bearer` token. CairoSVG renders the SVG directly to PNG and returns the raw bytes.

### How do I control the output resolution of the PNG?

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.

### Is transparency preserved when converting SVG to PNG?

Yes. Transparency is preserved in the PNG output.

### What happens if my SVG has no explicit dimensions?

If the SVG has no explicit dimensions, CairoSVG uses its own defaults to determine the output size.

### Can I get a presigned download URL instead of raw PNG bytes?

Yes. Set `direct_download=false` and the API returns JSON with a `presigned_url`, `filename`, `file_size`, and `conversion_time_seconds`.
