# Homelab Butler Unified API proxy for the Pfannkuchen homelab. One token, one URL, all services. ## Quick Start ```bash # Set your butler token echo "BUTLER_TOKEN=$(openssl rand -hex 24)" > .env # Deploy docker compose up -d --build ``` ## Usage ```bash TOKEN="your-butler-token" BUTLER="http://10.4.1.116:8888" # List available services curl -s -H "Authorization: Bearer $TOKEN" $BUTLER/ # Dockhand (session auth handled automatically) curl -s -H "Authorization: Bearer $TOKEN" $BUTLER/dockhand/api/environments # Sonarr curl -s -H "Authorization: Bearer $TOKEN" $BUTLER/sonarr/api/v3/series # Radarr curl -s -H "Authorization: Bearer $TOKEN" $BUTLER/radarr/api/v3/movie # Seerr curl -s -H "Authorization: Bearer $TOKEN" $BUTLER/seerr/api/v1/request # Proxmox curl -s -H "Authorization: Bearer $TOKEN" $BUTLER/proxmox/api2/json/nodes # Home Assistant curl -s -H "Authorization: Bearer $TOKEN" $BUTLER/homeassistant/api/states # Outline Wiki curl -s -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \ -d '{}' $BUTLER/outline/api/collections.list # n8n curl -s -H "Authorization: Bearer $TOKEN" $BUTLER/n8n/api/v1/workflows # Grafana curl -s -H "Authorization: Bearer $TOKEN" $BUTLER/grafana/api/dashboards/home # Uptime Kuma curl -s -H "Authorization: Bearer $TOKEN" $BUTLER/uptime/api/status-page/pfannkuchen ``` ## Services | Service | Backend | Auth handled | |---------|---------|-------------| | dockhand | 10.4.1.116:3000 | Session cookie (auto-login) | | sonarr | 10.2.1.100:8989 | X-Api-Key | | sonarr1080p | 10.2.1.100:8990 | X-Api-Key | | radarr | 10.2.1.100:7878 | X-Api-Key | | radarr1080p | 10.2.1.100:7879 | X-Api-Key | | seerr | 10.2.1.100:5055 | X-Api-Key | | outline | 10.1.1.100:3000 | Bearer token | | n8n | 10.4.1.113:5678 | Bearer token | | proxmox | 10.5.85.11:8006 | PVEAPIToken | | homeassistant | 10.10.1.20:8123 | Bearer token | | grafana | 10.1.1.111:3000 | Bearer token | | uptime | 159.69.245.190:3001 | Bearer token | ## Credentials API keys are read from `/app-config/kiro/api/` (mounted read-only). The butler token is set via `BUTLER_TOKEN` env var. For Dockhand: create `/app-config/kiro/api/dockhand` with the admin password.