webp-to-svg

Embed a WebP image inside an SVG wrapper. The WebP is first decoded to PNG, then base64-encoded and placed as a data URI inside an SVG <image> element. This is not vectorization.


Endpoint

POST /v1/convert/webp-to-svg

Content-Type: multipart/form-data

Accepted input: .webp files

Output format: .svg (image/svg+xml)


Authentication

Requires either a private API key or a JWT token from a public key.

X-API-Key: sk_live_your_private_key

Or:

Authorization: Bearer <jwt_token>

Request Parameters

Parameter Type Required Default Description
file file Yes -- The .webp image file to convert.
output_filename string No Input filename Custom output filename. The .svg 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

  • The WebP is first decoded to PNG using Pillow, then base64-encoded and embedded inside an SVG <image> element
  • The SVG dimensions and viewBox match the original image's pixel dimensions
  • Transparency is preserved in the embedded PNG data
  • This is NOT vectorization -- the output contains the full raster image data, not vector paths
Not vectorization: This endpoint embeds the decoded raster image inside an SVG container. It does not trace or convert the image to vector paths.

Response

Direct Download (direct_download=true, default)

HTTP 200 OK
Content-Type: image/svg+xml
Content-Disposition: inline; filename="image_20260405_123456789.svg"

Returns raw image bytes.

Metadata Response (direct_download=false)

{
    "presigned_url": "https://spaces.example.com/...",
    "object_key": "env/files/{project_id}/webp-to-svg/image_20260405_123456789.svg",
    "filename": "image_20260405_123456789.svg",
    "file_size": 45678,
    "conversion_time_seconds": 0.5
}

Code Examples

Python

import requests

with open("image.webp", "rb") as f:
    response = requests.post(
        "https://api.enconvert.com/v1/convert/webp-to-svg",
        headers={"X-API-Key": "sk_live_your_private_key"},
        files={"file": ("image.webp", f)}
    )

with open("image_20260405_123456789.svg", "wb") as out:
    out.write(response.content)

Node.js

const form = new FormData();
form.append("file", fs.createReadStream("image.webp"));

const response = await fetch("https://api.enconvert.com/v1/convert/webp-to-svg", {
    method: "POST",
    headers: { "X-API-Key": "sk_live_your_private_key" },
    body: form
});

fs.writeFileSync("image_20260405_123456789.svg", Buffer.from(await response.arrayBuffer()));

PHP

$ch = curl_init("https://api.enconvert.com/v1/convert/webp-to-svg");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ["X-API-Key: sk_live_your_private_key"],
    CURLOPT_POSTFIELDS => ["file" => new CURLFile("image.webp")]
]);
$output = curl_exec($ch);
curl_close($ch);
file_put_contents("image_20260405_123456789.svg", $output);

Go

body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, _ := writer.CreateFormFile("file", "image.webp")
file, _ := os.Open("image.webp")
io.Copy(part, file)
writer.Close()

req, _ := http.NewRequest("POST", "https://api.enconvert.com/v1/convert/webp-to-svg", body)
req.Header.Set("Content-Type", writer.FormDataContentType())
req.Header.Set("X-API-Key", "sk_live_your_private_key")
resp, _ := http.DefaultClient.Do(req)

Error Responses

Status Condition
400 Bad Request File is not a .webp file
400 Bad Request Image conversion failed (corrupt or unsupported file)
401 Unauthorized Missing or invalid API key / JWT token
402 Payment Required Monthly conversion limit reached
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 (Free: 5 MB)
Output quality Maximum (not configurable)
Monthly conversions Plan-dependent