---
seo_title: SVG to HEIC API: Convert SVG Images to HEIC | EnConvert
meta_desc: Convert SVG to HEIC via POST /v1/convert/svg-to-heic. Upload multipart/form-data, get raw HEIC bytes or a presigned URL. CairoSVG rendering, quality 100.
keywords: svg to heic api, convert svg to heic, svg to heic converter api, rasterize svg to heic, svg to heic rest api, svg image to heic programmatically, cairosvg heic conversion api
---

# SVG to HEIC API

Convert SVG to HEIC with the `POST /v1/convert/svg-to-heic` endpoint. The SVG is rendered via CairoSVG, then encoded as HEIC at maximum quality, with transparent areas composited onto a white background. Responses return raw HEIC bytes by default, or JSON metadata with a presigned download URL when `direct_download=false`.

---

## Endpoint

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

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

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

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

---

## 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 `.heic` 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 SVG to PNG intermediate, then **Pillow** with **pillow-heif** for HEIC encoding
- Output resolution is determined by the SVG's own `width`, `height`, and `viewBox` attributes
- Transparent areas are composited onto a **white background** (HEIC does not support transparency)
- Output quality is set to maximum (100)

<div class="alert alert-info">
<strong>Transparency note:</strong> HEIC does not support transparency. Transparent areas in the SVG will appear white in the HEIC output.
</div>

---

## Response

### Direct Download (`direct_download=true`, default)

```
HTTP 200 OK
Content-Type: image/heic
Content-Disposition: inline; filename="icon_20260405_123456789.heic"
```

Returns raw image bytes.

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

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

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

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

### PHP

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

Send a `multipart/form-data` POST request to `/v1/convert/svg-to-heic` with the SVG in the `file` field, authenticated via `X-API-Key` or a Bearer JWT. The response returns raw HEIC bytes by default, or set `direct_download=false` to receive JSON with a presigned download URL.

### Does converting SVG to HEIC preserve transparency?

No. HEIC does not support transparency, so transparent areas in the SVG are composited onto a white background in the HEIC output.

### How is the output resolution determined when converting SVG to HEIC?

The output resolution is determined by the SVG's own `width`, `height`, and `viewBox` attributes. The SVG is rendered to a PNG intermediate with CairoSVG, then encoded to HEIC with Pillow and pillow-heif.

### Why does the SVG to HEIC endpoint return a 402 error?

`402 Payment Required` means your plan's monthly ops allowance or storage limit has been reached. Oversized files return `413 Payload Too Large` instead, and invalid or corrupt SVG files return `400 Bad Request`.
