API REST · v1

Documentația API MakeFav

Generează pachete complete de favicon din propriul cod, scripturi de build și pipeline-uri CI. O singură cerere transformă orice imagine în favicon.ico, pictograme Apple touch, pictograme Android și PWA, un manifest web și cod HTML gata de lipit.

Pe această pagină

Început rapid

API-ul MakeFav este un API REST simplu, bazat pe HTTPS + JSON. Toate endpoint-urile se află sub o singură adresă de bază:

https://makefav.com/api/v1
  1. Creează un cont gratuit
    Înregistrează-te, confirmă-ți adresa de e-mail și păstrează activ abonamentul la newsletterul MakeFav – aceasta este singura condiție a planului gratuit.
  2. Creează o cheie API
    Deschide pagina de chei API din cont și creează o cheie personală. Începe cu mf_ și este afișată o singură dată, așa că păstreaz-o în siguranță. Gestionează cheile API
  3. Trimite prima cerere
    Încarcă o imagine la endpoint-ul de generare și salvează fișierul ZIP returnat:
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.

Autentificare

Fiecare cerere către un endpoint protejat trebuie să includă o cheie API personală. Poți crea, denumi și revoca cheile oricând din pagina contului: Chei 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
Cheile aparțin unui utilizator a cărui adresă de e-mail este confirmată și al cărui abonament la newsletter este activ (condiția planului gratuit). Dacă e-mailul nu este confirmat, newsletterul este dezactivat sau contul este blocat, fiecare cerere returnează 403 Forbidden.
Tratează cheile API ca pe niște parole: păstrează-le pe server sau în secretele CI, niciodată în codul din browser, în aplicații mobile sau în depozite publice. Revocă imediat o cheie dacă a fost expusă.

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

Limite de utilizare

Implicit, fiecare cheie API poate face 100 de cereri pe oră. Fiecare răspuns autentificat îți arată cum stai:

AntetDescriere
X-RateLimit-LimitNumărul maxim de cereri permise în fereastra curentă.
X-RateLimit-RemainingCereri rămase în fereastra curentă.
X-RateLimit-ResetMarcaj temporal Unix (secunde, UTC) la care se resetează fereastra.
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.

Endpoint-uri

EndpointAutentificareDescriere
POST /generateCheie APICreează un pachet complet de favicon.
GET /meCheie APIContul tău și starea curentă a limitei de utilizare.
GET /sizesNiciunaLista tuturor fișierelor de pictograme și a dimensiunilor generate de generator.
GET /openapi.jsonNiciunaSpecificație OpenAPI 3.1 care poate fi citită automat.

Generează un pachet de favicon

POST/generate

Creează un pachet complet de favicon dintr-o singură imagine sursă. Trimite imaginea în unul dintre cele trei moduri:

Tip de conținutCâmpul imaginiiDescriere
multipart/form-dataimageÎncărcare de fișier. Recomandat – cea mai eficientă opțiune.
application/jsonimage_base64Base64-encoded image, either raw base64 or a data URL such as data:image/png;base64,iVBOR….
application/jsonimage_urlURL public http sau https al imaginii. Serverul o descarcă (max. 10 MB).

Formate de intrare acceptate: PNG, JPG, WebP, AVIF, GIF, BMP, SVG și ICO. Dimensiune maximă a fișierului: 10 MB.

Parametri

Toți parametrii sunt opționali. Trimite-i caHTML câmpuri de formular (multipart) sau ca proprietăți JSON. Valorile nevalide revin la valoarea implicită.

NumeTip / intervalImplicitDescriere
app_nameșir de caractere, max. 60 de caractereMy WebsiteNumele site-ului sau al aplicației tale, folosit în manifest.json și în pagina de exemplu.
short_nameșir de caractere, max. 24 de caractereprimele 12 caractere din app_nameNume scurt afișat sub pictogramă pe ecranele de start Android.
theme_color#rrggbb#ffffffCuloarea interfeței browserului (meta tag theme-color și manifest).
tile_color#rrggbbla fel ca theme_colorCuloarea de fundal a plăcilor din meniul Start din Windows.
backgroundtransparent | #rrggbbtransparentFundalul pictogramelor pentru browser, Android și Windows.
apple_background#rrggbb#ffffffFundalul pictogramelor Apple touch și al pictogramei maskable (iOS nu acceptă transparența). Ignorat când fundalul este o culoare – se folosește acea culoare.
paddingnumăr întreg, 0–40 (%)0Spațiu gol în jurul imaginii, ca procent din dimensiunea pictogramei.
radiusnumăr întreg, 0–50 (%)0Colțuri rotunjite. 50 creează un cerc. Nu se aplică pictogramelor Apple, pe care iOS le rotunjește singur.
zoomnumăr întreg, 50–400 (%)100Scala imaginii în interiorul pictogramei. Valorile peste 100 taie imaginea.
offset_x, offset_ynumăr, de la -1 la 10Deplasează imaginea pe orizontală / verticală, ca fracțiune din dimensiunea pictogramei.
pathșir de caractere/Folderul de pe serverul tău în care vor fi pictogramele. Folosit în fragmentul HTML, în manifest și în browserconfig.
displaystandalone | fullscreen | minimal-ui | browserstandaloneModul de afișare PWA scris în manifest.
pixelatedauto | 1 | 0autoScalare clară, cu cel mai apropiat vecin, pentru pixel art. auto o activează pentru surse de 64 px sau mai mici.
maskable1 | 01Creează și maskable-icon-512x512.png, cu margine de zonă sigură pentru pictogramele adaptive Android.
ico_sizeslistă separată prin virgule din 16, 24, 32, 48, 64, 128, 25616,32,48Dimensiuni incluse în favicon.ico.
groupslistă separată prin virgule din favicon, apple, android, msfavicon,apple,android,msSeturile de pictograme de generat: favicon-uri pentru browser, pictograme Apple touch, pictograme Android / PWA și plăci Windows.
formatzip | jsonzipFormatul răspunsului – vezi mai jos.

Răspuns

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.

Exemplu de cerere – multipart, răspuns 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>

Exemplu de cerere – JSON cu URL de imagine, răspuns 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…"}
  ]
}

Obține contul tău

GET/me

Returnează utilizatorul căruia îi aparține cheia API și starea curentă a limitei de cereri. Utilă pentru a verifica o cheie. Necesită autentificare; fără parametri.

Exemplu de cerere

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

Exemplu de răspuns

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

Listează dimensiunile pictogramelor

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.

Exemplu de cerere

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

Exemplu de răspuns

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

Specificația OpenAPI

GET/openapi.json

Returnează descrierea OpenAPI 3.1 a acestui API. Fără autentificare. Importă-o în Postman, Insomnia sau Swagger UI ori folosește-o pentru a genera un client tipizat pentru limbajul tău.

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

Erori

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."
  }
}
Stare HTTPCod de eroareSemnificație
400bad_requestCererea este malformată, de exemplu nu a fost trimisă nicio imagine sau corpul JSON este nevalid.
401unauthorizedCheia API lipsește sau este nevalidă.
403forbiddenEmailul proprietarului cheii nu este confirmat, abonarea la newsletter este dezactivată sau contul este blocat.
413file_too_largeImaginea depășește 10 MB.
415unsupported_typeTipul fișierului sau tipul de conținut al cererii nu este acceptat.
422invalid_imageFișierul nu a putut fi decodat ca imagine sau URL-ul imaginii nu a putut fi descărcat.
429rate_limitedPrea multe cereri. Așteaptă până la X-RateLimit-Reset.
500server_errorA apărut o problemă la noi. Încearcă din nou mai târziu; contactează asistența dacă persistă.

Fișiere generate

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

FișierDimensiuneGrup
favicon.ico16, 32, 48 (configurabil)întotdeauna
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

Fișiere suplimentare

FișierInclusDescriere
favicon.svgDoar pentru intrare SVG fără decupare, zoom, margini, colțuri sau fundalCopie curățată a SVG-ului tău pentru browserele care acceptă favicon-uri vectoriale.
manifest.json, site.webmanifestandroidManifest de aplicație web pentru Android și PWA instalabile (două copii identice).
browserconfig.xmlmsConfigurația plăcilor Windows cu culoarea plăcii tale.
readme-makefav.txtîntotdeaunaInstrucțiuni de instalare, cu codul HTML pentru <head> la final.

Exemple de cod

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.

Încărcare 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; }

Corp JSON cu imagine codificată base64 (necesită 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; }

Utilizare în 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>

După publicare, golește memoria cache a browserului sau deschide site-ul într-o fereastră privată – browserele rețin favicon-urile foarte agresiv în cache.

Istoric modificări

v1

  • Prima lansare publică a API-ului REST MakeFav.
  • Endpoints POST /generate, GET /me, GET /sizes and GET /openapi.json.
  • Formate de răspuns ZIP și JSON, intrare de imagine multipart, base64 și URL.
  • Chei API personale cu 100 de cereri pe oră.

Versiunea 1 este stabilă: adăugăm doar parametri și câmpuri opționale. Modificările incompatibile vor fi lansate ca versiune nouă, cu notificare prealabilă.

Asistență

Întrebări, rapoarte de erori sau ai nevoie de o limită mai mare? Te ajutăm cu plăcere. Include în mesaj ora cererii și codul de eroare – niciodată cheia API.