Web Dashboard & REST API

Web Dashboard

Web Dashboard — Agent Guides

When running in HTTP mode, a web dashboard is available at the server root (http://<host>:<port>/). It provides:

  • Environment list with status indicators (running / stopped / partial)
  • Environment actions: Start / Stop / Restart / Recreate / Protect / Delete
  • Environment creation form (branch, repo URL, Odoo image, template, extra addons)
  • Environment protection — toggle to prevent accidental deletion
  • Live log viewer for each environment
  • Interactive terminal — WebSocket-based Odoo Python shell directly in the browser
  • Container and system resource stats (CPU, RAM, load average)
  • Service management — create, update, restart, delete, and view logs for auxiliary services
  • Extra addons management — clone, pull, protect, and delete extra addon repositories
  • Git credential management — list, add, delete, and validate stored git credentials
  • Template listing — view available template profiles with their status
  • License management — view current license and activate license keys

REST API Endpoints

All endpoints return JSON with an ok field. Authentication via HTTP Basic auth when ui_password is set in oduflow.toml (user: admin, password: the configured value). This is separate from the MCP Bearer token auth (auth_token).

Environments

Method Endpoint Description
GET /api/environments List all environments
POST /api/environments/create Create a new environment (JSON body: env_name, repo_url, odoo_image, template_name)
POST /api/environments/{branch}/start Start an environment
POST /api/environments/{branch}/stop Stop an environment
POST /api/environments/{branch}/restart Restart an environment
POST /api/environments/{branch}/sync Pull latest code and auto-install/upgrade/restart
POST /api/environments/{branch}/recreate Recreate an environment (delete + create with the same parameters)
POST /api/environments/{branch}/delete Delete an environment
GET /api/environments/{branch}/logs?n=200 Get environment logs
POST /api/environments/{branch}/protect Protect environment from deletion
POST /api/environments/{branch}/unprotect Remove protection from environment
WebSocket /api/environments/{branch}/terminal Interactive Odoo Python shell via WebSocket (used by the Web Dashboard terminal)

Services

Method Endpoint Description
GET /api/services List all managed services
POST /api/services/create Create a service (JSON body: name, image, port, hostname, env_vars)
POST /api/services/{name}/update Update (pull latest image & recreate)
POST /api/services/{name}/restart Restart a service
POST /api/services/{name}/delete Delete a service
GET /api/services/{name}/logs?n=200 Get service logs

Service Presets

Method Endpoint Description
GET /api/service-presets List saved service presets
POST /api/service-presets/restore Restore a service from a saved preset (JSON body: name, image, port, hostname, env_vars)
POST /api/service-presets/{name}/delete Delete a saved service preset

System

Method Endpoint Description
GET /api/stats Container CPU/RAM stats + system metrics
GET /api/templates List available template profiles

Extra Addons

Method Endpoint Description
GET /api/extra-repos List all cloned extra addons repositories
POST /api/extra-repos/add Clone an extra addons repo (JSON body: name, repo_url, git_user)
POST /api/extra-repos/{name}/pull Fetch latest changes from the remote for an extra repo
POST /api/extra-repos/{name}/protect Protect an extra repo from deletion
POST /api/extra-repos/{name}/unprotect Remove protection from an extra repo
POST /api/extra-repos/{name}/delete Delete a cloned extra addons repository

Credentials

Method Endpoint Description
GET /api/credentials List all stored git credentials
POST /api/credentials/add Store git credentials for a repository (JSON body: repo_url)
POST /api/credentials/delete Delete a stored credential (JSON body: host, username)
POST /api/credentials/validate Validate a stored credential (JSON body: host, username)

Licensing

Method Endpoint Description
GET /api/license Get current license information
POST /api/license/activate Activate a license key (JSON body: key)

Agent Guides

Method Endpoint Description
GET /api/agent-guides List all available agent guides
GET /api/agent-guides/{filename} Get content of a specific agent guide