API برای توسعه‌دهندگان

همین موتور فشرده‌سازی که در صفحه‌ی اصلی می‌بینید، پشت یک API ساده HTTP هم در دسترس است — بدون SDK، بدون وابستگی خاص، فقط یک درخواست HTTP.

۱. گرفتن کلید API

فعلاً صدور کلید فقط توسط مدیر سیستم انجام می‌شود. اگر کلید ندارید، با ما تماس بگیرید تا برایتان بسازیم.

۲. فشرده‌سازی یک عکس

POST /api/v1/shrink

عکس را در بدنه‌ی درخواست (raw binary) یا به‌صورت multipart/form-data با فیلد file بفرستید. کلید API را در هدر Authorization قرار دهید.

پارامترها (query string)

پارامترمقادیرپیش‌فرض
tierhigh · balanced · smallbalanced
formatavif · webp · jpeg · png · autoauto (همون فرمت فایل ورودی)

مثال با curl (ساده‌ترین حالت)

curl -X POST "https://your-domain.example/api/v1/shrink" \
  -H "Authorization: Bearer ie_YOUR_API_KEY" \
  --data-binary @photo.jpg \
  -o photo-compressed.avif

مثال با multipart و انتخاب کیفیت/فرمت

curl -X POST "https://your-domain.example/api/v1/shrink?tier=small&format=webp" \
  -H "Authorization: Bearer ie_YOUR_API_KEY" \
  -F "file=@photo.jpg" \
  -o photo-compressed.webp

مثال با Node.js

const fs = require("fs");

const res = await fetch("https://your-domain.example/api/v1/shrink?tier=balanced", {
  method: "POST",
  headers: {
    "Authorization": "Bearer ie_YOUR_API_KEY",
    "Content-Type": "application/octet-stream",
  },
  body: fs.readFileSync("photo.jpg"),
});

const buffer = Buffer.from(await res.arrayBuffer());
fs.writeFileSync("photo-compressed" + "." + res.headers.get("content-type").split("/")[1], buffer);

console.log("saved:", res.headers.get("x-saved-percent") + "%");

پاسخ

بدنه‌ی پاسخ مستقیماً خود فایل فشرده‌شده است (نه JSON) — با Content-Type درست تنظیم‌شده. آمار در هدرهای پاسخ می‌آید:

هدرتوضیح
X-Source-Bytesحجم فایل ورودی (بایت)
X-Output-Bytesحجم فایل خروجی (بایت)
X-Saved-Percentدرصد کاهش حجم
X-Compression-Countتعداد کل درخواست‌های این کلید تا الان

خطاها

کدمعنی
401کلید API ارسال نشده یا نامعتبر/باطل‌شده است
413فایل بزرگ‌تر از ۲۵ مگابایت است
422فرمت فایل شناسایی نشد یا قابل پردازش نبود
محدودیت‌های فعلی: حداکثر حجم ورودی ۲۵ مگابایت، تصویر خروجی هرگز بزرگ‌تر از تصویر ورودی resize نمی‌شود (این ابزار فقط فشرده‌سازی می‌کند، نه تغییر ابعاد).
این نسخه‌ی اولیه‌ی API است — نرخ محدودسازی (rate limit) و سهمیه‌ی ماهانه هنوز پیاده‌سازی نشده؛ در حال حاضر کلید فقط فعال/غیرفعال است.