API Documentation
Integrate image compression into your applications with our REST API.
Quick Start
1
Get your API Key
Sign up for Pro to get API access
2
Make your first request
Include your API key in the X-API-Key header
curl -X POST https://api.squish.dev/api/v1/compress/single \
-H "X-API-Key: sq_live_your_key_here" \
-F "image=@photo.jpg"3
Get compressed image
Response includes base64-encoded compressed image and savings stats
Authentication
All API requests require authentication via the X-API-Key header.
X-API-Key: sq_live_your_api_key_hereKeep your API key secret! Don't expose it in client-side code or public repositories.
Endpoints
POST
/api/v1/compress/singleCompress a single image
Auth: API Key
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| image | file | Yes | Image file (JPEG, PNG, WebP) |
| quality | number | No | Compression quality 1-100 (default: 80) |
| format | string | No | Output format: jpeg, png, webp |
| maxWidth | number | No | Maximum width in pixels |
| maxHeight | number | No | Maximum height in pixels |
Example Request
curl -X POST https://api.squish.dev/api/v1/compress/single \
-H "X-API-Key: sq_live_your_key_here" \
-F "image=@photo.jpg" \
-F "quality=80" \
-F "format=webp"Response
{
"success": true,
"original": { "size": 2457600 },
"compressed": { "size": 312000 },
"savings": "87%",
"image": "base64_encoded_image..."
}POST
/api/v1/compress/bulkCompress multiple images (returns ZIP)
Auth: API Key (Pro)
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| images | files | Yes | Multiple image files (max 20) |
| quality | number | No | Compression quality 1-100 |
| format | string | No | Output format: jpeg, png, webp |
Example Request
curl -X POST https://api.squish.dev/api/v1/compress/bulk \
-H "X-API-Key: sq_live_your_key_here" \
-F "images=@photo1.jpg" \
-F "images=@photo2.jpg" \
-F "images=@photo3.jpg" \
-F "quality=75"Response
{
"success": true,
"count": 5,
"zip": "base64_encoded_zip..."
}GET
/api/v1/usageGet current usage statistics
Auth: API Key or JWT
Example Request
curl https://api.squish.dev/api/v1/usage \
-H "X-API-Key: sq_live_your_key_here"Response
{
"tier": "pro",
"usage": {
"images": 150,
"bytesSaved": 52428800
},
"limits": {
"maxImages": 2000,
"maxFileSize": 26214400
},
"remaining": 1850
}Rate Limits
| Tier | Images/Month | Max File Size | CDN Retention | Bulk API |
|---|---|---|---|---|
| Free | 50 | 5 MB | 24 hours | No |
| Pro | 2,000 | 25 MB | 7 days | Yes |
| Team | 10,000 | 50 MB | 30 days | Yes |
| Enterprise | 100,000 | 100 MB | Unlimited | Yes |
Code Examples
JavaScript / Node.js
const FormData = require('form-data');
const fs = require('fs');
const axios = require('axios');
const form = new FormData();
form.append('image', fs.createReadStream('photo.jpg'));
form.append('quality', '80');
const response = await axios.post(
'https://api.squish.dev/api/v1/compress/single',
form,
{
headers: {
'X-API-Key': 'sq_live_your_key_here',
...form.getHeaders(),
},
}
);
// Save compressed image
const buffer = Buffer.from(response.data.image, 'base64');
fs.writeFileSync('compressed.jpg', buffer);Python
import requests
import base64
url = 'https://api.squish.dev/api/v1/compress/single'
headers = {'X-API-Key': 'sq_live_your_key_here'}
with open('photo.jpg', 'rb') as f:
files = {'image': f}
data = {'quality': '80', 'format': 'webp'}
response = requests.post(url, headers=headers, files=files, data=data)
result = response.json()
print(f"Savings: {result['savings']}")
# Save compressed image
with open('compressed.webp', 'wb') as f:
f.write(base64.b64decode(result['image']))