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.
API-nycklar skapas av en administratör via adminpanelen.
# Via header (rekommenderat)
curl -H "X-API-Key: DIN_API_NYCKEL" ...
# Via query-parameter
curl "...?api_key=DIN_API_NYCKEL"
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
| Parameter | Typ | Beskrivning |
|---|---|---|
image Obligatorisk |
File | Bildfilen som ska optimeras. Max 50 MB. 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. |
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:
| Header | Beskrivning |
|---|---|
X-Original-Size | Originalbildens storlek i bytes |
X-Optimized-Size | Optimerade filens storlek i bytes |
X-Savings-Percent | Besparing i procent |
Svar (JSON)
Om response=json skickas med:
{
"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"
}
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://din-domän.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://din-domän.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://din-domän.se/api/v1/optimize
curl -X POST \
-H "X-API-Key: DIN_API_NYCKEL" \
-F "image=@min-bild.png" \
--output optimerad.png \
https://din-domän.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://din-domän.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://din-domän.se/api/v1/optimize
Python
import requests
# Optimera och ladda ner
response = requests.post(
"https://din-domän.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']}%")
# Optimera och ladda ner
response = requests.post(
"https://din-domän.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://din-domän.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}%`);
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://din-domän.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://din-domän.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);
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-kod | Betydelse |
|---|---|
400 | Ogiltig förfrågan – saknar bild, ogiltigt format, etc. |
401 | Ogiltig eller saknad API-nyckel. |
403 | API:t är inaktiverat. |
405 | Fel HTTP-metod (använd POST). |
500 | Serverfel vid optimering. |
// Felsvar returneras alltid som JSON
{
"error": "Invalid or missing API key."
}
{
"error": "Invalid or missing API key."
}
Format som stöds
| Format | Input | Output | Optimeringsmetod |
|---|---|---|---|
JPEG | Ja | Ja | jpegoptim – förlustfri Huffman-optimering, progressiv encoding |
PNG | Ja | Ja | optipng + pngquant – förlustfri/near-lossless kompression |
WebP | Ja | Ja | cwebp – förlustfri re-encoding med maximal kompression |
GIF | Ja | Ja | gifsicle – förlustfri optimering |
AVIF | Ja | Ja | Imagick – metadata-strippning, re-encoding |
BMP | Ja | Nej | Konvertera till annat format för besparing |
TIFF | Ja | Nej | LZW-kompression, metadata-strippning |
SVG | Ja | Nej | XML-rensning, metadata-borttagning |