ブランディングアセットをアップロードする

POST /v1/branding/assets · 権限 branding:write

ホストされるログインページで使う画像(ロゴ、ファビコン、背景画像)をアップロードします。レスポンスの id は、テーマのフィールド logo、favicon、background_image に設定する値です(ブランディングを更新するを参照)。画像は公開後にログインページへ表示されます。

すべての画像は隔離されたプロセスでデコードされ、最大 1024 × 1024 ピクセルの PNG に再エンコードされます。メタデータはすべて削除されます。ファビコンには 32 px と 180 px の版も作成されます。id は処理後の PNG の SHA-256 です。同じフィールドに同じ画像を再度アップロードすると、既存のアセットが 200 OK で返されます。

受け付ける形式は PNG、JPEG、WebP で、ICO はファビコンのみ受け付けます。SVG は受け付けません。フォントのアップロードは利用できません。

1 つの環境に保存できるアセットは最大 200 個、合計 50 MB です。

リクエスト

本文は multipart/form-data で、ファイルは最大 1 MiB です。

パート 型 必須 説明
kind string はい logo、favicon、background_image のいずれか。
file file はい 画像。最大 1 MiB、各辺 8192 ピクセル以内。

Idempotency-Key を使う場合、再試行では multipart の境界(boundary)を含めて、まったく同じバイト列を送信してください。

レスポンス

新しいアセットには 201 Created、同じフィールドに同じ画像が既にアップロードされている場合は 200 OK を返します。

{
  "id": "3f0c…e91a",
  "kind": "favicon",
  "url": "https://acme.eu1.keenauth.app/assets/3f0c…e91a.png",
  "width": 256,
  "height": 256,
  "byte_size": 48213,
  "source_format": "ico",
  "favicon_32_url": "https://acme.eu1.keenauth.app/assets/9b1d…04c2.png",
  "favicon_180_url": "https://acme.eu1.keenauth.app/assets/c7e2…5a10.png",
  "created_at": "2026-10-19T20:30:00Z"
}

byte_size は、そのアセットとして保存されたすべての PNG のサイズの合計で、クォータに含まれます。

エラー

HTTP code 発生条件
400 malformed_request multipart 本文を読み取れない、または kind と file 以外のパートが含まれています。
401 unauthenticated 認証情報がない、無効である、または取り消されています。
403 insufficient_permissions 認証情報に必要な権限がありません。
403 quota_exceeded 環境に既に 200 個のアセットまたは 50 MB があります。
413 payload_too_large ファイルが 1 MiB を超えています。
415 unsupported_media_type 本文が multipart/form-data ではない、またはファイルが受け付けられない形式です(errors[] の unsupported_media_type、svg_not_allowed、ico_favicon_only)。
422 validation_failed kind または file がないか無効です(フォントの場合は /kind font_upload_disabled)。または画像を使用できません: invalid_image、image_too_large、image_dimensions_too_large、image_output_too_large、image_processing_limit。
422 idempotency_key_reuse 同じ Idempotency-Key が別の本文で使われました。
429 rate_limited レート制限を超えました。Retry-After の時間が経過してから再試行してください。
503 service_unavailable アセットストレージが一時的に利用できません。Retry-After の時間が経過してから再試行してください。

例

curl -X POST https://api.eu.keenauth.com/v1/branding/assets \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -F kind=logo \
  -F file=@logo.png

CLI の場合:

keenauth branding assets upload --kind logo --file logo.png