REST API · v1

Τεκμηρίωση του API του MakeFav

Δημιουργήστε πλήρη πακέτα favicon από τον δικό σας κώδικα, τα build scripts και τα CI pipelines. Ένα αίτημα μετατρέπει οποιαδήποτε εικόνα σε favicon.ico, Apple touch icons, εικονίδια Android και PWA, web manifest και έτοιμο προς επικόλληση HTML.

Σε αυτή τη σελίδα

Γρήγορη εκκίνηση

Το API του MakeFav είναι ένα απλό REST API μέσω HTTPS + JSON. Όλα τα endpoints βρίσκονται κάτω από μία βασική διεύθυνση URL:

https://makefav.com/api/v1
  1. Δημιουργήστε δωρεάν λογαριασμό
    Εγγραφείτε, επιβεβαιώστε τη διεύθυνση email σας και διατηρήστε ενεργή τη συνδρομή στο newsletter του MakeFav – αυτή είναι η μόνη προϋπόθεση του δωρεάν πλάνου.
  2. Δημιουργήστε ένα API key
    Ανοίξτε τη σελίδα κλειδιών API στον λογαριασμό σας και δημιουργήστε ένα προσωπικό κλειδί. Ξεκινά με mf_ και εμφανίζεται μόνο μία φορά, γι' αυτό αποθηκεύστε το με ασφάλεια. Διαχείριση κλειδιών API
  3. Στείλτε το πρώτο σας αίτημα
    Ανεβάστε μια εικόνα στο endpoint generate και αποθηκεύστε το 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

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.

Έλεγχος ταυτότητας

Κάθε αίτημα προς ένα προστατευμένο endpoint πρέπει να περιλαμβάνει ένα προσωπικό API key. Μπορείτε να δημιουργείτε, να ονομάζετε και να ανακαλείτε κλειδιά ανά πάσα στιγμή στη σελίδα του λογαριασμού σας: Κλειδιά 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
Τα κλειδιά ανήκουν σε χρήστη με επιβεβαιωμένη διεύθυνση email και ενεργή συνδρομή στο newsletter (προϋπόθεση του δωρεάν πλάνου). Αν το email δεν έχει επιβεβαιωθεί, το newsletter είναι απενεργοποιημένο ή ο λογαριασμός έχει αποκλειστεί, κάθε αίτημα επιστρέφει 403 Forbidden.
Αντιμετωπίστε τα κλειδιά API σαν κωδικούς πρόσβασης: φυλάξτε τα στον διακομιστή ή στα CI secrets, ποτέ σε κώδικα προγράμματος περιήγησης, σε mobile εφαρμογές ή σε δημόσια αποθετήρια. Ανακαλέστε αμέσως ένα κλειδί αν διαρρεύσει.

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

Όρια αιτημάτων

Από προεπιλογή, κάθε API key μπορεί να κάνει 100 αιτήματα ανά ώρα. Κάθε αυθεντικοποιημένη απάντηση σας ενημερώνει για την τρέχουσα κατάστασή σας:

ΚεφαλίδαΠεριγραφή
X-RateLimit-LimitΜέγιστος αριθμός αιτημάτων που επιτρέπονται στο τρέχον χρονικό παράθυρο.
X-RateLimit-RemainingΑιτήματα που απομένουν στο τρέχον χρονικό παράθυρο.
X-RateLimit-ResetUnix timestamp (δευτερόλεπτα, UTC) κατά την επαναφορά του χρονικού παραθύρου.
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

EndpointΈλεγχος ταυτότηταςΠεριγραφή
POST /generateAPI keyΔημιουργία πλήρους πακέτου favicon.
GET /meAPI keyΟ λογαριασμός σας και η τρέχουσα κατάσταση ορίου αιτημάτων.
GET /sizesΚανέναΛίστα με όλα τα αρχεία εικονιδίων και τα μεγέθη που δημιουργεί η γεννήτρια.
GET /openapi.jsonΚανέναΠροδιαγραφή OpenAPI 3.1 αναγνώσιμη από μηχανές.

Δημιουργία πακέτου favicon

POST/generate

Δημιουργεί ένα πλήρες πακέτο favicon από μία εικόνα προέλευσης. Στείλτε την εικόνα με έναν από τρεις τρόπους:

Τύπος περιεχομένουΠεδίο εικόναςΠεριγραφή
multipart/form-dataimageΜεταφόρτωση αρχείου. Προτείνεται – η πιο αποδοτική επιλογή.
application/jsonimage_base64Base64-encoded image, either raw base64 or a data URL such as data:image/png;base64,iVBOR….
application/jsonimage_urlΔημόσιο URL http ή https της εικόνας. Ο διακομιστής την κατεβάζει (έως 10 MB).

Υποστηριζόμενες μορφές εισόδου: PNG, JPG, WebP, AVIF, GIF, BMP, SVG και ICO. Μέγιστο μέγεθος αρχείου: 10 MB.

Παράμετροι

Όλες οι παράμετροι είναι προαιρετικές. Στείλτε τις ως πεδία φόρμας (multipart) ή ως ιδιότητες JSON. Οι μη έγκυρες τιμές αντικαθίστανται από την προεπιλογή.

ΌνομαΤύπος / εύροςΠροεπιλογήΠεριγραφή
app_namestring, έως 60 χαρακτήρεςMy WebsiteΌνομα του ιστότοπου ή της εφαρμογής σας, που χρησιμοποιείται στο manifest.json και στην ενδεικτική σελίδα.
short_namestring, έως 24 χαρακτήρεςοι πρώτοι 12 χαρακτήρες του app_nameΣύντομο όνομα που εμφανίζεται κάτω από το εικονίδιο στις αρχικές οθόνες του Android.
theme_color#rrggbb#ffffffΧρώμα διεπαφής του προγράμματος περιήγησης (meta tag theme-color και manifest).
tile_color#rrggbbίδιο με το theme_colorΧρώμα φόντου των πλακιδίων έναρξης των Windows.
backgroundtransparent | #rrggbbtransparentΦόντο των εικονιδίων για προγράμματα περιήγησης, Android και Windows.
apple_background#rrggbb#ffffffΦόντο των εικονιδίων Apple touch και του maskable εικονιδίου (το iOS δεν υποστηρίζει διαφάνεια). Αγνοείται όταν το φόντο είναι χρώμα – τότε χρησιμοποιείται αυτό το χρώμα.
paddingακέραιος, 0–40 (%)0Κενός χώρος γύρω από την εικόνα, ως ποσοστό του μεγέθους του εικονιδίου.
radiusακέραιος, 0–50 (%)0Στρογγυλεμένες γωνίες. Το 50 δημιουργεί κύκλο. Δεν εφαρμόζεται στα εικονίδια Apple, τα οποία στρογγυλεύει το ίδιο το iOS.
zoomακέραιος, 50–400 (%)100Κλίμακα της εικόνας μέσα στο εικονίδιο. Τιμές άνω του 100 περικόπτουν την εικόνα.
offset_x, offset_yαριθμός, -1 έως 10Μετακινεί την εικόνα οριζόντια / κάθετα, ως κλάσμα του μεγέθους του εικονιδίου.
pathstring/Φάκελος στον διακομιστή σας όπου θα βρίσκονται τα εικονίδια. Χρησιμοποιείται στο απόσπασμα HTML, στο manifest και στο browserconfig.
displaystandalone | fullscreen | minimal-ui | browserstandaloneΛειτουργία εμφάνισης PWA που γράφεται στο manifest.
pixelatedauto | 1 | 0autoΑιχμηρή κλιμάκωση πλησιέστερου γείτονα για pixel art. Η τιμή auto την ενεργοποιεί για πηγές 64 px ή μικρότερες.
maskable1 | 01Δημιουργεί επίσης το maskable-icon-512x512.png με περιθώριο ασφαλούς ζώνης για τα προσαρμοστικά εικονίδια του Android.
ico_sizesλίστα χωρισμένη με κόμμα από 16, 24, 32, 48, 64, 128, 25616,32,48Μεγέθη που ενσωματώνονται στο favicon.ico.
groupsλίστα χωρισμένη με κόμμα από favicon, apple, android, msfavicon,apple,android,msΣύνολα εικονιδίων προς δημιουργία: favicon προγραμμάτων περιήγησης, εικονίδια Apple touch, εικονίδια Android / PWA και πλακίδια Windows.
formatzip | jsonzipΜορφή απάντησης – δείτε παρακάτω.

Απάντηση

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.

Παράδειγμα αιτήματος – multipart, απάντηση 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>

Παράδειγμα αιτήματος – JSON με URL εικόνας, απάντηση 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…"}
  ]
}

Λήψη του λογαριασμού σας

GET/me

Επιστρέφει τον χρήστη στον οποίο ανήκει το κλειδί API και την τρέχουσα κατάσταση του ορίου αιτημάτων. Χρήσιμο για την επαλήθευση ενός κλειδιού. Απαιτεί έλεγχο ταυτότητας· χωρίς παραμέτρους.

Παράδειγμα αιτήματος

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

Παράδειγμα απάντησης

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

Λίστα μεγεθών εικονιδίων

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.

Παράδειγμα αιτήματος

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

Παράδειγμα απάντησης

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

GET/openapi.json

Επιστρέφει την περιγραφή OpenAPI 3.1 αυτού του API. Χωρίς έλεγχο ταυτότητας. Εισαγάγετέ την σε Postman, Insomnia ή Swagger UI, ή χρησιμοποιήστε την για να δημιουργήσετε τυποποιημένο client για τη γλώσσα σας.

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

Σφάλματα

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Κωδικός σφάλματοςΣημασία
400bad_requestΤο αίτημα είναι λανθασμένα διαμορφωμένο, για παράδειγμα δεν στάλθηκε εικόνα ή το σώμα JSON δεν είναι έγκυρο.
401unauthorizedΤο κλειδί API λείπει ή δεν είναι έγκυρο.
403forbiddenΤο email του κατόχου του κλειδιού δεν έχει επιβεβαιωθεί, η συνδρομή στο ενημερωτικό δελτίο είναι απενεργοποιημένη ή ο λογαριασμός έχει αποκλειστεί.
413file_too_largeΗ εικόνα είναι μεγαλύτερη από 10 MB.
415unsupported_typeΟ τύπος αρχείου ή ο τύπος περιεχομένου του αιτήματος δεν υποστηρίζεται.
422invalid_imageΔεν ήταν δυνατή η αποκωδικοποίηση του αρχείου ως εικόνας ή η λήψη του URL της εικόνας.
429rate_limitedΠάρα πολλά αιτήματα. Περιμένετε μέχρι το X-RateLimit-Reset.
500server_errorΠαρουσιάστηκε πρόβλημα από τη δική μας πλευρά. Δοκιμάστε ξανά αργότερα· επικοινωνήστε με την υποστήριξη αν επιμένει.

Αρχεία εξόδου

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

ΑρχείοΜέγεθοςΟμάδα
favicon.ico16, 32, 48 (ρυθμιζόμενο)πάντα
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

Πρόσθετα αρχεία

ΑρχείοΠεριλαμβάνεταιΠεριγραφή
favicon.svgΜόνο για είσοδο SVG χωρίς περικοπή, ζουμ, περιθώριο, γωνίες ή φόντοΚαθαρισμένο αντίγραφο του SVG σας για προγράμματα περιήγησης που υποστηρίζουν διανυσματικά favicon.
manifest.json, site.webmanifestandroidWeb app manifest για Android και εγκαταστάσιμες PWA (δύο πανομοιότυπα αντίγραφα).
browserconfig.xmlmsΔιαμόρφωση πλακιδίων Windows με το χρώμα πλακιδίου σας.
readme-makefav.txtπάνταΟδηγίες εγκατάστασης με τον κώδικα HTML για το <head> σας στο τέλος.

Παραδείγματα κώδικα

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:

# 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 με εικόνα κωδικοποιημένη σε base64 (απαιτεί 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

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>

Μετά την ανάπτυξη, καθαρίστε την προσωρινή μνήμη του προγράμματος περιήγησης ή ανοίξτε τον ιστότοπο σε ιδιωτικό παράθυρο – τα προγράμματα περιήγησης αποθηκεύουν επιθετικά τα favicon στην προσωρινή μνήμη.

Ιστορικό αλλαγών

v1

  • Αρχική δημόσια έκδοση του MakeFav REST API.
  • Endpoints POST /generate, GET /me, GET /sizes and GET /openapi.json.
  • Μορφές απάντησης ZIP και JSON, είσοδος εικόνας μέσω multipart, base64 και URL.
  • Προσωπικά κλειδιά API με 100 αιτήματα ανά ώρα.

Η έκδοση 1 είναι σταθερή: προσθέτουμε μόνο προαιρετικές παραμέτρους και πεδία. Οι αλλαγές που σπάνε τη συμβατότητα θα κυκλοφορήσουν ως νέα έκδοση με προειδοποίηση εκ των προτέρων.

Υποστήριξη

Ερωτήσεις, αναφορές σφαλμάτων ή χρειάζεστε υψηλότερο όριο αιτημάτων; Θα χαρούμε να βοηθήσουμε. Συμπεριλάβετε στο μήνυμά σας την ώρα του αιτήματος και τον κωδικό σφάλματος – ποτέ το κλειδί API σας.