API-dokumentation

Integrera bildoptimering direkt i din applikation med ett enkelt REST API-anrop.

Autentisering

Alla API-anrop kräver en giltig API-nyckel. Skicka nyckeln via headern X-API-Key eller som query-parameter api_key.

Kontakta oss för att få en API-nyckel.

# Via header (rekommenderat)
curl -H "X-API-Key: DIN_API_NYCKEL" ...

# Via query-parameter
curl "...?api_key=DIN_API_NYCKEL"

POST /api/v1/optimize

Optimera en bild och valfritt konvertera till ett annat format. Returnerar den optimerade bilden direkt.

Parametrar
ParameterTypBeskrivning
image Obligatorisk File Bildfilen som ska optimeras. Max 2 MB (kan höjas per API-nyckel) och max 2000×2000 pixlar (gäller ej SVG). Format: JPEG, PNG, WebP, GIF, AVIF, BMP, TIFF, SVG.
output_format Valfri String Konvertera bilden till detta format. Värden: jpg, png, webp, gif, avif. Om utelämnad behålls originalformatet.
ratio Valfri String Maxstorlek på formatet BREDDxHÖJD (t.ex. 1000x1000). Bilden skalas till att få plats inuti rutan, behåller aspect ratio, skalar aldrig upp.
quality Valfri Integer 1–10 Hur aggressiv komprimeringen är. 10 (default) = max kompression med alla lossy-passes. 1 = endast lossless re-encoding (~10% av maxkomprimering, ingen kvalitetsförlust). Mellanvärden filtrerar bort lossy-pass under en kvalitetströskel.
response Valfri String Sätt till json för att få ett JSON-svar med metadata och nedladdningslänk istället för bilden direkt.
Svar (binärt / standard)

Bilden returneras direkt med rätt Content-Type. Extra metadata finns i headers:

HeaderBetydelse
X-Original-SizeOriginalbildens storlek i bytes
X-Optimized-SizeOptimerade filens storlek i bytes
X-Savings-PercentBesparing i procent
Svar (JSON)

Om response=json skickas med. OBS: filen bakom download_url raderas direkt efter första nedladdningen, eller efter retention-tiden (default 10 minuter).

{
  "success": true,
  "original_size": 245832,
  "optimized_size": 98412,
  "savings_percent": 59.9,
  "output_format": "webp",
  "mime_type": "image/webp",
  "download_url": "/download.php?id=abc123...",
  "expires_at": "2025-01-15 14:30:00"
}

Kodexempel

cURL
# Optimera en PNG-bild (returnerar bilden direkt)
curl -X POST \
  -H "X-API-Key: DIN_API_NYCKEL" \
  -F "image=@min-bild.png" \
  --output optimerad.png \
  https://img.klema.se/api/v1/optimize

# Konvertera JPEG till WebP
curl -X POST \
  -H "X-API-Key: DIN_API_NYCKEL" \
  -F "image=@foto.jpg" \
  -F "output_format=webp" \
  --output foto.webp \
  https://img.klema.se/api/v1/optimize

# Skala till max 1000x1000 och konservativ komprimering (quality=3)
curl -X POST \
  -H "X-API-Key: DIN_API_NYCKEL" \
  -F "image=@foto.jpg" \
  -F "ratio=1000x1000" \
  -F "quality=3" \
  --output foto.jpg \
  https://img.klema.se/api/v1/optimize

# Få JSON-svar med metadata
curl -X POST \
  -H "X-API-Key: DIN_API_NYCKEL" \
  -F "image=@min-bild.png" \
  -F "response=json" \
  https://img.klema.se/api/v1/optimize
Python
import requests

# Optimera och ladda ner
response = requests.post(
  "https://img.klema.se/api/v1/optimize",
  headers={"X-API-Key": "DIN_API_NYCKEL"},
  files={"image": open("bild.png", "rb")},
  data={"output_format": "webp"}
)

with open("optimerad.webp", "wb") as f:
  f.write(response.content)

print(f"Besparing: {response.headers['X-Savings-Percent']}%")
JavaScript (Node.js)
const fs = require('fs');
const FormData = require('form-data');

const form = new FormData();
form.append('image', fs.createReadStream('bild.jpg'));
form.append('output_format', 'webp');
form.append('response', 'json');

const res = await fetch('https://img.klema.se/api/v1/optimize', {
  method: 'POST',
  headers: { 'X-API-Key': 'DIN_API_NYCKEL' },
  body: form
});

const data = await res.json();
console.log(`Besparing: ${data.savings_percent}%`);
PHP
$ch = curl_init('https://img.klema.se/api/v1/optimize');

curl_setopt_array($ch, [
  CURLOPT_POST => true,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => ['X-API-Key: DIN_API_NYCKEL'],
  CURLOPT_POSTFIELDS => [
    'image' => new CURLFile('bild.png'),
    'output_format' => 'webp',
  ],
]);

$result = curl_exec($ch);
file_put_contents('optimerad.webp', $result);
curl_close($ch);

Felkoder

HTTP-kodBetydelse
400Ogiltig förfrågan – saknar bild, ogiltigt format, etc.
401Ogiltig eller saknad API-nyckel.
403API:t är inaktiverat.
405Fel HTTP-metod (använd POST).
500Serverfel vid optimering.
// Felsvar returneras alltid som JSON
{
  "error": "Invalid or missing API key."
}

Format som stöds

FormatInputOutput
JPEGJaJa
PNGJaJa
WebPJaJa
GIFJaJa
AVIFJaJa
BMPJaNej
TIFFJaNej
SVGJaNej