Back to home

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_here

Keep your API key secret! Don't expose it in client-side code or public repositories.

Endpoints

POST/api/v1/compress/single

Compress a single image

Auth: API Key

Parameters

NameTypeRequiredDescription
imagefileYesImage file (JPEG, PNG, WebP)
qualitynumberNoCompression quality 1-100 (default: 80)
formatstringNoOutput format: jpeg, png, webp
maxWidthnumberNoMaximum width in pixels
maxHeightnumberNoMaximum 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/bulk

Compress multiple images (returns ZIP)

Auth: API Key (Pro)

Parameters

NameTypeRequiredDescription
imagesfilesYesMultiple image files (max 20)
qualitynumberNoCompression quality 1-100
formatstringNoOutput 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/usage

Get 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

TierImages/MonthMax File SizeCDN RetentionBulk API
Free505 MB24 hoursNo
Pro2,00025 MB7 daysYes
Team10,00050 MB30 daysYes
Enterprise100,000100 MBUnlimitedYes

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']))