---
seo_title: API WebP a HEIC: Convierte imágenes a HEIC | EnConvert
meta_desc: Convierte WebP a HEIC con POST /v1/convert/webp-to-heic. Carga multipart, pillow-heif a calidad 100, bytes HEIC o una URL de descarga prefirmada.
keywords: convertir webp a heic api, api para convertir webp a heic, webp a heic conversor api, convertir webp a heic con api rest, convertir webp a heic por programación, api webp a heif, imagen webp a heic
---

# API de WebP a HEIC

Convierte WebP a HEIC con el endpoint `POST /v1/convert/webp-to-heic`, que convierte una imagen WebP al formato HEIC (High Efficiency Image Container) con la máxima calidad. Las áreas transparentes se combinan sobre un fondo blanco, ya que HEIC no admite transparencia. Las respuestas devuelven bytes HEIC sin procesar de forma predeterminada, o metadatos JSON con una URL de descarga prefirmada cuando `direct_download=false`.

---

## Endpoint

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

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

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

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

---

## Autenticación

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

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

O bien:

```
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 `.heic` 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** junto con **pillow-heif** para la codificación HEIC
- 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> HEIC no admite transparencia. Cualquier área transparente de tu WebP aparecerá blanca en la salida HEIC.
</div>

---

## Respuesta

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

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

Devuelve los bytes de la imagen sin procesar.

### Respuesta de metadatos (`direct_download=false`)

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

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

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

### PHP

```php
$ch = curl_init("https://api.enconvert.com/v1/convert/webp-to-heic");
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.heic", $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-heic", 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 o el token JWT, o no es válido |
| `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 el 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 una imagen WebP a HEIC con una API REST?

Envía una solicitud POST `multipart/form-data` a `/v1/convert/webp-to-heic` con el archivo `.webp` en el campo `file`, autenticada mediante `X-API-Key` o un Bearer JWT. La respuesta devuelve bytes HEIC sin procesar de forma predeterminada, o define `direct_download=false` para recibir JSON con una URL de descarga prefirmada.

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

HEIC no admite transparencia. Si el WebP tiene un canal alfa (RGBA), las áreas transparentes se combinan sobre un fondo blanco en la salida HEIC.

### ¿Puedo elegir la calidad de salida del HEIC?

No. La calidad de salida está fijada al máximo (100) y no es configurable. La codificación usa Pillow con pillow-heif.

### ¿Por qué el endpoint de WebP a HEIC devuelve un error 413?

Se devuelve `413 Payload Too Large` cuando el archivo subido supera el tamaño máximo de tu plan (5 MB en el plan Founding).
