REST API · v1

Dokumentacja API MakeFav

Generuj kompletne pakiety favicon z własnego kodu, skryptów budujących i potoków CI. Jedno żądanie zamienia dowolny obraz w favicon.ico, ikony Apple touch, ikony Android i PWA, manifest oraz gotowy do wklejenia kod HTML.

Na tej stronie

Szybki start

API MakeFav to proste REST API oparte na HTTPS i JSON. Wszystkie endpointy znajdują się pod jednym adresem bazowym:

https://makefav.com/api/v1
  1. Utwórz darmowe konto
    Zarejestruj się, potwierdź adres e-mail i utrzymuj aktywną subskrypcję newslettera MakeFav – to jedyny warunek darmowego planu.
  2. Utwórz klucz API
    Otwórz stronę kluczy API na swoim koncie i utwórz klucz osobisty. Zaczyna się od mf_ i jest wyświetlany tylko raz, dlatego przechowuj go bezpiecznie. Zarządzaj kluczami API
  3. Wyślij pierwsze żądanie
    Prześlij obraz do endpointu generate i zapisz zwrócony plik 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.

Uwierzytelnianie

Każde żądanie do chronionego endpointu musi zawierać osobisty klucz API. Klucze możesz w dowolnej chwili tworzyć, nazywać i unieważniać na stronie swojego konta: Klucze 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
Klucze należą do użytkownika, który ma potwierdzony adres e-mail i aktywną subskrypcję newslettera (warunek darmowego planu). Jeśli e-mail nie jest potwierdzony, newsletter jest wyłączony lub konto zostało zablokowane, każde żądanie zwraca błąd 403 Forbidden.
Traktuj klucze API jak hasła: przechowuj je na serwerze lub w sekretach CI, nigdy w kodzie przeglądarki, aplikacjach mobilnych ani publicznych repozytoriach. Jeśli klucz wycieknie, natychmiast go unieważnij.

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

Limity zapytań

Domyślnie każdy klucz API może wykonać 100 żądań na godzinę. Każda uwierzytelniona odpowiedź informuje, ile jeszcze zostało:

NagłówekOpis
X-RateLimit-LimitMaksymalna liczba żądań dozwolona w bieżącym oknie.
X-RateLimit-RemainingPozostałe żądania w bieżącym oknie.
X-RateLimit-ResetZnacznik czasu Unix (sekundy, UTC) resetu okna.
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.

Endpointy

EndpointUwierzytelnianieOpis
POST /generateKlucz APIUtwórz kompletny pakiet favicon.
GET /meKlucz APITwoje konto i aktualny stan limitu zapytań.
GET /sizesBrakLista wszystkich plików ikon i rozmiarów tworzonych przez generator.
GET /openapi.jsonBrakSpecyfikacja OpenAPI 3.1 w formacie czytelnym maszynowo.

Generowanie pakietu favicon

POST/generate

Tworzy kompletny pakiet favicon z jednego obrazu źródłowego. Obraz możesz wysłać na jeden z trzech sposobów:

Typ zawartościPole obrazuOpis
multipart/form-dataimagePrzesyłanie pliku. Zalecane – najbardziej wydajna opcja.
application/jsonimage_base64Base64-encoded image, either raw base64 or a data URL such as data:image/png;base64,iVBOR….
application/jsonimage_urlPubliczny adres URL obrazu (http lub https). Serwer pobiera go samodzielnie (maks. 10 MB).

Obsługiwane formaty wejściowe: PNG, JPG, WebP, AVIF, GIF, BMP, SVG i ICO. Maksymalny rozmiar pliku: 10 MB.

Parametry

Wszystkie parametry są opcjonalne. Wysyłaj je jako pola formularza (multipart) lub właściwości JSON. Nieprawidłowe wartości zastępowane są wartością domyślną.

Imię i nazwiskoTyp / zakresDomyślnieOpis
app_nameciąg znaków, maks. 60 znakówMy WebsiteNazwa Twojej strony lub aplikacji, używana w manifest.json i na stronie przykładowej.
short_nameciąg znaków, maks. 24 znakipierwsze 12 znaków app_nameKrótka nazwa wyświetlana pod ikoną na ekranach głównych Androida.
theme_color#rrggbb#ffffffKolor interfejsu przeglądarki (znacznik meta theme-color i manifest).
tile_color#rrggbbtaki sam jak theme_colorKolor tła kafelków Windows na ekranie startowym.
backgroundtransparent | #rrggbbtransparentTło ikon przeglądarki, Android i Windows.
apple_background#rrggbb#ffffffTło ikon Apple touch i ikony maskable (iOS nie obsługuje przezroczystości). Pomijane, gdy background jest kolorem – wtedy używany jest ten kolor.
paddingliczba całkowita, 0–40 (%)0Puste miejsce wokół obrazu, w procentach rozmiaru ikony.
radiusliczba całkowita, 0–50 (%)0Zaokrąglone rogi. Wartość 50 daje koło. Nie dotyczy ikon Apple, które iOS zaokrągla samodzielnie.
zoomliczba całkowita, 50–400 (%)100Skala obrazu wewnątrz ikony. Wartości powyżej 100 przycinają obraz.
offset_x, offset_yliczba, od -1 do 10Przesuwa obraz w poziomie / w pionie, jako ułamek rozmiaru ikony.
pathciąg znaków/Folder na Twoim serwerze, w którym będą znajdować się ikony. Używany w kodzie HTML, manifeście i browserconfig.
displaystandalone | fullscreen | minimal-ui | browserstandaloneTryb wyświetlania PWA zapisywany w manifeście.
pixelatedauto | 1 | 0autoOstre skalowanie metodą najbliższego sąsiada dla pixel artu. Wartość auto włącza je dla źródeł o rozmiarze 64 px lub mniejszym.
maskable1 | 01Tworzy też plik maskable-icon-512x512.png z marginesem bezpiecznej strefy dla adaptacyjnych ikon Androida.
ico_sizeslista rozdzielona przecinkami: 16, 24, 32, 48, 64, 128, 25616,32,48Rozmiary osadzone w pliku favicon.ico.
groupslista rozdzielona przecinkami: favicon, apple, android, msfavicon,apple,android,msZestawy ikon do wygenerowania: favikony przeglądarek, ikony Apple touch, ikony Android / PWA oraz kafelki Windows.
formatzip | jsonzipFormat odpowiedzi – zobacz poniżej.

Odpowiedź

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.

Przykładowe żądanie – multipart, odpowiedź 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>

Przykładowe żądanie – JSON z adresem URL obrazu, odpowiedź 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…"}
  ]
}

Pobierz dane swojego konta

GET/me

Zwraca użytkownika, do którego należy klucz API, oraz aktualny stan limitu żądań. Przydatne do weryfikacji klucza. Wymaga uwierzytelnienia; bez parametrów.

Przykładowe żądanie

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

Przykładowa odpowiedź

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

Lista rozmiarów ikon

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.

Przykładowe żądanie

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

Przykładowa odpowiedź

{
  "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"}
  ]
}

Specyfikacja OpenAPI

GET/openapi.json

Zwraca opis tego API w formacie OpenAPI 3.1. Bez uwierzytelniania. Zaimportuj go do Postmana, Insomnii lub Swagger UI albo użyj do wygenerowania typowanego klienta dla swojego języka.

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

Błędy

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."
  }
}
Status HTTPKod błęduZnaczenie
400bad_requestŻądanie jest nieprawidłowe, np. nie wysłano obrazu lub treść JSON jest niepoprawna.
401unauthorizedBrak klucza API lub jest on nieprawidłowy.
403forbiddenAdres e-mail właściciela klucza nie został potwierdzony, subskrypcja newslettera jest wyłączona lub konto jest zablokowane.
413file_too_largeObraz jest większy niż 10 MB.
415unsupported_typeTyp pliku lub typ zawartości żądania nie jest obsługiwany.
422invalid_imageNie udało się zdekodować pliku jako obrazu lub pobrać obrazu z podanego adresu URL.
429rate_limitedZbyt wiele żądań. Poczekaj do X-RateLimit-Reset.
500server_errorCoś poszło nie tak po naszej stronie. Spróbuj ponownie później; jeśli problem się powtarza, skontaktuj się z pomocą.

Pliki wynikowe

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

PlikRozmiarGrupa
favicon.ico16, 32, 48 (konfigurowalne)zawsze
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

Dodatkowe pliki

PlikZawieraOpis
favicon.svgTylko dla plików wejściowych SVG bez przycinania, powiększenia, marginesu, zaokrąglenia rogów lub tłaOczyszczona kopia Twojego SVG dla przeglądarek obsługujących wektorowe favikony.
manifest.json, site.webmanifestandroidManifest aplikacji internetowej dla Androida i instalowalnych PWA (dwie identyczne kopie).
browserconfig.xmlmsKonfiguracja kafelka Windows z wybranym kolorem kafelka.
readme-makefav.txtzawszeInstrukcja instalacji z kodem HTML dla sekcji <head> na końcu.

Przykłady kodu

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.

Przesyłanie 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; }

Treść JSON z obrazem zakodowanym w base64 (wymaga 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; }

Użycie w 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>

Po wdrożeniu wyczyść pamięć podręczną przeglądarki lub otwórz stronę w oknie prywatnym – przeglądarki bardzo agresywnie buforują favikony.

Historia zmian

v1

  • Pierwsze publiczne wydanie MakeFav REST API.
  • Endpoints POST /generate, GET /me, GET /sizes and GET /openapi.json.
  • Formaty odpowiedzi ZIP i JSON, wejście obrazu przez multipart, base64 i URL.
  • Osobiste klucze API z limitem 100 żądań na godzinę.

Wersja 1 jest stabilna: dodajemy tylko opcjonalne parametry i pola. Zmiany niekompatybilne wstecz zostaną wydane jako nowa wersja z wyprzedzeniem.

Pomoc

Masz pytania, chcesz zgłosić błąd lub potrzebujesz wyższego limitu żądań? Chętnie pomożemy. W wiadomości podaj czas żądania i kod błędu – nigdy klucz API.