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, andviewBoxattributes - Transparent areas are composited onto a white background (HEIC does not support transparency)
- Output quality is set to maximum (100)
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)#
{
"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#
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#
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#
$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#
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.