API-dokumentation

Integrer billedoptimering direkte i din applikation med et enkelt REST API-kald.

Godkendelse

Alle API-kald kræver en gyldig API-nøgle. Send nøglen via headeren X-API-Key eller som query-parameteren api_key.

Kontakt os for at få en API-nøgle.

# Via header (anbefales)
curl -H "X-API-Key: DIN_API_NØGLE" ...

# Via query-parameter
curl "...?api_key=DIN_API_NØGLE"

POST /api/v1/optimize

Optimer et billede og konverter eventuelt til et andet format. Returnerer det optimerede billede direkte.

Parametre
ParameterTypeBeskrivelse
image Påkrævet File Billedfilen, der skal optimeres. Maks. 2 MB (kan hæves pr. API-nøgle) og maks. 2000×2000 pixels (gælder ikke SVG). Format: JPEG, PNG, WebP, GIF, AVIF, BMP, TIFF, SVG.
output_format Valgfri String Konverter billedet til dette format. Værdier: jpg, png, webp, gif, avif. Hvis udeladt bevares originalformatet.
ratio Valgfri String Maks. størrelse i formatet BREDDExHØJDE (f.eks. 1000x1000). Billedet skaleres til at passe ind i boksen, bevarer aspektforholdet og skaleres aldrig op.
quality Valgfri Integer 1–10 Hvor aggressiv komprimeringen er. 10 (standard) = maks. komprimering med alle tabsgivende pass. 1 = kun tabsfri re-encoding (~10 % af maks. komprimering, intet kvalitetstab). Mellemværdier filtrerer tabsgivende pass under en kvalitetstærskel fra.
response Valgfri String Sæt til json for at få et JSON-svar med metadata og downloadlink i stedet for billedet direkte.
Svar (binært / standard)

Billedet returneres direkte med den rigtige Content-Type. Ekstra metadata findes i headers:

HeaderBetydning
X-Original-SizeOriginalbilledets størrelse i bytes
X-Optimized-SizeDen optimerede fils størrelse i bytes
X-Savings-PercentBesparelse i procent
Svar (JSON)

Hvis response=json sendes med. BEMÆRK: filen bag download_url slettes straks efter første download, eller efter retention-tiden (standard 10 minutter).

{
  "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"
}

Kodeeksempler

cURL
# Optimer et PNG-billede (returnerer billedet direkte)
curl -X POST \
  -H "X-API-Key: DIN_API_NØGLE" \
  -F "image=@min-bild.png" \
  --output optimerad.png \
  https://img.klema.se/api/v1/optimize

# Konverter JPEG til WebP
curl -X POST \
  -H "X-API-Key: DIN_API_NØGLE" \
  -F "image=@foto.jpg" \
  -F "output_format=webp" \
  --output foto.webp \
  https://img.klema.se/api/v1/optimize

# Skaler til maks. 1000x1000 og konservativ komprimering (quality=3)
curl -X POST \
  -H "X-API-Key: DIN_API_NØGLE" \
  -F "image=@foto.jpg" \
  -F "ratio=1000x1000" \
  -F "quality=3" \
  --output foto.jpg \
  https://img.klema.se/api/v1/optimize

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

# Optimer og download
response = requests.post(
  "https://img.klema.se/api/v1/optimize",
  headers={"X-API-Key": "DIN_API_NØGLE"},
  files={"image": open("bild.png", "rb")},
  data={"output_format": "webp"}
)

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

print(f"Besparelse: {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_NØGLE' },
  body: form
});

const data = await res.json();
console.log(`Besparelse: ${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_NØGLE'],
  CURLOPT_POSTFIELDS => [
    'image' => new CURLFile('bild.png'),
    'output_format' => 'webp',
  ],
]);

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

Fejlkoder

HTTP-kodeBetydning
400Ugyldig anmodning – mangler billede, ugyldigt format osv.
401Ugyldig eller manglende API-nøgle.
403API'et er deaktiveret.
405Forkert HTTP-metode (brug POST).
500Serverfejl under optimering.
// Fejlsvar returneres altid som JSON
{
  "error": "Invalid or missing API key."
}

Understøttede formater

FormatInputOutput
JPEGJaJa
PNGJaJa
WebPJaJa
GIFJaJa
AVIFJaJa
BMPJaNej
TIFFJaNej
SVGJaNej