REST API · v1

MakeFav API ドキュメント

独自のコード、ビルドスクリプト、CI パイプラインから、完全な favicon パッケージを生成できます。1回のリクエストで、あらゆる画像から favicon.ico、Apple touch icon、Android・PWA 用アイコン、Web マニフェスト、そのまま貼り付けられる HTML を作成します。

このページの内容

クイックスタート

MakeFav API は、HTTPS と JSON を使ったシンプルな REST API です。すべてのエンドポイントは、次の共通のベース URL の下にあります。

https://makefav.com/api/v1
  1. 無料アカウントを作成
    登録してメールアドレスを確認し、MakeFav のニュースレターの購読を有効にしておいてください。これが無料プランの唯一の条件です。
  2. API キーを作成
    アカウントの API キーページを開き、個人用キーを作成します。キーは mf_ で始まり、一度しか表示されないため、安全に保管してください。 API キーを管理
  3. 最初のリクエストを送信
    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.

認証

保護されたエンドポイントへのリクエストには、すべて個人用 API キーを含める必要があります。キーの作成、名前の設定、無効化は、アカウントページでいつでも行えます。 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
キーは、メールアドレスが確認済みで、ニュースレターの購読が有効なユーザー(無料プランの条件)に紐づきます。メールが未確認の場合、ニュースレターが無効の場合、またはアカウントが停止されている場合、すべてのリクエストで 403 Forbidden が返されます。
API キーはパスワードと同様に扱ってください。サーバー上または CI のシークレットに保管し、ブラウザのコード、モバイルアプリ、公開リポジトリには絶対に含めないでください。漏洩した場合は、ただちにキーを無効化してください。

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

レート制限

デフォルトでは、各 API キーで1時間あたり 100 リクエストまで実行できます。認証済みのレスポンスには、現在の状況が毎回含まれます。

ヘッダー説明
X-RateLimit-Limit現在のウィンドウで許可される最大リクエスト数。
X-RateLimit-Remaining現在のウィンドウで残っているリクエスト数。
X-RateLimit-Resetウィンドウがリセットされる Unix タイムスタンプ(秒、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.

エンドポイント

エンドポイント認証説明
POST /generateAPI キー完全な favicon パッケージを作成します。
GET /meAPI キーアカウント情報と現在のレート制限の状況。
GET /sizesなしジェネレーターが生成するすべてのアイコンファイルとサイズの一覧。
GET /openapi.jsonなし機械可読な OpenAPI 3.1 仕様。

favicon パッケージを生成

POST/generate

1枚の元画像から完全な favicon パッケージを作成します。画像は次の3つの方法のいずれかで送信できます。

コンテンツタイプ画像フィールド説明
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画像の公開 http または https URL。サーバーがダウンロードします(最大 10 MB)。

対応する入力形式:PNG、JPG、WebP、AVIF、GIF、BMP、SVG、ICO。最大ファイルサイズ:10 MB。

パラメータ

すべてのパラメータは任意です。フォームフィールド(multipart)または JSON プロパティとして送信してください。無効な値はデフォルトに戻ります。

お名前型 / 範囲デフォルト説明
app_name文字列、最大 60 文字My Websiteウェブサイトまたはアプリの名前。manifest.json とサンプルページで使用されます。
short_name文字列、最大 24 文字app_name の先頭 12 文字Android のホーム画面でアイコンの下に表示される短い名前。
theme_color#rrggbb#ffffffブラウザ UI の色(theme-color メタタグとマニフェスト)。
tile_color#rrggbbtheme_color と同じWindows のスタートタイルの背景色。
backgroundtransparent | #rrggbbtransparentブラウザ、Android、Windows 用アイコンの背景。
apple_background#rrggbb#ffffffApple touch icon とマスカブルアイコンの背景(iOS は透過に対応していません)。background が色の場合は無視され、その色が使用されます。
padding整数、0–40(%)0画像の周囲の余白。アイコンサイズに対する割合で指定します。
radius整数、0–50(%)0角丸。50 で円形になります。iOS 側で角を丸める Apple アイコンには適用されません。
zoom整数、50–400(%)100アイコン内での画像の拡大率。100 を超えると画像がトリミングされます。
offset_x, offset_y数値、-1〜10画像を水平 / 垂直方向に移動します。アイコンサイズに対する割合で指定します。
path文字列/アイコンを配置するサーバー上のフォルダ。HTML スニペット、マニフェスト、browserconfig で使用されます。
displaystandalone | fullscreen | minimal-ui | browserstandaloneマニフェストに書き込まれる PWA の表示モード。
pixelatedauto | 1 | 0autoピクセルアート向けのシャープな最近傍法によるスケーリング。auto では、64 px 以下の元画像で有効になります。
maskable1 | 01Android のアダプティブアイコン用に、セーフゾーンの余白を持つ maskable-icon-512x512.png も作成します。
ico_sizes16、24、32、48、64、128、256のカンマ区切りリスト16,32,48favicon.icoに埋め込まれるサイズ。
groupsfavicon、apple、android、msのカンマ区切りリストfavicon,apple,android,ms生成するアイコンセット:ブラウザ用favicon、Apple touch icon、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>

リクエスト例 – 画像URLを含むJSON、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

このAPIのOpenAPI 3.1の記述を返します。認証は不要です。Postman、Insomnia、Swagger UIにインポートしたり、お使いの言語向けの型付きクライアントの生成に利用できます。

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ボディが無効な場合です。
401unauthorizedAPIキーが指定されていないか、無効です。
403forbiddenキー所有者のメールアドレスが未確認、ニュースレターの購読が無効、またはアカウントが停止されています。
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.svgSVG入力で、切り抜き、ズーム、余白、角丸、背景を使用しない場合のみベクターfaviconに対応するブラウザ向けの、サニタイズ済みSVGのコピー。
manifest.json, site.webmanifestandroidAndroidおよびインストールPWA向けのWebアプリマニフェスト(同一内容のコピー2つ)。
browserconfig.xmlmsタイルカラーを反映したWindowsタイルの設定ファイル。
readme-makefav.txt常に最後に、<head> に貼り付けるHTMLコード付きのインストール手順を掲載しています。

コード例

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

base64エンコードした画像を含むJSONボディ(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による画像入力に対応。
  • 1時間あたり100リクエストの個人用APIキー。

バージョン1は安定版です。追加するのはオプションのパラメータとフィールドのみです。互換性のない変更は、事前にお知らせした上で新バージョンとして公開します。

サポート

ご質問、不具合のご報告、より高いレート制限のご希望など、お気軽にご連絡ください。メッセージにはリクエストの日時とエラーコードを記載してください。APIキーは絶対に記載しないでください。