---
seo_title: WebP to SVG API: Wrap WebP Images in SVG | EnConvert
meta_desc: Convert WebP to SVG via POST /v1/convert/webp-to-svg. Embeds the decoded raster image in an SVG wrapper without vectorizing. Raw bytes or presigned URL.
keywords: webp to svg api, convert webp to svg, webp to svg converter api, embed webp in svg, webp to svg rest api, convert webp to svg programmatically, webp image to svg wrapper
---

# WebP to SVG API

Convert WebP to SVG with the `POST /v1/convert/webp-to-svg` endpoint, which embeds 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. Responses return the raw SVG bytes by default, or JSON metadata with a presigned download URL when `direct_download=false`.

---

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

<div class="alert alert-warning">
<strong>Not vectorization:</strong> This endpoint embeds the decoded raster image inside an SVG container. It does not trace or convert the image to vector paths.
</div>

---

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

```json
{
    "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

```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_your_private_key"},
        files={"file": ("image.webp", f)}
    )

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

### Node.js

```javascript
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_your_private_key" },
    body: form
});

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

### PHP

```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_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

```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_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 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 a WebP image to SVG with a REST API?

Send a `multipart/form-data` POST request to `/v1/convert/webp-to-svg` with the `.webp` file in the `file` field, authenticated via `X-API-Key` or a Bearer JWT. You get the SVG bytes back directly, or set `direct_download=false` for JSON with a presigned download URL.

### Does WebP to SVG conversion vectorize the image?

No. The endpoint decodes the WebP to PNG with Pillow, then base64-encodes it as a data URI inside an SVG `<image>` element. The output contains the full raster image data, not traced vector paths.

### Is transparency preserved when converting WebP to SVG?

Yes. Transparency is preserved in the embedded PNG data, and the SVG dimensions and viewBox match the original image's pixel dimensions.

### Why does the WebP to SVG endpoint return a 400 error?

`400 Bad Request` is returned when the uploaded file is not a `.webp` file, or when the conversion fails because the file is corrupt or unsupported.
