Files
dashcaddy/dashcaddy-api/openapi.yaml
Sami f61e85d9a7 Initial commit: DashCaddy v1.0
Full codebase including API server (32 modules + routes), dashboard frontend,
DashCA certificate distribution, installer script, and deployment skills.
2026-03-05 02:26:12 -08:00

2985 lines
74 KiB
YAML

openapi: 3.0.3
info:
title: DashCaddy API
version: 1.0.0
description: Unified management API for Docker, Caddy, and DNS services
contact:
name: DashCaddy Support
servers:
- url: http://localhost:3001
description: Local development server
tags:
- name: Health & Status
description: Health checks and system status
- name: TOTP Authentication
description: Two-factor authentication management
- name: SSO Auth Gate
description: Single sign-on authentication gateway
- name: Service Credentials
description: Encrypted credential storage for services
- name: Tailscale
description: Tailscale VPN integration
- name: Caddy Management
description: Caddy reverse proxy configuration
- name: Site Management
description: Manage proxied sites and domains
- name: DNS Management
description: DNS record and server management
- name: Services Dashboard
description: Dashboard service management
- name: Assets & Branding
description: Custom logos and assets
- name: Configuration
description: DashCaddy configuration
- name: Backup & Restore
description: System backup and restore
- name: Credential Management
description: Encryption key and credential rotation
- name: Arr Stack Integration
description: Radarr, Sonarr, Prowlarr, Overseerr integration
- name: Plex
description: Plex media server integration
- name: Docker App Deployment
description: Deploy apps from 74+ templates
- name: Container Management
description: Docker container lifecycle management
- name: Notifications
description: Notification system configuration
- name: Container Stats & Logs
description: Container metrics and log viewing
- name: Service Health
description: Service health monitoring
- name: Resource Monitoring
description: Resource usage tracking and alerts
- name: Automated Backups
description: Scheduled backup management
- name: Health Checks
description: Service health check configuration
- name: Update Management
description: Container update management
- name: Error Logs
description: System error log management
- name: Filesystem Browser
description: Browse filesystem and media mounts
- name: Audit Log
description: System audit trail
paths:
# Health & Status
/health:
get:
tags: [Health & Status]
summary: Basic health check
responses:
'200':
description: Service is healthy
content:
application/json:
schema:
type: object
properties:
status:
type: string
example: ok
/api/health:
get:
tags: [Health & Status]
summary: API health check
responses:
'200':
description: API is healthy
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
status:
type: string
/probe/{id}:
get:
tags: [Health & Status]
summary: Service probe
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: Service probe result
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
/api/network/ips:
get:
tags: [Health & Status]
summary: Get network interface IPs
responses:
'200':
description: List of network IPs
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
ips:
type: array
items:
type: object
properties:
name:
type: string
address:
type: string
family:
type: string
# TOTP Authentication
/api/totp/config:
get:
tags: [TOTP Authentication]
summary: Get TOTP configuration
responses:
'200':
description: TOTP config
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
enabled:
type: boolean
sessionDuration:
type: number
post:
tags: [TOTP Authentication]
summary: Update TOTP config
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
sessionDuration:
type: number
description: Session duration in milliseconds
responses:
'200':
description: Config updated
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
/api/totp/setup:
post:
tags: [TOTP Authentication]
summary: Generate TOTP secret
responses:
'200':
description: TOTP setup data
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
secret:
type: string
qrCode:
type: string
description: Base64 QR code image
otpAuthUrl:
type: string
/api/totp/verify-setup:
post:
tags: [TOTP Authentication]
summary: Verify and activate TOTP
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [code]
properties:
code:
type: string
description: 6-digit TOTP code
responses:
'200':
description: TOTP activated
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
/api/totp/verify:
post:
tags: [TOTP Authentication]
summary: Verify TOTP code and create session
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [code]
properties:
code:
type: string
responses:
'200':
description: Session created
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
token:
type: string
expiresAt:
type: string
format: date-time
/api/totp/check-session:
get:
tags: [TOTP Authentication]
summary: Check if session is valid
responses:
'200':
description: Session status
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
valid:
type: boolean
/api/totp/disable:
post:
tags: [TOTP Authentication]
summary: Disable TOTP
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [code]
properties:
code:
type: string
responses:
'200':
description: TOTP disabled
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
# SSO Auth Gate
/api/auth/gate/{serviceId}:
get:
tags: [SSO Auth Gate]
summary: Forward auth endpoint for Caddy
parameters:
- name: serviceId
in: path
required: true
schema:
type: string
responses:
'200':
description: Auth successful
'401':
description: Auth failed
/api/auth/app-token/{serviceId}:
get:
tags: [SSO Auth Gate]
summary: Get app-specific session token
parameters:
- name: serviceId
in: path
required: true
schema:
type: string
responses:
'200':
description: App token
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
token:
type: string
# Service Credentials
/api/service-creds/{serviceId}:
post:
tags: [Service Credentials]
summary: Store service credentials
parameters:
- name: serviceId
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [username, password]
properties:
username:
type: string
password:
type: string
responses:
'200':
description: Credentials stored
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
get:
tags: [Service Credentials]
summary: Retrieve service credentials
parameters:
- name: serviceId
in: path
required: true
schema:
type: string
responses:
'200':
description: Service credentials
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
username:
type: string
password:
type: string
delete:
tags: [Service Credentials]
summary: Delete service credentials
parameters:
- name: serviceId
in: path
required: true
schema:
type: string
responses:
'200':
description: Credentials deleted
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
/api/seedhost-creds:
post:
tags: [Service Credentials]
summary: Store seedhost credentials
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
username:
type: string
password:
type: string
responses:
'200':
description: Seedhost credentials stored
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
get:
tags: [Service Credentials]
summary: Get seedhost credentials
responses:
'200':
description: Seedhost credentials
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
username:
type: string
password:
type: string
delete:
tags: [Service Credentials]
summary: Delete seedhost credentials
responses:
'200':
description: Credentials deleted
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
# Tailscale
/api/tailscale/status:
get:
tags: [Tailscale]
summary: Get Tailscale status
responses:
'200':
description: Tailscale status
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
enabled:
type: boolean
connected:
type: boolean
tailnetName:
type: string
hostname:
type: string
/api/tailscale/config:
post:
tags: [Tailscale]
summary: Update Tailscale config
requestBody:
content:
application/json:
schema:
type: object
properties:
enabled:
type: boolean
tailnetName:
type: string
responses:
'200':
description: Config updated
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
/api/tailscale/check-connection:
get:
tags: [Tailscale]
summary: Check if request is from Tailscale
responses:
'200':
description: Connection check result
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
isTailscale:
type: boolean
/api/tailscale/devices:
get:
tags: [Tailscale]
summary: List Tailscale devices
responses:
'200':
description: Device list
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
devices:
type: array
items:
type: object
/api/tailscale/protect-service:
post:
tags: [Tailscale]
summary: Add Tailscale ACLs
requestBody:
content:
application/json:
schema:
type: object
properties:
serviceId:
type: string
port:
type: number
responses:
'200':
description: ACLs updated
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
# Caddy Management
/api/caddyfile:
get:
tags: [Caddy Management]
summary: Read Caddyfile
responses:
'200':
description: Caddyfile contents
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
content:
type: string
/api/caddy/config:
get:
tags: [Caddy Management]
summary: Get Caddy admin config
responses:
'200':
description: Caddy config
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
config:
type: object
/api/caddy/reload:
post:
tags: [Caddy Management]
summary: Reload Caddy
responses:
'200':
description: Caddy reloaded
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
/api/caddy/get-cas:
get:
tags: [Caddy Management]
summary: Get certificate authorities
responses:
'200':
description: CA list
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
cas:
type: array
items:
type: object
# Site Management
/api/site:
post:
tags: [Site Management]
summary: Add site to Caddyfile
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [domain, upstream]
properties:
domain:
type: string
upstream:
type: string
config:
type: string
responses:
'200':
description: Site added
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
/api/site/external:
post:
tags: [Site Management]
summary: Add external service proxy
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [subdomain, externalUrl]
properties:
subdomain:
type: string
externalUrl:
type: string
preserveHost:
type: boolean
followRedirects:
type: boolean
responses:
'200':
description: External site added
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
/api/site/{domain}:
delete:
tags: [Site Management]
summary: Remove site from Caddyfile
parameters:
- name: domain
in: path
required: true
schema:
type: string
responses:
'200':
description: Site removed
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
# DNS Management
/api/dns/record:
post:
tags: [DNS Management]
summary: Create DNS record
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [domain, type, value, server]
properties:
domain:
type: string
type:
type: string
enum: [A, AAAA, CNAME, MX, TXT]
value:
type: string
server:
type: string
responses:
'200':
description: DNS record created
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
delete:
tags: [DNS Management]
summary: Delete DNS record
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [domain, type, value, server]
properties:
domain:
type: string
type:
type: string
value:
type: string
server:
type: string
responses:
'200':
description: DNS record deleted
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
/api/dns/resolve:
get:
tags: [DNS Management]
summary: Resolve DNS
parameters:
- name: domain
in: query
required: true
schema:
type: string
- name: type
in: query
schema:
type: string
- name: server
in: query
schema:
type: string
responses:
'200':
description: DNS resolution result
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
records:
type: array
items:
type: object
/api/dns/logs:
get:
tags: [DNS Management]
summary: Get DNS query logs
parameters:
- name: pageNumber
in: query
schema:
type: integer
- name: entriesPerPage
in: query
schema:
type: integer
- name: start
in: query
schema:
type: string
- name: end
in: query
schema:
type: string
responses:
'200':
description: DNS logs
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
logs:
type: array
items:
type: object
/api/dns/token-status:
get:
tags: [DNS Management]
summary: Check DNS token status
responses:
'200':
description: Token status
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
valid:
type: boolean
/api/dns/credentials:
post:
tags: [DNS Management]
summary: Store DNS credentials
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [username, password, server]
properties:
username:
type: string
password:
type: string
server:
type: string
responses:
'200':
description: Credentials stored
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
get:
tags: [DNS Management]
summary: Get DNS credentials status
responses:
'200':
description: Credentials status (no secrets)
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
configured:
type: boolean
delete:
tags: [DNS Management]
summary: Delete DNS credentials
responses:
'200':
description: Credentials deleted
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
/api/dns/refresh-token:
post:
tags: [DNS Management]
summary: Refresh DNS API token
responses:
'200':
description: Token refreshed
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
/api/dns/check-update:
get:
tags: [DNS Management]
summary: Check for DNS server updates
responses:
'200':
description: Update check result
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
updateAvailable:
type: boolean
/api/dns/update:
post:
tags: [DNS Management]
summary: Update DNS server
responses:
'200':
description: Update started
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
# Services Dashboard
/api/services:
get:
tags: [Services Dashboard]
summary: List all services
responses:
'200':
description: Services list
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
services:
type: array
items:
$ref: '#/components/schemas/Service'
post:
tags: [Services Dashboard]
summary: Add service
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Service'
responses:
'200':
description: Service added
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
put:
tags: [Services Dashboard]
summary: Bulk update services
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
services:
type: array
items:
$ref: '#/components/schemas/Service'
responses:
'200':
description: Services updated
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
/api/services/{id}:
delete:
tags: [Services Dashboard]
summary: Delete service
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: Service deleted
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
/api/services/update:
post:
tags: [Services Dashboard]
summary: Reorder services
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
services:
type: array
items:
$ref: '#/components/schemas/Service'
responses:
'200':
description: Services reordered
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
# Assets & Branding
/api/assets/upload:
post:
tags: [Assets & Branding]
summary: Upload asset file
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
file:
type: string
format: binary
responses:
'200':
description: Asset uploaded
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
filename:
type: string
/api/logo:
get:
tags: [Assets & Branding]
summary: Get custom logo
responses:
'200':
description: Logo file
content:
image/*:
schema:
type: string
format: binary
post:
tags: [Assets & Branding]
summary: Upload custom logo
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
logo:
type: string
format: binary
responses:
'200':
description: Logo uploaded
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
delete:
tags: [Assets & Branding]
summary: Delete custom logo
responses:
'200':
description: Logo deleted
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
/api/favicon:
get:
tags: [Assets & Branding]
summary: Get custom favicon
responses:
'200':
description: Favicon file
content:
image/*:
schema:
type: string
format: binary
post:
tags: [Assets & Branding]
summary: Upload custom favicon
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
favicon:
type: string
format: binary
responses:
'200':
description: Favicon uploaded
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
delete:
tags: [Assets & Branding]
summary: Delete custom favicon
responses:
'200':
description: Favicon deleted
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
# Configuration
/api/config:
get:
tags: [Configuration]
summary: Get DashCaddy config
responses:
'200':
description: Config data
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
config:
$ref: '#/components/schemas/Config'
post:
tags: [Configuration]
summary: Update config
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Config'
responses:
'200':
description: Config updated
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
delete:
tags: [Configuration]
summary: Reset config to defaults
responses:
'200':
description: Config reset
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
# Backup & Restore
/api/backup/export:
get:
tags: [Backup & Restore]
summary: Export full backup
responses:
'200':
description: Backup file
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
backup:
type: object
/api/backup/preview:
post:
tags: [Backup & Restore]
summary: Preview backup contents
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
backup:
type: object
responses:
'200':
description: Backup preview
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
preview:
type: object
/api/backup/restore:
post:
tags: [Backup & Restore]
summary: Restore from backup
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
backup:
type: object
responses:
'200':
description: Backup restored
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
# Credential Management
/api/credentials/list:
get:
tags: [Credential Management]
summary: List all stored credentials
responses:
'200':
description: Credential list (keys only)
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
credentials:
type: array
items:
type: string
/api/credentials/rotate-key:
post:
tags: [Credential Management]
summary: Rotate encryption key
responses:
'200':
description: Key rotated
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
# Arr Stack Integration
/api/arr/detect:
get:
tags: [Arr Stack Integration]
summary: Detect installed Arr apps
responses:
'200':
description: Detected apps
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
apps:
type: array
items:
type: object
/api/arr/configure-overseerr:
post:
tags: [Arr Stack Integration]
summary: Configure Overseerr
requestBody:
content:
application/json:
schema:
type: object
properties:
overseerrUrl:
type: string
apiKey:
type: string
responses:
'200':
description: Overseerr configured
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
/api/arr/test-connection:
post:
tags: [Arr Stack Integration]
summary: Test Arr service connection
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [url, apiKey]
properties:
url:
type: string
apiKey:
type: string
responses:
'200':
description: Connection test result
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
connected:
type: boolean
/api/arr/auto-setup:
post:
tags: [Arr Stack Integration]
summary: Automatic Arr stack setup
responses:
'200':
description: Auto-setup complete
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
/api/arr/credentials:
post:
tags: [Arr Stack Integration]
summary: Store Arr credentials
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
service:
type: string
apiKey:
type: string
responses:
'200':
description: Credentials stored
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
get:
tags: [Arr Stack Integration]
summary: Get Arr credentials
responses:
'200':
description: Credentials data
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
credentials:
type: object
/api/arr/credentials/{service}:
delete:
tags: [Arr Stack Integration]
summary: Delete Arr credentials
parameters:
- name: service
in: path
required: true
schema:
type: string
responses:
'200':
description: Credentials deleted
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
/api/arr/smart-detect:
get:
tags: [Arr Stack Integration]
summary: Smart detection of Arr services
responses:
'200':
description: Detected services
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
detected:
type: object
/api/arr/smart-connect:
post:
tags: [Arr Stack Integration]
summary: Smart connect Arr stack
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
credentials:
type: object
responses:
'200':
description: Connection results
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
results:
type: object
# Plex
/api/plex/libraries:
get:
tags: [Plex]
summary: Get Plex libraries
responses:
'200':
description: Plex libraries
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
libraries:
type: array
items:
type: object
# Docker App Deployment
/api/apps/templates:
get:
tags: [Docker App Deployment]
summary: Get all app templates
responses:
'200':
description: Template list (74 templates)
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
templates:
type: array
items:
$ref: '#/components/schemas/AppTemplate'
/api/apps/templates/{appId}:
get:
tags: [Docker App Deployment]
summary: Get specific template
parameters:
- name: appId
in: path
required: true
schema:
type: string
responses:
'200':
description: Template data
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
template:
$ref: '#/components/schemas/AppTemplate'
/api/apps/check-port/{port}:
get:
tags: [Docker App Deployment]
summary: Check port availability
parameters:
- name: port
in: path
required: true
schema:
type: integer
responses:
'200':
description: Port availability
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
available:
type: boolean
/api/apps/suggest-port/{basePort}:
get:
tags: [Docker App Deployment]
summary: Suggest next available port
parameters:
- name: basePort
in: path
required: true
schema:
type: integer
responses:
'200':
description: Suggested port
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
port:
type: integer
/api/apps/check-existing:
post:
tags: [Docker App Deployment]
summary: Check if app deployed
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
appId:
type: string
responses:
'200':
description: Deployment status
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
exists:
type: boolean
/api/apps/deploy:
post:
tags: [Docker App Deployment]
summary: Deploy Docker app
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [appId, subdomain, port]
properties:
appId:
type: string
subdomain:
type: string
port:
type: integer
ip:
type: string
environment:
type: object
volumes:
type: array
items:
type: string
responses:
'200':
description: App deployed
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
containerId:
type: string
url:
type: string
/api/apps/{appId}:
delete:
tags: [Docker App Deployment]
summary: Delete deployed app
parameters:
- name: appId
in: path
required: true
schema:
type: string
responses:
'200':
description: App deleted
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
/api/apps/update-subdomain:
post:
tags: [Docker App Deployment]
summary: Update app subdomain
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [appId, subdomain]
properties:
appId:
type: string
subdomain:
type: string
responses:
'200':
description: Subdomain updated
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
# Container Management
/api/containers/{id}/start:
post:
tags: [Container Management]
summary: Start container
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: Container started
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
/api/containers/{id}/stop:
post:
tags: [Container Management]
summary: Stop container
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: Container stopped
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
/api/containers/{id}/restart:
post:
tags: [Container Management]
summary: Restart container
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: Container restarted
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
/api/containers/{id}/update:
post:
tags: [Container Management]
summary: Update container image
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: Container updated
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
/api/containers/{id}/check-update:
get:
tags: [Container Management]
summary: Check for container updates
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: Update check result
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
updateAvailable:
type: boolean
/api/containers/{id}/logs:
get:
tags: [Container Management]
summary: Get container logs
parameters:
- name: id
in: path
required: true
schema:
type: string
- name: tail
in: query
schema:
type: integer
- name: since
in: query
schema:
type: string
responses:
'200':
description: Container logs
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
logs:
type: string
/api/containers/{id}:
delete:
tags: [Container Management]
summary: Delete container
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: Container deleted
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
/api/containers/discover:
get:
tags: [Container Management]
summary: Discover unmanaged containers
responses:
'200':
description: Unmanaged containers
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
containers:
type: array
items:
type: object
# Notifications
/api/notifications/config:
get:
tags: [Notifications]
summary: Get notification config
responses:
'200':
description: Notification config
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
config:
type: object
post:
tags: [Notifications]
summary: Update notification config
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
enabled:
type: boolean
channels:
type: object
responses:
'200':
description: Config updated
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
/api/notifications/test:
post:
tags: [Notifications]
summary: Send test notification
responses:
'200':
description: Test notification sent
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
/api/notifications/history:
get:
tags: [Notifications]
summary: Get notification history
responses:
'200':
description: Notification history
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
history:
type: array
items:
type: object
delete:
tags: [Notifications]
summary: Clear notification history
responses:
'200':
description: History cleared
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
/api/notifications/health-check:
post:
tags: [Notifications]
summary: Trigger health check notification
responses:
'200':
description: Health check triggered
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
# Container Stats & Logs
/api/stats/containers:
get:
tags: [Container Stats & Logs]
summary: Get all container stats
responses:
'200':
description: All container stats
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
stats:
type: array
items:
$ref: '#/components/schemas/ContainerStats'
/api/stats/container/{id}:
get:
tags: [Container Stats & Logs]
summary: Get specific container stats
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: Container stats
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
stats:
$ref: '#/components/schemas/ContainerStats'
/api/logs/containers:
get:
tags: [Container Stats & Logs]
summary: List containers with logs
responses:
'200':
description: Container list
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
containers:
type: array
items:
type: object
/api/logs/container/{id}:
get:
tags: [Container Stats & Logs]
summary: Get container log entries
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: Log entries
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
logs:
type: array
items:
type: string
/api/logs/stream/{id}:
get:
tags: [Container Stats & Logs]
summary: Stream container logs (SSE)
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: Log stream
content:
text/event-stream:
schema:
type: string
/api/logs/file:
get:
tags: [Container Stats & Logs]
summary: Read native log file
parameters:
- name: path
in: query
required: true
schema:
type: string
- name: lines
in: query
schema:
type: integer
responses:
'200':
description: Log file contents
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
logs:
type: string
# Service Health
/api/health/services:
get:
tags: [Service Health]
summary: Full health check for all services
responses:
'200':
description: All service health status
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
services:
type: array
items:
type: object
/api/health/cached:
get:
tags: [Service Health]
summary: Cached health results
responses:
'200':
description: Cached health data
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
cached:
type: object
/api/health/service/{id}:
get:
tags: [Service Health]
summary: Health for specific service
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: Service health
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
healthy:
type: boolean
# Resource Monitoring
/api/monitoring/stats:
get:
tags: [Resource Monitoring]
summary: All container resource stats
responses:
'200':
description: All resource stats
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
stats:
type: array
items:
$ref: '#/components/schemas/ContainerStats'
/api/monitoring/stats/{containerId}:
get:
tags: [Resource Monitoring]
summary: Specific container stats
parameters:
- name: containerId
in: path
required: true
schema:
type: string
responses:
'200':
description: Container stats
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
stats:
$ref: '#/components/schemas/ContainerStats'
/api/monitoring/history/{containerId}:
get:
tags: [Resource Monitoring]
summary: Historical stats
parameters:
- name: containerId
in: path
required: true
schema:
type: string
- name: hours
in: query
schema:
type: integer
responses:
'200':
description: Historical data
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
history:
type: array
items:
type: object
/api/monitoring/aggregated/{containerId}:
get:
tags: [Resource Monitoring]
summary: Aggregated stats
parameters:
- name: containerId
in: path
required: true
schema:
type: string
- name: hours
in: query
schema:
type: integer
responses:
'200':
description: Aggregated data
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
aggregated:
type: object
/api/monitoring/alerts/{containerId}:
post:
tags: [Resource Monitoring]
summary: Configure alerts
parameters:
- name: containerId
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
cpuThreshold:
type: number
memoryThreshold:
type: number
enabled:
type: boolean
responses:
'200':
description: Alerts configured
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
get:
tags: [Resource Monitoring]
summary: Get alert config
parameters:
- name: containerId
in: path
required: true
schema:
type: string
responses:
'200':
description: Alert config
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
config:
type: object
delete:
tags: [Resource Monitoring]
summary: Delete alert config
parameters:
- name: containerId
in: path
required: true
schema:
type: string
responses:
'200':
description: Alerts deleted
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
# Automated Backups
/api/backups/config:
get:
tags: [Automated Backups]
summary: Get backup config
responses:
'200':
description: Backup config
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
config:
type: object
post:
tags: [Automated Backups]
summary: Update backup config
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
enabled:
type: boolean
schedule:
type: string
retention:
type: integer
responses:
'200':
description: Config updated
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
/api/backups/execute:
post:
tags: [Automated Backups]
summary: Run manual backup
responses:
'200':
description: Backup complete
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
backupId:
type: string
/api/backups/history:
get:
tags: [Automated Backups]
summary: Get backup history
responses:
'200':
description: Backup history
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
backups:
type: array
items:
type: object
/api/backups/restore/{backupId}:
post:
tags: [Automated Backups]
summary: Restore from backup
parameters:
- name: backupId
in: path
required: true
schema:
type: string
responses:
'200':
description: Restore complete
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
# Health Checks
/api/health-check/status:
get:
tags: [Health Checks]
summary: All service health status
responses:
'200':
description: Health status
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
services:
type: array
items:
type: object
/api/health-check/stats/{serviceId}:
get:
tags: [Health Checks]
summary: Detailed service stats
parameters:
- name: serviceId
in: path
required: true
schema:
type: string
- name: hours
in: query
schema:
type: integer
responses:
'200':
description: Service stats
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
stats:
type: object
/api/health-check/configure/{serviceId}:
post:
tags: [Health Checks]
summary: Configure health check
parameters:
- name: serviceId
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
interval:
type: integer
timeout:
type: integer
retries:
type: integer
responses:
'200':
description: Health check configured
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
delete:
tags: [Health Checks]
summary: Remove health check
parameters:
- name: serviceId
in: path
required: true
schema:
type: string
responses:
'200':
description: Health check removed
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
/api/health-check/incidents:
get:
tags: [Health Checks]
summary: Open incidents
responses:
'200':
description: Open incidents
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
incidents:
type: array
items:
type: object
/api/health-check/incidents/history:
get:
tags: [Health Checks]
summary: Incident history
parameters:
- name: limit
in: query
schema:
type: integer
responses:
'200':
description: Incident history
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
history:
type: array
items:
type: object
# Update Management
/api/updates/check:
post:
tags: [Update Management]
summary: Check for updates
responses:
'200':
description: Update check complete
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
updates:
type: array
items:
type: object
/api/updates/available:
get:
tags: [Update Management]
summary: Get available updates
responses:
'200':
description: Available updates
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
updates:
type: array
items:
type: object
/api/updates/update/{containerId}:
post:
tags: [Update Management]
summary: Update container
parameters:
- name: containerId
in: path
required: true
schema:
type: string
responses:
'200':
description: Update complete
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
/api/updates/rollback/{containerId}:
post:
tags: [Update Management]
summary: Rollback container
parameters:
- name: containerId
in: path
required: true
schema:
type: string
responses:
'200':
description: Rollback complete
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
/api/updates/history:
get:
tags: [Update Management]
summary: Get update history
parameters:
- name: limit
in: query
schema:
type: integer
responses:
'200':
description: Update history
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
history:
type: array
items:
type: object
/api/updates/auto-update/{containerId}:
post:
tags: [Update Management]
summary: Configure auto-update
parameters:
- name: containerId
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
enabled:
type: boolean
responses:
'200':
description: Auto-update configured
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
/api/updates/schedule/{containerId}:
post:
tags: [Update Management]
summary: Schedule update
parameters:
- name: containerId
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
scheduledTime:
type: string
format: date-time
responses:
'200':
description: Update scheduled
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
# Error Logs
/api/error-logs:
get:
tags: [Error Logs]
summary: View error logs
responses:
'200':
description: Error logs
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
logs:
type: array
items:
type: object
delete:
tags: [Error Logs]
summary: Clear error logs
responses:
'200':
description: Logs cleared
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
# Filesystem Browser
/api/browse/roots:
get:
tags: [Filesystem Browser]
summary: Get browseable roots
responses:
'200':
description: Root paths
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
roots:
type: array
items:
type: string
/api/browse/dir:
get:
tags: [Filesystem Browser]
summary: Browse directory
parameters:
- name: path
in: query
required: true
schema:
type: string
responses:
'200':
description: Directory contents
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
files:
type: array
items:
type: object
properties:
name:
type: string
type:
type: string
size:
type: integer
/api/media/detected-mounts:
get:
tags: [Filesystem Browser]
summary: Detect media mounts
responses:
'200':
description: Detected mounts
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
mounts:
type: array
items:
type: object
# Audit Log
/api/audit-log:
get:
tags: [Audit Log]
summary: Query audit log
parameters:
- name: limit
in: query
schema:
type: integer
- name: offset
in: query
schema:
type: integer
- name: action
in: query
schema:
type: string
responses:
'200':
description: Audit log entries
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
entries:
type: array
items:
type: object
properties:
timestamp:
type: string
format: date-time
action:
type: string
user:
type: string
details:
type: object
delete:
tags: [Audit Log]
summary: Clear audit log
responses:
'200':
description: Log cleared
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessResponse'
# API Documentation
/api/docs:
get:
tags: [API Documentation]
summary: API docs UI
responses:
'200':
description: Swagger UI
content:
text/html:
schema:
type: string
/api/docs/spec:
get:
tags: [API Documentation]
summary: OpenAPI spec
responses:
'200':
description: This OpenAPI specification
content:
application/json:
schema:
type: object
components:
schemas:
SuccessResponse:
type: object
properties:
success:
type: boolean
message:
type: string
required:
- success
Service:
type: object
properties:
id:
type: string
name:
type: string
url:
type: string
logo:
type: string
category:
type: string
description:
type: string
order:
type: integer
required:
- id
- name
- url
Config:
type: object
properties:
title:
type: string
theme:
type: string
enum: [light, dark, auto]
logo:
type: string
favicon:
type: string
customCss:
type: string
AppTemplate:
type: object
properties:
id:
type: string
name:
type: string
description:
type: string
logo:
type: string
image:
type: string
defaultPort:
type: integer
category:
type: string
environment:
type: array
items:
type: object
properties:
name:
type: string
label:
type: string
default:
type: string
volumes:
type: array
items:
type: object
properties:
container:
type: string
host:
type: string
required:
- id
- name
- image
ContainerStats:
type: object
properties:
id:
type: string
name:
type: string
cpuPercent:
type: number
memoryUsage:
type: integer
memoryLimit:
type: integer
memoryPercent:
type: number
networkRx:
type: integer
networkTx:
type: integer
blockRead:
type: integer
blockWrite:
type: integer