---
seo_title: WebP to JPEG API: Convert WebP Images to JPEG | EnConvert
meta_desc: Convert WebP to JPEG with a REST API. POST /v1/convert/webp-to-jpeg accepts multipart .webp uploads and returns raw JPEG bytes or a presigned download URL.
keywords: webp to jpeg api, convert webp to jpeg api, webp to jpg conversion api, webp to jpeg rest api, webp to jpeg python, webp to jpeg node js, image conversion api webp, webp transparency to jpeg
---

# WebP to JPEG API

The WebP to JPEG API converts a WebP image to JPEG format with a single request to `POST /v1/convert/webp-to-jpeg`. Upload a `.webp` file as multipart/form-data and receive raw JPEG bytes back, or set `direct_download=false` to get JSON metadata with a presigned download URL instead. Because JPEG does not support transparency, transparent areas in the WebP are composited onto a white background.

---

## Endpoint

```
POST /v1/convert/webp-to-jpeg
```

**Content-Type:** `multipart/form-data`

**Accepted input:** `.webp` files

**Output format:** `.jpeg` (`image/jpeg`)

---

## 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 `.jpeg` 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 **Pillow** for direct format conversion
- If the WebP has an alpha channel (RGBA), transparent areas are composited onto a **white background**
- Output quality is set to maximum (100)

<div class="alert alert-info">
<strong>Transparency note:</strong> JPEG does not support transparency. Any transparent areas in your WebP will appear white in the JPEG output.
</div>

---

## Response

### Direct Download (`direct_download=true`, default)

```
HTTP 200 OK
Content-Type: image/jpeg
Content-Disposition: inline; filename="image_20260405_123456789.jpeg"
```

Returns raw image bytes.

### Metadata Response (`direct_download=false`)

```json
{
    "presigned_url": "https://spaces.example.com/...",
    "object_key": "env/files/{project_id}/webp-to-jpeg/image_20260405_123456789.jpeg",
    "filename": "image_20260405_123456789.jpeg",
    "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-jpeg",
        headers={"X-API-Key": "sk_your_private_key"},
        files={"file": ("image.webp", f)}
    )

with open("image_20260405_123456789.jpeg", "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-jpeg", {
    method: "POST",
    headers: { "X-API-Key": "sk_your_private_key" },
    body: form
});

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

### PHP

```php
$ch = curl_init("https://api.enconvert.com/v1/convert/webp-to-jpeg");
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.jpeg", $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-jpeg", 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 WebP to JPEG with a REST API?

Send a `POST` request to `/v1/convert/webp-to-jpeg` with your `.webp` file in a `multipart/form-data` body and authenticate with an `X-API-Key` header or a JWT `Authorization: Bearer` token. The API returns the converted JPEG as raw image bytes by default.

### What happens to transparency when converting WebP to JPEG?

JPEG does not support transparency, so if the WebP has an alpha channel (RGBA), transparent areas are composited onto a white background in the JPEG output.

### Can I get a download URL instead of raw JPEG bytes?

Yes. Set `direct_download=false` and the API returns JSON metadata including a `presigned_url`, `filename`, `file_size`, and `conversion_time_seconds` instead of the raw bytes.

### Why does the WebP to JPEG API return 402 Payment Required?

A `402 Payment Required` response means your monthly ops allowance or storage limit has been reached for your plan.

### What is the maximum WebP file size I can upload?

Max file size is plan-dependent (5 MB on the Founding plan). Files exceeding your plan's limit are rejected with `413 Payload Too Large`.
