JPEG to WebP API#
Convert JPEG images to WebP programmatically with POST /v1/convert/jpeg-to-webp. The endpoint accepts a .jpeg or .jpg upload and produces a high-quality WebP with a smaller file size than the equivalent JPEG, making it an easy image optimization step for web delivery pipelines. Responses return either raw image bytes for direct download or JSON metadata with a presigned download URL.
Endpoint#
POST /v1/convert/jpeg-to-webp
Content-Type: multipart/form-data
Accepted input: .jpeg or .jpg files
Output format: .webp (image/webp)
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 .jpeg or .jpg image file to convert. |
output_filename |
string |
No | Input filename | Custom output filename. The .webp 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
- JPEG's RGB color data is preserved in the WebP output
- Output quality is set to maximum (100)
- WebP typically achieves 25-35% smaller file sizes than JPEG at equivalent visual quality
Response#
Direct Download (direct_download=true, default)#
HTTP 200 OK
Content-Type: image/webp
Content-Disposition: inline; filename="photo_20260405_123456789.webp"
Returns raw image bytes.
Metadata Response (direct_download=false)#
{
"presigned_url": "https://spaces.example.com/...",
"object_key": "env/files/{project_id}/jpeg-to-webp/photo_20260405_123456789.webp",
"filename": "photo_20260405_123456789.webp",
"file_size": 45678,
"conversion_time_seconds": 0.5
}
Code Examples#
Python#
import requests
with open("photo.jpg", "rb") as f:
response = requests.post(
"https://api.enconvert.com/v1/convert/jpeg-to-webp",
headers={"X-API-Key": "sk_your_private_key"},
files={"file": ("photo.jpg", f)}
)
with open("photo_20260405_123456789.webp", "wb") as out:
out.write(response.content)
Node.js#
const form = new FormData();
form.append("file", fs.createReadStream("photo.jpg"));
const response = await fetch("https://api.enconvert.com/v1/convert/jpeg-to-webp", {
method: "POST",
headers: { "X-API-Key": "sk_your_private_key" },
body: form
});
fs.writeFileSync("photo_20260405_123456789.webp", Buffer.from(await response.arrayBuffer()));
PHP#
$ch = curl_init("https://api.enconvert.com/v1/convert/jpeg-to-webp");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["X-API-Key: sk_your_private_key"],
CURLOPT_POSTFIELDS => ["file" => new CURLFile("photo.jpg")]
]);
$output = curl_exec($ch);
curl_close($ch);
file_put_contents("photo_20260405_123456789.webp", $output);
Go#
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, _ := writer.CreateFormFile("file", "photo.jpg")
file, _ := os.Open("photo.jpg")
io.Copy(part, file)
writer.Close()
req, _ := http.NewRequest("POST", "https://api.enconvert.com/v1/convert/jpeg-to-webp", 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 .jpeg or .jpg 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 JPG to WebP with a REST API?#
Send a multipart/form-data POST request to /v1/convert/jpeg-to-webp with your .jpeg or .jpg file in the file field, authenticated via X-API-Key or a Bearer JWT token. By default the API responds with the raw WebP bytes.
How much smaller is WebP than JPEG?#
WebP typically achieves 25-35% smaller file sizes than JPEG at equivalent visual quality. This endpoint converts with Pillow at maximum quality (100), preserving the JPEG's RGB color data.
Can I get a download URL instead of raw image bytes?#
Yes. Set direct_download=false and the API returns JSON metadata including a presigned_url, object_key, filename, file_size, and conversion_time_seconds.
Can I set the WebP output quality or filename?#
Output quality is fixed at maximum (100) and not configurable. You can set a custom output filename with the output_filename parameter; the .webp extension is added automatically.