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