---
seo_title: API de WebP a JPEG: Convierte Imágenes WebP a JPEG | EnConvert
meta_desc: Convierte WebP a JPEG con una API REST. POST /v1/convert/webp-to-jpeg acepta archivos .webp vía multipart y devuelve bytes JPEG o una URL de descarga prefirmada.
keywords: convertir webp a jpeg, api webp a jpg, webp a jpeg online, api para convertir imagenes webp, webp a jpeg python, webp a jpeg node js, convertir imagen webp a jpg api, api rest webp jpeg
---

# API de WebP a JPEG

La API de WebP a JPEG convierte una imagen WebP a formato JPEG con una sola solicitud a `POST /v1/convert/webp-to-jpeg`. Sube un archivo `.webp` como multipart/form-data y recibe los bytes JPEG sin procesar, o configura `direct_download=false` para obtener metadatos JSON con una URL de descarga prefirmada. Como JPEG no admite transparencia, las áreas transparentes del WebP se combinan sobre un fondo blanco.

---

## Endpoint

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

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

**Entrada aceptada:** archivos `.webp`

**Formato de salida:** `.jpeg` (`image/jpeg`)

---

## Autenticación

Requiere una clave de API privada o un token JWT de una clave pública.

```
X-API-Key: sk_your_private_key
```

O:

```
Authorization: Bearer <jwt_token>
```

---

## Parámetros de la solicitud

| Parámetro | Tipo | Obligatorio | Predeterminado | Descripción |
|-----------|------|----------|---------|-------------|
| `file` | file | Sí | -- | El archivo de imagen `.webp` a convertir. |
| `output_filename` | `string` | No | Nombre del archivo de entrada | Nombre de archivo de salida personalizado. La extensión `.jpeg` se añade automáticamente. |
| `direct_download` | `boolean` | No | `true` | Cuando es `true`, devuelve los bytes de la imagen sin procesar. Cuando es `false`, devuelve metadatos JSON con una URL de descarga prefirmada. |

---

## Detalles de la conversión

- Usa **Pillow** para la conversión directa de formato
- Si el WebP tiene un canal alfa (RGBA), las áreas transparentes se combinan sobre un **fondo blanco**
- La calidad de salida se fija al máximo (100)

<div class="alert alert-info">
<strong>Nota sobre la transparencia:</strong> JPEG no admite transparencia. Cualquier área transparente de tu WebP aparecerá blanca en la salida JPEG.
</div>

---

## Respuesta

### Descarga directa (`direct_download=true`, predeterminado)

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

Devuelve los bytes de la imagen sin procesar.

### Respuesta con metadatos (`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
}
```

---

## Ejemplos de código

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

---

## Respuestas de error

| Estado | Condición |
|--------|-----------|
| `400 Bad Request` | El archivo no es un archivo `.webp` |
| `400 Bad Request` | La conversión de la imagen falló (archivo corrupto o no compatible) |
| `401 Unauthorized` | Falta la clave de API/token JWT o no es válida |
| `402 Payment Required` | Se agotó la cuota mensual de ops |
| `402 Payment Required` | Se alcanzó el límite de almacenamiento |
| `413 Payload Too Large` | El archivo supera el tamaño máximo permitido por tu plan |

---

## Límites

| Límite | Valor |
|-------|-------|
| Tamaño máximo de archivo | Según el plan (Founding: 5 MB) |
| Calidad de salida | Máxima (no configurable) |
| Conversiones mensuales | Según el plan |

---

## Preguntas frecuentes

### ¿Cómo convierto WebP a JPEG con una API REST?

Envía una solicitud `POST` a `/v1/convert/webp-to-jpeg` con tu archivo `.webp` en un cuerpo `multipart/form-data` y autentícate con un encabezado `X-API-Key` o un token JWT `Authorization: Bearer`. La API devuelve el JPEG convertido como bytes de imagen sin procesar de forma predeterminada.

### ¿Qué ocurre con la transparencia al convertir WebP a JPEG?

JPEG no admite transparencia, así que si el WebP tiene un canal alfa (RGBA), las áreas transparentes se combinan sobre un fondo blanco en la salida JPEG.

### ¿Puedo obtener una URL de descarga en lugar de los bytes JPEG sin procesar?

Sí. Configura `direct_download=false` y la API devuelve metadatos JSON que incluyen `presigned_url`, `filename`, `file_size` y `conversion_time_seconds` en lugar de los bytes sin procesar.

### ¿Por qué la API de WebP a JPEG devuelve 402 Payment Required?

Una respuesta `402 Payment Required` significa que se agotó la cuota mensual de ops o se alcanzó el límite de almacenamiento de tu plan.

### ¿Cuál es el tamaño máximo de archivo WebP que puedo subir?

El tamaño máximo de archivo depende del plan (5 MB en el plan Founding). Los archivos que superan el límite de tu plan se rechazan con `413 Payload Too Large`.
