REST API · v1

MakeFav API-documentatie

Genereer complete faviconpakketten vanuit je eigen code, buildscripts en CI-pipelines. Met één verzoek maak je van elke afbeelding een favicon.ico, Apple touch icons, Android- en PWA-iconen, een web manifest en kant-en-klare HTML.

Op deze pagina

Snelstart

De MakeFav API is een eenvoudige REST API via HTTPS + JSON. Alle endpoints staan onder één basis-URL:

https://makefav.com/api/v1
  1. Maak een gratis account aan
    Meld je aan, bevestig je e-mailadres en houd je abonnement op de MakeFav-nieuwsbrief actief – dat is de enige voorwaarde van het gratis abonnement.
  2. Maak een API-sleutel aan
    Open de pagina API-sleutels in je account en maak een persoonlijke sleutel aan. Deze begint met mf_ en wordt maar één keer getoond, dus bewaar hem veilig. API-sleutels beheren
  3. Stuur je eerste verzoek
    Upload een afbeelding naar het generate-endpoint en sla het geretourneerde ZIP-bestand op:
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.

Authenticatie

Elk verzoek aan een beveiligd endpoint moet een persoonlijke API-sleutel bevatten. Je kunt sleutels op elk moment aanmaken, een naam geven en intrekken op je accountpagina: API-sleutels

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
Sleutels horen bij een gebruiker met een bevestigd e-mailadres en een actief nieuwsbriefabonnement (voorwaarde van het gratis abonnement). Als het e-mailadres niet is bevestigd, de nieuwsbrief is uitgeschakeld of het account is geblokkeerd, geeft elk verzoek 403 Forbidden terug.
Behandel API-sleutels als wachtwoorden: bewaar ze op de server of in CI-secrets, nooit in browsercode, mobiele apps of openbare repositories. Trek een sleutel direct in als hij uitlekt.

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

Limieten

Standaard mag elke API-sleutel 100 verzoeken per uur doen. Elk geauthenticeerd antwoord laat zien waar je staat:

HeaderBeschrijving
X-RateLimit-LimitMaximaal aantal verzoeken dat in het huidige tijdvenster is toegestaan.
X-RateLimit-RemainingResterende verzoeken in het huidige tijdvenster.
X-RateLimit-ResetUnix-timestamp (seconden, UTC) waarop het tijdvenster wordt gereset.
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

EndpointAuthenticatieBeschrijving
POST /generateAPI-sleutelMaak een compleet faviconpakket.
GET /meAPI-sleutelJe account en de huidige status van je limiet.
GET /sizesGeenLijst van alle iconbestanden en formaten die de generator maakt.
GET /openapi.jsonGeenMachineleesbare OpenAPI 3.1-specificatie.

Een faviconpakket genereren

POST/generate

Maakt een compleet faviconpakket van één bronafbeelding. Stuur de afbeelding op een van de drie manieren:

Content-typeAfbeeldingsveldBeschrijving
multipart/form-dataimageBestandsupload. Aanbevolen – de meest efficiënte optie.
application/jsonimage_base64Base64-encoded image, either raw base64 or a data URL such as data:image/png;base64,iVBOR….
application/jsonimage_urlOpenbare http- of https-URL van de afbeelding. De server downloadt deze (max. 10 MB).

Ondersteunde invoerformaten: PNG, JPG, WebP, AVIF, GIF, BMP, SVG en ICO. Maximale bestandsgrootte: 10 MB.

Parameters

Alle parameters zijn optioneel. Stuur ze als formuliervelden (multipart) of als JSON-eigenschappen. Ongeldige waarden vallen terug op de standaardwaarde.

NaamType / bereikStandaardBeschrijving
app_namestring, max. 60 tekensMy WebsiteNaam van je website of app, gebruikt in manifest.json en de voorbeeldpagina.
short_namestring, max. 24 tekenseerste 12 tekens van app_nameKorte naam die onder het icoon op Android-startschermen wordt getoond.
theme_color#rrggbb#ffffffKleur van de browserinterface (theme-color meta tag en manifest).
tile_color#rrggbbhetzelfde als theme_colorAchtergrondkleur van de tegels in het Windows-startmenu.
backgroundtransparent | #rrggbbtransparentAchtergrond van de browser-, Android- en Windows-iconen.
apple_background#rrggbb#ffffffAchtergrond van Apple touch icons en het maskable icon (iOS ondersteunt geen transparantie). Wordt genegeerd als background een kleur is – in dat geval wordt die kleur gebruikt.
paddinggeheel getal, 0–40 (%)0Lege ruimte rond de afbeelding, als percentage van het iconformaat.
radiusgeheel getal, 0–50 (%)0Afgeronde hoeken. 50 maakt een cirkel. Wordt niet toegepast op Apple-iconen, die iOS zelf afrondt.
zoomgeheel getal, 50–400 (%)100Schaal van de afbeelding binnen het icoon. Waarden boven 100 snijden de afbeelding bij.
offset_x, offset_ygetal, -1 tot 10Verschuift de afbeelding horizontaal / verticaal, als fractie van het iconformaat.
pathstring/Map op je server waar de iconen komen te staan. Wordt gebruikt in het HTML-fragment, het manifest en browserconfig.
displaystandalone | fullscreen | minimal-ui | browserstandalonePWA-weergavemodus die in het manifest wordt geschreven.
pixelatedauto | 1 | 0autoScherpe nearest-neighbour-schaling voor pixelart. Met auto wordt dit ingeschakeld voor bronnen van 64 px of kleiner.
maskable1 | 01Maak ook maskable-icon-512x512.png met een veilige marge voor adaptieve Android-iconen.
ico_sizeskommagescheiden lijst van 16, 24, 32, 48, 64, 128, 25616,32,48Formaten die in favicon.ico zijn opgenomen.
groupskommagescheiden lijst van favicon, apple, android, msfavicon,apple,android,msTe genereren iconensets: browserfavicons, Apple touch-iconen, Android-/PWA-iconen en Windows-tegels.
formatzip | jsonzipAntwoordformaat – zie hieronder.

Antwoord

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.

Voorbeeldverzoek – multipart, ZIP-antwoord

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>

Voorbeeldverzoek – JSON met afbeeldings-URL, JSON-antwoord

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

Je account ophalen

GET/me

Geeft de gebruiker terug aan wie de API-sleutel toebehoort, plus de huidige status van de rate limit. Handig om een sleutel te controleren. Vereist authenticatie; geen parameters.

Voorbeeldverzoek

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

Voorbeeldantwoord

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

Iconformaten weergeven

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.

Voorbeeldverzoek

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

Voorbeeldantwoord

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

GET/openapi.json

Geeft de OpenAPI 3.1-beschrijving van deze API terug. Geen authenticatie nodig. Importeer hem in Postman, Insomnia of Swagger UI, of gebruik hem om een getypeerde client voor jouw taal te genereren.

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

Fouten

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-statusFoutcodeBetekenis
400bad_requestHet verzoek is onjuist opgebouwd, bijvoorbeeld omdat er geen afbeelding is verzonden of de JSON-body ongeldig is.
401unauthorizedDe API-sleutel ontbreekt of is ongeldig.
403forbiddenHet e-mailadres van de sleuteleigenaar is niet bevestigd, het nieuwsbriefabonnement is uitgeschakeld of het account is geblokkeerd.
413file_too_largeDe afbeelding is groter dan 10 MB.
415unsupported_typeHet bestandstype of het content-type van het verzoek wordt niet ondersteund.
422invalid_imageHet bestand kon niet als afbeelding worden gedecodeerd, of de afbeeldings-URL kon niet worden gedownload.
429rate_limitedTe veel verzoeken. Wacht tot X-RateLimit-Reset.
500server_errorEr is iets misgegaan aan onze kant. Probeer het later opnieuw en neem contact op met support als het probleem aanhoudt.

Uitvoerbestanden

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

BestandFormaatGroep
favicon.ico16, 32, 48 (configureerbaar)altijd
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

Extra bestanden

BestandInbegrepenBeschrijving
favicon.svgAlleen voor SVG-invoer zonder bijsnijden, zoom, padding, hoeken of achtergrondOpgeschoonde kopie van je SVG voor browsers die vectorfavicons ondersteunen.
manifest.json, site.webmanifestandroidWebapp-manifest voor Android en installeerbare PWA's (twee identieke kopieën).
browserconfig.xmlmsWindows-tegelconfiguratie met jouw tegelkleur.
readme-makefav.txtaltijdInstallatie-instructies met de HTML-code voor je <head> aan het einde.

Codevoorbeelden

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-body met een base64-gecodeerde afbeelding (vereist 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-gebruik

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>

Wis na het uitrollen je browsercache of open de site in een privévenster – browsers cachen favicons erg hardnekkig.

Changelog

v1

  • Eerste openbare release van de MakeFav REST API.
  • Endpoints POST /generate, GET /me, GET /sizes and GET /openapi.json.
  • ZIP- en JSON-antwoordformaten, multipart-, base64- en URL-afbeeldingsinvoer.
  • Persoonlijke API-sleutels met 100 verzoeken per uur.

Versie 1 is stabiel: we voegen alleen optionele parameters en velden toe. Ingrijpende wijzigingen verschijnen als een nieuwe versie met voorafgaande kennisgeving.

Support

Vragen, bugmeldingen of een hogere rate limit nodig? We helpen je graag. Vermeld de tijd van het verzoek en de foutcode in je bericht – nooit je API-sleutel.