REST API · v1

Dokumentasi API MakeFav

Jana pakej favicon lengkap daripada kod anda sendiri, skrip binaan dan saluran paip CI. Satu permintaan menukar mana-mana imej kepada favicon.ico, ikon Apple touch, ikon Android dan PWA, manifes web serta HTML sedia tampal.

Pada halaman ini

Mula pantas

API MakeFav ialah API REST HTTPS + JSON yang ringkas. Semua endpoint berada di bawah satu URL asas:

https://makefav.com/api/v1
  1. Cipta akaun percuma
    Daftar, sahkan alamat e-mel anda dan kekalkan langganan surat berita MakeFav aktif – itulah satu-satunya syarat pelan percuma.
  2. Cipta kunci API
    Buka halaman kunci API dalam akaun anda dan cipta kunci peribadi. Kunci bermula dengan mf_ dan hanya dipaparkan sekali, jadi simpan dengan selamat. Urus kunci API
  3. Hantar permintaan pertama anda
    Muat naik imej ke endpoint generate dan simpan fail ZIP yang dikembalikan:
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.

Pengesahan

Setiap permintaan ke endpoint yang dilindungi mesti menyertakan kunci API peribadi. Anda boleh mencipta, menamakan dan membatalkan kunci pada bila-bila masa di halaman akaun anda: Kunci 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
Kunci dimiliki oleh pengguna yang alamat e-melnya telah disahkan dan langganan surat beritanya aktif (syarat pelan percuma). Jika e-mel belum disahkan, surat berita dinyahaktifkan atau akaun diharamkan, setiap permintaan akan mengembalikan 403 Forbidden.
Layan kunci API seperti kata laluan: simpan pada pelayan atau dalam rahsia CI, jangan sekali-kali dalam kod pelayar, aplikasi mudah alih atau repositori awam. Batalkan kunci dengan segera jika ia bocor.

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

Had kadar

Secara lalai, setiap kunci API boleh membuat 100 permintaan sejam. Setiap respons yang disahkan menunjukkan kedudukan anda:

PengepalaPenerangan
X-RateLimit-LimitBilangan maksimum permintaan yang dibenarkan dalam tetingkap semasa.
X-RateLimit-RemainingBaki permintaan dalam tetingkap semasa.
X-RateLimit-ResetCap masa Unix (saat, UTC) apabila tetingkap ditetapkan semula.
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

EndpointPengesahanPenerangan
POST /generateKunci APICipta pakej favicon lengkap.
GET /meKunci APIAkaun anda dan status had kadar semasa.
GET /sizesTiadaSenarai semua fail ikon dan saiz yang dihasilkan oleh penjana.
GET /openapi.jsonTiadaSpesifikasi OpenAPI 3.1 yang boleh dibaca mesin.

Jana pakej favicon

POST/generate

Mencipta pakej favicon lengkap daripada satu imej sumber. Hantar imej dengan salah satu daripada tiga cara:

Jenis kandunganMedan imejPenerangan
multipart/form-dataimageMuat naik fail. Disyorkan – pilihan paling cekap.
application/jsonimage_base64Base64-encoded image, either raw base64 or a data URL such as data:image/png;base64,iVBOR….
application/jsonimage_urlURL http atau https awam bagi imej. Pelayan akan memuat turunnya (maks. 10 MB).

Format input yang disokong: PNG, JPG, WebP, AVIF, GIF, BMP, SVG dan ICO. Saiz fail maksimum: 10 MB.

Parameter

Semua parameter adalah pilihan. Hantar sebagai medan borang (multipart) atau sebagai sifat JSON. Nilai yang tidak sah akan kembali kepada nilai lalai.

NamaJenis / julatLalaiPenerangan
app_namestring, maks. 60 aksaraMy WebsiteNama laman web atau aplikasi anda, digunakan dalam manifest.json dan halaman contoh.
short_namestring, maks. 24 aksara12 aksara pertama app_nameNama pendek yang dipaparkan di bawah ikon pada skrin utama Android.
theme_color#rrggbb#ffffffWarna UI pelayar (tag meta theme-color dan manifest).
tile_color#rrggbbsama seperti theme_colorWarna latar belakang jubin Mula Windows.
backgroundtransparent | #rrggbbtransparentLatar belakang ikon pelayar, Android dan Windows.
apple_background#rrggbb#ffffffLatar belakang ikon Apple touch dan ikon maskable (iOS tidak menyokong ketelusan). Diabaikan apabila latar belakang ialah warna – warna itu digunakan sebaliknya.
paddinginteger, 0–40 (%)0Ruang kosong di sekeliling imej, sebagai peratusan saiz ikon.
radiusinteger, 0–50 (%)0Bucu bulat. 50 menghasilkan bulatan. Tidak digunakan pada ikon Apple, yang dibulatkan sendiri oleh iOS.
zoominteger, 50–400 (%)100Skala imej di dalam ikon. Nilai melebihi 100 akan memangkas imej.
offset_x, offset_ynombor, -1 hingga 10Menganjak imej secara mendatar / menegak, sebagai pecahan saiz ikon.
pathstring/Folder pada pelayan anda tempat ikon akan disimpan. Digunakan dalam coretan HTML, manifest dan browserconfig.
displaystandalone | fullscreen | minimal-ui | browserstandaloneMod paparan PWA yang ditulis ke dalam manifest.
pixelatedauto | 1 | 0autoPenskalaan nearest-neighbour yang tajam untuk seni piksel. auto mengaktifkannya untuk sumber bersaiz 64 px atau lebih kecil.
maskable1 | 01Cipta juga maskable-icon-512x512.png dengan padding zon selamat untuk ikon adaptif Android.
ico_sizessenarai dipisahkan koma bagi 16, 24, 32, 48, 64, 128, 25616,32,48Saiz yang dibenamkan dalam favicon.ico.
groupssenarai dipisahkan koma bagi favicon, apple, android, msfavicon,apple,android,msSet ikon untuk dijana: favicon pelayar, ikon Apple touch, ikon Android / PWA dan jubin Windows.
formatzip | jsonzipFormat respons – lihat di bawah.

Respons

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.

Contoh permintaan – multipart, respons 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>

Contoh permintaan – JSON dengan URL imej, respons 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…"}
  ]
}

Dapatkan akaun anda

GET/me

Mengembalikan pengguna yang memiliki kunci API dan status had kadar semasa. Berguna untuk mengesahkan kunci. Memerlukan pengesahan; tiada parameter.

Contoh permintaan

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

Contoh respons

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

Senaraikan saiz ikon

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.

Contoh permintaan

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

Contoh respons

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

Spesifikasi OpenAPI

GET/openapi.json

Mengembalikan keterangan OpenAPI 3.1 bagi API ini. Tanpa pengesahan. Import ke dalam Postman, Insomnia atau Swagger UI, atau gunakannya untuk menjana klien bertaip bagi bahasa anda.

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

Ralat

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."
  }
}
Status HTTPKod ralatMaksud
400bad_requestPermintaan tidak betul bentuknya, contohnya tiada imej dihantar atau badan JSON tidak sah.
401unauthorizedKunci API tiada atau tidak sah.
403forbiddenE-mel pemilik kunci belum disahkan, langganan surat berita dilumpuhkan, atau akaun telah disekat.
413file_too_largeImej melebihi 10 MB.
415unsupported_typeJenis fail atau jenis kandungan permintaan tidak disokong.
422invalid_imageFail tidak dapat dinyahkod sebagai imej, atau URL imej tidak dapat dimuat turun.
429rate_limitedTerlalu banyak permintaan. Tunggu sehingga X-RateLimit-Reset.
500server_errorBerlaku masalah di pihak kami. Cuba lagi nanti; hubungi sokongan jika masalah berterusan.

Fail output

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

FailSaizKumpulan
favicon.ico16, 32, 48 (boleh dikonfigurasi)sentiasa
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

Fail tambahan

FailDisertakanPenerangan
favicon.svgHanya untuk input SVG tanpa pangkasan, zum, padding, bucu atau latar belakangSalinan SVG anda yang telah disanitasi untuk pelayar yang menyokong favicon vektor.
manifest.json, site.webmanifestandroidManifest aplikasi web untuk Android dan PWA yang boleh dipasang (dua salinan yang serupa).
browserconfig.xmlmsKonfigurasi jubin Windows dengan warna jubin anda.
readme-makefav.txtsentiasaArahan pemasangan dengan kod HTML untuk <head> anda di bahagian akhir.

Contoh kod

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.

Muat naik 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; }

Badan JSON dengan imej berkod base64 (memerlukan 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; }

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

Selepas penempatan, kosongkan cache pelayar anda atau buka laman dalam tetingkap peribadi – pelayar menyimpan cache favicon dengan agresif.

Log perubahan

v1

  • Keluaran awam pertama API REST MakeFav.
  • Endpoints POST /generate, GET /me, GET /sizes and GET /openapi.json.
  • Format respons ZIP dan JSON, input imej multipart, base64 dan URL.
  • Kunci API peribadi dengan 100 permintaan sejam.

Versi 1 adalah stabil: kami hanya menambah parameter dan medan pilihan. Perubahan yang mengganggu akan dikeluarkan sebagai versi baharu dengan notis awal.

Sokongan

Ada soalan, laporan pepijat atau memerlukan had kadar yang lebih tinggi? Kami sedia membantu. Sila sertakan masa permintaan dan kod ralat dalam mesej anda – jangan sekali-kali sertakan kunci API anda.