Visao geral
A API processa a imagem em memoria durante a requisicao. Use POST /api/v1/convert quando quiser receber o arquivo convertido e POST /api/v1/preview quando quiser calcular o tamanho final antes de decidir baixar.
Para automacoes, Insomnia e integrações backend, prefira application/json com a imagem em imageBase64. Os endpoints tambem aceitam multipart/form-data com o campo image.
Endpoints
POST /api/v1/convert
download binario
Converte a imagem e retorna o arquivo final no corpo da resposta. O nome sugerido segue o padrao nome-original-convertida.ext.
curl -X POST https://bytepress.pedrovs.dev/api/v1/convert \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
--data '{
"imageBase64": "...",
"filename": "foto.png",
"format": "webp",
"quality": 20
}' \
--output foto.webp
POST /api/v1/preview
json de simulacao
Converte a imagem em memoria e retorna os tamanhos em bytes. Use para automacoes que precisam escolher qualidade ou formato antes do download.
curl -X POST https://bytepress.pedrovs.dev/api/v1/preview \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
--data '{
"imageBase64": "...",
"filename": "foto.png",
"format": "webp",
"quality": 20
}'
Parametros
Campo
Obrigatorio
Descricao
imageBase64
Sim no JSON
Imagem codificada em base64. Aceita base64 puro ou data URL. A imagem decodificada tem limite de 32 MB e 40 megapixels.
filename
Nao
Nome original usado para sugerir o nome do arquivo convertido. Exemplo: foto.png.
image
Sim no multipart
Arquivo de imagem em PNG, JPEG, GIF ou WebP quando usar multipart/form-data.
format
Nao
Formato de saida: webp, jpeg, jpg, png ou gif. Padrao: webp.
quality
Nao
Numero de 1 a 100. Padrao: 80. Valores menores reduzem bytes e podem perder mais detalhe.
JSON em base64 aumenta o tamanho do corpo da requisicao em aproximadamente 33%. O limite continua sendo calculado sobre a imagem decodificada.
Respostas
/api/v1/convert
Descricao
Status
200 OK com o arquivo convertido no corpo da resposta.
Headers
Content-Type, Content-Disposition, X-Original-Size e X-Converted-Size.
HTTP/1.1 200 OK
Content-Type: image/webp
Content-Disposition: attachment; filename="foto-convertida.webp"
X-Original-Size: 124305
X-Converted-Size: 42118
/api/v1/preview
Descricao
Status
200 OK com application/json.
Campos
originalSize, convertedSize, savedBytes, savedPercent e format.
{
"originalSize": 124305,
"convertedSize": 42118,
"savedBytes": 82187,
"savedPercent": 66.1,
"format": "webp"
}
Exemplos
JavaScript com fetch e JSON para baixar o arquivo convertido:
function arrayBufferToBase64(buffer) {
const bytes = new Uint8Array(buffer);
let binary = "";
for (let i = 0; i < bytes.length; i += 8192) {
binary += String.fromCharCode(...bytes.subarray(i, i + 8192));
}
return btoa(binary);
}
const imageBase64 = arrayBufferToBase64(await file.arrayBuffer());
const response = await fetch("https://bytepress.pedrovs.dev/api/v1/convert", {
method: "POST",
headers: {
Authorization: "Bearer sk_live_xxx",
"Content-Type": "application/json"
},
body: JSON.stringify({
imageBase64,
filename: file.name,
format: "webp",
quality: 20
})
});
if (!response.ok) {
throw new Error(await response.text());
}
const blob = await response.blob();
Automacao em shell com JSON para converter uma imagem:
base64_image="$(base64 -i foto.png | tr -d '\n')"
curl -sS -X POST https://bytepress.pedrovs.dev/api/v1/convert \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
--data "{
\"imageBase64\":\"${base64_image}\",
\"filename\":\"foto.png\",
\"format\":\"webp\",
\"quality\":20
}" \
--output foto.webp
Multipart continua disponivel para scripts que preferem envio de arquivo direto:
for image in *.png; do
name="${image%.*}"
curl -sS -X POST https://bytepress.pedrovs.dev/api/v1/convert \
-H "Authorization: Bearer sk_live_xxx" \
-F "image=@${image}" \
-F "format=webp" \
-F "quality=75" \
--output "${name}.webp"
done
Erros
400 Bad Request quando o arquivo falta, passa do limite ou tem formato invalido.
401 Unauthorized quando a API key falta, e invalida ou esta inativa.
402 Payment Required quando o limite mensal do plano foi excedido.
405 Method Not Allowed quando o metodo nao e POST.
A API usa sempre API key, quota e plano ativo.