Docs / Reference

Dashboard API

The web dashboard exposes a REST API consumed by the Vue 3 frontend.

Example: Create a Domain

Request
curl -X POST http://localhost:6443/api/domains \
  -H "Content-Type: application/json" \
  -d '{
    "name": "example.com",
    "port": 3000,
    "backendHost": "127.0.0.1",
    "upstreamType": "http",
    "ssl": { "enabled": true },
    "performance": { "gzip": true },
    "security": { "rateLimit": false }
  }'
Response (201)
{
  "name": "example.com",
  "port": 3000,
  "backendHost": "127.0.0.1",
  "upstreamType": "http",
  "ssl": { "enabled": true },
  "enabled": true,
  "notifications": {
    "domain_health": { "enabled": true, "channelIds": [] },
    "cert_expiry":   { "enabled": true, "channelIds": [] }
  }
}

Example: Create a Notification Channel

Request
curl -X POST http://localhost:6443/api/settings/channels \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Production Discord",
    "type": "discord",
    "webhookUrl": "https://discord.com/api/webhooks/...",
    "message": "<@&1280907071813976196>"
  }'
Response (201)
{
  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "name": "Production Discord",
  "type": "discord",
  "webhookUrl": "https://discord.com/api/webhooks/...",
  "message": "<@&1280907071813976196>"
}

Example: Configure Domain Notifications

Request
curl -X PUT http://localhost:6443/api/domains/example.com/notifications \
  -H "Content-Type: application/json" \
  -d '{
    "domain_health": { "enabled": true,  "channelIds": ["a1b2c3d4-e5f6-7890-abcd-ef1234567890"] },
    "cert_expiry":   { "enabled": false, "channelIds": [] }
  }'

All Endpoints

Nginx

EndpointMethodDescription
/api/nginx/status
GET
Get nginx running status
/api/nginx/start
POST
Start nginx
/api/nginx/stop
POST
Stop nginx
/api/nginx/reload
POST
Graceful reload
/api/nginx/configs
GET
List config files
/api/nginx/config/:file
GETPOST
Read / write config file

Domains

EndpointMethodDescription
/api/domains
GETPOST
List / create domains. Responses include a notifications field with per-domain channel config.
/api/domains/:name
PUTDELETE
Update / delete domain
/api/domains/:name/toggle
PUT
Enable or disable domain
/api/domains/:name/reload
POST
Reload nginx for domain
/api/domains/:name/notifications
GETPUT
Get or update per-domain notification config (enabled flag + channelIds per event type)

SSL

EndpointMethodDescription
/api/ssl
GET
List certificates
/api/ssl/create
POST
Issue new certificate (HTTP-01 or DNS-01)
/api/ssl/create-confirm
POST
Confirm DNS-01 challenge
/api/ssl/renew/:domain
POST
Renew certificate

Settings

EndpointMethodDescription
/api/settings
GETPOST
Get / save dashboard settings
/api/settings/permissions
GET
Check whether Linux NOPASSWD sudoers are configured
/api/settings/permissions/setup
POST
Write /etc/sudoers.d/easy-devops via sudo -S (Linux only). Body: { password: string }
/api/settings/backup
GET
Download config and domains as a JSON file (password excluded)
/api/settings/restore
POST
Restore config and domains from a backup JSON body

Notification Channels

EndpointMethodDescription
/api/settings/channels
GET
List all named notification channels
/api/settings/channels
POST
Create a channel. Body: { name, type: 'discord'|'telegram', webhookUrl?, botToken?, chatId?, message? }
/api/settings/channels/:id
PUT
Update channel name or credentials. Type is immutable after creation.
/api/settings/channels/:id
DELETE
Delete a channel
/api/settings/channels/:id/test
POST
Send a live test notification to a single channel