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)
Transparency note: HEIC does not support transparency. Transparent areas in the SVG will appear white in the HEIC output.

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.