REST API · v1

Dokumentasi API MakeFav

Buat paket favicon lengkap dari kode Anda sendiri, skrip build, dan pipeline CI. Satu permintaan mengubah gambar apa pun menjadi favicon.ico, Apple touch icon, ikon Android dan PWA, web manifest, serta HTML siap tempel.

Di halaman ini

Mulai cepat

API MakeFav adalah REST API sederhana berbasis HTTPS + JSON. Semua endpoint berada di bawah satu URL dasar:

https://makefav.com/api/v1
  1. Buat akun gratis
    Daftar, konfirmasi alamat email Anda, dan biarkan langganan buletin MakeFav tetap aktif – itulah satu-satunya syarat paket gratis.
  2. Buat kunci API
    Buka halaman kunci API di akun Anda dan buat kunci pribadi. Kunci diawali dengan mf_ dan hanya ditampilkan sekali, jadi simpan dengan aman. Kelola kunci API
  3. Kirim permintaan pertama Anda
    Unggah gambar ke endpoint generate dan simpan file 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.

Autentikasi

Setiap permintaan ke endpoint yang dilindungi harus menyertakan kunci API pribadi. Anda dapat membuat, memberi nama, dan mencabut kunci kapan saja di halaman akun 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 emailnya telah dikonfirmasi dan langganan buletinnya aktif (syarat paket gratis). Jika email belum dikonfirmasi, buletin dinonaktifkan, atau akun diblokir, setiap permintaan akan mengembalikan 403 Forbidden.
Perlakukan kunci API seperti kata sandi: simpan di server atau di secret CI, jangan pernah di kode browser, aplikasi seluler, atau repositori publik. Segera cabut kunci jika bocor.

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

Batas laju

Secara default, setiap kunci API dapat membuat 100 permintaan per jam. Setiap respons terautentikasi menunjukkan posisi Anda saat ini:

HeaderDeskripsi
X-RateLimit-LimitJumlah maksimum permintaan yang diizinkan dalam jendela saat ini.
X-RateLimit-RemainingSisa permintaan dalam jendela saat ini.
X-RateLimit-ResetTimestamp Unix (detik, UTC) saat jendela direset.
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

EndpointAutentikasiDeskripsi
POST /generateKunci APIBuat paket favicon lengkap.
GET /meKunci APIAkun Anda dan status batas laju saat ini.
GET /sizesTidak adaDaftar semua file ikon dan ukuran yang dihasilkan generator.
GET /openapi.jsonTidak adaSpesifikasi OpenAPI 3.1 yang dapat dibaca mesin.

Buat paket favicon

POST/generate

Membuat paket favicon lengkap dari satu gambar sumber. Kirim gambar dengan salah satu dari tiga cara:

Tipe kontenField gambarDeskripsi
multipart/form-dataimageUnggah file. Direkomendasikan – opsi paling efisien.
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 publik dari gambar. Server akan mengunduhnya (maks. 10 MB).

Format input yang didukung: PNG, JPG, WebP, AVIF, GIF, BMP, SVG, dan ICO. Ukuran file maksimum: 10 MB.

Parameter

Semua parameter bersifat opsional. Kirim sebagai field formulir (multipart) atau properti JSON. Nilai yang tidak valid akan kembali ke default.

NamaTipe / rentangDefaultDeskripsi
app_namestring, maks. 60 karakterMy WebsiteNama situs web atau aplikasi Anda, digunakan di manifest.json dan halaman contoh.
short_namestring, maks. 24 karakter12 karakter pertama dari app_nameNama singkat yang ditampilkan di bawah ikon pada layar utama Android.
theme_color#rrggbb#ffffffWarna UI browser (meta tag theme-color dan manifest).
tile_color#rrggbbsama dengan theme_colorWarna latar ubin Start Windows.
backgroundtransparent | #rrggbbtransparentLatar belakang ikon browser, Android, dan Windows.
apple_background#rrggbb#ffffffLatar belakang Apple touch icon dan ikon maskable (iOS tidak mendukung transparansi). Diabaikan jika background berupa warna – warna tersebut yang digunakan.
paddingbilangan bulat, 0–40 (%)0Ruang kosong di sekitar gambar, sebagai persentase dari ukuran ikon.
radiusbilangan bulat, 50–50 (%)0Sudut membulat. 50 menghasilkan lingkaran. Tidak diterapkan pada ikon Apple, yang dibulatkan sendiri oleh iOS.
zoombilangan bulat, 50–400 (%)100Skala gambar di dalam ikon. Nilai di atas 100 akan memotong gambar.
offset_x, offset_yangka, -1 hingga 10Menggeser gambar secara horizontal / vertikal, sebagai pecahan dari ukuran ikon.
pathstring/Folder di server Anda tempat ikon akan disimpan. Digunakan dalam cuplikan HTML, manifest, dan browserconfig.
displaystandalone | fullscreen | minimal-ui | browserstandaloneMode tampilan PWA yang ditulis ke manifest.
pixelatedauto | 1 | 0autoPenskalaan nearest-neighbour yang tajam untuk pixel art. auto mengaktifkannya untuk sumber berukuran 64 px atau lebih kecil.
maskable1 | 01Buat juga maskable-icon-512x512.png dengan padding zona aman untuk ikon adaptif Android.
ico_sizesdaftar dipisahkan koma: 16, 24, 32, 48, 64, 128, 25616,32,48Ukuran yang disematkan di favicon.ico.
groupsdaftar dipisahkan koma: favicon, apple, android, msfavicon,apple,android,msSet ikon yang akan dibuat: favicon browser, ikon Apple touch, ikon Android / PWA, dan ubin 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 gambar, 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 akun Anda

GET/me

Mengembalikan pengguna pemilik kunci API dan status batas permintaan saat ini. Berguna untuk memverifikasi kunci. Memerlukan autentikasi; tanpa 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}
}

Daftar ukuran 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 deskripsi OpenAPI 3.1 dari API ini. Tanpa autentikasi. Impor ke Postman, Insomnia, atau Swagger UI, atau gunakan untuk membuat klien bertipe untuk bahasa pemrograman Anda.

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

Error

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 HTTPKode errorArti
400bad_requestPermintaan tidak valid, misalnya tidak ada gambar yang dikirim atau isi JSON tidak valid.
401unauthorizedKunci API tidak ada atau tidak valid.
403forbiddenEmail pemilik kunci belum dikonfirmasi, langganan newsletter dinonaktifkan, atau akun diblokir.
413file_too_largeGambar lebih besar dari 10 MB.
415unsupported_typeJenis file atau jenis konten permintaan tidak didukung.
422invalid_imageFile tidak dapat didekode sebagai gambar, atau URL gambar tidak dapat diunduh.
429rate_limitedTerlalu banyak permintaan. Tunggu hingga X-RateLimit-Reset.
500server_errorTerjadi kesalahan di sisi kami. Coba lagi nanti; hubungi dukungan jika masalah berlanjut.

File output

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

FileUkuranGrup
favicon.ico16, 32, 48 (dapat dikonfigurasi)selalu
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

File tambahan

FileDisertakanDeskripsi
favicon.svgHanya untuk input SVG tanpa pemotongan, zoom, padding, sudut, atau latar belakangSalinan SVG Anda yang sudah dibersihkan untuk browser yang mendukung favicon vektor.
manifest.json, site.webmanifestandroidWeb app manifest untuk Android dan PWA yang dapat diinstal (dua salinan identik).
browserconfig.xmlmsKonfigurasi ubin Windows dengan warna ubin Anda.
readme-makefav.txtselaluPetunjuk instalasi beserta kode HTML untuk <head> Anda di bagian akhir.

Contoh kode

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.

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

Isi JSON dengan gambar berenkode 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>

Setelah deploy, hapus cache browser Anda atau buka situs di jendela pribadi – browser menyimpan cache favicon secara agresif.

Catatan perubahan

v1

  • Rilis publik pertama REST API MakeFav.
  • Endpoints POST /generate, GET /me, GET /sizes and GET /openapi.json.
  • Format respons ZIP dan JSON, input gambar multipart, base64, dan URL.
  • Kunci API pribadi dengan 100 permintaan per jam.

Versi 1 stabil: kami hanya menambahkan parameter dan kolom opsional. Perubahan yang merusak kompatibilitas akan dirilis sebagai versi baru dengan pemberitahuan sebelumnya.

Dukungan

Ada pertanyaan, laporan bug, atau butuh batas permintaan lebih tinggi? Kami siap membantu. Sertakan waktu permintaan dan kode error dalam pesan Anda – jangan pernah kunci API Anda.