REST API · v1

MakeFav API-dokumentation

Generera kompletta favicon-paket från din egen kod, dina byggskript och CI-pipelines. En enda förfrågan förvandlar vilken bild som helst till favicon.ico, Apple touch icons, Android- och PWA-ikoner, en webbmanifest och HTML som är redo att klistras in.

På denna sida

Snabbstart

MakeFav API är ett enkelt REST API över HTTPS + JSON. Alla endpoints ligger under en gemensam bas-URL:

https://makefav.com/api/v1
  1. Skapa ett gratis konto
    Registrera dig, bekräfta din e-postadress och behåll prenumerationen på MakeFav-nyhetsbrevet aktiv – det är det enda villkoret för den kostnadsfria planen.
  2. Skapa en API-nyckel
    Öppna sidan för API-nycklar i ditt konto och skapa en personlig nyckel. Den börjar med mf_ och visas bara en gång, så förvara den säkert. Hantera API-nycklar
  3. Skicka din första förfrågan
    Ladda upp en bild till generate-endpointen och spara den returnerade ZIP-filen:
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.

Autentisering

Varje förfrågan till en skyddad endpoint måste innehålla en personlig API-nyckel. Du kan när som helst skapa, namnge och återkalla nycklar på din kontosida: API-nycklar

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
Nycklar tillhör en användare vars e-postadress är bekräftad och vars nyhetsbrevsprenumeration är aktiv (villkor för den kostnadsfria planen). Om e-postadressen inte är bekräftad, nyhetsbrevet är avaktiverat eller kontot är spärrat returnerar varje förfrågan 403 Forbidden.
Behandla API-nycklar som lösenord: förvara dem på servern eller i CI-hemligheter, aldrig i webbläsarkod, mobilappar eller offentliga repositories. Återkalla en nyckel direkt om den läcker.

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

Begränsningar

Som standard får varje API-nyckel göra 100 förfrågningar per timme. Varje autentiserat svar visar hur du ligger till:

HeaderBeskrivning
X-RateLimit-LimitMaximalt antal förfrågningar som tillåts i det aktuella tidsfönstret.
X-RateLimit-RemainingÅterstående förfrågningar i det aktuella tidsfönstret.
X-RateLimit-ResetUnix-tidsstämpel (sekunder, UTC) då tidsfönstret återställs.
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.

Endpoints

EndpointAutentiseringBeskrivning
POST /generateAPI-nyckelSkapa ett komplett favicon-paket.
GET /meAPI-nyckelDitt konto och aktuell status för begränsningar.
GET /sizesIngenLista över alla ikonfiler och storlekar som generatorn skapar.
GET /openapi.jsonIngenMaskinläsbar OpenAPI 3.1-specifikation.

Generera ett favicon-paket

POST/generate

Skapar ett komplett favicon-paket från en källbild. Skicka bilden på ett av tre sätt:

InnehållstypBildfältBeskrivning
multipart/form-dataimageFiluppladdning. Rekommenderas – det mest effektiva alternativet.
application/jsonimage_base64Base64-encoded image, either raw base64 or a data URL such as data:image/png;base64,iVBOR….
application/jsonimage_urlOffentlig http- eller https-URL till bilden. Servern laddar ned den (max 10 MB).

Format som stöds: PNG, JPG, WebP, AVIF, GIF, BMP, SVG och ICO. Maximal filstorlek: 10 MB.

Parametrar

Alla parametrar är valfria. Skicka dem som formulärfält (multipart) eller som JSON-egenskaper. Ogiltiga värden återgår till standardvärdet.

NamnTyp / intervallStandardBeskrivning
app_namesträng, max 60 teckenMy WebsiteNamnet på din webbplats eller app, används i manifest.json och exempelsidan.
short_namesträng, max 24 teckende första 12 tecknen i app_nameKort namn som visas under ikonen på Androids startskärmar.
theme_color#rrggbb#ffffffFärg på webbläsarens gränssnitt (theme-color-metataggen och manifest).
tile_color#rrggbbsamma som theme_colorBakgrundsfärg för Windows Start-brickor.
backgroundtransparent | #rrggbbtransparentBakgrund för ikonerna i webbläsare, Android och Windows.
apple_background#rrggbb#ffffffBakgrund för Apple touch icons och den maskerbara ikonen (iOS stöder inte transparens). Ignoreras när background är en färg – då används den färgen i stället.
paddingheltal, 0–40 (%)0Tomt utrymme runt bilden, som procent av ikonens storlek.
radiusheltal, 0–50 (%)0Rundade hörn. 50 ger en cirkel. Tillämpas inte på Apple-ikoner, som iOS rundar av själv.
zoomheltal, 50–400 (%)100Bildens skala inuti ikonen. Värden över 100 beskär bilden.
offset_x, offset_ytal, -1 till 10Flyttar bilden horisontellt / vertikalt, som en andel av ikonens storlek.
pathsträng/Mapp på din server där ikonerna ska ligga. Används i HTML-kodavsnittet, manifestet och browserconfig.
displaystandalone | fullscreen | minimal-ui | browserstandalonePWA-visningsläge som skrivs till manifestet.
pixelatedauto | 1 | 0autoSkarp skalning med närmaste granne för pixelkonst. auto aktiverar den för källor på 64 px eller mindre.
maskable1 | 01Skapa även maskable-icon-512x512.png med utfyllnad för säker zon för Androids adaptiva ikoner.
ico_sizeskommaseparerad lista med 16, 24, 32, 48, 64, 128, 25616,32,48Storlekar som bäddas in i favicon.ico.
groupskommaseparerad lista med favicon, apple, android, msfavicon,apple,android,msIkonuppsättningar som ska genereras: webbläsarfavicons, Apple touch-ikoner, Android-/PWA-ikoner och Windows-brickor.
formatzip | jsonzipSvarsformat – se nedan.

Svar

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.

Exempelanrop – multipart, ZIP-svar

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>

Exempelanrop – JSON med bild-URL, JSON-svar

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

Hämta ditt konto

GET/me

Returnerar användaren som API-nyckeln tillhör samt aktuell status för hastighetsbegränsningen. Praktiskt för att verifiera en nyckel. Kräver autentisering; inga parametrar.

Exempelanrop

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

Exempelsvar

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

Lista ikonstorlekar

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.

Exempelanrop

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

Exempelsvar

{
  "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-specifikation

GET/openapi.json

Returnerar OpenAPI 3.1-beskrivningen av detta API. Ingen autentisering krävs. Importera den i Postman, Insomnia eller Swagger UI, eller använd den för att generera en typad klient för ditt språk.

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

Fel

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-statusFelkodBetydelse
400bad_requestBegäran är felaktigt utformad, till exempel skickades ingen bild eller så är JSON-innehållet ogiltigt.
401unauthorizedAPI-nyckeln saknas eller är ogiltig.
403forbiddenNyckelägarens e-postadress är inte bekräftad, nyhetsbrevsprenumerationen är avstängd eller kontot är spärrat.
413file_too_largeBilden är större än 10 MB.
415unsupported_typeFiltypen eller innehållstypen för begäran stöds inte.
422invalid_imageFilen kunde inte avkodas som en bild, eller så gick det inte att ladda ned bild-URL:en.
429rate_limitedFör många förfrågningar. Vänta till X-RateLimit-Reset.
500server_errorNågot gick fel hos oss. Försök igen senare och kontakta supporten om problemet kvarstår.

Utdatafiler

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

FilStorlekGrupp
favicon.ico16, 32, 48 (konfigurerbar)alltid
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

Ytterligare filer

FilIngårBeskrivning
favicon.svgEndast för SVG-indata utan beskärning, zoom, utfyllnad, hörn eller bakgrundSanerad kopia av din SVG för webbläsare som stöder vektorfavicons.
manifest.json, site.webmanifestandroidWebbappens manifest för Android och installerbara PWA:er (två identiska kopior).
browserconfig.xmlmsKonfiguration för Windows-bricka med din brickfärg.
readme-makefav.txtalltidInstallationsanvisningar med HTML-koden för din <head> i slutet.

Kodexempel

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-uppladdning:

# 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-innehåll med en base64-kodad bild (kräver 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-användning

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>

Efter publiceringen bör du rensa webbläsarens cache eller öppna webbplatsen i ett privat fönster – webbläsare cachar favicons envist.

Ändringslogg

v1

  • Första publika versionen av MakeFavs REST API.
  • Endpoints POST /generate, GET /me, GET /sizes and GET /openapi.json.
  • Svarsformaten ZIP och JSON samt bildinmatning via multipart, base64 och URL.
  • Personliga API-nycklar med 100 anrop per timme.

Version 1 är stabil: vi lägger bara till valfria parametrar och fält. Brytande ändringar släpps som en ny version med förvarning.

Support

Frågor, felrapporter eller behov av högre anropsgräns? Vi hjälper gärna till. Ange tidpunkten för anropet och felkoden i ditt meddelande – aldrig din API-nyckel.