REST API · v1

MakeFav API-dokumentation

Generér komplette favicon-pakker fra din egen kode, dine build-scripts og CI-pipelines. Én forespørgsel gør ethvert billede til favicon.ico, Apple touch-ikoner, Android- og PWA-ikoner, en web manifest og HTML, der er klar til at indsætte.

På denne side

Kom hurtigt i gang

MakeFav API'et er et enkelt REST API baseret på HTTPS + JSON. Alle endpoints ligger under én basis-URL:

https://makefav.com/api/v1
  1. Opret en gratis konto
    Tilmeld dig, bekræft din e-mailadresse, og hold dit abonnement på MakeFav-nyhedsbrevet aktivt – det er den eneste betingelse for den gratis plan.
  2. Opret en API-nøgle
    Åbn siden med API-nøgler på din konto, og opret en personlig nøgle. Den starter med mf_ og vises kun én gang, så gem den sikkert. Administrer API-nøgler
  3. Send din første forespørgsel
    Upload et billede til generate-endpointet, og gem den returnerede ZIP-fil:
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.

Godkendelse

Hver forespørgsel til et beskyttet endpoint skal indeholde en personlig API-nøgle. Du kan til enhver tid oprette, navngive og tilbagekalde nøgler på din kontoside: API-nøgler

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
Nøgler tilhører en bruger, hvis e-mailadresse er bekræftet, og hvis nyhedsbrevsabonnement er aktivt (betingelse for den gratis plan). Hvis e-mailen ikke er bekræftet, nyhedsbrevet er deaktiveret, eller kontoen er spærret, returnerer hver forespørgsel 403 Forbidden.
Behandl API-nøgler som adgangskoder: opbevar dem på serveren eller i CI-hemmeligheder, aldrig i browserkode, mobilapps eller offentlige repositories. Tilbagekald en nøgle med det samme, hvis den lækker.

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

Hastighedsgrænser

Som standard kan hver API-nøgle foretage 100 forespørgsler i timen. Hvert godkendt svar viser, hvor du står:

HeaderBeskrivelse
X-RateLimit-LimitMaksimalt antal tilladte forespørgsler i det aktuelle tidsvindue.
X-RateLimit-RemainingResterende forespørgsler i det aktuelle tidsvindue.
X-RateLimit-ResetUnix-tidsstempel (sekunder, UTC) for, hvornår tidsvinduet nulstilles.
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

EndpointGodkendelseBeskrivelse
POST /generateAPI-nøgleOpret en komplet favicon-pakke.
GET /meAPI-nøgleDin konto og aktuelle status for hastighedsgrænsen.
GET /sizesIngenListe over alle ikonfiler og størrelser, som generatoren producerer.
GET /openapi.jsonIngenMaskinlæsbar OpenAPI 3.1-specifikation.

Generér en favicon-pakke

POST/generate

Opretter en komplet favicon-pakke ud fra ét kildebillede. Send billedet på en af tre måder:

IndholdstypeBilledfeltBeskrivelse
multipart/form-dataimageFilupload. Anbefalet – den mest effektive mulighed.
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 til billedet. Serveren henter det (maks. 10 MB).

Understøttede inputformater: PNG, JPG, WebP, AVIF, GIF, BMP, SVG og ICO. Maksimal filstørrelse: 10 MB.

Parametre

Alle parametre er valgfrie. Send dem som formularfelter (multipart) eller som JSON-egenskaber. Ugyldige værdier erstattes af standardværdien.

NavnType / intervalStandardBeskrivelse
app_namestreng, maks. 60 tegnMy WebsiteNavnet på din hjemmeside eller app, bruges i manifest.json og eksempelsiden.
short_namestreng, maks. 24 tegnde første 12 tegn af app_nameKort navn, der vises under ikonet på Androids startskærme.
theme_color#rrggbb#ffffffFarve på browserens brugerflade (theme-color meta-tag og manifest).
tile_color#rrggbbsamme som theme_colorBaggrundsfarve på Windows Start-fliser.
backgroundtransparent | #rrggbbtransparentBaggrund til ikonerne i browser, Android og Windows.
apple_background#rrggbb#ffffffBaggrund til Apple touch-ikoner og det maskable ikon (iOS understøtter ikke gennemsigtighed). Ignoreres, når baggrunden er en farve – i stedet bruges den farve.
paddingheltal, 0–40 (%)0Tomt område omkring billedet, angivet som procent af ikonets størrelse.
radiusheltal, 0–50 (%)0Afrundede hjørner. 50 giver en cirkel. Anvendes ikke på Apple-ikoner, som iOS afrunder selv.
zoomheltal, 50–400 (%)100Billedets skalering inde i ikonet. Værdier over 100 beskærer billedet.
offset_x, offset_ytal, -1 til 10Flytter billedet vandret / lodret som en brøkdel af ikonets størrelse.
pathstreng/Mappe på din server, hvor ikonerne skal ligge. Bruges i HTML-koden, manifestet og browserconfig.
displaystandalone | fullscreen | minimal-ui | browserstandalonePWA-visningstilstand, der skrives til manifestet.
pixelatedauto | 1 | 0autoSkarp nearest-neighbour-skalering til pixelkunst. auto aktiverer den for kilder på 64 px eller mindre.
maskable1 | 01Opret også maskable-icon-512x512.png med sikker margen til adaptive ikoner på Android.
ico_sizeskommasepareret liste af 16, 24, 32, 48, 64, 128, 25616,32,48Størrelser, der indlejres i favicon.ico.
groupskommasepareret liste af favicon, apple, android, msfavicon,apple,android,msIkonsæt, der skal genereres: browser-favicons, Apple touch-ikoner, Android / PWA-ikoner og Windows-fliser.
formatzip | jsonzipSvarformat – se nedenfor.

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.

Eksempel på forespørgsel – 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>

Eksempel på forespørgsel – JSON med billed-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…"}
  ]
}

Hent din konto

GET/me

Returnerer den bruger, som API-nøglen tilhører, samt den aktuelle status for rate limit. Nyttig til at verificere en nøgle. Kræver godkendelse; ingen parametre.

Eksempel på forespørgsel

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

Eksempel på svar

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

Vis ikonstørrelser

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.

Eksempel på forespørgsel

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

Eksempel på svar

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

Returnerer OpenAPI 3.1-beskrivelsen af denne API. Ingen godkendelse. Importér den i Postman, Insomnia eller Swagger UI, eller brug den til at generere en typet klient til dit sprog.

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

Fejl

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-statusFejlkodeBetydning
400bad_requestForespørgslen er ugyldig, for eksempel fordi der ikke er sendt noget billede, eller JSON-indholdet er ugyldigt.
401unauthorizedAPI-nøglen mangler eller er ugyldig.
403forbiddenNøgleejerens e-mail er ikke bekræftet, nyhedsbrevstilmeldingen er deaktiveret, eller kontoen er spærret.
413file_too_largeBilledet er større end 10 MB.
415unsupported_typeFiltypen eller forespørgslens indholdstype understøttes ikke.
422invalid_imageFilen kunne ikke afkodes som et billede, eller billed-URL'en kunne ikke hentes.
429rate_limitedFor mange forespørgsler. Vent til X-RateLimit-Reset.
500server_errorNoget gik galt hos os. Prøv igen senere, og kontakt support, hvis problemet fortsætter.

Outputfiler

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

FilStørrelseGruppe
favicon.ico16, 32, 48 (kan konfigureres)altid
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

Yderligere filer

FilInkluderetBeskrivelse
favicon.svgKun til SVG-input uden beskæring, zoom, margen, hjørner eller baggrundRenset kopi af din SVG til browsere, der understøtter vektor-favicons.
manifest.json, site.webmanifestandroidWeb app manifest til Android og installerbare PWA'er (to identiske kopier).
browserconfig.xmlmsWindows-flisekonfiguration med din flisefarve.
readme-makefav.txtaltidInstallationsvejledning med HTML-koden til din <head> til sidst.

Kodeeksempler

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

# 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-indhold med et base64-kodet billede (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-brug

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>

Ryd browserens cache efter udrulning, eller åbn siden i et privat vindue – browsere cacher favicons meget aggressivt.

Ændringslog

v1

  • Første offentlige udgivelse af MakeFav REST API.
  • Endpoints POST /generate, GET /me, GET /sizes and GET /openapi.json.
  • ZIP- og JSON-svarformater, multipart, base64 og billed-URL som input.
  • Personlige API-nøgler med 100 forespørgsler i timen.

Version 1 er stabil: Vi tilføjer kun valgfrie parametre og felter. Ændringer, der bryder kompatibiliteten, udgives som en ny version med forudgående varsel.

Support

Spørgsmål, fejlrapporter eller brug for en højere rate limit? Vi hjælper gerne. Angiv tidspunktet for forespørgslen og fejlkoden i din besked – aldrig din API-nøgle.