REST API · v1

Dokumentace API MakeFav

Generujte kompletní balíčky faviconů z vlastního kódu, build skriptů a CI pipeline. Jediný požadavek promění libovolný obrázek na favicon.ico, ikony Apple touch, ikony pro Android a PWA, webový manifest a HTML kód připravený ke vložení.

Na této stránce

Rychlý start

API MakeFav je jednoduché REST API využívající HTTPS a JSON. Všechny endpointy sdílejí jednu základní URL:

https://makefav.com/api/v1
  1. Vytvořte si bezplatný účet
    Zaregistrujte se, potvrďte svou e-mailovou adresu a ponechte aktivní odběr newsletteru MakeFav – to je jediná podmínka bezplatného tarifu.
  2. Vytvořte API klíč
    Otevřete stránku API klíčů ve svém účtu a vytvořte osobní klíč. Začíná na mf_ a zobrazí se jen jednou, proto jej bezpečně uložte. Spravovat API klíče
  3. Odešlete první požadavek
    Nahrajte obrázek na endpoint generate a uložte vrácený soubor 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.

Autentizace

Každý požadavek na chráněný endpoint musí obsahovat osobní API klíč. Klíče můžete kdykoli vytvářet, pojmenovávat a rušit na stránce svého účtu: API klíče

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
Klíče patří uživateli s potvrzenou e-mailovou adresou a aktivním odběrem newsletteru (podmínka bezplatného tarifu). Pokud e-mail není potvrzen, newsletter je vypnut nebo je účet zablokován, každý požadavek vrátí chybu 403 Forbidden.
S API klíči zacházejte jako s hesly: uchovávejte je na serveru nebo v tajných proměnných CI, nikdy v kódu prohlížeče, mobilních aplikacích či veřejných repozitářích. Pokud klíč unikne, okamžitě jej zrušte.

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

Limity požadavků

Ve výchozím nastavení může každý API klíč odeslat 100 požadavků za hodinu. Každá ověřená odpověď vám sdělí, jak na tom jste:

HlavičkaPopis
X-RateLimit-LimitMaximální počet požadavků povolených v aktuálním okně.
X-RateLimit-RemainingZbývající požadavky v aktuálním okně.
X-RateLimit-ResetUnixové časové razítko (v sekundách, UTC), kdy se okno resetuje.
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

EndpointAutentizacePopis
POST /generateAPI klíčVytvoří kompletní balíček faviconů.
GET /meAPI klíčVáš účet a aktuální stav limitu požadavků.
GET /sizesŽádnáSeznam všech souborů ikon a velikostí, které generátor vytváří.
GET /openapi.jsonŽádnáStrojově čitelná specifikace OpenAPI 3.1.

Vygenerovat balíček faviconů

POST/generate

Vytvoří kompletní balíček faviconů z jednoho zdrojového obrázku. Obrázek můžete odeslat jedním ze tří způsobů:

Typ obsahuPole s obrázkemPopis
multipart/form-dataimageNahrání souboru. Doporučeno – nejefektivnější možnost.
application/jsonimage_base64Base64-encoded image, either raw base64 or a data URL such as data:image/png;base64,iVBOR….
application/jsonimage_urlVeřejná URL obrázku (http nebo https). Server si jej stáhne (max. 10 MB).

Podporované vstupní formáty: PNG, JPG, WebP, AVIF, GIF, BMP, SVG a ICO. Maximální velikost souboru: 10 MB.

Parametry

Všechny parametry jsou nepovinné. Odesílejte je jako pole formuláře (multipart) nebo jako vlastnosti JSON. Neplatné hodnoty se nahradí výchozími.

JménoTyp / rozsahVýchozíPopis
app_nameřetězec, max. 60 znakůMy WebsiteNázev vašeho webu nebo aplikace, používá se v manifest.json a v ukázkové stránce.
short_nameřetězec, max. 24 znakůprvních 12 znaků app_nameKrátký název zobrazený pod ikonou na domovských obrazovkách Androidu.
theme_color#rrggbb#ffffffBarva uživatelského rozhraní prohlížeče (meta tag theme-color a manifest).
tile_color#rrggbbstejné jako theme_colorBarva pozadí dlaždic v nabídce Start ve Windows.
backgroundtransparent | #rrggbbtransparentPozadí ikon pro prohlížeč, Android a Windows.
apple_background#rrggbb#ffffffPozadí ikon Apple touch a maskable ikony (iOS nepodporuje průhlednost). Pokud je background barva, ignoruje se a použije se tato barva.
paddingcelé číslo, 0–40 (%)0Prázdné místo kolem obrázku v procentech velikosti ikony.
radiuscelé číslo, 0–50 (%)0Zaoblené rohy. Hodnota 50 vytvoří kruh. Neplatí pro ikony Apple, které iOS zaobluje samo.
zoomcelé číslo, 50–400 (%)100Měřítko obrázku uvnitř ikony. Hodnoty nad 100 obrázek oříznou.
offset_x, offset_yčíslo, -1 až 10Posune obrázek vodorovně / svisle, jako zlomek velikosti ikony.
pathřetězec/Složka na vašem serveru, kde budou ikony umístěny. Používá se v HTML úryvku, manifestu a browserconfig.
displaystandalone | fullscreen | minimal-ui | browserstandaloneRežim zobrazení PWA zapsaný do manifestu.
pixelatedauto | 1 | 0autoOstré škálování metodou nejbližšího souseda pro pixel art. Hodnota auto jej zapne pro zdroje do 64 px.
maskable1 | 01Vytvoří také maskable-icon-512x512.png s ochranným okrajem pro adaptivní ikony Androidu.
ico_sizesseznam hodnot 16, 24, 32, 48, 64, 128, 256 oddělených čárkami16,32,48Velikosti vložené do favicon.ico.
groupsseznam hodnot favicon, apple, android, ms oddělených čárkamifavicon,apple,android,msSady ikon ke generování: favicony pro prohlížeče, ikony Apple touch, ikony pro Android / PWA a dlaždice pro Windows.
formatzip | jsonzipFormát odpovědi – viz níže.

Odpověď

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.

Příklad požadavku – multipart, odpověď ve formátu 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>

Příklad požadavku – JSON s URL obrázku, odpověď ve formátu 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…"}
  ]
}

Zobrazit váš účet

GET/me

Vrátí uživatele, kterému API klíč patří, a aktuální stav limitu požadavků. Hodí se k ověření klíče. Vyžaduje ověření; bez parametrů.

Příklad požadavku

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

Příklad odpovědi

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

Seznam velikostí 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.

Příklad požadavku

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

Příklad odpovědi

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

Specifikace OpenAPI

GET/openapi.json

Vrátí popis tohoto API ve formátu OpenAPI 3.1. Bez ověření. Importujte jej do Postmanu, Insomnie nebo Swagger UI, případně z něj vygenerujte typovaného klienta pro svůj jazyk.

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

Chyby

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."
  }
}
Stav HTTPKód chybyVýznam
400bad_requestPožadavek je chybně sestaven, například nebyl odeslán žádný obrázek nebo je tělo JSON neplatné.
401unauthorizedAPI klíč chybí nebo je neplatný.
403forbiddenE-mail majitele klíče není potvrzen, odběr newsletteru je vypnutý nebo je účet zablokován.
413file_too_largeObrázek je větší než 10 MB.
415unsupported_typeTyp souboru nebo typ obsahu požadavku není podporován.
422invalid_imageSoubor se nepodařilo dekódovat jako obrázek nebo se nepodařilo stáhnout URL obrázku.
429rate_limitedPříliš mnoho požadavků. Počkejte do X-RateLimit-Reset.
500server_errorNa naší straně došlo k chybě. Zkuste to později; pokud potíže přetrvávají, kontaktujte podporu.

Výstupní soubory

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

SouborVelikostSkupina
favicon.ico16, 32, 48 (nastavitelné)vždy
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

Další soubory

SouborZahrnutoPopis
favicon.svgPouze pro vstup SVG bez oříznutí, přiblížení, odsazení, zaoblených rohů nebo pozadíVyčištěná kopie vašeho SVG pro prohlížeče, které podporují vektorové favicony.
manifest.json, site.webmanifestandroidManifest webové aplikace pro Android a instalovatelné PWA (dvě shodné kopie).
browserconfig.xmlmsKonfigurace dlaždice pro Windows s barvou vaší dlaždice.
readme-makefav.txtvždyNávod k instalaci s HTML kódem pro váš <head> na konci.

Příklady kódu

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.

Nahrání typu 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; }

Tělo JSON s obrázkem zakódovaným v base64 (vyžaduje 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; }

Použití v 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 nasazení vymažte mezipaměť prohlížeče nebo web otevřete v anonymním okně – prohlížeče favicony agresivně ukládají do mezipaměti.

Seznam změn

v1

  • První veřejné vydání REST API MakeFav.
  • Endpoints POST /generate, GET /me, GET /sizes and GET /openapi.json.
  • Formáty odpovědi ZIP a JSON, vstup obrázku jako multipart, base64 a URL.
  • Osobní API klíče se 100 požadavky za hodinu.

Verze 1 je stabilní: přidáváme pouze volitelné parametry a pole. Zásadní změny vyjdou jako nová verze s předchozím upozorněním.

Podpora

Máte dotazy, hlášení chyb nebo potřebujete vyšší limit požadavků? Rádi pomůžeme. Do zprávy uveďte čas požadavku a kód chyby – nikdy ne svůj API klíč.