These are the routes the CookDex web UI uses. They are not a stable public API yet.
All API routes are prefixed with /cookdex/api/v1 by default. If WEB_BASE_PATH changes, replace /cookdex with your configured base path.
Auth
GET /auth/bootstrap-statusPOST /auth/registerPOST /auth/loginPOST /auth/logoutGET /auth/session
Tasks, Runs, Policies
GET /tasksPOST /runsGET /runsGET /runs/{run_id}GET /runs/{run_id}/logGET /runs/{run_id}/log/tailGET /runs/{run_id}/resultPOST /runs/{run_id}/cancelGET /policiesPUT /policies
Automations
GET /automationsPOST /automationsPUT /automations/{automation_id}POST /automations/{automation_id}/enabledPOST /automations/{automation_id}/runDELETE /automations/{automation_id}
Schedules
GET /schedulesPOST /schedulesPATCH /schedules/{schedule_id}DELETE /schedules/{schedule_id}
Settings
GET /settingsPUT /settingsPOST /settings/models/openaiPOST /settings/models/anthropicPOST /settings/models/ollamaPOST /settings/test/mealiePOST /settings/test/openaiPOST /settings/test/anthropicPOST /settings/test/ollamaPOST /settings/test/dbPOST /settings/detect/dbGET /settings/dredger-sitesPOST /settings/dredger-sitesPUT /settings/dredger-sites/{site_id}DELETE /settings/dredger-sites/{site_id}POST /settings/dredger-sites/seedPOST /settings/dredger-sites/validate
Users
GET /usersPOST /usersPOST /users/{username}/reset-passwordPATCH /users/{username}/roleDELETE /users/{username}
Organize
GET /providerGET /provider/statusGET /organize/{kind}(tags, categories, tools)GET /organize/cookbooksPOST /organize/cookbooks/previewGET /organize/labelsGET /organize/foodsGET /organize/unitsGET /organize/last-backup(when CookDex last made a Mealie backup, read from its own records)GET /organize/starter-packsGET /organize/exportPOST /organize/importPOST /organize/standard/{kind}(foods, units; only while the list is empty)
Organize reads live from the recipe manager. Changes are staged in the browser and applied with the hidden organize-apply task, so they get run history and the usual safety checks. A backup first is the default for changes that can lose data, and the apply sheet lets you skip it. Without a backup, the task runs in the light lane, beside a long job, unless its writes overlap that job's (see webui_server/lanes.py).
Library and Discover
GET /libraryPOST /library/scanGET /discoverPOST /discover/sources/enabled
Recently deleted
GET /deleted-recipesPOST /deleted-recipes/restore({"ids": [...]})DELETE /deleted-recipes/{id}
Copies of recipes the junk filter deleted, kept in deleted-recipes/ next to state.db for DELETED_RECIPES_KEEP_DAYS days (see cookdex/deleted_recipes.py). Restoring queues the hidden recipe-restore task in the light lane; it waits for jobs that write recipes. Restoring and clearing copies need an owner, or an editor when live runs of Clean up the recipe list are approved.
Meta
GET /healthGET /metrics/overviewGET /metrics/qualityGET /about/metaGET /debug-log