API-dokumentasjon
Integrer bildeoptimalisering direkte i applikasjonen din med et enkelt REST API-kall.
Autentisering
Alle API-kall krever en gyldig API-nøkkel. Send nøkkelen via headeren X-API-Key eller som query-parameteren api_key.
Kontakt oss for å få en API-nøkkel.
# Via header (anbefalt)
curl -H "X-API-Key: DIN_API_NØKKEL" ...
# Via query-parameter
curl "...?api_key=DIN_API_NØKKEL"
curl -H "X-API-Key: DIN_API_NØKKEL" ...
# Via query-parameter
curl "...?api_key=DIN_API_NØKKEL"
POST /api/v1/optimize
Optimaliser et bilde og eventuelt konverter til et annet format. Returnerer det optimaliserte bildet direkte.
Parametere
| Parameter | Type | Beskrivelse |
|---|---|---|
image Obligatorisk |
File | Bildefilen som skal optimaliseres. Maks 2 MB (kan heves per API-nøkkel) og maks 2000×2000 piksler (gjelder ikke SVG). Format: JPEG, PNG, WebP, GIF, AVIF, BMP, TIFF, SVG. |
output_format Valgfri |
String | Konverter bildet til dette formatet. Verdier: jpg, png, webp, gif, avif. Hvis utelatt beholdes originalformatet. |
ratio Valgfri |
String | Maksstørrelse i formatet BREDDExHØYDE (f.eks. 1000x1000). Bildet skaleres for å få plass i boksen, beholder aspektforhold, skaleres aldri opp. |
quality Valgfri |
Integer 1–10 | Hvor aggressiv komprimeringen er. 10 (standard) = maks komprimering med alle tapsbaserte pass. 1 = kun tapsfri re-encoding (~10 % av maks komprimering, ingen kvalitetstap). Mellomverdier filtrerer bort tapsbaserte pass under en kvalitetsterskel. |
response Valgfri |
String | Sett til json for å få et JSON-svar med metadata og nedlastingslenke i stedet for bildet direkte. |
Svar (binært / standard)
Bildet returneres direkte med riktig Content-Type. Ekstra metadata finnes i headerne:
| Header | Betydning |
|---|---|
X-Original-Size | Originalbildets størrelse i bytes |
X-Optimized-Size | Den optimaliserte filens størrelse i bytes |
X-Savings-Percent | Besparelse i prosent |
Svar (JSON)
Hvis response=json sendes med. MERK: filen bak download_url slettes rett etter første nedlasting, eller etter 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"
}
"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
# Optimaliser et PNG-bilde (returnerer bildet direkte)
curl -X POST \
-H "X-API-Key: DIN_API_NØKKEL" \
-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ØKKEL" \
-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ØKKEL" \
-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ØKKEL" \
-F "image=@min-bild.png" \
-F "response=json" \
https://img.klema.se/api/v1/optimize
curl -X POST \
-H "X-API-Key: DIN_API_NØKKEL" \
-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ØKKEL" \
-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ØKKEL" \
-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ØKKEL" \
-F "image=@min-bild.png" \
-F "response=json" \
https://img.klema.se/api/v1/optimize
Python
import requests
# Optimaliser og last ned
response = requests.post(
"https://img.klema.se/api/v1/optimize",
headers={"X-API-Key": "DIN_API_NØKKEL"},
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']}%")
# Optimaliser og last ned
response = requests.post(
"https://img.klema.se/api/v1/optimize",
headers={"X-API-Key": "DIN_API_NØKKEL"},
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ØKKEL' },
body: form
});
const data = await res.json();
console.log(`Besparelse: ${data.savings_percent}%`);
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ØKKEL' },
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ØKKEL'],
CURLOPT_POSTFIELDS => [
'image' => new CURLFile('bild.png'),
'output_format' => 'webp',
],
]);
$result = curl_exec($ch);
file_put_contents('optimerad.webp', $result);
curl_close($ch);
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['X-API-Key: DIN_API_NØKKEL'],
CURLOPT_POSTFIELDS => [
'image' => new CURLFile('bild.png'),
'output_format' => 'webp',
],
]);
$result = curl_exec($ch);
file_put_contents('optimerad.webp', $result);
curl_close($ch);
Feilkoder
| HTTP-kode | Betydning |
|---|---|
400 | Ugyldig forespørsel – mangler bilde, ugyldig format, osv. |
401 | Ugyldig eller manglende API-nøkkel. |
403 | API-et er deaktivert. |
405 | Feil HTTP-metode (bruk POST). |
500 | Serverfeil under optimalisering. |
// Feilsvar returneres alltid som JSON
{
"error": "Invalid or missing API key."
}
{
"error": "Invalid or missing API key."
}
Formater som støttes
| Format | Input | Output |
|---|---|---|
JPEG | Ja | Ja |
PNG | Ja | Ja |
WebP | Ja | Ja |
GIF | Ja | Ja |
AVIF | Ja | Ja |
BMP | Ja | Nei |
TIFF | Ja | Nei |
SVG | Ja | Nei |