Skip to content

Settings

Read and update the server-wide library pagination, search, upload, and display settings, and export a full backup.

Updated View as Markdown

These are the install’s shared settings — see the Library section in Profiles & Access for what they control. A profile’s own name, color, and password are edited through PATCH /api/profiles/:id, not here.

GET /api/settings

GETAny session

Returns the current settings.

Response

{
  "settings": {
    "recipesPerPage": 50,
    "searchResultLimit": 10,
    "imageMaxSizeMb": 10,
    "showIngredientGramHints": false
  }
}

PATCH /api/settings

PATCHAdmin only

Updates one or more settings. All fields optional — only send what’s changing.

Request body

Field Type Notes
recipesPerPage integer 10–500 How many recipes the Library and Favorites grids show per page
searchResultLimit integer 1–100 How many results the search dialog shows before “keep typing to narrow it down”
imageMaxSizeMb integer 1–100 Largest photo accepted by uploads (hero image or step photo), in MB
showIngredientGramHints boolean Show an approximate gram weight next to convertible ingredient quantities (e.g. “1 cup flour (~120g)”), calculated offline from a built-in density table. Off by default.

Response: { "settings": PublicAppSettings }, or 400 if a field is outside its allowed range.

GET /api/export

GETAdmin only

Streams a zip archive of the whole install — every recipe’s metadata and photos, every profile’s collections and cooking state, the profile list (passwords stripped down to a hasPassword flag), and the settings above. The archive mirrors the storage backend’s own layout (recipes/<id>/metadata.json, recipes/<id>/image.<ext>, and so on) file-for-file, plus top-level recipes.json, profiles.json, and settings.json summaries. Nothing is buffered in memory — files stream straight from storage into the response — so this works the same way whether the library has ten recipes or ten thousand.

The shopping list is deliberately left out — it’s a working list, not part of the library. There’s no matching import endpoint yet; this is a one-way, read-only download.

Response: 200 with Content-Type: application/zip and a Content-Disposition: attachment header, or 403 if the active profile isn’t an admin (or on the public demo, where export is disabled entirely).

Navigation

Type to search…

↑↓ navigate↵ selectEsc close