REST API · v1

MakeFav API документација

Генеришите комплетне favicon пакете из свог кода, скрипти за build и CI токова. Један захтев претвара било коју слику у favicon.ico, Apple touch иконе, Android и PWA иконе, веб манифест и HTML спреман за уметање.

На овој страници

Брзи почетак

MakeFav API је једноставан 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 кључеве као лозинке: држите их на серверу или у 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_namestring, макс. 60 карактераMy WebsiteНазив вашег сајта или апликације, користи се у manifest.json и на примеру странице.
short_namestring, макс. 24 карактерапрвих 12 карактера из app_nameКратак назив који се приказује испод иконице на почетним екранима Android уређаја.
theme_color#rrggbb#ffffffБоја корисничког интерфејса прегледача (theme-color meta таг и manifest).
tile_color#rrggbbисто као theme_colorБоја позадине Windows плочица на Start менију.
backgroundtransparent | #rrggbbtransparentПозадина иконица за прегледач, Android и Windows.
apple_background#rrggbb#ffffffПозадина Apple touch иконица и maskable иконице (iOS не подржава провидност). Игнорише се када је background боја – тада се користи та боја.
paddingцео број, 0–40 (%)0Празан простор око слике, у процентима величине иконице.
radiusцео број, 0–50 (%)0Заобљени углови. 50 прави круг. Не примењује се на Apple иконице, које iOS сам заобљава.
zoomцео број, 50–400 (%)100Размера слике унутар иконице. Вредности изнад 100 исецају слику.
offset_x, offset_yброј, од -1 до 10Помера слику хоризонтално / вертикално, као део величине иконице.
pathstring/Фасцикла на вашем серверу у којој ће се налазити иконице. Користи се у HTML исечку, manifest-у и browserconfig-у.
displaystandalone | fullscreen | minimal-ui | browserstandalonePWA режим приказа који се уписује у manifest.
pixelatedauto | 1 | 0autoОштро скалирање најближим суседом за pixel art. Вредност 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

Враћа 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 тело неважеће.
401unauthorizedAPI кључ недостаје или је неважећи.
403forbiddenИмејл власника кључа није потврђен, пријава на newsletter је искључена или је налог блокиран.
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>

Након објављивања обришите кеш прегледача или отворите сајт у приватном прозору – прегледачи агресивно кеширају favicon иконице.

Евиденција промена

v1

  • Прво јавно издање MakeFav REST API-ја.
  • Endpoints POST /generate, GET /me, GET /sizes and GET /openapi.json.
  • ZIP и JSON формати одговора, multipart, base64 и URL улаз слике.
  • Лични API кључеви са 100 захтева на сат.

Верзија 1 је стабилна: додајемо само опционе параметре и поља. Промене које нарушавају компатибилност биће објављене као нова верзија уз претходно обавештење.

Подршка

Питања, пријаве грешака или вам треба виши лимит захтева? Рado ћемо помоћи. Наведите време захтева и код грешке у поруци – никада свој API кључ.