REST API · v1

MakeFav API-dokumentasjon

Generer komplette favicon-pakker fra din egen kode, byggeskript og CI-pipelines. Én forespørsel gjør et hvilket som helst bilde om til favicon.ico, Apple touch-ikoner, Android- og PWA-ikoner, en web manifest og ferdig HTML som du bare limer inn.

På denne siden

Kom i gang

MakeFav API er et enkelt REST API over HTTPS med JSON. Alle endepunkter ligger under én felles base-URL:

https://makefav.com/api/v1
  1. Opprett en gratis konto
    Registrer deg, bekreft e-postadressen din og hold abonnementet på MakeFav-nyhetsbrevet aktivt – det er den eneste betingelsen for den gratis planen.
  2. Opprett en API-nøkkel
    Åpne siden for API-nøkler i kontoen din og opprett en personlig nøkkel. Den starter med mf_ og vises bare én gang, så oppbevar den trygt. Administrer API-nøkler
  3. Send din første forespørsel
    Last opp et bilde til generate-endepunktet og lagre den returnerte 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

Hver forespørsel til et beskyttet endepunkt må inneholde en personlig API-nøkkel. Du kan opprette, gi navn til og tilbakekalle nøkler når som helst på kontosiden din: API-nøkler

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økler tilhører en bruker som har bekreftet e-postadressen sin og har et aktivt nyhetsbrevabonnement (betingelse for den gratis planen). Hvis e-posten ikke er bekreftet, nyhetsbrevet er deaktivert eller kontoen er utestengt, returnerer hver forespørsel 403 Forbidden.
Behandle API-nøkler som passord: oppbevar dem på serveren eller i CI-hemmeligheter, aldri i nettleserkode, mobilapper eller offentlige repositorier. Tilbakekall en nøkkel umiddelbart hvis den lekker.

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

Forespørselsgrenser

Som standard kan hver API-nøkkel gjøre 100 forespørsler per time. Hvert autentisert svar forteller deg hvor du ligger an:

HeaderBeskrivelse
X-RateLimit-LimitMaksimalt antall forespørsler som er tillatt i gjeldende vindu.
X-RateLimit-RemainingGjenstående forespørsler i gjeldende vindu.
X-RateLimit-ResetUnix-tidsstempel (sekunder, UTC) for når vinduet tilbakestilles.
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.

Endepunkter

EndepunktAutentiseringBeskrivelse
POST /generateAPI-nøkkelOpprett en komplett favicon-pakke.
GET /meAPI-nøkkelKontoen din og gjeldende status for forespørselsgrense.
GET /sizesIngenListe over alle ikonfiler og størrelser generatoren lager.
GET /openapi.jsonIngenMaskinlesbar OpenAPI 3.1-spesifikasjon.

Generer en favicon-pakke

POST/generate

Lager en komplett favicon-pakke fra ett kildebilde. Send bildet på én av tre måter:

InnholdstypeBildefeltBeskrivelse
multipart/form-dataimageFilopplasting. Anbefalt – den mest effektive løsningen.
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 bildet. Serveren laster det ned (maks. 10 MB).

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

Parametere

Alle parametere er valgfrie. Send dem som skjemafelt (multipart) eller som JSON-egenskaper. Ugyldige verdier faller tilbake til standardverdien.

NavnType / områdeStandardBeskrivelse
app_namestreng, maks. 60 tegnMy WebsiteNavnet på nettstedet eller appen din, brukt i manifest.json og eksempelsiden.
short_namestreng, maks. 24 tegnde første 12 tegnene av app_nameKortnavn som vises under ikonet på startskjermen på Android.
theme_color#rrggbb#ffffffFarge på nettleserens brukergrensesnitt (theme-color-metatagg og manifest).
tile_color#rrggbbsamme som theme_colorBakgrunnsfarge for startflisene i Windows.
backgroundtransparent | #rrggbbtransparentBakgrunn for ikonene i nettleser, Android og Windows.
apple_background#rrggbb#ffffffBakgrunn for Apple touch-ikoner og det maskable ikonet (iOS støtter ikke gjennomsiktighet). Ignoreres hvis bakgrunnen er en farge – da brukes den fargen i stedet.
paddingheltall, 0–40 (%)0Tomt rom rundt bildet, som prosent av ikonstørrelsen.
radiusheltall, 0–50 (%)0Avrundede hjørner. 50 gir en sirkel. Brukes ikke på Apple-ikoner, som iOS runder av selv.
zoomheltall, 50–400 (%)100Skalering av bildet inne i ikonet. Verdier over 100 beskjærer bildet.
offset_x, offset_ytall, -1 til 10Flytter bildet horisontalt / vertikalt, som en brøkdel av ikonstørrelsen.
pathstreng/Mappen på serveren din der ikonene skal ligge. Brukes i HTML-kodebiten, manifestet og browserconfig.
displaystandalone | fullscreen | minimal-ui | browserstandalonePWA-visningsmodus som skrives til manifestet.
pixelatedauto | 1 | 0autoSkarp nærmeste-nabo-skalering for pikselkunst. auto aktiverer det for kilder på 64 px eller mindre.
maskable1 | 01Lager også maskable-icon-512x512.png med polstring i sikker sone for adaptive ikoner på Android.
ico_sizeskommaseparert liste med 16, 24, 32, 48, 64, 128, 25616,32,48Størrelser som bygges inn i favicon.ico.
groupskommaseparert liste med favicon, apple, android, msfavicon,apple,android,msIkonsett som skal genereres: nettleser-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.

Eksempelforespørsel – 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>

Eksempelforespørsel – JSON med bilde-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 kontoen din

GET/me

Returnerer brukeren API-nøkkelen tilhører og gjeldende status for rate limit. Nyttig for å verifisere en nøkkel. Krever autentisering; ingen parametere.

Eksempelforespørsel

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

Eksempelsvar

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

List 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.

Eksempelforespørsel

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

Eksempelsvar

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

GET/openapi.json

Returnerer OpenAPI 3.1-beskrivelsen av dette API-et. Ingen autentisering. Importer den i Postman, Insomnia eller Swagger UI, eller bruk den til å generere en typet klient for ditt språk.

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

Feil

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-statusFeilkodeBetydning
400bad_requestForespørselen er ugyldig, for eksempel ble det ikke sendt noe bilde, eller JSON-innholdet er ugyldig.
401unauthorizedAPI-nøkkelen mangler eller er ugyldig.
403forbiddenNøkkeleierens e-post er ikke bekreftet, nyhetsbrevabonnementet er deaktivert, eller kontoen er utestengt.
413file_too_largeBildet er større enn 10 MB.
415unsupported_typeFiltypen eller innholdstypen i forespørselen støttes ikke.
422invalid_imageFilen kunne ikke dekodes som et bilde, eller bilde-URL-en kunne ikke lastes ned.
429rate_limitedFor mange forespørsler. Vent til X-RateLimit-Reset.
500server_errorNoe gikk galt hos oss. Prøv igjen senere, og kontakt support hvis problemet vedvarer.

Utdatafiler

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)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

Tilleggsfiler

FilInkludertBeskrivelse
favicon.svgBare for SVG-inndata uten beskjæring, zoom, polstring, hjørneavrunding eller bakgrunnRenset kopi av SVG-en din for nettlesere som støtter vektor-favicons.
manifest.json, site.webmanifestandroidWeb app manifest for Android og installerbare PWA-er (to identiske kopier).
browserconfig.xmlmsWindows-flisekonfigurasjon med flisefargen din.
readme-makefav.txtalltidInstallasjonsinstruksjoner med HTML-koden for <head> til slutt.

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

# 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-innhold med base64-kodet bilde (krever 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-bruk

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>

Etter publisering bør du tømme nettleserbufferen eller åpne nettstedet i et privat vindu – nettlesere bufrer favicons svært aggressivt.

Endringslogg

v1

  • Første offentlige utgivelse av MakeFav REST API.
  • Endpoints POST /generate, GET /me, GET /sizes and GET /openapi.json.
  • ZIP- og JSON-svarformater, multipart, base64 og bildeinndata via URL.
  • Personlige API-nøkler med 100 forespørsler per time.

Versjon 1 er stabil: vi legger bare til valgfrie parametere og felt. Endringer som bryter kompatibiliteten, utgis som en ny versjon med forhåndsvarsel.

Support

Spørsmål, feilrapporter eller behov for høyere rate limit? Vi hjelper deg gjerne. Oppgi tidspunktet for forespørselen og feilkoden i meldingen – aldri API-nøkkelen din.