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
