Full codebase including API server (32 modules + routes), dashboard frontend, DashCA certificate distribution, installer script, and deployment skills.
2985 lines
74 KiB
YAML
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
|