{
  "schema_version": "v1",
  "name_for_human": "Dockup PaaS",
  "name_for_model": "dockup",
  "description_for_human": "Deploy and manage Docker containers.",
  "description_for_model": "Dockup is a container PaaS. Auth: Bearer token (API key dkp_* or JWT). Flow: GET /api/v1/projects → POST /api/v1/projects/{id}/apps (name, slug, image, internal_port) → POST /api/v1/apps/{id}/deploy. Apps get URL https://{slug}-app.dockup.cc. RULES: slug must be globally unique (lowercase, hyphens). For git repos: set git_repo_url=owner/repo, git_provider=github — deploy auto-detects language and builds. For image upload: POST /api/v1/apps/{id}/upload-image with tar. Re-upload replaces image, env vars preserved. Do NOT create duplicate slugs (409 error). Resources (cpu_limit, memory_limit) changeable on running containers via PUT /api/v1/apps/{id}. CI/CD: POST /api/v1/deploy/{slug} to redeploy by slug (stable identifier). Send empty body to redeploy, or {image:'tag'} to update image, or upload tar. All /apps/{appId} endpoints also accept slug. Logs: GET /api/v1/apps/{id}/logs returns JSON array with timestamps. Streaming logs: WebSocket at /api/v1/apps/{id}/logs/stream?token=TOKEN. Terminal: WebSocket at /api/v1/apps/{id}/exec?token=TOKEN&cmd=/bin/sh for interactive shell. Events: GET /api/v1/apps/{id}/events. Stats: GET /api/v1/apps/{id}/stats (live) and /stats/history?minutes=60. App list includes 'status' field (running/stopped/paused/restarting) synced with Docker every 30s, plus 'cpu_usage' and 'memory_usage' for live consumption. Read full spec at /api/v1/openapi.json.",
  "auth": {"type": "service_http", "authorization_type": "bearer"},
  "api": {"type": "openapi", "url": "https://dockup.cc/api/v1/openapi.json"}
}