REST API · v1

مستندات API مربوط به MakeFav

بسته‌های کامل favicon را از کد خودتان، اسکریپت‌های بیلد و پایپ‌لاین‌های CI بسازید. با یک درخواست، هر تصویری به favicon.ico، آیکون‌های Apple touch، آیکون‌های Android و PWA، یک web manifest و کد HTML آماده تبدیل می‌شود.

در این صفحه

شروع سریع

API مربوط به MakeFav یک REST API ساده مبتنی بر HTTPS و JSON است. همه اندپوینت‌ها زیر یک آدرس پایه قرار دارند:

https://makefav.com/api/v1
  1. ایجاد حساب کاربری رایگان
    ثبت‌نام کنید، آدرس ایمیل خود را تأیید کنید و اشتراک خبرنامه MakeFav را فعال نگه دارید – این تنها شرط طرح رایگان است.
  2. ایجاد کلید API
    صفحه کلیدهای API را در حساب کاربری خود باز کنید و یک کلید شخصی بسازید. این کلید با mf_ شروع می‌شود و فقط یک بار نمایش داده می‌شود، پس آن را در جای امنی ذخیره کنید. مدیریت کلیدهای API
  3. ارسال اولین درخواست
    یک تصویر را به اندپوینت generate ارسال کنید و فایل ZIP دریافتی را ذخیره کنید:
curl --fail-with-body -sS https://makefav.com/api/v1/generate \
  -H "Authorization: Bearer $MAKEFAV_API_KEY" \
  -F "[email protected]" \
  -F "app_name=My App" \
  -F "theme_color=#2f9e68" \
  -F "radius=20" \
  -o favicons.zip

Unzip favicons.zip, upload the files to your website and paste the HTML code from the end of readme-makefav.txt into the <head> of every page.

احراز هویت

هر درخواست به یک اندپوینت محافظت‌شده باید شامل یک کلید API شخصی باشد. می‌توانید در هر زمان در صفحه حساب کاربری خود کلیدها را ایجاد کنید، نام‌گذاری کنید و لغو کنید: کلیدهای API

Send the key as a bearer token in the Authorization header, or – if your HTTP client makes that awkward – in the X-API-Key header. Both are equivalent.

Authorization: Bearer mf_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

# or, alternatively
X-API-Key: mf_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
کلیدها متعلق به کاربری هستند که ایمیل او تأیید شده و اشتراک خبرنامه‌اش فعال است (شرط طرح رایگان). اگر ایمیل تأیید نشده باشد، خبرنامه غیرفعال شده باشد یا حساب مسدود شده باشد، هر درخواست خطای 403 Forbidden برمی‌گرداند.
با کلیدهای API مثل رمز عبور رفتار کنید: آن‌ها را روی سرور یا در secretهای CI نگه دارید، نه در کد مرورگر، اپلیکیشن‌های موبایل یا مخزن‌های عمومی. اگر کلیدی لو رفت، فوراً آن را لغو کنید.

Missing or invalid keys return 401 Unauthorized. The GET /sizes and GET /openapi.json endpoints do not require a key.

محدودیت نرخ درخواست

به‌طور پیش‌فرض هر کلید API می‌تواند در هر ساعت 100 درخواست ارسال کند. هر پاسخ احراز هویت‌شده نشان می‌دهد در چه وضعیتی هستید:

هدرتوضیحات
X-RateLimit-Limitحداکثر تعداد درخواست مجاز در بازه فعلی.
X-RateLimit-Remainingدرخواست‌های باقی‌مانده در بازه فعلی.
X-RateLimit-Resetزمان‌سنج Unix (ثانیه، UTC) برای بازنشانی بازه.
HTTP/1.1 200 OK
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 97
X-RateLimit-Reset: 1767225600

When the limit is exceeded the API responds with HTTP 429 and the error code rate_limited. Wait until the time in X-RateLimit-Reset before retrying – do not retry in a tight loop.

HTTP/1.1 429 Too Many Requests
Content-Type: application/json
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1767225600

{"error": {"code": "rate_limited", "message": "Rate limit exceeded. Try again after the reset time."}}

You can check your current quota at any time with GET /me.

اندپوینت‌ها

اندپوینتاحراز هویتتوضیحات
POST /generateکلید APIساخت یک بسته کامل favicon.
GET /meکلید APIحساب کاربری شما و وضعیت فعلی محدودیت نرخ درخواست.
GET /sizesهیچ‌کدامفهرست همه فایل‌های آیکون و اندازه‌هایی که مولد تولید می‌کند.
GET /openapi.jsonهیچ‌کداممشخصات OpenAPI 3.1 قابل‌خواندن برای ماشین.

ساخت بسته فاویکون

POST/generate

یک بسته کامل فاویکون را از یک تصویر منبع می‌سازد. تصویر را به یکی از سه روش زیر ارسال کنید:

نوع محتوافیلد تصویرتوضیحات
multipart/form-dataimageآپلود فایل. پیشنهادی – کارآمدترین گزینه.
application/jsonimage_base64Base64-encoded image, either raw base64 or a data URL such as data:image/png;base64,iVBOR….
application/jsonimage_urlنشانی عمومی http یا https تصویر. سرور آن را دانلود می‌کند (حداکثر ۱۰ مگابایت).

فرمت‌های ورودی پشتیبانی‌شده: PNG، JPG، WebP، AVIF، GIF، BMP، SVG و ICO. حداکثر حجم فایل: ۱۰ مگابایت.

پارامترها

همه پارامترها اختیاری هستند. آن‌ها را به‌صورت فیلدهای فرم (multipart) یا ویژگی‌های JSON ارسال کنید. مقادیر نامعتبر به مقدار پیش‌فرض برمی‌گردند.

نامنوع / محدودهپیش‌فرضتوضیحات
app_nameرشته، حداکثر ۶۰ نویسهMy Websiteنام وب‌سایت یا اپلیکیشن شما که در manifest.json و صفحه نمونه استفاده می‌شود.
short_nameرشته، حداکثر ۲۴ نویسه۱۲ نویسه اول app_nameنام کوتاهی که زیر آیکون در صفحه اصلی اندروید نمایش داده می‌شود.
theme_color#rrggbb#ffffffرنگ رابط کاربری مرورگر (متاتگ theme-color و manifest).
tile_color#rrggbbمانند theme_colorرنگ پس‌زمینه کاشی‌های Start در Windows.
backgroundtransparent | #rrggbbtransparentپس‌زمینه آیکون‌های مرورگر، Android و Windows.
apple_background#rrggbb#ffffffپس‌زمینه آیکون‌های Apple touch و آیکون maskable (iOS از شفافیت پشتیبانی نمی‌کند). اگر پس‌زمینه یک رنگ باشد نادیده گرفته می‌شود و همان رنگ استفاده می‌شود.
paddingعدد صحیح، ۰ تا ۴۰ (٪)0فضای خالی اطراف تصویر، به‌صورت درصدی از اندازه آیکون.
radiusعدد صحیح، ۰ تا ۵۰ (٪)0گوشه‌های گرد. مقدار ۵۰ دایره می‌سازد. روی آیکون‌های Apple اعمال نمی‌شود، چون iOS خودش آن‌ها را گرد می‌کند.
zoomعدد صحیح، ۵۰ تا ۴۰۰ (٪)100مقیاس تصویر داخل آیکون. مقادیر بالاتر از ۱۰۰ تصویر را برش می‌دهند.
offset_x, offset_yعدد، از ۱- تا ۱0تصویر را به‌صورت افقی / عمودی جابه‌جا می‌کند، به‌صورت کسری از اندازه آیکون.
pathرشته/پوشه‌ای روی سرور شما که آیکون‌ها در آن قرار می‌گیرند. در قطعه HTML، manifest و browserconfig استفاده می‌شود.
displaystandalone | fullscreen | minimal-ui | browserstandaloneحالت نمایش PWA که در manifest نوشته می‌شود.
pixelatedauto | 1 | 0autoمقیاس‌دهی تیز با نزدیک‌ترین همسایه برای پیکسل‌آرت. حالت auto آن را برای تصاویر ۶۴ پیکسل یا کوچک‌تر فعال می‌کند.
maskable1 | 01فایل maskable-icon-512x512.png را نیز با حاشیه ناحیه امن برای آیکون‌های تطبیقی Android می‌سازد.
ico_sizesفهرست جداشده با کاما از 16، 24، 32، 48، 64، 128، 25616,32,48اندازه‌های جاسازی‌شده در favicon.ico.
groupsفهرست جداشده با کاما از favicon، apple، android، msfavicon,apple,android,msمجموعه آیکون‌هایی که ساخته می‌شوند: فاویکون‌های مرورگر، آیکون‌های Apple touch، آیکون‌های Android / PWA و کاشی‌های Windows.
formatzip | jsonzipفرمت پاسخ – پایین را ببینید.

پاسخ

format=zip
Binary ZIP archive with Content-Type: application/zip and Content-Disposition: attachment. Default.
format=json
JSON object with the package id (32 hex characters), the html snippet for your <head> and a files array; each file has name, mime, size (bytes) and base64 contents.

نمونه درخواست – multipart، پاسخ ZIP

curl --fail-with-body -sS https://makefav.com/api/v1/generate \
  -H "Authorization: Bearer $MAKEFAV_API_KEY" \
  -F "[email protected]" \
  -F "app_name=My App" \
  -F "theme_color=#2f9e68" \
  -F "radius=20" \
  -o favicons.zip
HTTP/1.1 200 OK
Content-Type: application/zip
Content-Disposition: attachment
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 99
X-RateLimit-Reset: 1767225600

<binary ZIP data>

نمونه درخواست – JSON با نشانی تصویر، پاسخ JSON

curl --fail-with-body -sS https://makefav.com/api/v1/generate \
  -H "Authorization: Bearer $MAKEFAV_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "image_url": "https://example.com/logo.png",
    "app_name": "My App",
    "theme_color": "#2f9e68",
    "radius": 20,
    "groups": "favicon,apple,android",
    "format": "json"
  }'
{
  "id": "9f86d081884c7d659a2feaa0c55ad015",
  "html": "<link rel=\"apple-touch-icon\" sizes=\"57x57\" href=\"/apple-icon-57x57.png\">\n…\n<meta name=\"theme-color\" content=\"#2f9e68\">",
  "files": [
    {"name": "favicon.ico", "mime": "image/x-icon", "size": 15086, "base64": "AAABAAMAEBAAAAEAIABoBAAANgAAACAg…"},
    {"name": "favicon-16x16.png", "mime": "image/png", "size": 612, "base64": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQ…"},
    {"name": "manifest.json", "mime": "application/json", "size": 1094, "base64": "ewogICAgIm5hbWUiOiAiTXkgQXBwIiwK…"}
  ]
}

دریافت اطلاعات حساب

GET/me

کاربری را که کلید API متعلق به اوست و وضعیت فعلی محدودیت نرخ را برمی‌گرداند. برای بررسی اعتبار کلید مفید است. نیاز به احراز هویت دارد؛ بدون پارامتر.

نمونه درخواست

curl -sS https://makefav.com/api/v1/me \
  -H "Authorization: Bearer $MAKEFAV_API_KEY"

نمونه پاسخ

{
  "id": 1,
  "email": "[email protected]",
  "name": "Jane Doe",
  "rate_limit": {"limit": 100, "remaining": 97, "reset": 1767225600}
}

فهرست اندازه‌های آیکون

GET/sizes

Returns every icon file the generator can produce, with its pixel size and group. No authentication and no parameters. The group value matches the groups parameter of POST /generate.

نمونه درخواست

curl -sS https://makefav.com/api/v1/sizes

نمونه پاسخ

{
  "files": [
    {"name": "favicon-16x16.png", "size": 16, "group": "favicon"},
    {"name": "favicon-32x32.png", "size": 32, "group": "favicon"},
    {"name": "apple-touch-icon.png", "size": 180, "group": "apple"},
    {"name": "android-icon-192x192.png", "size": 192, "group": "android"},
    {"name": "ms-icon-144x144.png", "size": 144, "group": "ms"}
  ]
}

مشخصات OpenAPI

GET/openapi.json

توضیحات OpenAPI 3.1 این API را برمی‌گرداند. بدون نیاز به احراز هویت. آن را در Postman، Insomnia یا Swagger UI وارد کنید، یا برای ساخت کلاینت تایپ‌دار برای زبان خود از آن استفاده کنید.

curl -sS https://makefav.com/api/v1/openapi.json -o makefav-openapi.json

خطاها

Successful requests return HTTP 200. Every error returns a JSON body with a stable, machine-readable code and a human-readable message. Always branch on the code, not on the message text.

HTTP/1.1 422 Unprocessable Content
Content-Type: application/json

{
  "error": {
    "code": "invalid_image",
    "message": "The uploaded file could not be decoded as an image."
  }
}
وضعیت HTTPکد خطامفهوم
400bad_requestدرخواست نادرست است؛ مثلاً هیچ تصویری ارسال نشده یا بدنه JSON نامعتبر است.
401unauthorizedکلید API وجود ندارد یا نامعتبر است.
403forbiddenایمیل صاحب کلید تأیید نشده، اشتراک خبرنامه غیرفعال است یا حساب مسدود شده است.
413file_too_largeحجم تصویر بیشتر از ۱۰ مگابایت است.
415unsupported_typeنوع فایل یا نوع محتوای درخواست پشتیبانی نمی‌شود.
422invalid_imageفایل به‌عنوان تصویر قابل رمزگشایی نبود یا نشانی تصویر قابل دانلود نبود.
429rate_limitedدرخواست‌های بیش از حد. تا X-RateLimit-Reset صبر کنید.
500server_errorمشکلی در سمت ما رخ داده است. بعداً دوباره تلاش کنید؛ اگر ادامه داشت با پشتیبانی تماس بگیرید.

فایل‌های خروجی

With all groups enabled, a package contains the files below. Files from disabled groups are left out.

فایلاندازهگروه
favicon.ico16, 32, 48 (قابل تنظیم)همیشه
favicon-16x16.png16 × 16favicon
favicon-32x32.png32 × 32favicon
favicon-96x96.png96 × 96favicon
apple-icon-57x57.png57 × 57apple
apple-icon-60x60.png60 × 60apple
apple-icon-72x72.png72 × 72apple
apple-icon-76x76.png76 × 76apple
apple-icon-114x114.png114 × 114apple
apple-icon-120x120.png120 × 120apple
apple-icon-144x144.png144 × 144apple
apple-icon-152x152.png152 × 152apple
apple-icon-180x180.png180 × 180apple
apple-icon.png192 × 192apple
apple-icon-precomposed.png192 × 192apple
apple-touch-icon.png180 × 180apple
android-icon-36x36.png36 × 36android
android-icon-48x48.png48 × 48android
android-icon-72x72.png72 × 72android
android-icon-96x96.png96 × 96android
android-icon-144x144.png144 × 144android
android-icon-192x192.png192 × 192android
android-icon-512x512.png512 × 512android
web-app-manifest-192x192.png192 × 192android
web-app-manifest-512x512.png512 × 512android
maskable-icon-512x512.png512 × 512android
ms-icon-70x70.png70 × 70ms
ms-icon-144x144.png144 × 144ms
ms-icon-150x150.png150 × 150ms
ms-icon-310x310.png310 × 310ms

فایل‌های اضافی

فایلشاملتوضیحات
favicon.svgفقط برای ورودی SVG بدون برش، زوم، حاشیه، گوشه گرد یا پس‌زمینهنسخه پاک‌سازی‌شده SVG شما برای مرورگرهایی که از فاویکون برداری پشتیبانی می‌کنند.
manifest.json, site.webmanifestandroidmanifest وب‌اپ برای Android و PWAهای قابل نصب (دو نسخه یکسان).
browserconfig.xmlmsپیکربندی کاشی Windows با رنگ کاشی شما.
readme-makefav.txtهمیشهراهنمای نصب که در پایان آن کد HTML مخصوص <head> شما قرار دارد.

نمونه کد

Each example uploads logo.png with a few options and saves favicons.zip, handling API errors. Set the environment variable MAKEFAV_API_KEY to your API key first.

آپلود multipart:

# Multipart upload (recommended). --fail-with-body exits non-zero on HTTP errors
# and still saves the JSON error body, so you can inspect it.
curl --fail-with-body -sS https://makefav.com/api/v1/generate \
  -H "Authorization: Bearer $MAKEFAV_API_KEY" \
  -F "[email protected]" \
  -F "app_name=My App" \
  -F "theme_color=#2f9e68" \
  -F "radius=20" \
  -o favicons.zip \
  || { echo "Request failed:"; cat favicons.zip; rm -f favicons.zip; exit 1; }

بدنه JSON با تصویر کدگذاری‌شده base64 (نیازمند jq):

# JSON body with a base64-encoded image (built with jq to avoid argument length limits)
base64 < logo.png | tr -d '\n' > logo.b64
jq -n --rawfile img logo.b64 \
  '{image_base64: $img, app_name: "My App", theme_color: "#2f9e68", radius: 20}' \
| curl --fail-with-body -sS https://makefav.com/api/v1/generate \
    -H "Authorization: Bearer $MAKEFAV_API_KEY" \
    -H "Content-Type: application/json" \
    --data-binary @- \
    -o favicons.zip \
  || { echo "Request failed:"; cat favicons.zip; rm -f favicons.zip; exit 1; }

استفاده در HTML

Upload all files to the folder you set with path, then paste the snippet into the <head> of every page. It is included at the end of readme-makefav.txt in the package and, with format=json, returned in the html field. Example for the options used in the code examples above:

<head>
  <meta charset="utf-8">
  <title>My App</title>

  <link rel="apple-touch-icon" sizes="57x57" href="/apple-icon-57x57.png">
  <link rel="apple-touch-icon" sizes="60x60" href="/apple-icon-60x60.png">
  <link rel="apple-touch-icon" sizes="72x72" href="/apple-icon-72x72.png">
  <link rel="apple-touch-icon" sizes="76x76" href="/apple-icon-76x76.png">
  <link rel="apple-touch-icon" sizes="114x114" href="/apple-icon-114x114.png">
  <link rel="apple-touch-icon" sizes="120x120" href="/apple-icon-120x120.png">
  <link rel="apple-touch-icon" sizes="144x144" href="/apple-icon-144x144.png">
  <link rel="apple-touch-icon" sizes="152x152" href="/apple-icon-152x152.png">
  <link rel="apple-touch-icon" sizes="180x180" href="/apple-icon-180x180.png">
  <link rel="icon" type="image/png" sizes="192x192" href="/android-icon-192x192.png">
  <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
  <link rel="icon" type="image/png" sizes="96x96" href="/favicon-96x96.png">
  <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
  <link rel="icon" href="/favicon.ico" sizes="any">
  <link rel="manifest" href="/manifest.json">
  <meta name="msapplication-TileColor" content="#2f9e68">
  <meta name="msapplication-TileImage" content="/ms-icon-144x144.png">
  <meta name="msapplication-config" content="/browserconfig.xml">
  <meta name="theme-color" content="#2f9e68">
</head>

پس از استقرار، کش مرورگر را پاک کنید یا سایت را در یک پنجره خصوصی باز کنید – مرورگرها فاویکون‌ها را به‌شدت کش می‌کنند.

تاریخچه تغییرات

v1

  • انتشار عمومی اولیه REST API مربوط به MakeFav.
  • Endpoints POST /generate, GET /me, GET /sizes and GET /openapi.json.
  • فرمت‌های پاسخ ZIP و JSON، ورودی تصویر به‌صورت multipart، base64 و URL.
  • کلیدهای API شخصی با ۱۰۰ درخواست در ساعت.

نسخه ۱ پایدار است: ما فقط پارامترها و فیلدهای اختیاری اضافه می‌کنیم. تغییرات ناسازگار با اطلاع قبلی در قالب نسخه جدید منتشر می‌شوند.

پشتیبانی

سؤال یا گزارش اشکال دارید یا به محدودیت نرخ بالاتری نیاز دارید؟ خوشحال می‌شویم کمک کنیم. لطفاً زمان درخواست و کد خطا را در پیام خود بنویسید – هرگز کلید API خود را ننویسید.