API برای توسعهدهندگان
همین موتور فشردهسازی که در صفحهی اصلی میبینید، پشت یک API ساده HTTP هم در دسترس است — بدون SDK، بدون وابستگی خاص، فقط یک درخواست HTTP.
۱. گرفتن کلید API
فعلاً صدور کلید فقط توسط مدیر سیستم انجام میشود. اگر کلید ندارید، با ما تماس بگیرید تا برایتان بسازیم.
۲. فشردهسازی یک عکس
POST /api/v1/shrink
عکس را در بدنهی درخواست (raw binary) یا بهصورت multipart/form-data با فیلد file بفرستید. کلید API را در هدر Authorization قرار دهید.
پارامترها (query string)
| پارامتر | مقادیر | پیشفرض |
|---|---|---|
tier | high · balanced · small | balanced |
format | avif · webp · jpeg · png · auto | auto (همون فرمت فایل ورودی) |
مثال با 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) و سهمیهی ماهانه هنوز پیادهسازی نشده؛ در حال حاضر کلید فقط فعال/غیرفعال است.