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.