REST API · v1

Документация на MakeFav API

Генерирайте пълни пакети с favicon от собствения си код, скриптове за изграждане и CI конвейери. Една заявка превръща всяко изображение във favicon.ico, Apple touch икони, икони за Android и PWA, уеб манифест и готов за поставяне HTML.

На тази страница

Бърз старт

MakeFav API е прост REST API през HTTPS + JSON. Всички крайни точки се намират под един основен URL адрес:

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 ключовете като пароли: пазете ги на сървъра или в 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-ResetUnix времеви печат (секунди, 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 /generateAPI ключСъздава пълен пакет с favicon.
GET /meAPI ключВашият акаунт и текущото състояние на ограничението на заявките.
GET /sizesНямаСписък на всички иконни файлове и размери, които генераторът създава.
GET /openapi.jsonНямаМашинночетима спецификация OpenAPI 3.1.

Генериране на favicon пакет

POST/generate

Създава пълен favicon пакет от едно изходно изображение. Изпратете изображението по един от три начина:

Тип съдържаниеПоле за изображениеОписание
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 URL адрес на изображението. Сървърът го изтегля (макс. 10 MB).

Поддържани входни формати: PNG, JPG, WebP, AVIF, GIF, BMP, SVG и ICO. Максимален размер на файла: 10 MB.

Параметри

Всички параметри са по избор. Изпращайте ги като полета на форма (multipart) или като JSON свойства. Невалидните стойности се заменят със стойността по подразбиране.

ИмеТип / диапазонПо подразбиранеОписание
app_nameниз, макс. 60 знакаMy WebsiteИме на вашия уебсайт или приложение, използвано в manifest.json и в примерната страница.
short_nameниз, макс. 24 знакапървите 12 знака от app_nameКратко име, показвано под иконата на началния екран на Android.
theme_color#rrggbb#ffffffЦвят на интерфейса на браузъра (мета таг theme-color и manifest).
tile_color#rrggbbсъщият като theme_colorЦвят на фона на плочките в Старт менюто на Windows.
backgroundtransparent | #rrggbbtransparentФон на иконите за браузъри, Android и Windows.
apple_background#rrggbb#ffffffФон на Apple touch иконите и maskable иконата (iOS не поддържа прозрачност). Игнорира се, когато фонът е цвят – тогава се използва той.
paddingцяло число, 0–40 (%)0Празно пространство около изображението, като процент от размера на иконата.
radiusцяло число, 0–50 (%)0Заоблени ъгли. 50 образува кръг. Не се прилага за иконите на Apple, които iOS заобля сама.
zoomцяло число, 50–400 (%)100Мащаб на изображението вътре в иконата. Стойности над 100 изрязват изображението.
offset_x, offset_yчисло, от -1 до 10Премества изображението хоризонтално / вертикално, като част от размера на иконата.
pathниз/Папка на вашия сървър, в която ще се намират иконите. Използва се в HTML кода, manifest и browserconfig.
displaystandalone | fullscreen | minimal-ui | browserstandaloneРежим на показване на PWA, записан в manifest.
pixelatedauto | 1 | 0autoРязко мащабиране по най-близък съсед за пиксел арт. auto го включва за изображения с размер 64 px или по-малко.
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Набори икони за генериране: favicon за браузъри, 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 с URL на изображение, отговор в 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

Връща описанието на това API в OpenAPI 3.1. Без удостоверяване. Импортирайте го в 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 тялото е невалидно.
401unauthorizedAPI ключът липсва или е невалиден.
403forbiddenИмейлът на собственика на ключа не е потвърден, абонаментът за бюлетина е изключен или акаунтът е блокиран.
413file_too_largeИзображението е по-голямо от 10 MB.
415unsupported_typeТипът на файла или типът съдържание на заявката не се поддържа.
422invalid_imageФайлът не може да бъде декодиран като изображение или URL адресът на изображението не може да бъде изтеглен.
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 за браузъри, които поддържат векторни favicon.
manifest.json, site.webmanifestandroidWeb app manifest за 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>

След публикуване изчистете кеша на браузъра или отворете сайта в private прозорец – браузърите кешират favicon много агресивно.

Списък с промени

v1

  • Първоначално публично издание на REST API на MakeFav.
  • Endpoints POST /generate, GET /me, GET /sizes and GET /openapi.json.
  • Формати на отговора ZIP и JSON, вход на изображение чрез multipart, base64 и URL.
  • Лични API ключове със 100 заявки на час.

Версия 1 е стабилна: добавяме само незадължителни параметри и полета. Несъвместимите промени ще бъдат пуснати като нова версия с предварително известие.

Поддръжка

Въпроси, съобщения за грешки или нужда от по-висок лимит на заявките? С удоволствие ще помогнем. Моля, посочете часа на заявката и кода на грешката в съобщението си – но никога API ключа си.