API REST · v1

Documentació de l'API de MakeFav

Genera paquets de favicons complets des del teu propi codi, scripts de compilació i pipelines de CI. Una sola petició converteix qualsevol imatge en favicon.ico, Apple touch icons, icones d'Android i PWA, un manifest web i HTML a punt per enganxar.

En aquesta pàgina

Inici ràpid

L'API de MakeFav és una API REST senzilla amb HTTPS + JSON. Tots els endpoints estan sota una única URL base:

https://makefav.com/api/v1
  1. Crea un compte gratuït
    Registra't, confirma la teva adreça de correu electrònic i mantén activa la subscripció al butlletí de MakeFav: és l'única condició del pla gratuït.
  2. Crea una clau d'API
    Obre la pàgina de claus d'API al teu compte i crea una clau personal. Comença per mf_ i només es mostra una vegada, així que desa-la de manera segura. Gestiona les claus d'API
  3. Envia la teva primera petició
    Puja una imatge a l'endpoint generate i desa el fitxer ZIP retornat:
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.

Autenticació

Cada petició a un endpoint protegit ha d'incloure una clau d'API personal. Pots crear, anomenar i revocar claus en qualsevol moment a la pàgina del teu compte: Claus d'API

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
Les claus pertanyen a un usuari amb l'adreça de correu confirmada i la subscripció al butlletí activa (condició del pla gratuït). Si el correu no està confirmat, el butlletí està desactivat o el compte està bloquejat, cada petició retorna 403 Forbidden.
Tracta les claus d'API com a contrasenyes: guarda-les al servidor o als secrets de CI, mai al codi del navegador, a apps mòbils ni a repositoris públics. Revoca una clau immediatament si es filtra.

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

Límits de peticions

Per defecte, cada clau d'API pot fer 100 peticions per hora. Cada resposta autenticada t'indica en quin punt et trobes:

CapçaleraDescripció
X-RateLimit-LimitNombre màxim de peticions permeses a la finestra actual.
X-RateLimit-RemainingPeticions restants a la finestra actual.
X-RateLimit-ResetMarca de temps Unix (segons, UTC) en què es reinicia la finestra.
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

EndpointAutenticacióDescripció
POST /generateClau d'APICrea un paquet de favicons complet.
GET /meClau d'APIEl teu compte i l'estat actual del límit de peticions.
GET /sizesCapLlista de tots els fitxers d'icones i mides que genera el generador.
GET /openapi.jsonCapEspecificació OpenAPI 3.1 llegible per màquines.

Genera un paquet de favicons

POST/generate

Crea un paquet de favicons complet a partir d'una imatge d'origen. Envia la imatge d'una d'aquestes tres maneres:

Tipus de contingutCamp de la imatgeDescripció
multipart/form-dataimagePujada de fitxer. Recomanat: l'opció més eficient.
application/jsonimage_base64Base64-encoded image, either raw base64 or a data URL such as data:image/png;base64,iVBOR….
application/jsonimage_urlURL http o https pública de la imatge. El servidor la descarrega (màx. 10 MB).

Formats d'entrada admesos: PNG, JPG, WebP, AVIF, GIF, BMP, SVG i ICO. Mida màxima del fitxer: 10 MB.

Paràmetres

Tots els paràmetres són opcionals. Envia'ls com a camps de formulari (multipart) o com a propietats JSON. Els valors no vàlids es substitueixen pel valor per defecte.

NomTipus / intervalPer defecteDescripció
app_namecadena, màx. 60 caràctersMy WebsiteNom del teu lloc web o aplicació, utilitzat a manifest.json i a la pàgina d'exemple.
short_namecadena, màx. 24 caràctersels primers 12 caràcters d'app_nameNom curt que es mostra sota la icona a les pantalles d'inici d'Android.
theme_color#rrggbb#ffffffColor de la interfície del navegador (etiqueta meta theme-color i manifest).
tile_color#rrggbbigual que theme_colorColor de fons de les icones d'inici de Windows.
backgroundtransparent | #rrggbbtransparentFons de les icones del navegador, d'Android i de Windows.
apple_background#rrggbb#ffffffFons de les icones Apple touch i de la icona maskable (iOS no admet la transparència). S'ignora si el fons és un color: en aquest cas s'utilitza aquest color.
paddingenter, 0–40 (%)0Espai buit al voltant de la imatge, com a percentatge de la mida de la icona.
radiusenter, 0–50 (%)0Cantonades arrodonides. 50 fa un cercle. No s'aplica a les icones d'Apple, que iOS arrodoneix per si mateix.
zoomenter, 50–400 (%)100Escala de la imatge dins de la icona. Els valors superiors a 100 retallen la imatge.
offset_x, offset_ynombre, de -1 a 10Mou la imatge horitzontalment / verticalment, com a fracció de la mida de la icona.
pathcadena/Carpeta del teu servidor on hi haurà les icones. S'utilitza al fragment HTML, al manifest i a browserconfig.
displaystandalone | fullscreen | minimal-ui | browserstandaloneMode de visualització de la PWA escrit al manifest.
pixelatedauto | 1 | 0autoEscalat nítid pel veí més proper per a pixel art. auto l'activa per a imatges d'origen de 64 px o menys.
maskable1 | 01Crea també maskable-icon-512x512.png amb un marge de zona segura per a les icones adaptatives d'Android.
ico_sizesllista separada per comes de 16, 24, 32, 48, 64, 128, 25616,32,48Mides incrustades a favicon.ico.
groupsllista separada per comes de favicon, apple, android, msfavicon,apple,android,msConjunts d'icones que es generen: favicons del navegador, icones Apple touch, icones Android / PWA i icones de Windows.
formatzip | jsonzipFormat de la resposta: vegeu més avall.

Resposta

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.

Exemple de petició: multipart, resposta 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>

Exemple de petició: JSON amb URL de la imatge, resposta 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…"}
  ]
}

Obtén el teu compte

GET/me

Retorna l'usuari al qual pertany la clau d'API i l'estat actual del límit de peticions. Útil per verificar una clau. Requereix autenticació; sense paràmetres.

Exemple de petició

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

Exemple de resposta

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

Llista les mides d'icones

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.

Exemple de petició

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

Exemple de resposta

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

Especificació OpenAPI

GET/openapi.json

Retorna la descripció OpenAPI 3.1 d'aquesta API. Sense autenticació. Importa-la a Postman, Insomnia o Swagger UI, o fes-la servir per generar un client tipat per al teu llenguatge.

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

Errors

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."
  }
}
Estat HTTPCodi d'errorSignificat
400bad_requestLa petició està mal formada, per exemple no s'ha enviat cap imatge o el cos JSON no és vàlid.
401unauthorizedFalta la clau d'API o no és vàlida.
403forbiddenEl correu electrònic del propietari de la clau no està confirmat, la subscripció al butlletí està desactivada o el compte està bloquejat.
413file_too_largeLa imatge supera els 10 MB.
415unsupported_typeEl tipus de fitxer o el tipus de contingut de la petició no és compatible.
422invalid_imageNo s'ha pogut descodificar el fitxer com a imatge o no s'ha pogut descarregar la URL de la imatge.
429rate_limitedMassa peticions. Espera fins a X-RateLimit-Reset.
500server_errorAlguna cosa ha fallat pel nostre costat. Torna-ho a provar més tard; contacta amb el suport si persisteix.

Fitxers de sortida

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

FitxerMidaGrup
favicon.ico16, 32, 48 (configurable)sempre
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

Fitxers addicionals

FitxerInclòsDescripció
favicon.svgNomés per a entrades SVG sense retall, zoom, marge, cantonades ni fonsCòpia sanejada del teu SVG per als navegadors que admeten favicons vectorials.
manifest.json, site.webmanifestandroidManifest d'aplicació web per a Android i PWA instal·lables (dues còpies idèntiques).
browserconfig.xmlmsConfiguració de les icones de Windows amb el color escollit.
readme-makefav.txtsempreInstruccions d'instal·lació amb el codi HTML per al teu <head> al final.

Exemples de codi

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.

Pujada 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; }

Cos JSON amb una imatge codificada en base64 (requereix 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; }

Ús en 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>

Després de desplegar, neteja la memòria cau del navegador o obre el lloc en una finestra privada: els navegadors guarden els favicons a la memòria cau de manera agressiva.

Registre de canvis

v1

  • Primera versió pública de l'API REST de MakeFav.
  • Endpoints POST /generate, GET /me, GET /sizes and GET /openapi.json.
  • Formats de resposta ZIP i JSON; entrada d'imatge per multipart, base64 i URL.
  • Claus d'API personals amb 100 peticions per hora.

La versió 1 és estable: només afegim paràmetres i camps opcionals. Els canvis incompatibles es publicaran com a nova versió amb avís previ.

Assistència

Tens dubtes, vols informar d'un error o necessites un límit de peticions més alt? Estarem encantats d'ajudar-te. Inclou l'hora de la petició i el codi d'error al missatge, però mai la teva clau d'API.