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

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

{
    "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#

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#

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#

$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#

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.