diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json
index 8d34533..d8a6855 100644
--- a/.claude-plugin/marketplace.json
+++ b/.claude-plugin/marketplace.json
@@ -8,8 +8,8 @@
{
"name": "arcane-mcp-server",
"source": ".",
- "description": "Docker infrastructure management with 180+ MCP tools, workflow guidance, and safety guardrails",
- "version": "2.1.0",
+ "description": "Docker infrastructure management with 170+ MCP tools, workflow guidance, and safety guardrails",
+ "version": "3.0.0",
"keywords": ["docker", "containers", "infrastructure", "devops", "compose", "swarm"]
}
]
diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json
index 347916f..7907588 100644
--- a/.claude-plugin/plugin.json
+++ b/.claude-plugin/plugin.json
@@ -1,7 +1,7 @@
{
"name": "arcane-mcp-server",
- "version": "2.1.0",
- "description": "Docker infrastructure management with 180+ MCP tools, workflow guidance, and safety guardrails. Connects to the Arcane Docker Management platform.",
+ "version": "3.0.0",
+ "description": "Docker infrastructure management with 170+ MCP tools, workflow guidance, and safety guardrails. Connects to the Arcane Docker Management platform.",
"author": "RandomSynergy",
"license": "MIT",
"homepage": "https://github.com/RandomSynergy17/Arcane-MCP-Server",
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 88ad03b..fcb62e6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,53 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [3.0.0] - 2026-07-11
+
+Compatibility release for **Arcane v2** (tested against v2.3.2, OpenAPI spec refreshed from v1.17.0). Tool count stays at **180** (removed tools whose endpoints no longer exist, added notification-delete and activity-tracking tools). No v1 compatibility shims — installs running Arcane v1.x should stay on `2.x` of this server.
+
+### Removed (endpoints gone in Arcane v2)
+- `arcane_dashboard_get_action_items` — `/dashboard/action-items` no longer exists.
+- `arcane_event_create` — `POST /events` no longer exists.
+- `arcane_updater_update_container` — `/updater/containers/{id}` was dropped; use `arcane_container_update` instead.
+- `arcane_notification_apprise_get` / `arcane_notification_apprise_update` / `arcane_notification_apprise_test` — Apprise config was replaced by the per-provider notification model.
+- `arcane_swarm_get_service_logs` — v2 streams all logs over WebSocket only (no REST endpoint).
+
+### Added
+- `arcane_notification_delete_settings` — delete a provider's notification settings (`DELETE /notifications/settings/{provider}`).
+- `arcane_activity_list` / `arcane_activity_get` — track Arcane v2's background activities (image update checks, updater runs, prunes, scans), including progress and messages.
+- `arcane_container_get_logs` / `arcane_project_get_logs` / `arcane_swarm_get_service_logs` — log access via Arcane's WebSocket log streams (v2 has no REST log endpoints). Fetch-and-close semantics with `tail`, `since`, `timestamps`, and a `maxLines` cap; live following works incrementally by passing the newest seen timestamp as `since` on the next call. Adds the `ws` dependency (custom auth headers on the upgrade request); ANSI color codes are stripped.
+- `arcane_project_update_services` — the dedicated project update action (`POST /projects/{id}/update-services`, permission `projects:update`): pulls latest images and recreates services (optionally a subset). Runs in the background; track via the activity tools. Preferred over manual pull + redeploy, which require `projects:deploy`.
+- `arcane_project_list` supports v2's `updates` filter (`has_update`, `up_to_date`, `error`, `unknown`) plus a `status` filter, and shows per-project update info including exactly which image refs are outdated (same data as the dashboard's update overview). `arcane_project_get` shows it too.
+
+### Fixed (after testing against a live v2.3.2 instance)
+- Paginated list tools printed `Found undefined …`: v2 renamed `pagination.total` to `pagination.totalItems` — updated all 16 list modules.
+- Image `created` is a Unix timestamp in v2 and was printed raw — now formatted as an ISO date.
+- `arcane_image_update_check_all` / `arcane_image_check_updates_all` blocked until every image was checked, which hit the MCP request timeout — and the client's timeout retry then started duplicate server-side checks. Both tools now fire the check in the background (via a new no-retry `postInBackground` client helper) and return immediately, pointing at `arcane_activity_list` / the update summary for results.
+- Image tools 404'd when given a name like `amir20/dozzle:latest` — the v2 API only accepts image IDs in paths (a `/` in the name breaks the route). Tools taking an `imageId` (`arcane_image_get`, `arcane_image_delete`, vulnerability scan/result/summary/list) now resolve names to IDs via the image list.
+- `arcane_image_get` crashed with `Invalid time value`: the detail endpoint returns `created` as an ISO string (the list returns a Unix timestamp) — each is now formatted correctly.
+- **Full response-shape audit** of all 26 modules against the v2 spec plus a live smoke test of every read-only tool (`scripts/live-smoke.mjs`). This fixed ~60 further v2 field/wrapper mismatches, including: container list `names`/detail `state` object ("undefined"/"[object Object]" output), dashboard snapshot (new v2 structure incl. aggregated action items), port mappings (`hostPort`/`containerPort`/`isPublished`), container/project counts (`totalContainers`/`totalProjects` etc.), `/version` (`currentVersion`), auth login/me/refresh (wrapped responses, `isGlobalAdmin`), jobs (flat `JobscheduleConfig`, `jobs` array), webhooks (actionType/target model instead of events), environments (test/pair/version/create fields), networks (create `options` nesting, counts/prune wrappers, `containersList`), volumes (Docker-cased `usageData`, `isDirectory`, mkdir query param), gitops (`composePath`, `lastSync*` fields, branches/files shapes), registries (`registryType`/`token`/`description` model), templates (`type` filter, required `envContent`), swarm (Docker `ServiceSpec` create/update with version index, `runningReplicas`, tasks/nodes endpoints), vulnerability scanner status (`available`) and image options (string list), builds (`tags`/`platforms`/`errorMessage`/`output`, multipart workspace upload), image pull (server-side registry credentials), settings categories/search shapes.
+- `arcane_oidc_get_config` reports "OIDC is not configured" instead of a server 500 on instances without OIDC.
+
+### Changed (breaking, follows Arcane v2 API)
+- **Notifications** rebuilt on the provider model (`discord`, `email`, `telegram`, `signal`, `slack`, `ntfy`, `pushover`, `matrix`, `generic`): `get_settings` lists providers (or one via `provider`), `update_settings` takes `provider` + `enabled` + `config`, `test` now requires a `provider`.
+- **Vulnerabilities**: scan result moved to `GET .../images/{id}/vulnerabilities` (list moved to `/vulnerabilities/list`); `ignore` is now `POST /vulnerabilities/ignore` and requires `pkgName`; `unignore` takes the ignore-entry ID (shown by `list_ignored`); all displays use the v2 field names (`vulnerabilityId`, `pkgName`, severity summary object).
+- **Image updates**: check endpoints return `hasUpdate`/`currentVersion`/`latestVersion`; batch check uses `POST /image-updates/check-batch` with `imageRefs` (was `check-multiple` + `imageIds`); batch/check-all responses are keyed by image reference; summary reports `imagesWithUpdates`/`digestUpdates`/`errorsCount`.
+- **Updater**: `run` supports `forceUpdate` and `resourceIds`; result shape follows v2 (`checked`/`items` with resource-level results); `status` now reports in-flight container/project updates; history uses `AutoUpdateRecord` (resource + old/new image version maps).
+- **System**: docker info moved to `/system/docker/info` and returns Docker's native (PascalCase) fields; `system prune` sends the v2 per-resource body (`{containers, images, networks, volumes, buildCache}` with `mode`) and gained a `buildCache` option; image prune sends `mode`/`dangling` and reads the wrapped response.
+- **Projects**: destroy moved to `DELETE /projects/{id}/destroy` (body `removeVolumes`/`removeFiles`, new `removeFiles` param).
+- **Volume backups**: delete and file listing are no longer volume-scoped (`/volumes/backups/{backupId}[/files]`); backups no longer expose a `filename`; file listing returns plain paths.
+- **Templates**: global variables moved to `/environments/{id}/templates/variables` (now requires `environmentId`; PUT sends a `{key, value}` list).
+- **Users**: `role` was removed from create/update (v2 uses role assignments); tools accept `displayName`/`email`/`password` and display `isGlobalAdmin`.
+- **Settings**: environment settings return a key/value list; public settings are environment-scoped now (`environmentId` required).
+- **Events**: list filters by `severity` instead of `resourceType`; display uses `title`/`description`/`severity` (v2 dropped `message`).
+- **Environments**: deployment snippets moved to `/environments/{id}/deployment` (`dockerRun` field).
+- **Builds**: `arcane_build_image` follows the v2 `BuildRequest` (`contextDir` required, `dockerfileInline` for inline content, `tags`/`platforms` arrays, `noCache`); Git-URL builds were dropped by the API.
+- **Auth**: login/refresh responses are unwrapped from the `{success, data}` envelope.
+- `ArcaneClient.delete()` accepts an optional JSON body (needed for `projects/{id}/destroy`).
+- OpenAPI spec (`_docs/arcane_api_docs.{json,yaml}`) and generated types refreshed to v2.3.2.
+
+---
+
## [2.1.0] - 2026-04-19
### Added
diff --git a/CLAUDE.md b/CLAUDE.md
index 20fcbcc..e901992 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -13,6 +13,7 @@ npm test # vitest (50 tests)
npm run dev # stdio mode
npm run dev:tcp # HTTP mode
npm run update-api-spec # Refresh OpenAPI spec from live instance
+ARCANE_BASE_URL=… ARCANE_API_KEY=… node scripts/live-smoke.mjs [envId] # Run every read-only tool against a live instance; flags undefined/[object Object]/NaN in output
```
## Architecture
@@ -25,7 +26,7 @@ npm run update-api-spec # Refresh OpenAPI spec from live instance
- `src/config.ts` — Config from env vars > config file > defaults
- `src/constants.ts` — All shared constants (timeouts, limits, versions)
-### Tools (180 across 25 modules in `src/tools/`)
+### Tools (180 across 26 modules in `src/tools/`)
All tools use `server.registerTool()` with:
- `title` — human-readable name
diff --git a/README.md b/README.md
index 394d782..51ebc5c 100644
--- a/README.md
+++ b/README.md
@@ -67,7 +67,7 @@ Every tool carries **safety annotations** so your AI knows which operations are
---
-> **🆕 Recent update — v2.1:** Tool filtering is here. All 180 tools in one turn eats your context window, so you can now pick a preset and ship only what you need. [Details below](#tool-filtering).
+> **🆕 Recent update — v3.0:** Full **Arcane v2** support (tested against v2.3.2). Endpoints, payloads, and tool set follow the new API — if you are still on Arcane v1.x, stay on server `2.x`. Breaking changes are listed in the [CHANGELOG](CHANGELOG.md).
## Tool Filtering
@@ -232,7 +232,7 @@ rm -rf /tmp/arcane
### What the skill teaches Claude:
-**Intent mapping** — When you say "what's broken?", Claude knows to call `arcane_dashboard_get` + `arcane_dashboard_get_action_items` instead of listing every container one by one.
+**Intent mapping** — When you say "what's broken?", Claude knows to call `arcane_dashboard_get` and drill into recent events instead of listing every container one by one.
**Safety guardrails** — Before running `arcane_volume_prune`, Claude will suggest `arcane_volume_backup_create` first. Before `arcane_updater_run`, it'll do a dry run. Before `arcane_project_destroy`, it confirms twice.
@@ -273,12 +273,13 @@ And a Claude Code slash command:
## All 180 Tools
-### Containers (11)
+### Containers (12)
| Tool | Description |
|------|-------------|
| `arcane_container_list` | List containers with filtering and pagination |
| `arcane_container_get` | Get detailed container information |
+| `arcane_container_get_logs` | Fetch container logs (incremental follow via `since`) |
| `arcane_container_create` | Create a new container |
| `arcane_container_start` | Start a stopped container |
| `arcane_container_stop` | Stop a running container |
@@ -299,7 +300,7 @@ And a Claude Code slash command:
| `arcane_swarm_update_service` | Update service configuration |
| `arcane_swarm_delete_service` | Delete a swarm service |
| `arcane_swarm_scale_service` | Scale service replicas |
-| `arcane_swarm_get_service_logs` | Get service logs |
+| `arcane_swarm_get_service_logs` | Fetch service logs (incremental follow via `since`) |
| `arcane_swarm_init_cluster` | Initialize a new swarm cluster |
| `arcane_swarm_join_cluster` | Join an existing cluster |
| `arcane_swarm_leave_cluster` | Leave the swarm cluster |
@@ -322,18 +323,20 @@ And a Claude Code slash command:
| `arcane_vulnerability_list_ignored` | List ignored vulnerabilities |
| `arcane_vulnerability_get_image_options` | List scannable images |
-### Projects / Docker Compose (12)
+### Projects / Docker Compose (14)
| Tool | Description |
|------|-------------|
| `arcane_project_list` | List Docker Compose projects |
| `arcane_project_get` | Get project details |
+| `arcane_project_get_logs` | Fetch stack logs (incremental follow via `since`) |
| `arcane_project_create` | Create from compose YAML |
| `arcane_project_update` | Update project configuration |
| `arcane_project_up` | Deploy a project |
| `arcane_project_down` | Stop and remove containers |
| `arcane_project_restart` | Restart all services |
| `arcane_project_redeploy` | Redeploy (down + up) |
+| `arcane_project_update_services` | Pull latest images + recreate services (the dedicated update action) |
| `arcane_project_destroy` | Destroy project and volumes |
| `arcane_project_pull_images` | Pull latest images |
| `arcane_project_get_counts` | Get status counts |
@@ -355,7 +358,7 @@ And a Claude Code slash command:
| `arcane_image_get_update_summary` | Get update summary |
| `arcane_image_update_check` | Check update by reference |
| `arcane_image_update_check_by_id` | Check update by ID |
-| `arcane_image_update_check_multiple` | Batch check |
+| `arcane_image_update_check_multiple` | Batch check by image reference |
| `arcane_image_update_check_all` | Check all for updates |
| `arcane_image_update_get_summary` | Get update summary |
| `arcane_build_image` | Build from Dockerfile or Git URL |
@@ -396,7 +399,7 @@ And a Claude Code slash command:
-GitOps, Webhooks, Auto-Updater & Dashboard (23 tools)
+GitOps, Webhooks, Auto-Updater, Dashboard & Activities (23 tools)
| Tool | Description |
|------|-------------|
@@ -418,15 +421,15 @@ And a Claude Code slash command:
| `arcane_webhook_update` | Update a webhook |
| `arcane_webhook_delete` | Delete a webhook |
| `arcane_updater_run` | Run auto-updater (dry run supported) |
-| `arcane_updater_update_container` | Update single container |
| `arcane_updater_get_status` | Get updater schedule |
| `arcane_updater_get_history` | Get update history |
| `arcane_dashboard_get` | Get dashboard snapshot |
-| `arcane_dashboard_get_action_items` | Get action items |
+| `arcane_activity_list` | List background activities (update checks, prunes, scans) |
+| `arcane_activity_get` | Get activity progress and messages |
-Environments, Registries, Auth & More (69 tools)
+Environments, Registries, Auth & More (66 tools)
| Category | Tools | What it covers |
|----------|-------|----------------|
@@ -434,8 +437,8 @@ And a Claude Code slash command:
| **Container Registries** | 7 | Docker Hub, GHCR, ECR, GCR, ACR. Create, update, delete, test, sync registries |
| **Templates** | 8 | Docker Compose templates with variables. Browse, create, download, manage |
| **Jobs** | 4 | Scheduled tasks. List jobs, get schedules, run on demand |
-| **Notifications** | 6 | Alert configuration via Apprise. Get/set settings, test notifications |
-| **Events** | 4 | Activity tracking. List events by environment, create, delete |
+| **Notifications** | 4 | Alert configuration per provider (Discord, email, Telegram, Slack, ntfy, …). Get/set/delete settings, test notifications |
+| **Events** | 3 | Activity tracking. List events globally or by environment, delete |
| **Users** | 5 | User management. List, create, update, delete users |
| **Settings** | 8 | Server configuration and API key management |
| **Authentication** | 8 | Login, logout, JWT token management, OIDC device flow |
@@ -515,14 +518,14 @@ src/
arcane-client.ts # HTTP client (retry, SSL, size limits)
auth/
auth-manager.ts # JWT auto-refresh + API key auth
- tools/ # 25 modules, 180 tools
+ tools/ # 26 modules, 180 tools
registry.ts # ToolRegistry — captures RegisteredTool handles, applies filter
presets.ts # commonly-used / read-only / minimal / deploy / full / custom
resources/ # 4 MCP Resources
prompts/ # 5 MCP Prompts
types/
arcane-types.ts # Shared interfaces (33 types)
- generated/ # Auto-generated from OpenAPI v1.17.0
+ generated/ # Auto-generated from OpenAPI v2.3.2
utils/
tool-helpers.ts # registerTool wrapper with isError handling
config-watcher.ts # debounced fs.watch on ~/.arcane/config.json → hot reload
diff --git a/_docs/arcane_api_docs.json b/_docs/arcane_api_docs.json
index 50caefe..a6f9894 100644
--- a/_docs/arcane_api_docs.json
+++ b/_docs/arcane_api_docs.json
@@ -1 +1 @@
-{"components":{"schemas":{"ApiKeyPaginatedResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ApiKeyPaginatedResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"items":{"$ref":"#/components/schemas/ApikeyApiKey"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"ApiResponseStruct {}DataStruct":{"additionalProperties":false,"type":"object"},"ApikeyApiKey":{"additionalProperties":false,"properties":{"createdAt":{"description":"Creation timestamp","format":"date-time","type":"string"},"description":{"description":"Description of the API key","type":"string"},"expiresAt":{"description":"Expiration date of the API key","format":"date-time","type":"string"},"id":{"description":"Unique identifier of the API key","type":"string"},"isStatic":{"description":"Whether the API key is environment-managed and protected from deletion","type":"boolean"},"keyPrefix":{"description":"Prefix of the API key for identification","type":"string"},"lastUsedAt":{"description":"Last time the API key was used","format":"date-time","type":"string"},"name":{"description":"Name of the API key","type":"string"},"updatedAt":{"description":"Last update timestamp","format":"date-time","type":"string"},"userId":{"description":"ID of the user who owns the API key","type":"string"}},"required":["id","name","keyPrefix","userId","isStatic","createdAt"],"type":"object"},"ApikeyApiKeyCreatedDto":{"additionalProperties":false,"properties":{"createdAt":{"description":"Creation timestamp","format":"date-time","type":"string"},"description":{"description":"Description of the API key","type":"string"},"expiresAt":{"description":"Expiration date of the API key","format":"date-time","type":"string"},"id":{"description":"Unique identifier of the API key","type":"string"},"isStatic":{"description":"Whether the API key is environment-managed and protected from deletion","type":"boolean"},"key":{"description":"The full API key secret (only shown once)","type":"string"},"keyPrefix":{"description":"Prefix of the API key for identification","type":"string"},"lastUsedAt":{"description":"Last time the API key was used","format":"date-time","type":"string"},"name":{"description":"Name of the API key","type":"string"},"updatedAt":{"description":"Last update timestamp","format":"date-time","type":"string"},"userId":{"description":"ID of the user who owns the API key","type":"string"}},"required":["key","id","name","keyPrefix","userId","isStatic","createdAt"],"type":"object"},"ApikeyCreateApiKey":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ApikeyCreateApiKey.json"],"format":"uri","readOnly":true,"type":"string"},"description":{"description":"Optional description of the API key","maxLength":1000,"type":"string"},"expiresAt":{"description":"Optional expiration date for the API key","format":"date-time","type":"string"},"name":{"description":"Name of the API key","examples":["My API Key"],"maxLength":255,"minLength":1,"type":"string"}},"required":["name"],"type":"object"},"ApikeyUpdateApiKey":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ApikeyUpdateApiKey.json"],"format":"uri","readOnly":true,"type":"string"},"description":{"description":"New description for the API key","maxLength":1000,"type":"string"},"expiresAt":{"description":"New expiration date for the API key","format":"date-time","type":"string"},"name":{"description":"New name for the API key","maxLength":255,"type":"string"}},"type":"object"},"AuthLogin":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/AuthLogin.json"],"format":"uri","readOnly":true,"type":"string"},"password":{"description":"Password of the user","minLength":1,"type":"string"},"username":{"description":"Username of the user","examples":["admin"],"maxLength":255,"minLength":1,"type":"string"}},"required":["username","password"],"type":"object"},"AuthLoginResponse":{"additionalProperties":false,"properties":{"expiresAt":{"description":"Expiration time of the access token","format":"date-time","type":"string"},"refreshToken":{"description":"Refresh token for obtaining new access tokens","type":"string"},"token":{"description":"JWT access token","type":"string"},"user":{"$ref":"#/components/schemas/UserUser","description":"Authenticated user information"}},"required":["token","refreshToken","expiresAt","user"],"type":"object"},"AuthOidcAuthUrlRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/AuthOidcAuthUrlRequest.json"],"format":"uri","readOnly":true,"type":"string"},"redirectUri":{"type":"string"}},"required":["redirectUri"],"type":"object"},"AuthOidcAuthUrlResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/AuthOidcAuthUrlResponse.json"],"format":"uri","readOnly":true,"type":"string"},"authUrl":{"type":"string"}},"required":["authUrl"],"type":"object"},"AuthOidcCallbackRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/AuthOidcCallbackRequest.json"],"format":"uri","readOnly":true,"type":"string"},"code":{"type":"string"},"state":{"type":"string"}},"required":["code","state"],"type":"object"},"AuthOidcCallbackResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/AuthOidcCallbackResponse.json"],"format":"uri","readOnly":true,"type":"string"},"expiresAt":{"format":"date-time","type":"string"},"refreshToken":{"type":"string"},"success":{"type":"boolean"},"token":{"type":"string"},"user":{"$ref":"#/components/schemas/UserUser"}},"required":["success","token","refreshToken","expiresAt","user"],"type":"object"},"AuthOidcConfigResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/AuthOidcConfigResponse.json"],"format":"uri","readOnly":true,"type":"string"},"authorizationEndpoint":{"type":"string"},"clientId":{"type":"string"},"deviceAuthorizationEndpoint":{"type":"string"},"issuerUrl":{"type":"string"},"redirectUri":{"type":"string"},"scopes":{"type":"string"},"tokenEndpoint":{"type":"string"},"userinfoEndpoint":{"type":"string"}},"required":["clientId","redirectUri","issuerUrl","authorizationEndpoint","tokenEndpoint","userinfoEndpoint","scopes"],"type":"object"},"AuthOidcDeviceAuthResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/AuthOidcDeviceAuthResponse.json"],"format":"uri","readOnly":true,"type":"string"},"deviceCode":{"type":"string"},"expiresIn":{"format":"int64","type":"integer"},"interval":{"format":"int64","type":"integer"},"userCode":{"type":"string"},"verificationUri":{"type":"string"},"verificationUriComplete":{"type":"string"}},"required":["deviceCode","userCode","verificationUri","expiresIn"],"type":"object"},"AuthOidcDeviceTokenRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/AuthOidcDeviceTokenRequest.json"],"format":"uri","readOnly":true,"type":"string"},"deviceCode":{"type":"string"}},"required":["deviceCode"],"type":"object"},"AuthOidcDeviceTokenResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/AuthOidcDeviceTokenResponse.json"],"format":"uri","readOnly":true,"type":"string"},"expiresAt":{"format":"date-time","type":"string"},"refreshToken":{"type":"string"},"success":{"type":"boolean"},"token":{"type":"string"},"user":{"$ref":"#/components/schemas/UserUser"}},"required":["success","token","refreshToken","expiresAt","user"],"type":"object"},"AuthOidcStatusInfo":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/AuthOidcStatusInfo.json"],"format":"uri","readOnly":true,"type":"string"},"envConfigured":{"type":"boolean"},"envForced":{"type":"boolean"},"mergeAccounts":{"type":"boolean"},"providerLogoUrl":{"type":"string"},"providerName":{"type":"string"}},"required":["envForced","envConfigured","mergeAccounts"],"type":"object"},"AuthPasswordChange":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/AuthPasswordChange.json"],"format":"uri","readOnly":true,"type":"string"},"currentPassword":{"description":"Current password of the user (required for non-OIDC users)","type":"string"},"newPassword":{"description":"New password for the user","minLength":8,"type":"string"}},"required":["newPassword"],"type":"object"},"AuthRefresh":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/AuthRefresh.json"],"format":"uri","readOnly":true,"type":"string"},"refreshToken":{"description":"Refresh token used to obtain a new access token","minLength":1,"type":"string"}},"required":["refreshToken"],"type":"object"},"AuthTokenRefreshResponse":{"additionalProperties":false,"properties":{"expiresAt":{"description":"Expiration time of the new access token","format":"date-time","type":"string"},"refreshToken":{"description":"New refresh token","type":"string"},"token":{"description":"New JWT access token","type":"string"}},"required":["token","refreshToken","expiresAt"],"type":"object"},"AutoUpdateRecord":{"additionalProperties":false,"properties":{"createdAt":{"format":"date-time","type":"string"},"details":{"additionalProperties":{},"type":"object"},"endTime":{"format":"date-time","type":"string"},"error":{"type":"string"},"id":{"type":"string"},"newImageVersions":{"additionalProperties":{},"type":"object"},"oldImageVersions":{"additionalProperties":{},"type":"object"},"resourceId":{"type":"string"},"resourceName":{"type":"string"},"resourceType":{"type":"string"},"startTime":{"format":"date-time","type":"string"},"status":{"type":"string"},"updateApplied":{"type":"boolean"},"updateAvailable":{"type":"boolean"},"updatedAt":{"format":"date-time","type":"string"}},"required":["resourceId","resourceType","resourceName","status","startTime","updateAvailable","updateApplied","id","createdAt"],"type":"object"},"BackupHasPathResponse":{"additionalProperties":false,"properties":{"exists":{"type":"boolean"}},"required":["exists"],"type":"object"},"BaseApiResponseActionItems":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseActionItems.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/DashboardActionItems","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseActionResult":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseActionResult.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ContainerActionResult","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseAgentPairResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseAgentPairResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/EnvironmentAgentPairResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseApiKey":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseApiKey.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ApikeyApiKey","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseApiKeyCreatedDto":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseApiKeyCreatedDto.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ApikeyApiKeyCreatedDto","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseBackupHasPathResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseBackupHasPathResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/BackupHasPathResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseBatchResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseBatchResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"additionalProperties":{"$ref":"#/components/schemas/ImageupdateResponse"},"description":"Response data","type":"object"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseBranchesResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseBranchesResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/GitopsBranchesResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseBrowseResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseBrowseResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/GitopsBrowseResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseBuildFileContentResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseBuildFileContentResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/BuildFileContentResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseBuildRecord":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseBuildRecord.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ImageBuildRecord","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseConfig":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseConfig.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/JobscheduleConfig","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseConfigSummary":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseConfigSummary.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/SwarmConfigSummary","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseContainerRegistry":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseContainerRegistry.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ContainerregistryContainerRegistry","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseCreateReponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseCreateReponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ProjectCreateReponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseCreated":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseCreated.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/WebhookCreated","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseDefaultTemplatesResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseDefaultTemplatesResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/TemplateDefaultTemplatesResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseDeploymentSnippet":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseDeploymentSnippet.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/DeploymentSnippet","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseDetailSummary":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseDetailSummary.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ImageDetailSummary","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseDetails":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseDetails.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ProjectDetails","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseEnvironment":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseEnvironment.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/EnvironmentEnvironment","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseEnvironmentVulnerabilitySummary":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseEnvironmentVulnerabilitySummary.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/VulnerabilityEnvironmentVulnerabilitySummary","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseEnvironmentWithApiKey":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseEnvironmentWithApiKey.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/EnvironmentWithApiKey","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseEvent":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseEvent.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/EventEvent","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseFileContentResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseFileContentResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/FileContentResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseGitOpsSync":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseGitOpsSync.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/GitopsGitOpsSync","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseGitRepository":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseGitRepository.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/GitopsGitRepository","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseIgnoredVulnerability":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseIgnoredVulnerability.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/VulnerabilityIgnoredVulnerability","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseImportGitOpsSyncResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseImportGitOpsSyncResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/GitopsImportGitOpsSyncResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseInfo":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseInfo.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/VersionInfo","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseInterface {}":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseInterface {}.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseListAutoUpdateRecord":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListAutoUpdateRecord.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"description":"Response data","items":{"$ref":"#/components/schemas/AutoUpdateRecord"},"type":["array","null"]},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseListConfigSummary":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListConfigSummary.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"description":"Response data","items":{"$ref":"#/components/schemas/SwarmConfigSummary"},"type":["array","null"]},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseListFileEntry":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListFileEntry.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"description":"Response data","items":{"$ref":"#/components/schemas/VolumeFileEntry"},"type":["array","null"]},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseListSecretSummary":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListSecretSummary.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"description":"Response data","items":{"$ref":"#/components/schemas/SwarmSecretSummary"},"type":["array","null"]},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseListSettingDto":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListSettingDto.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"description":"Response data","items":{"$ref":"#/components/schemas/SettingsSettingDto"},"type":["array","null"]},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseListString":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListString.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"description":"Response data","items":{"type":"string"},"type":["array","null"]},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseListSummary":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListSummary.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"description":"Response data","items":{"$ref":"#/components/schemas/WebhookSummary"},"type":["array","null"]},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseListTemplate":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListTemplate.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"description":"Response data","items":{"$ref":"#/components/schemas/TemplateTemplate"},"type":["array","null"]},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseListTemplateRegistry":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListTemplateRegistry.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"description":"Response data","items":{"$ref":"#/components/schemas/TemplateTemplateRegistry"},"type":["array","null"]},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseListVariable":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListVariable.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"description":"Response data","items":{"$ref":"#/components/schemas/EnvVariable"},"type":["array","null"]},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseListVolumeSizeInfo":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListVolumeSizeInfo.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"description":"Response data","items":{"$ref":"#/components/schemas/VolumeSizeInfo"},"type":["array","null"]},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseLoadResult":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseLoadResult.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ImageLoadResult","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseLoginResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseLoginResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/AuthLoginResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseMessageResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseMessageResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/BaseMessageResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseNodeSummary":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseNodeSummary.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/SwarmNodeSummary","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponsePruneAllResult":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponsePruneAllResult.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/SystemPruneAllResult","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponsePruneReport":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponsePruneReport.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ImagePruneReport","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseRemoteRegistry":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseRemoteRegistry.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/TemplateRemoteRegistry","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ImageupdateResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseResult":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseResult.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/UpdaterResult","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseRuntimeStatus":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseRuntimeStatus.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/SwarmRuntimeStatus","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseScanResult":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseScanResult.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/VulnerabilityScanResult","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseScanSummariesResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseScanSummariesResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/VulnerabilityScanSummariesResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseScanSummary":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseScanSummary.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/VulnerabilityScanSummary","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseScannerStatus":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseScannerStatus.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ScannerStatus","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseSecretSummary":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSecretSummary.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/SwarmSecretSummary","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseServiceCreateResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseServiceCreateResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/SwarmServiceCreateResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseServiceInspect":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseServiceInspect.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/SwarmServiceInspect","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseServiceUpdateResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseServiceUpdateResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/SwarmServiceUpdateResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseSnapshot":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSnapshot.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/DashboardSnapshot","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseStackDeployResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseStackDeployResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/SwarmStackDeployResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseStackInspect":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseStackInspect.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/SwarmStackInspect","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseStackRenderConfigResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseStackRenderConfigResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/SwarmStackRenderConfigResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseStackSource":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseStackSource.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/SwarmStackSource","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseStatus":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseStatus.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/UpdaterStatus","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseStatusCounts":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseStatusCounts.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ProjectStatusCounts","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseStruct {}":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseStruct {}.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ApiResponseStruct {}DataStruct","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseSummary":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSummary.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ImageupdateSummary","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseSwarmInfo":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSwarmInfo.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/SwarmSwarmInfo","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseSwarmInitResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSwarmInitResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/SwarmSwarmInitResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseSwarmJoinTokensResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSwarmJoinTokensResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/SwarmSwarmJoinTokensResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseSwarmNodeAgentDeployment":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSwarmNodeAgentDeployment.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/SwarmNodeAgentDeployment","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseSwarmNodeIdentity":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSwarmNodeIdentity.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/SwarmNodeIdentity","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseSwarmUnlockKeyResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSwarmUnlockKeyResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/SwarmSwarmUnlockKeyResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseSyncResult":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSyncResult.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/GitopsSyncResult","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseSyncStatus":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSyncStatus.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/GitopsSyncStatus","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseTemplate":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseTemplate.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/TemplateTemplate","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseTemplateContent":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseTemplateContent.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/TemplateTemplateContent","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseTemplateRegistry":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseTemplateRegistry.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/TemplateTemplateRegistry","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseTest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseTest.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/EnvironmentTest","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseTokenRefreshResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseTokenRefreshResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/AuthTokenRefreshResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseUser":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseUser.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/UserUser","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseVolume":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseVolume.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/VolumeVolume","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseVolumeBackup":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseVolumeBackup.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/VolumeBackup","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseVolumePruneReportData":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseVolumePruneReportData.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/VolumePruneReportData","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseVolumeUsageCountsData":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseVolumeUsageCountsData.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/VolumeUsageCountsData","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseVolumeUsageResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseVolumeUsageResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/VolumeUsageResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseMessageResponse":{"additionalProperties":false,"properties":{"message":{"description":"Response message","type":"string"}},"required":["message"],"type":"object"},"BasePaginatedIgnoredVulnerability":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BasePaginatedIgnoredVulnerability.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"description":"Array of items for the current page","items":{"$ref":"#/components/schemas/VulnerabilityIgnoredVulnerability"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse","description":"Pagination metadata"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"BasePaginatedVulnerability":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BasePaginatedVulnerability.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"description":"Array of items for the current page","items":{"$ref":"#/components/schemas/VulnerabilityVulnerability"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse","description":"Pagination metadata"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"BasePaginatedVulnerabilityWithImage":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BasePaginatedVulnerabilityWithImage.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"description":"Array of items for the current page","items":{"$ref":"#/components/schemas/VulnerabilityVulnerabilityWithImage"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse","description":"Pagination metadata"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"BasePaginationResponse":{"additionalProperties":false,"properties":{"currentPage":{"description":"Current page number (1-indexed)","format":"int64","type":"integer"},"grandTotalItems":{"description":"Total number of items without filters","format":"int64","type":"integer"},"itemsPerPage":{"description":"Number of items per page","format":"int64","type":"integer"},"totalItems":{"description":"Total number of items in the current filtered set","format":"int64","type":"integer"},"totalPages":{"description":"Total number of pages","format":"int64","type":"integer"}},"required":["totalPages","totalItems","currentPage","itemsPerPage"],"type":"object"},"BlkioConfig":{"additionalProperties":false,"properties":{"device_read_bps":{"items":{"$ref":"#/components/schemas/DockerTypesThrottleDevice"},"type":["array","null"]},"device_read_iops":{"items":{"$ref":"#/components/schemas/DockerTypesThrottleDevice"},"type":["array","null"]},"device_write_bps":{"items":{"$ref":"#/components/schemas/DockerTypesThrottleDevice"},"type":["array","null"]},"device_write_iops":{"items":{"$ref":"#/components/schemas/DockerTypesThrottleDevice"},"type":["array","null"]},"weight":{"format":"int32","minimum":0,"type":"integer"},"weight_device":{"items":{"$ref":"#/components/schemas/DockerTypesWeightDevice"},"type":["array","null"]}},"type":"object"},"BuildConfig":{"additionalProperties":false,"properties":{"additional_contexts":{"additionalProperties":{"type":"string"},"type":"object"},"args":{"additionalProperties":{"type":["string","null"]},"type":"object"},"cache_from":{"items":{"type":"string"},"type":["array","null"]},"cache_to":{"items":{"type":"string"},"type":["array","null"]},"context":{"type":"string"},"dockerfile":{"type":"string"},"dockerfile_inline":{"type":"string"},"entitlements":{"items":{"type":"string"},"type":["array","null"]},"extra_hosts":{"additionalProperties":{"items":{"type":"string"},"type":["array","null"]},"type":"object"},"isolation":{"type":"string"},"labels":{"additionalProperties":{"type":"string"},"type":"object"},"network":{"type":"string"},"no_cache":{"type":"boolean"},"no_cache_filter":{"items":{"type":"string"},"type":["array","null"]},"platforms":{"items":{"type":"string"},"type":["array","null"]},"privileged":{"type":"boolean"},"provenance":{"type":"string"},"pull":{"type":"boolean"},"sbom":{"type":"string"},"secrets":{"items":{"$ref":"#/components/schemas/DockerTypesServiceSecretConfig"},"type":["array","null"]},"shm_size":{"format":"int64","type":"integer"},"ssh":{"items":{"$ref":"#/components/schemas/DockerTypesSSHKey"},"type":["array","null"]},"tags":{"items":{"type":"string"},"type":["array","null"]},"target":{"type":"string"},"ulimits":{"additionalProperties":{"$ref":"#/components/schemas/UlimitsConfig"},"type":"object"}},"type":"object"},"BuildFileContentResponse":{"additionalProperties":false,"properties":{"content":{"contentEncoding":"base64","type":"string"},"mimeType":{"type":"string"}},"required":["content","mimeType"],"type":"object"},"BuildProjectInputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BuildProjectInputBody.json"],"format":"uri","readOnly":true,"type":"string"},"load":{"description":"Load images into Docker","type":"boolean"},"provider":{"description":"Build provider override","type":"string"},"push":{"description":"Push images","type":"boolean"},"services":{"description":"Service names to build","items":{"type":"string"},"type":["array","null"]}},"type":"object"},"CategoryCategory":{"additionalProperties":false,"properties":{"description":{"type":"string"},"icon":{"type":"string"},"id":{"type":"string"},"keywords":{"items":{"type":"string"},"type":["array","null"]},"matchingSettings":{"items":{"$ref":"#/components/schemas/MetaMetadata"},"type":["array","null"]},"relevanceScore":{"format":"int64","type":"integer"},"settings":{"items":{"$ref":"#/components/schemas/MetaMetadata"},"type":["array","null"]},"title":{"type":"string"},"url":{"type":"string"}},"required":["id","title","description","icon","url","keywords","settings"],"type":"object"},"ContainerActionResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ContainerActionResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/BaseMessageResponse"},"success":{"type":"boolean"}},"required":["success","data"],"type":"object"},"ContainerActionResult":{"additionalProperties":false,"properties":{"errors":{"items":{"type":"string"},"type":["array","null"]},"failed":{"items":{"type":"string"},"type":["array","null"]},"started":{"items":{"type":"string"},"type":["array","null"]},"stopped":{"items":{"type":"string"},"type":["array","null"]},"success":{"type":"boolean"}},"required":["success"],"type":"object"},"ContainerComposeInfo":{"additionalProperties":false,"properties":{"configFiles":{"type":"string"},"projectName":{"type":"string"},"serviceName":{"type":"string"},"workingDir":{"type":"string"}},"required":["projectName","serviceName"],"type":"object"},"ContainerConfig":{"additionalProperties":false,"properties":{"cmd":{"items":{"type":"string"},"type":["array","null"]},"entrypoint":{"items":{"type":"string"},"type":["array","null"]},"env":{"items":{"type":"string"},"type":["array","null"]},"user":{"type":"string"},"workingDir":{"type":"string"}},"type":"object"},"ContainerCreate":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ContainerCreate.json"],"format":"uri","readOnly":true,"type":"string"},"attachStderr":{"type":"boolean"},"attachStdin":{"type":"boolean"},"attachStdout":{"type":"boolean"},"autoRemove":{"type":"boolean"},"cmd":{"items":{"type":"string"},"type":["array","null"]},"command":{"items":{"type":"string"},"type":["array","null"]},"cpus":{"format":"double","type":"number"},"credentials":{"items":{"$ref":"#/components/schemas/ContainerregistryCredential"},"type":["array","null"]},"domainname":{"type":"string"},"entrypoint":{"items":{"type":"string"},"type":["array","null"]},"env":{"items":{"type":"string"},"type":["array","null"]},"environment":{"items":{"type":"string"},"type":["array","null"]},"exposedPorts":{"additionalProperties":{"$ref":"#/components/schemas/Value"},"type":"object"},"hostConfig":{"$ref":"#/components/schemas/ContainerHostConfigCreate"},"hostname":{"type":"string"},"image":{"type":"string"},"labels":{"additionalProperties":{"type":"string"},"type":"object"},"memory":{"format":"int64","type":"integer"},"name":{"type":"string"},"networkDisabled":{"type":"boolean"},"networkingConfig":{"$ref":"#/components/schemas/ContainerNetworkingConfigCreate"},"networks":{"items":{"type":"string"},"type":["array","null"]},"openStdin":{"type":"boolean"},"ports":{"additionalProperties":{"type":"string"},"type":"object"},"privileged":{"type":"boolean"},"restartPolicy":{"type":"string"},"stdinOnce":{"type":"boolean"},"tty":{"type":"boolean"},"user":{"type":"string"},"volumes":{"items":{"type":"string"},"type":["array","null"]},"workingDir":{"type":"string"}},"required":["name","image"],"type":"object"},"ContainerCreated":{"additionalProperties":false,"properties":{"created":{"type":"string"},"id":{"type":"string"},"image":{"type":"string"},"name":{"type":"string"},"status":{"type":"string"}},"required":["id","name","image","status","created"],"type":"object"},"ContainerCreatedResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ContainerCreatedResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ContainerCreated"},"success":{"type":"boolean"}},"required":["success","data"],"type":"object"},"ContainerDetails":{"additionalProperties":false,"properties":{"composeInfo":{"$ref":"#/components/schemas/ContainerComposeInfo"},"config":{"$ref":"#/components/schemas/ContainerConfig"},"created":{"type":"string"},"hostConfig":{"$ref":"#/components/schemas/ContainerHostConfig"},"id":{"type":"string"},"image":{"type":"string"},"imageId":{"type":"string"},"labels":{"additionalProperties":{"type":"string"},"type":"object"},"mounts":{"items":{"$ref":"#/components/schemas/ContainerMount"},"type":["array","null"]},"name":{"type":"string"},"networkSettings":{"$ref":"#/components/schemas/ContainerNetworkSettings"},"ports":{"items":{"$ref":"#/components/schemas/ContainerPort"},"type":["array","null"]},"state":{"$ref":"#/components/schemas/ContainerState"}},"required":["id","name","image","imageId","created","state","config","hostConfig","networkSettings","ports","mounts"],"type":"object"},"ContainerDetailsResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ContainerDetailsResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ContainerDetails"},"success":{"type":"boolean"}},"required":["success","data"],"type":"object"},"ContainerEndpointSettingsCreate":{"additionalProperties":false,"properties":{"aliases":{"items":{"type":"string"},"type":["array","null"]}},"type":"object"},"ContainerHostConfig":{"additionalProperties":false,"properties":{"autoRemove":{"type":"boolean"},"memory":{"format":"int64","type":"integer"},"nanoCpus":{"format":"int64","type":"integer"},"networkMode":{"type":"string"},"privileged":{"type":"boolean"},"restartPolicy":{"type":"string"}},"type":"object"},"ContainerHostConfigCreate":{"additionalProperties":false,"properties":{"autoRemove":{"type":"boolean"},"binds":{"items":{"type":"string"},"type":["array","null"]},"cpuShares":{"format":"int64","type":"integer"},"memory":{"format":"int64","type":"integer"},"memorySwap":{"format":"int64","type":"integer"},"nanoCpus":{"format":"int64","type":"integer"},"networkMode":{"type":"string"},"portBindings":{"additionalProperties":{"items":{"$ref":"#/components/schemas/ContainerPortBindingCreate"},"type":["array","null"]},"type":"object"},"privileged":{"type":"boolean"},"publishAllPorts":{"type":"boolean"},"readonlyRootfs":{"type":"boolean"},"restartPolicy":{"$ref":"#/components/schemas/ContainerRestartPolicyCreate"}},"type":"object"},"ContainerMount":{"additionalProperties":false,"properties":{"destination":{"type":"string"},"driver":{"type":"string"},"mode":{"type":"string"},"name":{"type":"string"},"propagation":{"type":"string"},"rw":{"type":"boolean"},"source":{"type":"string"},"type":{"type":"string"}},"required":["type","destination"],"type":"object"},"ContainerNetworkEndpoint":{"additionalProperties":false,"properties":{"aliases":{"items":{"type":"string"},"type":["array","null"]},"dnsNames":{"items":{"type":"string"},"type":["array","null"]},"driverOpts":{"additionalProperties":{"type":"string"},"type":"object"},"endpointId":{"type":"string"},"gateway":{"type":"string"},"globalIPv6Address":{"type":"string"},"globalIPv6PrefixLen":{"format":"int64","type":"integer"},"gwPriority":{"format":"int64","type":"integer"},"ipAddress":{"type":"string"},"ipPrefixLen":{"format":"int64","type":"integer"},"ipamConfig":{},"ipv6Gateway":{"type":"string"},"links":{"items":{"type":"string"},"type":["array","null"]},"macAddress":{"type":"string"},"networkId":{"type":"string"}},"type":"object"},"ContainerNetworkSettings":{"additionalProperties":false,"properties":{"networks":{"additionalProperties":{"$ref":"#/components/schemas/ContainerNetworkEndpoint"},"type":"object"}},"required":["networks"],"type":"object"},"ContainerNetworkingConfigCreate":{"additionalProperties":false,"properties":{"endpointsConfig":{"additionalProperties":{"$ref":"#/components/schemas/ContainerEndpointSettingsCreate"},"type":"object"}},"type":"object"},"ContainerPaginatedResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ContainerPaginatedResponse.json"],"format":"uri","readOnly":true,"type":"string"},"counts":{"$ref":"#/components/schemas/ContainerStatusCounts"},"data":{"items":{"$ref":"#/components/schemas/ContainerSummary"},"type":["array","null"]},"groups":{"items":{"$ref":"#/components/schemas/ContainerSummaryGroup"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","counts","pagination"],"type":"object"},"ContainerPort":{"additionalProperties":false,"properties":{"ip":{"type":"string"},"privatePort":{"format":"int64","type":"integer"},"publicPort":{"format":"int64","type":"integer"},"type":{"type":"string"}},"required":["privatePort","type"],"type":"object"},"ContainerPortBindingCreate":{"additionalProperties":false,"properties":{"hostIp":{"type":"string"},"hostPort":{"type":"string"}},"type":"object"},"ContainerRegistryPaginatedResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ContainerRegistryPaginatedResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"items":{"$ref":"#/components/schemas/ContainerregistryContainerRegistry"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"ContainerRestartPolicyCreate":{"additionalProperties":false,"properties":{"maximumRetryCount":{"format":"int64","type":"integer"},"name":{"type":"string"}},"type":"object"},"ContainerState":{"additionalProperties":false,"properties":{"exitCode":{"format":"int64","type":"integer"},"finishedAt":{"type":"string"},"running":{"type":"boolean"},"startedAt":{"type":"string"},"status":{"type":"string"}},"required":["status","running"],"type":"object"},"ContainerStatusCounts":{"additionalProperties":false,"properties":{"runningContainers":{"format":"int64","type":"integer"},"stoppedContainers":{"format":"int64","type":"integer"},"totalContainers":{"format":"int64","type":"integer"}},"required":["runningContainers","stoppedContainers","totalContainers"],"type":"object"},"ContainerStatusCountsResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ContainerStatusCountsResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ContainerStatusCounts"},"success":{"type":"boolean"}},"required":["success","data"],"type":"object"},"ContainerSummary":{"additionalProperties":false,"properties":{"command":{"type":"string"},"created":{"format":"int64","type":"integer"},"hostConfig":{"$ref":"#/components/schemas/ContainerHostConfig"},"id":{"type":"string"},"image":{"type":"string"},"imageId":{"type":"string"},"labels":{"additionalProperties":{"type":"string"},"type":"object"},"mounts":{"items":{"$ref":"#/components/schemas/ContainerMount"},"type":["array","null"]},"names":{"items":{"type":"string"},"type":["array","null"]},"networkSettings":{"$ref":"#/components/schemas/ContainerNetworkSettings"},"ports":{"items":{"$ref":"#/components/schemas/ContainerPort"},"type":["array","null"]},"state":{"type":"string"},"status":{"type":"string"},"updateInfo":{"$ref":"#/components/schemas/ImageUpdateInfo"}},"required":["id","names","image","imageId","command","created","ports","labels","state","status","hostConfig","networkSettings","mounts"],"type":"object"},"ContainerSummaryGroup":{"additionalProperties":false,"properties":{"groupName":{"type":"string"},"items":{"items":{"$ref":"#/components/schemas/ContainerSummary"},"type":["array","null"]}},"required":["groupName","items"],"type":"object"},"ContainerregistryContainerRegistry":{"additionalProperties":false,"properties":{"awsAccessKeyId":{"type":"string"},"awsRegion":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"description":{"type":"string"},"enabled":{"type":"boolean"},"id":{"type":"string"},"insecure":{"type":"boolean"},"registryType":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"url":{"type":"string"},"username":{"type":"string"}},"required":["id","url","username","insecure","enabled","registryType","createdAt","updatedAt"],"type":"object"},"ContainerregistryCredential":{"additionalProperties":false,"properties":{"enabled":{"type":"boolean"},"token":{"type":"string"},"url":{"type":"string"},"username":{"type":"string"}},"required":["url","username","token","enabled"],"type":"object"},"ContainerregistrySync":{"additionalProperties":false,"properties":{"awsAccessKeyId":{"type":"string"},"awsRegion":{"type":"string"},"awsSecretAccessKey":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"description":{"type":"string"},"enabled":{"type":"boolean"},"id":{"type":"string"},"insecure":{"type":"boolean"},"registryType":{"type":"string"},"token":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"url":{"type":"string"},"username":{"type":"string"}},"required":["id","url","username","token","insecure","enabled","registryType","createdAt","updatedAt"],"type":"object"},"ContainerregistrySyncRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ContainerregistrySyncRequest.json"],"format":"uri","readOnly":true,"type":"string"},"registries":{"items":{"$ref":"#/components/schemas/ContainerregistrySync"},"type":["array","null"]}},"required":["registries"],"type":"object"},"CreateContainerRegistryRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/CreateContainerRegistryRequest.json"],"format":"uri","readOnly":true,"type":"string"},"awsAccessKeyId":{"type":"string"},"awsRegion":{"type":"string"},"awsSecretAccessKey":{"type":"string"},"description":{"type":["string","null"]},"enabled":{"type":["boolean","null"]},"insecure":{"type":["boolean","null"]},"registryType":{"type":"string"},"token":{"type":"string"},"url":{"type":"string"},"username":{"type":"string"}},"required":["url","username","token","description","insecure","enabled","registryType","awsAccessKeyId","awsSecretAccessKey","awsRegion"],"type":"object"},"CreateGitRepositoryRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/CreateGitRepositoryRequest.json"],"format":"uri","readOnly":true,"type":"string"},"authType":{"type":"string"},"description":{"type":"string"},"enabled":{"type":"boolean"},"name":{"type":"string"},"sshHostKeyVerification":{"type":"string"},"sshKey":{"type":"string"},"token":{"type":"string"},"url":{"type":"string"},"username":{"type":"string"}},"required":["name","url","authType"],"type":"object"},"CredentialSpecConfig":{"additionalProperties":false,"properties":{"config":{"type":"string"},"file":{"type":"string"},"registry":{"type":"string"}},"type":"object"},"DashboardActionItem":{"additionalProperties":false,"properties":{"count":{"format":"int64","type":"integer"},"kind":{"type":"string"},"severity":{"type":"string"}},"required":["kind","count","severity"],"type":"object"},"DashboardActionItems":{"additionalProperties":false,"properties":{"items":{"items":{"$ref":"#/components/schemas/DashboardActionItem"},"type":["array","null"]}},"required":["items"],"type":"object"},"DashboardSnapshot":{"additionalProperties":false,"properties":{"actionItems":{"$ref":"#/components/schemas/DashboardActionItems"},"containers":{"$ref":"#/components/schemas/DashboardSnapshotContainers"},"imageUsageCounts":{"$ref":"#/components/schemas/ImageUsageCounts"},"images":{"$ref":"#/components/schemas/DashboardSnapshotImages"},"settings":{"$ref":"#/components/schemas/DashboardSnapshotSettings"}},"required":["containers","images","imageUsageCounts","actionItems","settings"],"type":"object"},"DashboardSnapshotContainers":{"additionalProperties":false,"properties":{"counts":{"$ref":"#/components/schemas/ContainerStatusCounts"},"data":{"items":{"$ref":"#/components/schemas/ContainerSummary"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"}},"required":["data","counts","pagination"],"type":"object"},"DashboardSnapshotImages":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/ImageSummary"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"}},"required":["data","pagination"],"type":"object"},"DashboardSnapshotSettings":{"additionalProperties":false,"properties":{"dockerPruneMode":{"type":"string"}},"required":["dockerPruneMode"],"type":"object"},"DeployConfig":{"additionalProperties":false,"properties":{"endpoint_mode":{"type":"string"},"labels":{"additionalProperties":{"type":"string"},"type":"object"},"mode":{"type":"string"},"placement":{"$ref":"#/components/schemas/DockerTypesPlacement"},"replicas":{"format":"int64","type":"integer"},"resources":{"$ref":"#/components/schemas/DockerTypesResources"},"restart_policy":{"$ref":"#/components/schemas/RestartPolicy"},"rollback_config":{"$ref":"#/components/schemas/UpdateConfig"},"update_config":{"$ref":"#/components/schemas/UpdateConfig"}},"type":"object"},"DeploymentSnippet":{"additionalProperties":false,"properties":{"dockerCompose":{"description":"Docker compose YAML snippet","type":"string"},"dockerRun":{"description":"Docker run command snippet","type":"string"}},"required":["dockerRun","dockerCompose"],"type":"object"},"DetailSummaryConfigStruct":{"additionalProperties":false,"properties":{"argsEscaped":{"type":"boolean"},"cmd":{"items":{"type":"string"},"type":["array","null"]},"env":{"items":{"type":"string"},"type":["array","null"]},"exposedPorts":{"additionalProperties":{"$ref":"#/components/schemas/Value"},"type":"object"},"volumes":{"additionalProperties":{"$ref":"#/components/schemas/Value"},"type":"object"},"workingDir":{"type":"string"}},"type":"object"},"DetailSummaryDescriptorStruct":{"additionalProperties":false,"properties":{"digest":{"type":"string"},"mediaType":{"type":"string"},"size":{"format":"int64","type":"integer"}},"required":["mediaType","digest","size"],"type":"object"},"DetailSummaryGraphDriverStruct":{"additionalProperties":false,"properties":{"data":{},"name":{"type":"string"}},"required":["data","name"],"type":"object"},"DetailSummaryMetadataStruct":{"additionalProperties":false,"properties":{"lastTagTime":{"type":"string"}},"required":["lastTagTime"],"type":"object"},"DetailSummaryRootFsStruct":{"additionalProperties":false,"properties":{"layers":{"items":{"type":"string"},"type":["array","null"]},"type":{"type":"string"}},"required":["type","layers"],"type":"object"},"DevelopConfig":{"additionalProperties":false,"properties":{"watch":{"items":{"$ref":"#/components/schemas/DockerTypesTrigger"},"type":["array","null"]}},"type":"object"},"DiscreteGenericResource":{"additionalProperties":false,"properties":{"kind":{"type":"string"},"value":{"format":"int64","type":"integer"}},"required":["kind","value"],"type":"object"},"DockerMountBindOptions":{"additionalProperties":false,"properties":{"CreateMountpoint":{"type":"boolean"},"NonRecursive":{"type":"boolean"},"Propagation":{"type":"string"},"ReadOnlyForceRecursive":{"type":"boolean"},"ReadOnlyNonRecursive":{"type":"boolean"}},"type":"object"},"DockerMountClusterOptions":{"additionalProperties":false,"type":"object"},"DockerMountDriver":{"additionalProperties":false,"properties":{"Name":{"type":"string"},"Options":{"additionalProperties":{"type":"string"},"type":"object"}},"type":"object"},"DockerMountImageOptions":{"additionalProperties":false,"properties":{"Subpath":{"type":"string"}},"type":"object"},"DockerMountMount":{"additionalProperties":false,"properties":{"BindOptions":{"$ref":"#/components/schemas/DockerMountBindOptions"},"ClusterOptions":{"$ref":"#/components/schemas/DockerMountClusterOptions"},"Consistency":{"type":"string"},"ImageOptions":{"$ref":"#/components/schemas/DockerMountImageOptions"},"ReadOnly":{"type":"boolean"},"Source":{"type":"string"},"Target":{"type":"string"},"TmpfsOptions":{"$ref":"#/components/schemas/DockerMountTmpfsOptions"},"Type":{"type":"string"},"VolumeOptions":{"$ref":"#/components/schemas/DockerMountVolumeOptions"}},"type":"object"},"DockerMountTmpfsOptions":{"additionalProperties":false,"properties":{"Mode":{"format":"int32","minimum":0,"type":"integer"},"Options":{"items":{"items":{"type":"string"},"type":["array","null"]},"type":["array","null"]},"SizeBytes":{"format":"int64","type":"integer"}},"type":"object"},"DockerMountVolumeOptions":{"additionalProperties":false,"properties":{"DriverConfig":{"$ref":"#/components/schemas/DockerMountDriver"},"Labels":{"additionalProperties":{"type":"string"},"type":"object"},"NoCopy":{"type":"boolean"},"Subpath":{"type":"string"}},"type":"object"},"DockerNetworkConfigReference":{"additionalProperties":false,"properties":{"Network":{"type":"string"}},"required":["Network"],"type":"object"},"DockerNetworkEndpointResource":{"additionalProperties":false,"properties":{"EndpointID":{"type":"string"},"IPv4Address":{"type":"string"},"IPv6Address":{"type":"string"},"MacAddress":{"type":"string"},"Name":{"type":"string"}},"required":["Name","EndpointID","MacAddress","IPv4Address","IPv6Address"],"type":"object"},"DockerNetworkPeerInfo":{"additionalProperties":false,"properties":{"IP":{"format":"ip","type":"string"},"Name":{"type":"string"}},"required":["Name","IP"],"type":"object"},"DockerNetworkServiceInfo":{"additionalProperties":false,"properties":{"LocalLBIndex":{"format":"int64","type":"integer"},"Ports":{"items":{"type":"string"},"type":["array","null"]},"Tasks":{"items":{"$ref":"#/components/schemas/DockerNetworkTask"},"type":["array","null"]},"VIP":{"format":"ip","type":"string"}},"required":["VIP","Ports","LocalLBIndex","Tasks"],"type":"object"},"DockerNetworkTask":{"additionalProperties":false,"properties":{"EndpointID":{"type":"string"},"EndpointIP":{"format":"ip","type":"string"},"Info":{"additionalProperties":{"type":"string"},"type":"object"},"Name":{"type":"string"}},"required":["Name","EndpointID","EndpointIP","Info"],"type":"object"},"DockerRegistryIndexInfo":{"additionalProperties":false,"properties":{"Mirrors":{"items":{"type":"string"},"type":["array","null"]},"Name":{"type":"string"},"Official":{"type":"boolean"},"Secure":{"type":"boolean"}},"required":["Name","Mirrors","Secure","Official"],"type":"object"},"DockerRegistryServiceConfig":{"additionalProperties":false,"properties":{"IndexConfigs":{"additionalProperties":{"$ref":"#/components/schemas/DockerRegistryIndexInfo"},"type":"object"},"InsecureRegistryCIDRs":{"items":{"type":"string"},"type":["array","null"]},"Mirrors":{"items":{"type":"string"},"type":["array","null"]}},"required":["InsecureRegistryCIDRs","IndexConfigs","Mirrors"],"type":"object"},"DockerSwarmAppArmorOpts":{"additionalProperties":false,"properties":{"Mode":{"type":"string"}},"type":"object"},"DockerSwarmCAConfig":{"additionalProperties":false,"properties":{"ExternalCAs":{"items":{"$ref":"#/components/schemas/DockerSwarmExternalCA"},"type":["array","null"]},"ForceRotate":{"format":"int64","minimum":0,"type":"integer"},"NodeCertExpiry":{"format":"int64","type":"integer"},"SigningCACert":{"type":"string"},"SigningCAKey":{"type":"string"}},"type":"object"},"DockerSwarmClusterInfo":{"additionalProperties":false,"properties":{"CreatedAt":{"format":"date-time","type":"string"},"DataPathPort":{"format":"int32","minimum":0,"type":"integer"},"DefaultAddrPool":{"items":{"type":"string"},"type":["array","null"]},"ID":{"type":"string"},"RootRotationInProgress":{"type":"boolean"},"Spec":{"$ref":"#/components/schemas/DockerSwarmSpec"},"SubnetSize":{"format":"int32","minimum":0,"type":"integer"},"TLSInfo":{"$ref":"#/components/schemas/DockerSwarmTLSInfo"},"UpdatedAt":{"format":"date-time","type":"string"},"Version":{"$ref":"#/components/schemas/DockerSwarmVersion"}},"required":["ID","Spec","TLSInfo","RootRotationInProgress","DefaultAddrPool","SubnetSize","DataPathPort"],"type":"object"},"DockerSwarmConfigReference":{"additionalProperties":false,"properties":{"ConfigID":{"type":"string"},"ConfigName":{"type":"string"},"File":{"$ref":"#/components/schemas/DockerSwarmConfigReferenceFileTarget"},"Runtime":{"$ref":"#/components/schemas/DockerSwarmConfigReferenceRuntimeTarget"}},"required":["ConfigID","ConfigName"],"type":"object"},"DockerSwarmConfigReferenceFileTarget":{"additionalProperties":false,"properties":{"GID":{"type":"string"},"Mode":{"format":"int32","minimum":0,"type":"integer"},"Name":{"type":"string"},"UID":{"type":"string"}},"required":["Name","UID","GID","Mode"],"type":"object"},"DockerSwarmConfigReferenceRuntimeTarget":{"additionalProperties":false,"type":"object"},"DockerSwarmConfigSpec":{"additionalProperties":false,"properties":{"Data":{"contentEncoding":"base64","type":"string"},"Labels":{"additionalProperties":{"type":"string"},"type":"object"},"Name":{"type":"string"},"Templating":{"$ref":"#/components/schemas/DockerSwarmDriver"}},"required":["Labels"],"type":"object"},"DockerSwarmContainerSpec":{"additionalProperties":false,"properties":{"Args":{"items":{"type":"string"},"type":["array","null"]},"CapabilityAdd":{"items":{"type":"string"},"type":["array","null"]},"CapabilityDrop":{"items":{"type":"string"},"type":["array","null"]},"Command":{"items":{"type":"string"},"type":["array","null"]},"Configs":{"items":{"$ref":"#/components/schemas/DockerSwarmConfigReference"},"type":["array","null"]},"DNSConfig":{"$ref":"#/components/schemas/DockerSwarmDNSConfig"},"Dir":{"type":"string"},"Env":{"items":{"type":"string"},"type":["array","null"]},"Groups":{"items":{"type":"string"},"type":["array","null"]},"Healthcheck":{"$ref":"#/components/schemas/HealthcheckConfig"},"Hostname":{"type":"string"},"Hosts":{"items":{"type":"string"},"type":["array","null"]},"Image":{"type":"string"},"Init":{"type":"boolean"},"Isolation":{"type":"string"},"Labels":{"additionalProperties":{"type":"string"},"type":"object"},"Mounts":{"items":{"$ref":"#/components/schemas/DockerMountMount"},"type":["array","null"]},"OomScoreAdj":{"format":"int64","type":"integer"},"OpenStdin":{"type":"boolean"},"Privileges":{"$ref":"#/components/schemas/DockerSwarmPrivileges"},"ReadOnly":{"type":"boolean"},"Secrets":{"items":{"$ref":"#/components/schemas/DockerSwarmSecretReference"},"type":["array","null"]},"StopGracePeriod":{"format":"int64","type":"integer"},"StopSignal":{"type":"string"},"Sysctls":{"additionalProperties":{"type":"string"},"type":"object"},"TTY":{"type":"boolean"},"Ulimits":{"items":{"$ref":"#/components/schemas/Ulimit"},"type":["array","null"]},"User":{"type":"string"}},"type":"object"},"DockerSwarmCredentialSpec":{"additionalProperties":false,"properties":{"Config":{"type":"string"},"File":{"type":"string"},"Registry":{"type":"string"}},"required":["Config","File","Registry"],"type":"object"},"DockerSwarmDNSConfig":{"additionalProperties":false,"properties":{"Nameservers":{"items":{"format":"ip","type":"string"},"type":["array","null"]},"Options":{"items":{"type":"string"},"type":["array","null"]},"Search":{"items":{"type":"string"},"type":["array","null"]}},"type":"object"},"DockerSwarmDiscreteGenericResource":{"additionalProperties":false,"properties":{"Kind":{"type":"string"},"Value":{"format":"int64","type":"integer"}},"type":"object"},"DockerSwarmDispatcherConfig":{"additionalProperties":false,"properties":{"HeartbeatPeriod":{"format":"int64","type":"integer"}},"type":"object"},"DockerSwarmDriver":{"additionalProperties":false,"properties":{"Name":{"type":"string"},"Options":{"additionalProperties":{"type":"string"},"type":"object"}},"type":"object"},"DockerSwarmEncryptionConfig":{"additionalProperties":false,"properties":{"AutoLockManagers":{"type":"boolean"}},"required":["AutoLockManagers"],"type":"object"},"DockerSwarmEndpoint":{"additionalProperties":false,"properties":{"Ports":{"items":{"$ref":"#/components/schemas/DockerSwarmPortConfig"},"type":["array","null"]},"Spec":{"$ref":"#/components/schemas/DockerSwarmEndpointSpec"},"VirtualIPs":{"items":{"$ref":"#/components/schemas/DockerSwarmEndpointVirtualIP"},"type":["array","null"]}},"type":"object"},"DockerSwarmEndpointSpec":{"additionalProperties":false,"properties":{"Mode":{"type":"string"},"Ports":{"items":{"$ref":"#/components/schemas/DockerSwarmPortConfig"},"type":["array","null"]}},"type":"object"},"DockerSwarmEndpointVirtualIP":{"additionalProperties":false,"properties":{"Addr":{"type":"string"},"NetworkID":{"type":"string"}},"type":"object"},"DockerSwarmExternalCA":{"additionalProperties":false,"properties":{"CACert":{"type":"string"},"Options":{"additionalProperties":{"type":"string"},"type":"object"},"Protocol":{"type":"string"},"URL":{"type":"string"}},"required":["Protocol","URL","CACert"],"type":"object"},"DockerSwarmGenericResource":{"additionalProperties":false,"properties":{"DiscreteResourceSpec":{"$ref":"#/components/schemas/DockerSwarmDiscreteGenericResource"},"NamedResourceSpec":{"$ref":"#/components/schemas/DockerSwarmNamedGenericResource"}},"type":"object"},"DockerSwarmGlobalJob":{"additionalProperties":false,"type":"object"},"DockerSwarmGlobalService":{"additionalProperties":false,"type":"object"},"DockerSwarmInfo":{"additionalProperties":false,"properties":{"Cluster":{"$ref":"#/components/schemas/DockerSwarmClusterInfo"},"ControlAvailable":{"type":"boolean"},"Error":{"type":"string"},"LocalNodeState":{"type":"string"},"Managers":{"format":"int64","type":"integer"},"NodeAddr":{"type":"string"},"NodeID":{"type":"string"},"Nodes":{"format":"int64","type":"integer"},"RemoteManagers":{"items":{"$ref":"#/components/schemas/DockerSwarmPeer"},"type":["array","null"]},"Warnings":{"items":{"type":"string"},"type":["array","null"]}},"required":["NodeID","NodeAddr","LocalNodeState","ControlAvailable","Error","RemoteManagers"],"type":"object"},"DockerSwarmLimit":{"additionalProperties":false,"properties":{"MemoryBytes":{"format":"int64","type":"integer"},"NanoCPUs":{"format":"int64","type":"integer"},"Pids":{"format":"int64","type":"integer"}},"type":"object"},"DockerSwarmNamedGenericResource":{"additionalProperties":false,"properties":{"Kind":{"type":"string"},"Value":{"type":"string"}},"type":"object"},"DockerSwarmNetworkAttachmentConfig":{"additionalProperties":false,"properties":{"Aliases":{"items":{"type":"string"},"type":["array","null"]},"DriverOpts":{"additionalProperties":{"type":"string"},"type":"object"},"Target":{"type":"string"}},"type":"object"},"DockerSwarmNetworkAttachmentSpec":{"additionalProperties":false,"properties":{"ContainerID":{"type":"string"}},"required":["ContainerID"],"type":"object"},"DockerSwarmOrchestrationConfig":{"additionalProperties":false,"properties":{"TaskHistoryRetentionLimit":{"format":"int64","type":"integer"}},"type":"object"},"DockerSwarmPeer":{"additionalProperties":false,"properties":{"Addr":{"type":"string"},"NodeID":{"type":"string"}},"required":["NodeID","Addr"],"type":"object"},"DockerSwarmPlacement":{"additionalProperties":false,"properties":{"Constraints":{"items":{"type":"string"},"type":["array","null"]},"MaxReplicas":{"format":"int64","minimum":0,"type":"integer"},"Platforms":{"items":{"$ref":"#/components/schemas/DockerSwarmPlatform"},"type":["array","null"]},"Preferences":{"items":{"$ref":"#/components/schemas/DockerSwarmPlacementPreference"},"type":["array","null"]}},"type":"object"},"DockerSwarmPlacementPreference":{"additionalProperties":false,"properties":{"Spread":{"$ref":"#/components/schemas/DockerSwarmSpreadOver"}},"required":["Spread"],"type":"object"},"DockerSwarmPlatform":{"additionalProperties":false,"properties":{"Architecture":{"type":"string"},"OS":{"type":"string"}},"type":"object"},"DockerSwarmPortConfig":{"additionalProperties":false,"properties":{"Name":{"type":"string"},"Protocol":{"type":"string"},"PublishMode":{"type":"string"},"PublishedPort":{"format":"int32","minimum":0,"type":"integer"},"TargetPort":{"format":"int32","minimum":0,"type":"integer"}},"type":"object"},"DockerSwarmPrivileges":{"additionalProperties":false,"properties":{"AppArmor":{"$ref":"#/components/schemas/DockerSwarmAppArmorOpts"},"CredentialSpec":{"$ref":"#/components/schemas/DockerSwarmCredentialSpec"},"NoNewPrivileges":{"type":"boolean"},"SELinuxContext":{"$ref":"#/components/schemas/DockerSwarmSELinuxContext"},"Seccomp":{"$ref":"#/components/schemas/DockerSwarmSeccompOpts"}},"required":["CredentialSpec","SELinuxContext","NoNewPrivileges"],"type":"object"},"DockerSwarmRaftConfig":{"additionalProperties":false,"properties":{"ElectionTick":{"format":"int64","type":"integer"},"HeartbeatTick":{"format":"int64","type":"integer"},"KeepOldSnapshots":{"format":"int64","minimum":0,"type":"integer"},"LogEntriesForSlowFollowers":{"format":"int64","minimum":0,"type":"integer"},"SnapshotInterval":{"format":"int64","minimum":0,"type":"integer"}},"required":["ElectionTick","HeartbeatTick"],"type":"object"},"DockerSwarmReplicatedJob":{"additionalProperties":false,"properties":{"MaxConcurrent":{"format":"int64","minimum":0,"type":"integer"},"TotalCompletions":{"format":"int64","minimum":0,"type":"integer"}},"type":"object"},"DockerSwarmReplicatedService":{"additionalProperties":false,"properties":{"Replicas":{"format":"int64","minimum":0,"type":"integer"}},"type":"object"},"DockerSwarmResourceRequirements":{"additionalProperties":false,"properties":{"Limits":{"$ref":"#/components/schemas/DockerSwarmLimit"},"MemorySwappiness":{"format":"int64","type":["integer","null"]},"Reservations":{"$ref":"#/components/schemas/DockerSwarmResources"},"SwapBytes":{"format":"int64","type":["integer","null"]}},"type":"object"},"DockerSwarmResources":{"additionalProperties":false,"properties":{"GenericResources":{"items":{"$ref":"#/components/schemas/DockerSwarmGenericResource"},"type":["array","null"]},"MemoryBytes":{"format":"int64","type":"integer"},"NanoCPUs":{"format":"int64","type":"integer"}},"type":"object"},"DockerSwarmRestartPolicy":{"additionalProperties":false,"properties":{"Condition":{"type":"string"},"Delay":{"format":"int64","type":"integer"},"MaxAttempts":{"format":"int64","minimum":0,"type":"integer"},"Window":{"format":"int64","type":"integer"}},"type":"object"},"DockerSwarmRuntimePrivilege":{"additionalProperties":false,"properties":{"description":{"type":"string"},"name":{"type":"string"},"value":{"items":{"type":"string"},"type":["array","null"]}},"type":"object"},"DockerSwarmRuntimeSpec":{"additionalProperties":false,"properties":{"disabled":{"type":"boolean"},"env":{"items":{"type":"string"},"type":["array","null"]},"name":{"type":"string"},"privileges":{"items":{"$ref":"#/components/schemas/DockerSwarmRuntimePrivilege"},"type":["array","null"]},"remote":{"type":"string"}},"type":"object"},"DockerSwarmSELinuxContext":{"additionalProperties":false,"properties":{"Disable":{"type":"boolean"},"Level":{"type":"string"},"Role":{"type":"string"},"Type":{"type":"string"},"User":{"type":"string"}},"required":["Disable","User","Role","Type","Level"],"type":"object"},"DockerSwarmSeccompOpts":{"additionalProperties":false,"properties":{"Mode":{"type":"string"},"Profile":{"contentEncoding":"base64","type":"string"}},"type":"object"},"DockerSwarmSecretReference":{"additionalProperties":false,"properties":{"File":{"$ref":"#/components/schemas/DockerSwarmSecretReferenceFileTarget"},"SecretID":{"type":"string"},"SecretName":{"type":"string"}},"required":["File","SecretID","SecretName"],"type":"object"},"DockerSwarmSecretReferenceFileTarget":{"additionalProperties":false,"properties":{"GID":{"type":"string"},"Mode":{"format":"int32","minimum":0,"type":"integer"},"Name":{"type":"string"},"UID":{"type":"string"}},"required":["Name","UID","GID","Mode"],"type":"object"},"DockerSwarmSecretSpec":{"additionalProperties":false,"properties":{"Data":{"contentEncoding":"base64","type":"string"},"Driver":{"$ref":"#/components/schemas/DockerSwarmDriver"},"Labels":{"additionalProperties":{"type":"string"},"type":"object"},"Name":{"type":"string"},"Templating":{"$ref":"#/components/schemas/DockerSwarmDriver"}},"required":["Labels"],"type":"object"},"DockerSwarmServiceMode":{"additionalProperties":false,"properties":{"Global":{"$ref":"#/components/schemas/DockerSwarmGlobalService"},"GlobalJob":{"$ref":"#/components/schemas/DockerSwarmGlobalJob"},"Replicated":{"$ref":"#/components/schemas/DockerSwarmReplicatedService"},"ReplicatedJob":{"$ref":"#/components/schemas/DockerSwarmReplicatedJob"}},"type":"object"},"DockerSwarmServiceSpec":{"additionalProperties":false,"properties":{"EndpointSpec":{"$ref":"#/components/schemas/DockerSwarmEndpointSpec"},"Labels":{"additionalProperties":{"type":"string"},"type":"object"},"Mode":{"$ref":"#/components/schemas/DockerSwarmServiceMode"},"Name":{"type":"string"},"RollbackConfig":{"$ref":"#/components/schemas/DockerSwarmUpdateConfig"},"TaskTemplate":{"$ref":"#/components/schemas/DockerSwarmTaskSpec"},"UpdateConfig":{"$ref":"#/components/schemas/DockerSwarmUpdateConfig"}},"required":["Labels"],"type":"object"},"DockerSwarmSpec":{"additionalProperties":false,"properties":{"CAConfig":{"$ref":"#/components/schemas/DockerSwarmCAConfig"},"Dispatcher":{"$ref":"#/components/schemas/DockerSwarmDispatcherConfig"},"EncryptionConfig":{"$ref":"#/components/schemas/DockerSwarmEncryptionConfig"},"Labels":{"additionalProperties":{"type":"string"},"type":"object"},"Name":{"type":"string"},"Orchestration":{"$ref":"#/components/schemas/DockerSwarmOrchestrationConfig"},"Raft":{"$ref":"#/components/schemas/DockerSwarmRaftConfig"},"TaskDefaults":{"$ref":"#/components/schemas/DockerSwarmTaskDefaults"}},"required":["Labels"],"type":"object"},"DockerSwarmSpreadOver":{"additionalProperties":false,"properties":{"SpreadDescriptor":{"type":"string"}},"required":["SpreadDescriptor"],"type":"object"},"DockerSwarmTLSInfo":{"additionalProperties":false,"properties":{"CertIssuerPublicKey":{"contentEncoding":"base64","type":"string"},"CertIssuerSubject":{"contentEncoding":"base64","type":"string"},"TrustRoot":{"type":"string"}},"type":"object"},"DockerSwarmTaskDefaults":{"additionalProperties":false,"properties":{"LogDriver":{"$ref":"#/components/schemas/DockerSwarmDriver"}},"type":"object"},"DockerSwarmTaskSpec":{"additionalProperties":false,"properties":{"ContainerSpec":{"$ref":"#/components/schemas/DockerSwarmContainerSpec"},"ForceUpdate":{"format":"int64","minimum":0,"type":"integer"},"LogDriver":{"$ref":"#/components/schemas/DockerSwarmDriver"},"NetworkAttachmentSpec":{"$ref":"#/components/schemas/DockerSwarmNetworkAttachmentSpec"},"Networks":{"items":{"$ref":"#/components/schemas/DockerSwarmNetworkAttachmentConfig"},"type":["array","null"]},"Placement":{"$ref":"#/components/schemas/DockerSwarmPlacement"},"PluginSpec":{"$ref":"#/components/schemas/DockerSwarmRuntimeSpec"},"Resources":{"$ref":"#/components/schemas/DockerSwarmResourceRequirements"},"RestartPolicy":{"$ref":"#/components/schemas/DockerSwarmRestartPolicy"},"Runtime":{"type":"string"}},"required":["ForceUpdate"],"type":"object"},"DockerSwarmUpdateConfig":{"additionalProperties":false,"properties":{"Delay":{"format":"int64","type":"integer"},"FailureAction":{"type":"string"},"MaxFailureRatio":{"format":"float","type":"number"},"Monitor":{"format":"int64","type":"integer"},"Order":{"type":"string"},"Parallelism":{"format":"int64","minimum":0,"type":"integer"}},"required":["Parallelism","MaxFailureRatio","Order"],"type":"object"},"DockerSwarmUpdateStatus":{"additionalProperties":false,"properties":{"CompletedAt":{"format":"date-time","type":"string"},"Message":{"type":"string"},"StartedAt":{"format":"date-time","type":"string"},"State":{"type":"string"}},"type":"object"},"DockerSwarmVersion":{"additionalProperties":false,"properties":{"Index":{"format":"int64","minimum":0,"type":"integer"}},"type":"object"},"DockerSystemCommit":{"additionalProperties":false,"properties":{"ID":{"type":"string"}},"required":["ID"],"type":"object"},"DockerSystemContainerdInfo":{"additionalProperties":false,"properties":{"Address":{"type":"string"},"Namespaces":{"$ref":"#/components/schemas/DockerSystemContainerdNamespaces"}},"required":["Namespaces"],"type":"object"},"DockerSystemContainerdNamespaces":{"additionalProperties":false,"properties":{"Containers":{"type":"string"},"Plugins":{"type":"string"}},"required":["Containers","Plugins"],"type":"object"},"DockerSystemDeviceInfo":{"additionalProperties":false,"properties":{"ID":{"type":"string"},"Source":{"type":"string"}},"required":["Source","ID"],"type":"object"},"DockerSystemFirewallInfo":{"additionalProperties":false,"properties":{"Driver":{"type":"string"},"Info":{"items":{"items":{"type":"string"},"maxItems":2,"minItems":2,"type":["array","null"]},"type":["array","null"]}},"required":["Driver"],"type":"object"},"DockerSystemNRIInfo":{"additionalProperties":false,"properties":{"Info":{"items":{"items":{"type":"string"},"maxItems":2,"minItems":2,"type":["array","null"]},"type":["array","null"]}},"type":"object"},"DockerSystemNetworkAddressPool":{"additionalProperties":false,"properties":{"Base":{"type":"string"},"Size":{"format":"int64","type":"integer"}},"required":["Base","Size"],"type":"object"},"DockerSystemPluginsInfo":{"additionalProperties":false,"properties":{"Authorization":{"items":{"type":"string"},"type":["array","null"]},"Log":{"items":{"type":"string"},"type":["array","null"]},"Network":{"items":{"type":"string"},"type":["array","null"]},"Volume":{"items":{"type":"string"},"type":["array","null"]}},"required":["Volume","Network","Authorization","Log"],"type":"object"},"DockerSystemRuntimeWithStatus":{"additionalProperties":false,"properties":{"options":{"additionalProperties":{},"type":"object"},"path":{"type":"string"},"runtimeArgs":{"items":{"type":"string"},"type":["array","null"]},"runtimeType":{"type":"string"},"status":{"additionalProperties":{"type":"string"},"type":"object"}},"type":"object"},"DockerTypesDeviceMapping":{"additionalProperties":false,"properties":{"permissions":{"type":"string"},"source":{"type":"string"},"target":{"type":"string"}},"type":"object"},"DockerTypesDeviceRequest":{"additionalProperties":false,"properties":{"capabilities":{"items":{"type":"string"},"type":["array","null"]},"count":{"format":"int64","type":"integer"},"device_ids":{"items":{"type":"string"},"type":["array","null"]},"driver":{"type":"string"},"options":{"additionalProperties":{"type":"string"},"type":"object"}},"type":"object"},"DockerTypesEnvFile":{"additionalProperties":false,"properties":{"format":{"type":"string"},"path":{"type":"string"},"required":{"type":"boolean"}},"type":"object"},"DockerTypesGenericResource":{"additionalProperties":false,"properties":{"discrete_resource_spec":{"$ref":"#/components/schemas/DiscreteGenericResource"}},"type":"object"},"DockerTypesPlacement":{"additionalProperties":false,"properties":{"constraints":{"items":{"type":"string"},"type":["array","null"]},"max_replicas_per_node":{"format":"int64","minimum":0,"type":"integer"},"preferences":{"items":{"$ref":"#/components/schemas/DockerTypesPlacementPreferences"},"type":["array","null"]}},"type":"object"},"DockerTypesPlacementPreferences":{"additionalProperties":false,"properties":{"spread":{"type":"string"}},"type":"object"},"DockerTypesResources":{"additionalProperties":false,"properties":{"limits":{"$ref":"#/components/schemas/Resource"},"reservations":{"$ref":"#/components/schemas/Resource"}},"type":"object"},"DockerTypesSSHKey":{"additionalProperties":false,"properties":{"id":{"type":"string"},"path":{"type":"string"}},"type":"object"},"DockerTypesServiceConfig":{"additionalProperties":false,"properties":{"annotations":{"additionalProperties":{"type":"string"},"type":"object"},"attach":{"type":"boolean"},"blkio_config":{"$ref":"#/components/schemas/BlkioConfig"},"build":{"$ref":"#/components/schemas/BuildConfig"},"cap_add":{"items":{"type":"string"},"type":["array","null"]},"cap_drop":{"items":{"type":"string"},"type":["array","null"]},"cgroup":{"type":"string"},"cgroup_parent":{"type":"string"},"command":{"items":{"type":"string"},"type":["array","null"]},"configs":{"items":{"$ref":"#/components/schemas/DockerTypesServiceConfigObjConfig"},"type":["array","null"]},"container_name":{"type":"string"},"cpu_count":{"format":"int64","type":"integer"},"cpu_percent":{"format":"float","type":"number"},"cpu_period":{"format":"int64","type":"integer"},"cpu_quota":{"format":"int64","type":"integer"},"cpu_rt_period":{"format":"int64","type":"integer"},"cpu_rt_runtime":{"format":"int64","type":"integer"},"cpu_shares":{"format":"int64","type":"integer"},"cpus":{"format":"float","type":"number"},"cpuset":{"type":"string"},"credential_spec":{"$ref":"#/components/schemas/CredentialSpecConfig"},"depends_on":{"additionalProperties":{"$ref":"#/components/schemas/DockerTypesServiceDependency"},"type":"object"},"deploy":{"$ref":"#/components/schemas/DeployConfig"},"develop":{"$ref":"#/components/schemas/DevelopConfig"},"device_cgroup_rules":{"items":{"type":"string"},"type":["array","null"]},"devices":{"items":{"$ref":"#/components/schemas/DockerTypesDeviceMapping"},"type":["array","null"]},"dns":{"items":{"type":"string"},"type":["array","null"]},"dns_opt":{"items":{"type":"string"},"type":["array","null"]},"dns_search":{"items":{"type":"string"},"type":["array","null"]},"dockerfile":{"type":"string"},"domainname":{"type":"string"},"entrypoint":{"items":{"type":"string"},"type":["array","null"]},"env_file":{"items":{"$ref":"#/components/schemas/DockerTypesEnvFile"},"type":["array","null"]},"environment":{"additionalProperties":{"type":["string","null"]},"type":"object"},"expose":{"items":{"type":"string"},"type":["array","null"]},"extends":{"$ref":"#/components/schemas/ExtendsConfig"},"external_links":{"items":{"type":"string"},"type":["array","null"]},"extra_hosts":{"additionalProperties":{"items":{"type":"string"},"type":["array","null"]},"type":"object"},"gpus":{"items":{"$ref":"#/components/schemas/DockerTypesDeviceRequest"},"type":["array","null"]},"group_add":{"items":{"type":"string"},"type":["array","null"]},"healthcheck":{"$ref":"#/components/schemas/HealthCheckConfig"},"hostname":{"type":"string"},"image":{"type":"string"},"init":{"type":"boolean"},"ipc":{"type":"string"},"isolation":{"type":"string"},"label_file":{"items":{"type":"string"},"type":["array","null"]},"labels":{"additionalProperties":{"type":"string"},"type":"object"},"links":{"items":{"type":"string"},"type":["array","null"]},"log_driver":{"type":"string"},"log_opt":{"additionalProperties":{"type":"string"},"type":"object"},"logging":{"$ref":"#/components/schemas/LoggingConfig"},"mac_address":{"type":"string"},"mem_limit":{"format":"int64","type":"integer"},"mem_reservation":{"format":"int64","type":"integer"},"mem_swappiness":{"format":"int64","type":"integer"},"memswap_limit":{"format":"int64","type":"integer"},"models":{"additionalProperties":{"$ref":"#/components/schemas/ServiceModelConfig"},"type":"object"},"net":{"type":"string"},"network_mode":{"type":"string"},"networks":{"additionalProperties":{"$ref":"#/components/schemas/ServiceNetworkConfig"},"type":"object"},"oom_kill_disable":{"type":"boolean"},"oom_score_adj":{"format":"int64","type":"integer"},"pid":{"type":"string"},"pids_limit":{"format":"int64","type":"integer"},"platform":{"type":"string"},"ports":{"items":{"$ref":"#/components/schemas/DockerTypesServicePortConfig"},"type":["array","null"]},"post_start":{"items":{"$ref":"#/components/schemas/DockerTypesServiceHook"},"type":["array","null"]},"pre_stop":{"items":{"$ref":"#/components/schemas/DockerTypesServiceHook"},"type":["array","null"]},"privileged":{"type":"boolean"},"profiles":{"items":{"type":"string"},"type":["array","null"]},"provider":{"$ref":"#/components/schemas/ServiceProviderConfig"},"pull_policy":{"type":"string"},"read_only":{"type":"boolean"},"restart":{"type":"string"},"runtime":{"type":"string"},"scale":{"format":"int64","type":"integer"},"secrets":{"items":{"$ref":"#/components/schemas/DockerTypesServiceSecretConfig"},"type":["array","null"]},"security_opt":{"items":{"type":"string"},"type":["array","null"]},"shm_size":{"format":"int64","type":"integer"},"stdin_open":{"type":"boolean"},"stop_grace_period":{"format":"int64","type":"integer"},"stop_signal":{"type":"string"},"storage_opt":{"additionalProperties":{"type":"string"},"type":"object"},"sysctls":{"additionalProperties":{"type":"string"},"type":"object"},"tmpfs":{"items":{"type":"string"},"type":["array","null"]},"tty":{"type":"boolean"},"ulimits":{"additionalProperties":{"$ref":"#/components/schemas/UlimitsConfig"},"type":"object"},"use_api_socket":{"type":"boolean"},"user":{"type":"string"},"userns_mode":{"type":"string"},"uts":{"type":"string"},"volume_driver":{"type":"string"},"volumes":{"items":{"$ref":"#/components/schemas/DockerTypesServiceVolumeConfig"},"type":["array","null"]},"volumes_from":{"items":{"type":"string"},"type":["array","null"]},"working_dir":{"type":"string"}},"required":["command","entrypoint"],"type":"object"},"DockerTypesServiceConfigObjConfig":{"additionalProperties":false,"properties":{"gid":{"type":"string"},"mode":{"format":"int64","type":"integer"},"source":{"type":"string"},"target":{"type":"string"},"uid":{"type":"string"}},"type":"object"},"DockerTypesServiceDependency":{"additionalProperties":false,"properties":{"condition":{"type":"string"},"required":{"type":"boolean"},"restart":{"type":"boolean"}},"required":["required"],"type":"object"},"DockerTypesServiceHook":{"additionalProperties":false,"properties":{"command":{"items":{"type":"string"},"type":["array","null"]},"environment":{"additionalProperties":{"type":["string","null"]},"type":"object"},"privileged":{"type":"boolean"},"user":{"type":"string"},"working_dir":{"type":"string"}},"required":["command"],"type":"object"},"DockerTypesServicePortConfig":{"additionalProperties":false,"properties":{"app_protocol":{"type":"string"},"host_ip":{"type":"string"},"mode":{"type":"string"},"name":{"type":"string"},"protocol":{"type":"string"},"published":{"type":"string"},"target":{"format":"int32","minimum":0,"type":"integer"}},"type":"object"},"DockerTypesServiceSecretConfig":{"additionalProperties":false,"properties":{"gid":{"type":"string"},"mode":{"format":"int64","type":"integer"},"source":{"type":"string"},"target":{"type":"string"},"uid":{"type":"string"}},"type":"object"},"DockerTypesServiceVolumeConfig":{"additionalProperties":false,"properties":{"bind":{"$ref":"#/components/schemas/ServiceVolumeBind"},"consistency":{"type":"string"},"image":{"$ref":"#/components/schemas/ServiceVolumeImage"},"read_only":{"type":"boolean"},"source":{"type":"string"},"target":{"type":"string"},"tmpfs":{"$ref":"#/components/schemas/ServiceVolumeTmpfs"},"type":{"type":"string"},"volume":{"$ref":"#/components/schemas/ServiceVolumeVolume"}},"type":"object"},"DockerTypesThrottleDevice":{"additionalProperties":false,"properties":{"Path":{"type":"string"},"Rate":{"format":"int64","type":"integer"}},"required":["Path","Rate"],"type":"object"},"DockerTypesTrigger":{"additionalProperties":false,"properties":{"action":{"type":"string"},"exec":{"$ref":"#/components/schemas/DockerTypesServiceHook"},"ignore":{"items":{"type":"string"},"type":["array","null"]},"include":{"items":{"type":"string"},"type":["array","null"]},"initial_sync":{"type":"boolean"},"path":{"type":"string"},"target":{"type":"string"}},"required":["path","action"],"type":"object"},"DockerTypesWeightDevice":{"additionalProperties":false,"properties":{"Path":{"type":"string"},"Weight":{"format":"int32","minimum":0,"type":"integer"}},"required":["Path","Weight"],"type":"object"},"DockerVolumeUsageData":{"additionalProperties":false,"properties":{"RefCount":{"format":"int64","type":"integer"},"Size":{"format":"int64","type":"integer"}},"required":["RefCount","Size"],"type":"object"},"DockerinfoInfo":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/DockerinfoInfo.json"],"format":"uri","readOnly":true,"type":"string"},"Architecture":{"type":"string"},"CDISpecDirs":{"items":{"type":"string"},"type":["array","null"]},"CPUSet":{"type":"boolean"},"CPUShares":{"type":"boolean"},"CgroupDriver":{"type":"string"},"CgroupVersion":{"type":"string"},"Containerd":{"$ref":"#/components/schemas/DockerSystemContainerdInfo"},"ContainerdCommit":{"$ref":"#/components/schemas/DockerSystemCommit"},"Containers":{"format":"int64","type":"integer"},"ContainersPaused":{"format":"int64","type":"integer"},"ContainersRunning":{"format":"int64","type":"integer"},"ContainersStopped":{"format":"int64","type":"integer"},"CpuCfsPeriod":{"type":"boolean"},"CpuCfsQuota":{"type":"boolean"},"Debug":{"type":"boolean"},"DefaultAddressPools":{"items":{"$ref":"#/components/schemas/DockerSystemNetworkAddressPool"},"type":["array","null"]},"DefaultRuntime":{"type":"string"},"DiscoveredDevices":{"items":{"$ref":"#/components/schemas/DockerSystemDeviceInfo"},"type":["array","null"]},"DockerRootDir":{"type":"string"},"Driver":{"type":"string"},"DriverStatus":{"items":{"items":{"type":"string"},"maxItems":2,"minItems":2,"type":["array","null"]},"type":["array","null"]},"ExperimentalBuild":{"type":"boolean"},"FirewallBackend":{"$ref":"#/components/schemas/DockerSystemFirewallInfo"},"GenericResources":{"items":{"$ref":"#/components/schemas/DockerSwarmGenericResource"},"type":["array","null"]},"HttpProxy":{"type":"string"},"HttpsProxy":{"type":"string"},"ID":{"type":"string"},"IPv4Forwarding":{"type":"boolean"},"Images":{"format":"int64","type":"integer"},"IndexServerAddress":{"type":"string"},"InitBinary":{"type":"string"},"InitCommit":{"$ref":"#/components/schemas/DockerSystemCommit"},"Isolation":{"type":"string"},"KernelVersion":{"type":"string"},"Labels":{"items":{"type":"string"},"type":["array","null"]},"LiveRestoreEnabled":{"type":"boolean"},"LoggingDriver":{"type":"string"},"MemTotal":{"format":"int64","type":"integer"},"MemoryLimit":{"type":"boolean"},"NCPU":{"format":"int64","type":"integer"},"NEventsListener":{"format":"int64","type":"integer"},"NFd":{"format":"int64","type":"integer"},"NGoroutines":{"format":"int64","type":"integer"},"NRI":{"$ref":"#/components/schemas/DockerSystemNRIInfo"},"Name":{"type":"string"},"NoProxy":{"type":"string"},"OSType":{"type":"string"},"OSVersion":{"type":"string"},"OomKillDisable":{"type":"boolean"},"OperatingSystem":{"type":"string"},"PidsLimit":{"type":"boolean"},"Plugins":{"$ref":"#/components/schemas/DockerSystemPluginsInfo"},"ProductLicense":{"type":"string"},"RegistryConfig":{"$ref":"#/components/schemas/DockerRegistryServiceConfig"},"RuncCommit":{"$ref":"#/components/schemas/DockerSystemCommit"},"Runtimes":{"additionalProperties":{"$ref":"#/components/schemas/DockerSystemRuntimeWithStatus"},"type":"object"},"SecurityOptions":{"items":{"type":"string"},"type":["array","null"]},"ServerVersion":{"type":"string"},"SwapLimit":{"type":"boolean"},"Swarm":{"$ref":"#/components/schemas/DockerSwarmInfo"},"SystemStatus":{"items":{"items":{"type":"string"},"maxItems":2,"minItems":2,"type":["array","null"]},"type":["array","null"]},"SystemTime":{"type":"string"},"Warnings":{"items":{"type":"string"},"type":["array","null"]},"apiVersion":{"type":"string"},"arch":{"type":"string"},"buildTime":{"type":"string"},"gitCommit":{"type":"string"},"goVersion":{"type":"string"},"os":{"type":"string"},"success":{"type":"boolean"}},"required":["success","apiVersion","gitCommit","goVersion","os","arch","buildTime","ID","Containers","ContainersRunning","ContainersPaused","ContainersStopped","Images","Driver","DriverStatus","Plugins","MemoryLimit","SwapLimit","CpuCfsPeriod","CpuCfsQuota","CPUShares","CPUSet","PidsLimit","IPv4Forwarding","Debug","NFd","OomKillDisable","NGoroutines","SystemTime","LoggingDriver","CgroupDriver","NEventsListener","KernelVersion","OperatingSystem","OSVersion","OSType","Architecture","IndexServerAddress","RegistryConfig","NCPU","MemTotal","GenericResources","DockerRootDir","HttpProxy","HttpsProxy","NoProxy","Name","Labels","ExperimentalBuild","ServerVersion","Runtimes","DefaultRuntime","Swarm","LiveRestoreEnabled","Isolation","InitBinary","ContainerdCommit","RuncCommit","InitCommit","SecurityOptions","CDISpecDirs","Warnings"],"type":"object"},"EnvSummary":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/EnvSummary.json"],"format":"uri","readOnly":true,"type":"string"},"variables":{"items":{"$ref":"#/components/schemas/EnvVariable"},"type":["array","null"]}},"required":["variables"],"type":"object"},"EnvVariable":{"additionalProperties":false,"properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"type":"object"},"EnvironmentAgentPairRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/EnvironmentAgentPairRequest.json"],"format":"uri","readOnly":true,"type":"string"},"rotate":{"type":"boolean"}},"type":"object"},"EnvironmentAgentPairResponse":{"additionalProperties":false,"properties":{"token":{"type":"string"}},"required":["token"],"type":"object"},"EnvironmentCreate":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/EnvironmentCreate.json"],"format":"uri","readOnly":true,"type":"string"},"accessToken":{"type":"string"},"apiUrl":{"type":"string"},"bootstrapToken":{"type":"string"},"enabled":{"type":"boolean"},"isEdge":{"type":"boolean"},"name":{"type":"string"},"useApiKey":{"type":"boolean"}},"required":["apiUrl"],"type":"object"},"EnvironmentEnvironment":{"additionalProperties":false,"properties":{"apiKey":{"type":"string"},"apiUrl":{"type":"string"},"connected":{"type":"boolean"},"connectedAt":{"format":"date-time","type":"string"},"edgeTransport":{"type":"string"},"enabled":{"type":"boolean"},"id":{"type":"string"},"isEdge":{"type":"boolean"},"lastHeartbeat":{"format":"date-time","type":"string"},"lastPollAt":{"format":"date-time","type":"string"},"name":{"type":"string"},"status":{"type":"string"}},"required":["id","apiUrl","status","enabled","isEdge"],"type":"object"},"EnvironmentPaginatedResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/EnvironmentPaginatedResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"items":{"$ref":"#/components/schemas/EnvironmentEnvironment"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"EnvironmentTest":{"additionalProperties":false,"properties":{"message":{"type":"string"},"status":{"type":"string"}},"required":["status"],"type":"object"},"EnvironmentTestConnectionRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/EnvironmentTestConnectionRequest.json"],"format":"uri","readOnly":true,"type":"string"},"apiUrl":{"type":"string"}},"type":"object"},"EnvironmentUpdate":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/EnvironmentUpdate.json"],"format":"uri","readOnly":true,"type":"string"},"accessToken":{"type":"string"},"apiUrl":{"type":"string"},"bootstrapToken":{"type":"string"},"enabled":{"type":"boolean"},"name":{"type":"string"},"regenerateApiKey":{"type":"boolean"}},"type":"object"},"EnvironmentWithApiKey":{"additionalProperties":false,"properties":{"apiKey":{"description":"API key for pairing (only shown once during creation)","type":"string"},"apiUrl":{"type":"string"},"connected":{"type":"boolean"},"connectedAt":{"format":"date-time","type":"string"},"edgeTransport":{"type":"string"},"enabled":{"type":"boolean"},"id":{"type":"string"},"isEdge":{"type":"boolean"},"lastHeartbeat":{"format":"date-time","type":"string"},"lastPollAt":{"format":"date-time","type":"string"},"name":{"type":"string"},"status":{"type":"string"}},"required":["id","apiUrl","status","enabled","isEdge"],"type":"object"},"ErrorDetail":{"additionalProperties":false,"properties":{"location":{"description":"Where the error occurred, e.g. 'body.items[3].tags' or 'path.thing-id'","type":"string"},"message":{"description":"Error message text","type":"string"},"value":{"description":"The value at the given location"}},"type":"object"},"ErrorModel":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ErrorModel.json"],"format":"uri","readOnly":true,"type":"string"},"detail":{"description":"A human-readable explanation specific to this occurrence of the problem.","examples":["Property foo is required but is missing."],"type":"string"},"errors":{"description":"Optional list of individual error details","items":{"$ref":"#/components/schemas/ErrorDetail"},"type":["array","null"]},"instance":{"description":"A URI reference that identifies the specific occurrence of the problem.","examples":["https://example.com/error-log/abc123"],"format":"uri","type":"string"},"status":{"description":"HTTP status code","examples":[400],"format":"int64","type":"integer"},"title":{"description":"A short, human-readable summary of the problem type. This value should not change between occurrences of the error.","examples":["Bad Request"],"type":"string"},"type":{"default":"about:blank","description":"A URI reference to human-readable documentation for the error.","examples":["https://example.com/errors/example"],"format":"uri","type":"string"}},"type":"object"},"EventCreateEvent":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/EventCreateEvent.json"],"format":"uri","readOnly":true,"type":"string"},"description":{"type":"string"},"environmentId":{"type":"string"},"metadata":{"additionalProperties":{},"type":"object"},"resourceId":{"type":"string"},"resourceName":{"type":"string"},"resourceType":{"type":"string"},"severity":{"type":"string"},"title":{"type":"string"},"type":{"type":"string"},"userId":{"type":"string"},"username":{"type":"string"}},"required":["type","title"],"type":"object"},"EventEvent":{"additionalProperties":false,"properties":{"createdAt":{"format":"date-time","type":"string"},"description":{"type":"string"},"environmentId":{"type":"string"},"id":{"type":"string"},"metadata":{"additionalProperties":{},"type":"object"},"resourceId":{"type":"string"},"resourceName":{"type":"string"},"resourceType":{"type":"string"},"severity":{"type":"string"},"timestamp":{"format":"date-time","type":"string"},"title":{"type":"string"},"type":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"userId":{"type":"string"},"username":{"type":"string"}},"required":["id","type","severity","title","timestamp","createdAt"],"type":"object"},"EventPaginatedResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/EventPaginatedResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"items":{"$ref":"#/components/schemas/EventEvent"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"ExtendsConfig":{"additionalProperties":false,"properties":{"file":{"type":"string"},"service":{"type":"string"}},"type":"object"},"FileContentResponse":{"additionalProperties":false,"properties":{"content":{"contentEncoding":"base64","type":"string"},"mimeType":{"type":"string"}},"required":["content","mimeType"],"type":"object"},"GetSwarmNodeAgentDeploymentInputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/GetSwarmNodeAgentDeploymentInputBody.json"],"format":"uri","readOnly":true,"type":"string"},"rotate":{"description":"Rotate the environment token before generating snippets","type":"boolean"}},"type":"object"},"GitOpsSyncPaginatedResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/GitOpsSyncPaginatedResponse.json"],"format":"uri","readOnly":true,"type":"string"},"counts":{"$ref":"#/components/schemas/GitopsSyncCounts"},"data":{"items":{"$ref":"#/components/schemas/GitopsGitOpsSync"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","counts","pagination"],"type":"object"},"GitRepositoryPaginatedResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/GitRepositoryPaginatedResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"items":{"$ref":"#/components/schemas/GitopsGitRepository"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"GitopsBranchInfo":{"additionalProperties":false,"properties":{"isDefault":{"type":"boolean"},"name":{"type":"string"}},"required":["name","isDefault"],"type":"object"},"GitopsBranchesResponse":{"additionalProperties":false,"properties":{"branches":{"items":{"$ref":"#/components/schemas/GitopsBranchInfo"},"type":["array","null"]}},"required":["branches"],"type":"object"},"GitopsBrowseResponse":{"additionalProperties":false,"properties":{"files":{"items":{"$ref":"#/components/schemas/GitopsFileTreeNode"},"type":["array","null"]},"path":{"type":"string"}},"required":["path","files"],"type":"object"},"GitopsCreateSyncRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/GitopsCreateSyncRequest.json"],"format":"uri","readOnly":true,"type":"string"},"autoSync":{"type":"boolean"},"branch":{"type":"string"},"composePath":{"type":"string"},"maxSyncBinarySize":{"format":"int64","type":"integer"},"maxSyncFiles":{"format":"int64","type":"integer"},"maxSyncTotalSize":{"format":"int64","type":"integer"},"name":{"type":"string"},"projectName":{"type":"string"},"repositoryId":{"type":"string"},"syncDirectory":{"type":"boolean"},"syncInterval":{"format":"int64","type":"integer"}},"required":["name","repositoryId","branch","composePath"],"type":"object"},"GitopsFileTreeNode":{"additionalProperties":false,"properties":{"children":{"items":{"$ref":"#/components/schemas/GitopsFileTreeNode"},"type":["array","null"]},"name":{"type":"string"},"path":{"type":"string"},"size":{"format":"int64","type":"integer"},"type":{"type":"string"}},"required":["name","path","type"],"type":"object"},"GitopsGitOpsSync":{"additionalProperties":false,"properties":{"autoSync":{"type":"boolean"},"branch":{"type":"string"},"composePath":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"environmentId":{"type":"string"},"id":{"type":"string"},"lastSyncAt":{"format":"date-time","type":"string"},"lastSyncCommit":{"type":"string"},"lastSyncError":{"type":"string"},"lastSyncStatus":{"type":"string"},"maxSyncBinarySize":{"format":"int64","type":"integer"},"maxSyncFiles":{"format":"int64","type":"integer"},"maxSyncTotalSize":{"format":"int64","type":"integer"},"name":{"type":"string"},"projectId":{"type":"string"},"projectName":{"type":"string"},"repository":{"$ref":"#/components/schemas/GitopsGitRepository"},"repositoryId":{"type":"string"},"syncDirectory":{"type":"boolean"},"syncInterval":{"format":"int64","type":"integer"},"syncedFiles":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","name","environmentId","repositoryId","branch","composePath","projectName","autoSync","syncInterval","syncDirectory","maxSyncFiles","maxSyncTotalSize","maxSyncBinarySize","createdAt","updatedAt"],"type":"object"},"GitopsGitRepository":{"additionalProperties":false,"properties":{"authType":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"description":{"type":"string"},"enabled":{"type":"boolean"},"id":{"type":"string"},"name":{"type":"string"},"sshHostKeyVerification":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"url":{"type":"string"},"username":{"type":"string"}},"required":["id","name","url","authType","enabled","createdAt","updatedAt"],"type":"object"},"GitopsImportGitOpsSyncRequest":{"additionalProperties":false,"properties":{"autoSync":{"type":"boolean"},"branch":{"type":"string"},"dockerComposePath":{"type":"string"},"gitRepo":{"type":"string"},"maxSyncBinarySize":{"format":"int64","type":"integer"},"maxSyncFiles":{"format":"int64","type":"integer"},"maxSyncTotalSize":{"format":"int64","type":"integer"},"syncDirectory":{"type":"boolean"},"syncInterval":{"format":"int64","type":"integer"},"syncName":{"type":"string"}},"required":["syncName","gitRepo","branch","dockerComposePath","autoSync","syncInterval"],"type":"object"},"GitopsImportGitOpsSyncResponse":{"additionalProperties":false,"properties":{"errors":{"items":{"type":"string"},"type":["array","null"]},"failedCount":{"format":"int64","type":"integer"},"successCount":{"format":"int64","type":"integer"}},"required":["successCount","failedCount","errors"],"type":"object"},"GitopsRepositorySync":{"additionalProperties":false,"properties":{"authType":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"description":{"type":"string"},"enabled":{"type":"boolean"},"id":{"type":"string"},"name":{"type":"string"},"sshHostKeyVerification":{"type":"string"},"sshKey":{"type":"string"},"token":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"url":{"type":"string"},"username":{"type":"string"}},"required":["id","name","url","authType","enabled","createdAt","updatedAt"],"type":"object"},"GitopsRepositorySyncRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/GitopsRepositorySyncRequest.json"],"format":"uri","readOnly":true,"type":"string"},"repositories":{"items":{"$ref":"#/components/schemas/GitopsRepositorySync"},"type":["array","null"]}},"required":["repositories"],"type":"object"},"GitopsSyncCounts":{"additionalProperties":false,"properties":{"activeSyncs":{"format":"int64","type":"integer"},"successfulSyncs":{"format":"int64","type":"integer"},"totalSyncs":{"format":"int64","type":"integer"}},"required":["totalSyncs","activeSyncs","successfulSyncs"],"type":"object"},"GitopsSyncResult":{"additionalProperties":false,"properties":{"error":{"type":"string"},"message":{"type":"string"},"success":{"type":"boolean"},"syncedAt":{"format":"date-time","type":"string"}},"required":["success","message","syncedAt"],"type":"object"},"GitopsSyncStatus":{"additionalProperties":false,"properties":{"autoSync":{"type":"boolean"},"id":{"type":"string"},"lastSyncAt":{"format":"date-time","type":"string"},"lastSyncCommit":{"type":"string"},"lastSyncError":{"type":"string"},"lastSyncStatus":{"type":"string"},"nextSyncAt":{"format":"date-time","type":"string"}},"required":["id","autoSync"],"type":"object"},"GitopsUpdateSyncRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/GitopsUpdateSyncRequest.json"],"format":"uri","readOnly":true,"type":"string"},"autoSync":{"type":"boolean"},"branch":{"type":"string"},"composePath":{"type":"string"},"maxSyncBinarySize":{"format":"int64","type":"integer"},"maxSyncFiles":{"format":"int64","type":"integer"},"maxSyncTotalSize":{"format":"int64","type":"integer"},"name":{"type":"string"},"projectName":{"type":"string"},"repositoryId":{"type":"string"},"syncDirectory":{"type":"boolean"},"syncInterval":{"format":"int64","type":"integer"}},"type":"object"},"HealthCheckConfig":{"additionalProperties":false,"properties":{"disable":{"type":"boolean"},"interval":{"format":"int64","type":"integer"},"retries":{"format":"int64","minimum":0,"type":"integer"},"start_interval":{"format":"int64","type":"integer"},"start_period":{"format":"int64","type":"integer"},"test":{"items":{"type":"string"},"type":["array","null"]},"timeout":{"format":"int64","type":"integer"}},"type":"object"},"HealthcheckConfig":{"additionalProperties":false,"properties":{"Interval":{"format":"int64","type":"integer"},"Retries":{"format":"int64","type":"integer"},"StartInterval":{"format":"int64","type":"integer"},"StartPeriod":{"format":"int64","type":"integer"},"Test":{"items":{"type":"string"},"type":["array","null"]},"Timeout":{"format":"int64","type":"integer"}},"type":"object"},"ImageBuildPaginatedResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ImageBuildPaginatedResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"items":{"$ref":"#/components/schemas/ImageBuildRecord"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"ImageBuildRecord":{"additionalProperties":false,"properties":{"buildArgs":{"additionalProperties":{"type":"string"},"type":"object"},"cacheFrom":{"items":{"type":"string"},"type":["array","null"]},"cacheTo":{"items":{"type":"string"},"type":["array","null"]},"completedAt":{"format":"date-time","type":"string"},"contextDir":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"digest":{"type":"string"},"dockerfile":{"type":"string"},"durationMs":{"format":"int64","type":"integer"},"entitlements":{"items":{"type":"string"},"type":["array","null"]},"environmentId":{"type":"string"},"errorMessage":{"type":"string"},"extraHosts":{"items":{"type":"string"},"type":["array","null"]},"id":{"type":"string"},"isolation":{"type":"string"},"labels":{"additionalProperties":{"type":"string"},"type":"object"},"load":{"type":"boolean"},"network":{"type":"string"},"noCache":{"type":"boolean"},"output":{"type":"string"},"outputTruncated":{"type":"boolean"},"platforms":{"items":{"type":"string"},"type":["array","null"]},"privileged":{"type":"boolean"},"provider":{"type":"string"},"pull":{"type":"boolean"},"push":{"type":"boolean"},"shmSize":{"format":"int64","type":"integer"},"status":{"type":"string"},"tags":{"items":{"type":"string"},"type":["array","null"]},"target":{"type":"string"},"ulimits":{"additionalProperties":{"type":"string"},"type":"object"},"userId":{"type":"string"},"username":{"type":"string"}},"required":["id","environmentId","status","contextDir","noCache","pull","privileged","push","load","outputTruncated","createdAt"],"type":"object"},"ImageBuildRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ImageBuildRequest.json"],"format":"uri","readOnly":true,"type":"string"},"buildArgs":{"additionalProperties":{"type":"string"},"description":"Build arguments","type":"object"},"cacheFrom":{"description":"Build cache sources","items":{"type":"string"},"type":["array","null"]},"cacheTo":{"description":"Build cache targets","items":{"type":"string"},"type":["array","null"]},"contextDir":{"description":"Build context directory or Git URL","minLength":1,"type":"string"},"dockerfile":{"description":"Dockerfile path","type":"string"},"dockerfileInline":{"description":"Inline Dockerfile content","type":"string"},"entitlements":{"description":"Build entitlements","items":{"type":"string"},"type":["array","null"]},"extraHosts":{"description":"Build extra host mappings","items":{"type":"string"},"type":["array","null"]},"isolation":{"description":"Build isolation mode","type":"string"},"labels":{"additionalProperties":{"type":"string"},"description":"Build labels","type":"object"},"load":{"description":"Load image into local Docker","type":"boolean"},"network":{"description":"Build network mode","type":"string"},"noCache":{"description":"Disable build cache","type":"boolean"},"platforms":{"description":"Target platforms","items":{"type":"string"},"type":["array","null"]},"privileged":{"description":"Enable privileged build","type":"boolean"},"provider":{"description":"Build provider override","type":"string"},"pull":{"description":"Always pull referenced base images","type":"boolean"},"push":{"description":"Push image","type":"boolean"},"shmSize":{"description":"Build shared memory size in bytes","format":"int64","type":"integer"},"tags":{"description":"Image tags","items":{"type":"string"},"type":["array","null"]},"target":{"description":"Target stage","type":"string"},"ulimits":{"additionalProperties":{"type":"string"},"description":"Build ulimits","type":"object"}},"required":["contextDir"],"type":"object"},"ImageDetailSummary":{"additionalProperties":false,"properties":{"architecture":{"type":"string"},"author":{"type":"string"},"comment":{"type":"string"},"config":{"$ref":"#/components/schemas/DetailSummaryConfigStruct"},"created":{"type":"string"},"descriptor":{"$ref":"#/components/schemas/DetailSummaryDescriptorStruct"},"graphDriver":{"$ref":"#/components/schemas/DetailSummaryGraphDriverStruct"},"id":{"type":"string"},"metadata":{"$ref":"#/components/schemas/DetailSummaryMetadataStruct"},"os":{"type":"string"},"repoDigests":{"items":{"type":"string"},"type":["array","null"]},"repoTags":{"items":{"type":"string"},"type":["array","null"]},"rootFs":{"$ref":"#/components/schemas/DetailSummaryRootFsStruct"},"size":{"format":"int64","type":"integer"}},"required":["id","repoTags","repoDigests","comment","created","author","config","architecture","os","size","graphDriver","rootFs","metadata","descriptor"],"type":"object"},"ImageLoadResult":{"additionalProperties":false,"properties":{"stream":{"type":"string"}},"required":["stream"],"type":"object"},"ImagePaginatedResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ImagePaginatedResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"items":{"$ref":"#/components/schemas/ImageSummary"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"ImagePruneReport":{"additionalProperties":false,"properties":{"imagesDeleted":{"items":{"type":"string"},"type":["array","null"]},"spaceReclaimed":{"format":"int64","type":"integer"}},"required":["imagesDeleted","spaceReclaimed"],"type":"object"},"ImagePullOptions":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ImagePullOptions.json"],"format":"uri","readOnly":true,"type":"string"},"auth":{"$ref":"#/components/schemas/ContainerregistryCredential"},"credentials":{"items":{"$ref":"#/components/schemas/ContainerregistryCredential"},"type":["array","null"]},"imageName":{"description":"Name of the image to pull (e.g., nginx)","minLength":1,"type":"string"},"tag":{"description":"Tag of the image to pull (e.g., latest)","type":"string"}},"required":["imageName"],"type":"object"},"ImageSummary":{"additionalProperties":false,"properties":{"created":{"format":"int64","type":"integer"},"id":{"type":"string"},"inUse":{"type":"boolean"},"labels":{"additionalProperties":{},"type":"object"},"repo":{"type":"string"},"repoDigests":{"items":{"type":"string"},"type":["array","null"]},"repoTags":{"items":{"type":"string"},"type":["array","null"]},"size":{"format":"int64","type":"integer"},"tag":{"type":"string"},"updateInfo":{"$ref":"#/components/schemas/ImageUpdateInfo"},"usedBy":{"items":{"$ref":"#/components/schemas/ImageUsedBy"},"type":["array","null"]},"virtualSize":{"format":"int64","type":"integer"},"vulnerabilityScan":{"$ref":"#/components/schemas/VulnerabilityScanSummary"}},"required":["id","repoTags","repoDigests","created","size","virtualSize","labels","inUse","repo","tag"],"type":"object"},"ImageUpdateInfo":{"additionalProperties":false,"properties":{"authMethod":{"type":"string"},"authRegistry":{"type":"string"},"authUsername":{"type":"string"},"checkTime":{"format":"date-time","type":"string"},"currentDigest":{"type":"string"},"currentVersion":{"type":"string"},"error":{"type":"string"},"hasUpdate":{"type":"boolean"},"latestDigest":{"type":"string"},"latestVersion":{"type":"string"},"responseTimeMs":{"format":"int64","type":"integer"},"updateType":{"type":"string"},"usedCredential":{"type":"boolean"}},"required":["hasUpdate","updateType","currentVersion","latestVersion","currentDigest","latestDigest","checkTime","responseTimeMs","error"],"type":"object"},"ImageUsageCounts":{"additionalProperties":false,"properties":{"imagesInuse":{"format":"int64","type":"integer"},"imagesUnused":{"format":"int64","type":"integer"},"totalImageSize":{"format":"int64","type":"integer"},"totalImages":{"format":"int64","type":"integer"}},"required":["imagesInuse","imagesUnused","totalImages","totalImageSize"],"type":"object"},"ImageUsageCountsResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ImageUsageCountsResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ImageUsageCounts"},"success":{"type":"boolean"}},"required":["success","data"],"type":"object"},"ImageUsedBy":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"}},"required":["type","name"],"type":"object"},"ImageupdateBatchImageUpdateRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ImageupdateBatchImageUpdateRequest.json"],"format":"uri","readOnly":true,"type":"string"},"credentials":{"items":{"$ref":"#/components/schemas/ContainerregistryCredential"},"type":["array","null"]},"imageRefs":{"items":{"type":"string"},"type":["array","null"]}},"required":["imageRefs"],"type":"object"},"ImageupdateCheckAllImagesRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ImageupdateCheckAllImagesRequest.json"],"format":"uri","readOnly":true,"type":"string"},"credentials":{"items":{"$ref":"#/components/schemas/ContainerregistryCredential"},"type":["array","null"]}},"type":"object"},"ImageupdateResponse":{"additionalProperties":false,"properties":{"authMethod":{"type":"string"},"authRegistry":{"type":"string"},"authUsername":{"type":"string"},"checkTime":{"format":"date-time","type":"string"},"currentDigest":{"type":"string"},"currentVersion":{"type":"string"},"error":{"type":"string"},"hasUpdate":{"type":"boolean"},"latestDigest":{"type":"string"},"latestVersion":{"type":"string"},"responseTimeMs":{"format":"int64","type":"integer"},"updateType":{"type":"string"},"usedCredential":{"type":"boolean"}},"required":["hasUpdate","updateType","currentVersion","checkTime","responseTimeMs"],"type":"object"},"ImageupdateSummary":{"additionalProperties":false,"properties":{"digestUpdates":{"format":"int64","type":"integer"},"errorsCount":{"format":"int64","type":"integer"},"imagesWithUpdates":{"format":"int64","type":"integer"},"totalImages":{"format":"int64","type":"integer"}},"required":["totalImages","imagesWithUpdates","digestUpdates","errorsCount"],"type":"object"},"JobscheduleConfig":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/JobscheduleConfig.json"],"format":"uri","readOnly":true,"type":"string"},"autoHealInterval":{"type":"string"},"autoUpdateInterval":{"type":"string"},"environmentHealthInterval":{"type":"string"},"eventCleanupInterval":{"type":"string"},"gitopsSyncInterval":{"type":"string"},"pollingInterval":{"type":"string"},"scheduledPruneInterval":{"type":"string"},"vulnerabilityScanInterval":{"type":"string"}},"required":["environmentHealthInterval","eventCleanupInterval","autoUpdateInterval","pollingInterval","scheduledPruneInterval","gitopsSyncInterval","vulnerabilityScanInterval","autoHealInterval"],"type":"object"},"JobscheduleJobListResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/JobscheduleJobListResponse.json"],"format":"uri","readOnly":true,"type":"string"},"isAgent":{"type":"boolean"},"jobs":{"items":{"$ref":"#/components/schemas/JobscheduleJobStatus"},"type":["array","null"]}},"required":["jobs","isAgent"],"type":"object"},"JobscheduleJobPrerequisite":{"additionalProperties":false,"properties":{"isMet":{"type":"boolean"},"label":{"type":"string"},"settingKey":{"type":"string"},"settingsUrl":{"type":"string"}},"required":["settingKey","label","isMet"],"type":"object"},"JobscheduleJobRunResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/JobscheduleJobRunResponse.json"],"format":"uri","readOnly":true,"type":"string"},"message":{"type":"string"},"success":{"type":"boolean"}},"required":["success","message"],"type":"object"},"JobscheduleJobStatus":{"additionalProperties":false,"properties":{"canRunManually":{"type":"boolean"},"category":{"type":"string"},"description":{"type":"string"},"enabled":{"type":"boolean"},"id":{"type":"string"},"isContinuous":{"type":"boolean"},"managerOnly":{"type":"boolean"},"name":{"type":"string"},"nextRun":{"format":"date-time","type":"string"},"prerequisites":{"items":{"$ref":"#/components/schemas/JobscheduleJobPrerequisite"},"type":["array","null"]},"schedule":{"type":"string"},"settingsKey":{"type":"string"}},"required":["id","name","description","category","schedule","enabled","managerOnly","isContinuous","canRunManually","prerequisites"],"type":"object"},"JobscheduleUpdate":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/JobscheduleUpdate.json"],"format":"uri","readOnly":true,"type":"string"},"autoHealInterval":{"type":"string"},"autoUpdateInterval":{"type":"string"},"environmentHealthInterval":{"type":"string"},"eventCleanupInterval":{"type":"string"},"gitopsSyncInterval":{"type":"string"},"pollingInterval":{"type":"string"},"scheduledPruneInterval":{"type":"string"},"vulnerabilityScanInterval":{"type":"string"}},"type":"object"},"LoggingConfig":{"additionalProperties":false,"properties":{"driver":{"type":"string"},"options":{"additionalProperties":{"type":"string"},"type":"object"}},"type":"object"},"MetaMetadata":{"additionalProperties":false,"properties":{"description":{"type":"string"},"key":{"type":"string"},"keywords":{"items":{"type":"string"},"type":["array","null"]},"label":{"type":"string"},"type":{"type":"string"}},"required":["key","label","type"],"type":"object"},"MetaTemplateMeta":{"additionalProperties":false,"properties":{"author":{"type":"string"},"documentationUrl":{"type":"string"},"envUrl":{"type":"string"},"iconUrl":{"type":"string"},"remoteUrl":{"type":"string"},"tags":{"items":{"type":"string"},"type":["array","null"]},"updatedAt":{"type":"string"},"version":{"type":"string"}},"type":"object"},"NetworkContainerEndpoint":{"additionalProperties":false,"properties":{"endpointId":{"type":"string"},"id":{"type":"string"},"ipv4Address":{"type":"string"},"ipv6Address":{"type":"string"},"macAddress":{"type":"string"},"name":{"type":"string"}},"required":["id","name","endpointId","ipv4Address","ipv6Address","macAddress"],"type":"object"},"NetworkCountsApiResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/NetworkCountsApiResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/NetworkUsageCounts"},"success":{"type":"boolean"}},"required":["success","data"],"type":"object"},"NetworkCreateOptions":{"additionalProperties":false,"properties":{"attachable":{"description":"Allow manual container attachment","type":"boolean"},"checkDuplicate":{"description":"Check for duplicate network names","type":"boolean"},"driver":{"description":"Network driver (e.g., bridge, overlay)","type":"string"},"enableIPv6":{"description":"Enable IPv6 networking","type":"boolean"},"ingress":{"description":"Enable routing-mesh for swarm cluster","type":"boolean"},"internal":{"description":"Restrict external access to the network","type":"boolean"},"ipam":{"$ref":"#/components/schemas/NetworkIPAM","description":"IP Address Management configuration"},"labels":{"additionalProperties":{"type":"string"},"description":"User-defined labels","type":"object"},"options":{"additionalProperties":{"type":"string"},"description":"Driver-specific options","type":"object"}},"type":"object"},"NetworkCreateRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/NetworkCreateRequest.json"],"format":"uri","readOnly":true,"type":"string"},"name":{"description":"Name of the network","minLength":1,"type":"string"},"options":{"$ref":"#/components/schemas/NetworkCreateOptions","description":"Network creation options"}},"required":["name","options"],"type":"object"},"NetworkCreateResponse":{"additionalProperties":false,"properties":{"id":{"type":"string"},"warning":{"type":"string"}},"required":["id"],"type":"object"},"NetworkCreatedApiResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/NetworkCreatedApiResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/NetworkCreateResponse"},"success":{"type":"boolean"}},"required":["success","data"],"type":"object"},"NetworkIPAM":{"additionalProperties":false,"properties":{"config":{"items":{"$ref":"#/components/schemas/NetworkIPAMConfig"},"type":["array","null"]},"driver":{"type":"string"},"options":{"additionalProperties":{"type":"string"},"type":"object"}},"type":"object"},"NetworkIPAMConfig":{"additionalProperties":false,"properties":{"auxAddress":{"additionalProperties":{"type":"string"},"type":"object"},"gateway":{"type":"string"},"ipRange":{"type":"string"},"subnet":{"type":"string"}},"type":"object"},"NetworkInspect":{"additionalProperties":false,"properties":{"attachable":{"type":"boolean"},"configFrom":{"$ref":"#/components/schemas/DockerNetworkConfigReference"},"configOnly":{"type":"boolean"},"containers":{"additionalProperties":{"$ref":"#/components/schemas/DockerNetworkEndpointResource"},"type":"object"},"containersList":{"items":{"$ref":"#/components/schemas/NetworkContainerEndpoint"},"type":["array","null"]},"created":{"format":"date-time","type":"string"},"driver":{"type":"string"},"enableIPv4":{"type":"boolean"},"enableIPv6":{"type":"boolean"},"id":{"type":"string"},"ingress":{"type":"boolean"},"internal":{"type":"boolean"},"ipam":{"$ref":"#/components/schemas/NetworkIPAM"},"labels":{"additionalProperties":{"type":"string"},"type":"object"},"name":{"type":"string"},"options":{"additionalProperties":{"type":"string"},"type":"object"},"peers":{"items":{"$ref":"#/components/schemas/DockerNetworkPeerInfo"},"type":["array","null"]},"scope":{"type":"string"},"services":{"additionalProperties":{"$ref":"#/components/schemas/DockerNetworkServiceInfo"},"type":"object"}},"required":["id","name","driver","scope","created","enableIPv4","enableIPv6","ipam","internal","attachable","ingress","configFrom","configOnly","containers","options","labels","containersList"],"type":"object"},"NetworkInspectApiResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/NetworkInspectApiResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/NetworkInspect"},"success":{"type":"boolean"}},"required":["success","data"],"type":"object"},"NetworkMessageApiResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/NetworkMessageApiResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/BaseMessageResponse"},"success":{"type":"boolean"}},"required":["success","data"],"type":"object"},"NetworkPaginatedResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/NetworkPaginatedResponse.json"],"format":"uri","readOnly":true,"type":"string"},"counts":{"$ref":"#/components/schemas/NetworkUsageCounts"},"data":{"items":{"$ref":"#/components/schemas/NetworkSummary"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","counts","pagination"],"type":"object"},"NetworkPruneReport":{"additionalProperties":false,"properties":{"networksDeleted":{"items":{"type":"string"},"type":["array","null"]},"spaceReclaimed":{"format":"int64","minimum":0,"type":"integer"}},"required":["networksDeleted","spaceReclaimed"],"type":"object"},"NetworkPruneResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/NetworkPruneResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/NetworkPruneReport"},"success":{"type":"boolean"}},"required":["success","data"],"type":"object"},"NetworkSummary":{"additionalProperties":false,"properties":{"created":{"format":"date-time","type":"string"},"driver":{"type":"string"},"id":{"type":"string"},"inUse":{"type":"boolean"},"isDefault":{"type":"boolean"},"labels":{"additionalProperties":{"type":"string"},"type":"object"},"name":{"type":"string"},"options":{"additionalProperties":{"type":"string"},"type":"object"},"scope":{"type":"string"}},"required":["id","name","driver","scope","created","options","labels","inUse","isDefault"],"type":"object"},"NetworkTopology":{"additionalProperties":false,"properties":{"edges":{"items":{"$ref":"#/components/schemas/NetworkTopologyEdge"},"type":["array","null"]},"nodes":{"items":{"$ref":"#/components/schemas/NetworkTopologyNode"},"type":["array","null"]}},"required":["nodes","edges"],"type":"object"},"NetworkTopologyApiResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/NetworkTopologyApiResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/NetworkTopology"},"success":{"type":"boolean"}},"required":["success","data"],"type":"object"},"NetworkTopologyEdge":{"additionalProperties":false,"properties":{"id":{"type":"string"},"ipv4Address":{"type":"string"},"ipv6Address":{"type":"string"},"source":{"type":"string"},"target":{"type":"string"}},"required":["id","source","target"],"type":"object"},"NetworkTopologyNode":{"additionalProperties":false,"properties":{"id":{"type":"string"},"metadata":{"$ref":"#/components/schemas/NetworkTopologyNodeMetadata"},"name":{"type":"string"},"type":{"type":"string"}},"required":["id","name","type","metadata"],"type":"object"},"NetworkTopologyNodeMetadata":{"additionalProperties":false,"properties":{"driver":{"type":"string"},"image":{"type":"string"},"isDefault":{"type":"boolean"},"scope":{"type":"string"},"status":{"type":"string"}},"type":"object"},"NetworkUsageCounts":{"additionalProperties":false,"properties":{"inuse":{"format":"int64","type":"integer"},"total":{"format":"int64","type":"integer"},"unused":{"format":"int64","type":"integer"}},"required":["inuse","unused","total"],"type":"object"},"NotificationAppriseResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/NotificationAppriseResponse.json"],"format":"uri","readOnly":true,"type":"string"},"apiUrl":{"type":"string"},"containerUpdateTag":{"type":"string"},"enabled":{"type":"boolean"},"id":{"format":"int64","minimum":0,"type":"integer"},"imageUpdateTag":{"type":"string"}},"required":["id","apiUrl","enabled","imageUpdateTag","containerUpdateTag"],"type":"object"},"NotificationAppriseUpdate":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/NotificationAppriseUpdate.json"],"format":"uri","readOnly":true,"type":"string"},"apiUrl":{"type":"string"},"containerUpdateTag":{"type":"string"},"enabled":{"type":"boolean"},"imageUpdateTag":{"type":"string"}},"required":["apiUrl","enabled","imageUpdateTag","containerUpdateTag"],"type":"object"},"NotificationDispatchAutoHeal":{"additionalProperties":false,"properties":{"containerId":{"type":"string"},"containerName":{"type":"string"}},"required":["containerName","containerId"],"type":"object"},"NotificationDispatchBatchImageUpdate":{"additionalProperties":false,"properties":{"updates":{"additionalProperties":{"$ref":"#/components/schemas/ImageupdateResponse"},"type":"object"}},"required":["updates"],"type":"object"},"NotificationDispatchContainerUpdate":{"additionalProperties":false,"properties":{"containerName":{"type":"string"},"imageRef":{"type":"string"},"newDigest":{"type":"string"},"oldDigest":{"type":"string"}},"required":["containerName","imageRef"],"type":"object"},"NotificationDispatchImageUpdate":{"additionalProperties":false,"properties":{"imageRef":{"type":"string"},"updateInfo":{"$ref":"#/components/schemas/ImageupdateResponse"}},"required":["imageRef","updateInfo"],"type":"object"},"NotificationDispatchPruneReport":{"additionalProperties":false,"properties":{"result":{"$ref":"#/components/schemas/SystemPruneAllResult"}},"required":["result"],"type":"object"},"NotificationDispatchRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/NotificationDispatchRequest.json"],"format":"uri","readOnly":true,"type":"string"},"autoHeal":{"$ref":"#/components/schemas/NotificationDispatchAutoHeal"},"batchImageUpdate":{"$ref":"#/components/schemas/NotificationDispatchBatchImageUpdate"},"containerUpdate":{"$ref":"#/components/schemas/NotificationDispatchContainerUpdate"},"imageUpdate":{"$ref":"#/components/schemas/NotificationDispatchImageUpdate"},"kind":{"type":"string"},"pruneReport":{"$ref":"#/components/schemas/NotificationDispatchPruneReport"},"vulnerabilityFound":{"$ref":"#/components/schemas/NotificationDispatchVulnerabilityFound"}},"required":["kind"],"type":"object"},"NotificationDispatchVulnerabilityFound":{"additionalProperties":false,"properties":{"cveId":{"type":"string"},"cveLink":{"type":"string"},"fixedVersion":{"type":"string"},"imageName":{"type":"string"},"installedVersion":{"type":"string"},"pkgName":{"type":"string"},"severity":{"type":"string"}},"required":["cveId","cveLink","severity","imageName"],"type":"object"},"NotificationResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/NotificationResponse.json"],"format":"uri","readOnly":true,"type":"string"},"config":{"additionalProperties":{},"type":"object"},"enabled":{"type":"boolean"},"id":{"format":"int64","minimum":0,"type":"integer"},"provider":{"type":"string"}},"required":["id","provider","enabled","config"],"type":"object"},"NotificationUpdate":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/NotificationUpdate.json"],"format":"uri","readOnly":true,"type":"string"},"config":{"additionalProperties":{},"type":"object"},"enabled":{"type":"boolean"},"provider":{"type":"string"}},"required":["provider","enabled","config"],"type":"object"},"PortPaginatedResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/PortPaginatedResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"items":{"$ref":"#/components/schemas/PortPortMapping"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"PortPortMapping":{"additionalProperties":false,"properties":{"containerId":{"type":"string"},"containerName":{"type":"string"},"containerPort":{"format":"int64","type":"integer"},"hostIp":{"type":"string"},"hostPort":{"format":"int64","type":"integer"},"id":{"type":"string"},"isPublished":{"type":"boolean"},"protocol":{"type":"string"}},"required":["id","containerId","containerName","containerPort","protocol","isPublished"],"type":"object"},"ProjectCreateProject":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ProjectCreateProject.json"],"format":"uri","readOnly":true,"type":"string"},"composeContent":{"type":"string"},"envContent":{"type":"string"},"name":{"type":"string"}},"required":["name","composeContent"],"type":"object"},"ProjectCreateReponse":{"additionalProperties":false,"properties":{"createdAt":{"type":"string"},"dirName":{"type":"string"},"gitOpsManagedBy":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"path":{"type":"string"},"relativePath":{"type":"string"},"runningCount":{"format":"int64","type":"integer"},"serviceCount":{"format":"int64","type":"integer"},"status":{"type":"string"},"statusReason":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","name","path","status","serviceCount","runningCount","createdAt","updatedAt"],"type":"object"},"ProjectDeployOptions":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ProjectDeployOptions.json"],"format":"uri","readOnly":true,"type":"string"},"forceRecreate":{"type":"boolean"},"pullPolicy":{"type":"string"}},"type":"object"},"ProjectDestroy":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ProjectDestroy.json"],"format":"uri","readOnly":true,"type":"string"},"removeFiles":{"type":"boolean"},"removeVolumes":{"type":"boolean"}},"type":"object"},"ProjectDetails":{"additionalProperties":false,"properties":{"composeContent":{"type":"string"},"createdAt":{"type":"string"},"dirName":{"type":"string"},"directoryFiles":{"items":{"$ref":"#/components/schemas/ProjectIncludeFile"},"type":["array","null"]},"envContent":{"type":"string"},"gitOpsManagedBy":{"type":"string"},"gitRepositoryURL":{"type":"string"},"hasBuildDirective":{"type":"boolean"},"iconUrl":{"type":"string"},"id":{"type":"string"},"includeFiles":{"items":{"$ref":"#/components/schemas/ProjectIncludeFile"},"type":["array","null"]},"lastSyncCommit":{"type":"string"},"name":{"type":"string"},"path":{"type":"string"},"relativePath":{"type":"string"},"runningCount":{"format":"int64","type":"integer"},"runtimeServices":{"items":{"$ref":"#/components/schemas/ProjectRuntimeService"},"type":["array","null"]},"serviceCount":{"format":"int64","type":"integer"},"services":{"items":{"$ref":"#/components/schemas/DockerTypesServiceConfig"},"type":["array","null"]},"status":{"type":"string"},"statusReason":{"type":"string"},"updatedAt":{"type":"string"},"urls":{"items":{"type":"string"},"type":["array","null"]}},"required":["id","name","path","status","serviceCount","runningCount","createdAt","updatedAt"],"type":"object"},"ProjectIncludeFile":{"additionalProperties":false,"properties":{"content":{"type":"string"},"path":{"type":"string"},"relativePath":{"type":"string"}},"required":["path","relativePath","content"],"type":"object"},"ProjectPaginatedResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ProjectPaginatedResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"items":{"$ref":"#/components/schemas/ProjectDetails"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"ProjectRuntimeService":{"additionalProperties":false,"properties":{"containerId":{"type":"string"},"containerName":{"type":"string"},"health":{"type":"string"},"iconUrl":{"type":"string"},"image":{"type":"string"},"name":{"type":"string"},"ports":{"items":{"type":"string"},"type":["array","null"]},"serviceConfig":{"$ref":"#/components/schemas/ServiceConfig"},"status":{"type":"string"}},"required":["name","image","status"],"type":"object"},"ProjectStatusCounts":{"additionalProperties":false,"properties":{"runningProjects":{"format":"int64","type":"integer"},"stoppedProjects":{"format":"int64","type":"integer"},"totalProjects":{"format":"int64","type":"integer"}},"required":["runningProjects","stoppedProjects","totalProjects"],"type":"object"},"ProjectUpdateIncludeFile":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ProjectUpdateIncludeFile.json"],"format":"uri","readOnly":true,"type":"string"},"content":{"type":"string"},"relativePath":{"type":"string"}},"required":["relativePath","content"],"type":"object"},"ProjectUpdateProject":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ProjectUpdateProject.json"],"format":"uri","readOnly":true,"type":"string"},"composeContent":{"type":"string"},"envContent":{"type":"string"},"name":{"type":"string"}},"type":"object"},"PruneImagesInputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/PruneImagesInputBody.json"],"format":"uri","readOnly":true,"type":"string"},"dangling":{"type":"boolean"},"filters":{"additionalProperties":{"items":{"type":"string"},"type":["array","null"]},"type":"object"}},"type":"object"},"Resource":{"additionalProperties":false,"properties":{"cpus":{"format":"float","type":"number"},"devices":{"items":{"$ref":"#/components/schemas/DockerTypesDeviceRequest"},"type":["array","null"]},"generic_resources":{"items":{"$ref":"#/components/schemas/DockerTypesGenericResource"},"type":["array","null"]},"memory":{"format":"int64","type":"integer"},"pids":{"format":"int64","type":"integer"}},"type":"object"},"RestartPolicy":{"additionalProperties":false,"properties":{"condition":{"type":"string"},"delay":{"format":"int64","type":"integer"},"max_attempts":{"format":"int64","minimum":0,"type":"integer"},"window":{"format":"int64","type":"integer"}},"type":"object"},"RestoreBackupFilesInputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/RestoreBackupFilesInputBody.json"],"format":"uri","readOnly":true,"type":"string"},"paths":{"description":"Paths to restore from backup","items":{"type":"string"},"type":["array","null"]}},"required":["paths"],"type":"object"},"ScannerStatus":{"additionalProperties":false,"properties":{"available":{"type":"boolean"},"version":{"type":"string"}},"required":["available"],"type":"object"},"SearchRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SearchRequest.json"],"format":"uri","readOnly":true,"type":"string"},"query":{"type":"string"}},"required":["query"],"type":"object"},"SearchResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SearchResponse.json"],"format":"uri","readOnly":true,"type":"string"},"count":{"format":"int64","type":"integer"},"query":{"type":"string"},"results":{"items":{"$ref":"#/components/schemas/CategoryCategory"},"type":["array","null"]}},"required":["results","query","count"],"type":"object"},"ServiceConfig":{"additionalProperties":false,"properties":{"annotations":{"additionalProperties":{"type":"string"},"type":"object"},"attach":{"type":"boolean"},"blkio_config":{"$ref":"#/components/schemas/BlkioConfig"},"build":{"$ref":"#/components/schemas/BuildConfig"},"cap_add":{"items":{"type":"string"},"type":["array","null"]},"cap_drop":{"items":{"type":"string"},"type":["array","null"]},"cgroup":{"type":"string"},"cgroup_parent":{"type":"string"},"command":{"items":{"type":"string"},"type":["array","null"]},"configs":{"items":{"$ref":"#/components/schemas/DockerTypesServiceConfigObjConfig"},"type":["array","null"]},"container_name":{"type":"string"},"cpu_count":{"format":"int64","type":"integer"},"cpu_percent":{"format":"float","type":"number"},"cpu_period":{"format":"int64","type":"integer"},"cpu_quota":{"format":"int64","type":"integer"},"cpu_rt_period":{"format":"int64","type":"integer"},"cpu_rt_runtime":{"format":"int64","type":"integer"},"cpu_shares":{"format":"int64","type":"integer"},"cpus":{"format":"float","type":"number"},"cpuset":{"type":"string"},"credential_spec":{"$ref":"#/components/schemas/CredentialSpecConfig"},"depends_on":{"additionalProperties":{"$ref":"#/components/schemas/DockerTypesServiceDependency"},"type":"object"},"deploy":{"$ref":"#/components/schemas/DeployConfig"},"develop":{"$ref":"#/components/schemas/DevelopConfig"},"device_cgroup_rules":{"items":{"type":"string"},"type":["array","null"]},"devices":{"items":{"$ref":"#/components/schemas/DockerTypesDeviceMapping"},"type":["array","null"]},"dns":{"items":{"type":"string"},"type":["array","null"]},"dns_opt":{"items":{"type":"string"},"type":["array","null"]},"dns_search":{"items":{"type":"string"},"type":["array","null"]},"dockerfile":{"type":"string"},"domainname":{"type":"string"},"entrypoint":{"items":{"type":"string"},"type":["array","null"]},"env_file":{"items":{"$ref":"#/components/schemas/DockerTypesEnvFile"},"type":["array","null"]},"environment":{"additionalProperties":{"type":["string","null"]},"type":"object"},"expose":{"items":{"type":"string"},"type":["array","null"]},"extends":{"$ref":"#/components/schemas/ExtendsConfig"},"external_links":{"items":{"type":"string"},"type":["array","null"]},"extra_hosts":{"additionalProperties":{"items":{"type":"string"},"type":["array","null"]},"type":"object"},"gpus":{"items":{"$ref":"#/components/schemas/DockerTypesDeviceRequest"},"type":["array","null"]},"group_add":{"items":{"type":"string"},"type":["array","null"]},"healthcheck":{"$ref":"#/components/schemas/HealthCheckConfig"},"hostname":{"type":"string"},"image":{"type":"string"},"init":{"type":"boolean"},"ipc":{"type":"string"},"isolation":{"type":"string"},"label_file":{"items":{"type":"string"},"type":["array","null"]},"labels":{"additionalProperties":{"type":"string"},"type":"object"},"links":{"items":{"type":"string"},"type":["array","null"]},"log_driver":{"type":"string"},"log_opt":{"additionalProperties":{"type":"string"},"type":"object"},"logging":{"$ref":"#/components/schemas/LoggingConfig"},"mac_address":{"type":"string"},"mem_limit":{"format":"int64","type":"integer"},"mem_reservation":{"format":"int64","type":"integer"},"mem_swappiness":{"format":"int64","type":"integer"},"memswap_limit":{"format":"int64","type":"integer"},"models":{"additionalProperties":{"$ref":"#/components/schemas/ServiceModelConfig"},"type":"object"},"net":{"type":"string"},"network_mode":{"type":"string"},"networks":{"additionalProperties":{"$ref":"#/components/schemas/ServiceNetworkConfig"},"type":"object"},"oom_kill_disable":{"type":"boolean"},"oom_score_adj":{"format":"int64","type":"integer"},"pid":{"type":"string"},"pids_limit":{"format":"int64","type":"integer"},"platform":{"type":"string"},"ports":{"items":{"$ref":"#/components/schemas/DockerTypesServicePortConfig"},"type":["array","null"]},"post_start":{"items":{"$ref":"#/components/schemas/DockerTypesServiceHook"},"type":["array","null"]},"pre_stop":{"items":{"$ref":"#/components/schemas/DockerTypesServiceHook"},"type":["array","null"]},"privileged":{"type":"boolean"},"profiles":{"items":{"type":"string"},"type":["array","null"]},"provider":{"$ref":"#/components/schemas/ServiceProviderConfig"},"pull_policy":{"type":"string"},"read_only":{"type":"boolean"},"restart":{"type":"string"},"runtime":{"type":"string"},"scale":{"format":"int64","type":"integer"},"secrets":{"items":{"$ref":"#/components/schemas/DockerTypesServiceSecretConfig"},"type":["array","null"]},"security_opt":{"items":{"type":"string"},"type":["array","null"]},"shm_size":{"format":"int64","type":"integer"},"stdin_open":{"type":"boolean"},"stop_grace_period":{"format":"int64","type":"integer"},"stop_signal":{"type":"string"},"storage_opt":{"additionalProperties":{"type":"string"},"type":"object"},"sysctls":{"additionalProperties":{"type":"string"},"type":"object"},"tmpfs":{"items":{"type":"string"},"type":["array","null"]},"tty":{"type":"boolean"},"ulimits":{"additionalProperties":{"$ref":"#/components/schemas/UlimitsConfig"},"type":"object"},"use_api_socket":{"type":"boolean"},"user":{"type":"string"},"userns_mode":{"type":"string"},"uts":{"type":"string"},"volume_driver":{"type":"string"},"volumes":{"items":{"$ref":"#/components/schemas/DockerTypesServiceVolumeConfig"},"type":["array","null"]},"volumes_from":{"items":{"type":"string"},"type":["array","null"]},"working_dir":{"type":"string"}},"required":["command","entrypoint"],"type":"object"},"ServiceModelConfig":{"additionalProperties":false,"properties":{"endpoint_var":{"type":"string"},"model_var":{"type":"string"}},"type":"object"},"ServiceNetworkConfig":{"additionalProperties":false,"properties":{"aliases":{"items":{"type":"string"},"type":["array","null"]},"driver_opts":{"additionalProperties":{"type":"string"},"type":"object"},"gw_priority":{"format":"int64","type":"integer"},"interface_name":{"type":"string"},"ipv4_address":{"type":"string"},"ipv6_address":{"type":"string"},"link_local_ips":{"items":{"type":"string"},"type":["array","null"]},"mac_address":{"type":"string"},"priority":{"format":"int64","type":"integer"}},"type":"object"},"ServiceProviderConfig":{"additionalProperties":false,"properties":{"options":{"additionalProperties":{"items":{"type":"string"},"type":["array","null"]},"type":"object"},"type":{"type":"string"}},"type":"object"},"ServiceVolumeBind":{"additionalProperties":false,"properties":{"create_host_path":{"type":"boolean"},"propagation":{"type":"string"},"recursive":{"type":"string"},"selinux":{"type":"string"}},"type":"object"},"ServiceVolumeImage":{"additionalProperties":false,"properties":{"subpath":{"type":"string"}},"type":"object"},"ServiceVolumeTmpfs":{"additionalProperties":false,"properties":{"mode":{"format":"int32","minimum":0,"type":"integer"},"size":{"format":"int64","type":"integer"}},"type":"object"},"ServiceVolumeVolume":{"additionalProperties":false,"properties":{"labels":{"additionalProperties":{"type":"string"},"type":"object"},"nocopy":{"type":"boolean"},"subpath":{"type":"string"}},"type":"object"},"SetAutoUpdateInputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SetAutoUpdateInputBody.json"],"format":"uri","readOnly":true,"type":"string"},"enabled":{"description":"Whether auto-update is enabled for this container","type":"boolean"}},"required":["enabled"],"type":"object"},"SettingsPublicSetting":{"additionalProperties":false,"properties":{"key":{"type":"string"},"type":{"type":"string"},"value":{"type":"string"}},"required":["key","type","value"],"type":"object"},"SettingsSettingDto":{"additionalProperties":false,"properties":{"isPublic":{"type":"boolean"},"key":{"type":"string"},"type":{"type":"string"},"value":{"type":"string"}},"required":["isPublic","key","type","value"],"type":"object"},"SettingsUpdate":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SettingsUpdate.json"],"format":"uri","readOnly":true,"type":"string"},"accentColor":{"type":"string"},"applicationTheme":{"type":"string"},"authLocalEnabled":{"type":"string"},"authOidcConfig":{"type":"string"},"authPasswordPolicy":{"type":"string"},"authSessionTimeout":{"type":"string"},"autoHealEnabled":{"type":"string"},"autoHealExcludedContainers":{"type":"string"},"autoHealInterval":{"type":"string"},"autoHealMaxRestarts":{"type":"string"},"autoHealRestartWindow":{"type":"string"},"autoInjectEnv":{"type":"string"},"autoUpdate":{"type":"string"},"autoUpdateExcludedContainers":{"type":"string"},"autoUpdateInterval":{"type":"string"},"baseServerUrl":{"type":"string"},"buildProvider":{"type":"string"},"buildTimeout":{"type":"string"},"buildsDirectory":{"type":"string"},"defaultDeployPullPolicy":{"type":"string"},"defaultShell":{"type":"string"},"depotProjectId":{"type":"string"},"depotToken":{"type":"string"},"diskUsagePath":{"type":"string"},"dockerApiTimeout":{"type":"string"},"dockerHost":{"type":"string"},"dockerImagePullTimeout":{"type":"string"},"dockerPruneMode":{"type":"string"},"enableGravatar":{"type":"string"},"environmentHealthInterval":{"type":"string"},"followProjectSymlinks":{"type":"string"},"gitOperationTimeout":{"type":"string"},"gitSyncMaxBinarySizeMb":{"type":"string"},"gitSyncMaxFiles":{"type":"string"},"gitSyncMaxTotalSizeMb":{"type":"string"},"httpClientTimeout":{"type":"string"},"keyboardShortcutsEnabled":{"type":"string"},"maxImageUploadSize":{"type":"string"},"mobileNavigationMode":{"type":"string"},"mobileNavigationShowLabels":{"type":"string"},"oidcAdminClaim":{"type":"string"},"oidcAdminValue":{"type":"string"},"oidcAutoRedirectToProvider":{"type":"string"},"oidcClientId":{"type":"string"},"oidcClientSecret":{"type":"string"},"oidcEnabled":{"type":"string"},"oidcIssuerUrl":{"type":"string"},"oidcMergeAccounts":{"type":"string"},"oidcProviderLogoUrl":{"type":"string"},"oidcProviderName":{"type":"string"},"oidcScopes":{"type":"string"},"oidcSkipTlsVerify":{"type":"string"},"oledMode":{"type":"string"},"pollingEnabled":{"type":"string"},"pollingInterval":{"type":"string"},"projectsDirectory":{"type":"string"},"proxyRequestTimeout":{"type":"string"},"registryTimeout":{"type":"string"},"scheduledPruneBuildCache":{"type":"string"},"scheduledPruneContainers":{"type":"string"},"scheduledPruneEnabled":{"type":"string"},"scheduledPruneImages":{"type":"string"},"scheduledPruneInterval":{"type":"string"},"scheduledPruneNetworks":{"type":"string"},"scheduledPruneVolumes":{"type":"string"},"sidebarHoverExpansion":{"type":"string"},"swarmStackSourcesDirectory":{"type":"string"},"trivyConcurrentScanContainers":{"type":"string"},"trivyCpuLimit":{"type":"string"},"trivyImage":{"type":"string"},"trivyMemoryLimitMb":{"type":"string"},"trivyNetwork":{"type":"string"},"trivyPreserveCacheOnVolumePrune":{"type":"string"},"trivyPrivileged":{"type":"string"},"trivyResourceLimitsEnabled":{"type":"string"},"trivyScanTimeout":{"type":"string"},"trivySecurityOpts":{"type":"string"},"vulnerabilityScanEnabled":{"type":"string"},"vulnerabilityScanInterval":{"type":"string"}},"type":"object"},"SwarmConfigCreateRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmConfigCreateRequest.json"],"format":"uri","readOnly":true,"type":"string"},"spec":{"description":"Config specification"}},"required":["spec"],"type":"object"},"SwarmConfigSummary":{"additionalProperties":false,"properties":{"createdAt":{"format":"date-time","type":"string"},"id":{"type":"string"},"spec":{"$ref":"#/components/schemas/DockerSwarmConfigSpec"},"updatedAt":{"format":"date-time","type":"string"},"version":{"$ref":"#/components/schemas/DockerSwarmVersion"}},"required":["id","version","createdAt","updatedAt","spec"],"type":"object"},"SwarmConfigUpdateRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmConfigUpdateRequest.json"],"format":"uri","readOnly":true,"type":"string"},"spec":{"description":"Updated config specification"},"version":{"format":"int64","minimum":0,"type":"integer"}},"required":["spec"],"type":"object"},"SwarmNodeAgentDeployment":{"additionalProperties":false,"properties":{"agent":{"$ref":"#/components/schemas/SwarmNodeAgentStatus"},"dockerCompose":{"description":"Docker compose YAML snippet","type":"string"},"dockerRun":{"description":"Docker run command snippet","type":"string"},"environmentId":{"type":"string"}},"required":["environmentId","agent","dockerRun","dockerCompose"],"type":"object"},"SwarmNodeAgentStatus":{"additionalProperties":false,"properties":{"connected":{"type":"boolean"},"environmentId":{"type":"string"},"lastHeartbeat":{"format":"date-time","type":"string"},"lastPollAt":{"format":"date-time","type":"string"},"reportedHostname":{"type":"string"},"reportedNodeId":{"type":"string"},"state":{"type":"string"}},"required":["state"],"type":"object"},"SwarmNodeIdentity":{"additionalProperties":false,"properties":{"engineVersion":{"type":"string"},"hostname":{"type":"string"},"role":{"type":"string"},"swarmActive":{"type":"boolean"},"swarmNodeId":{"type":"string"}},"required":["swarmNodeId","hostname","role","engineVersion","swarmActive"],"type":"object"},"SwarmNodeSummary":{"additionalProperties":false,"properties":{"address":{"type":"string"},"agent":{"$ref":"#/components/schemas/SwarmNodeAgentStatus"},"availability":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"engineVersion":{"type":"string"},"hostname":{"type":"string"},"id":{"type":"string"},"labels":{"additionalProperties":{"type":"string"},"type":"object"},"managerStatus":{"type":"string"},"platform":{"type":"string"},"reachability":{"type":"string"},"role":{"type":"string"},"status":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","hostname","role","availability","status","createdAt","updatedAt","agent"],"type":"object"},"SwarmNodeUpdateRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmNodeUpdateRequest.json"],"format":"uri","readOnly":true,"type":"string"},"availability":{"type":"string"},"labels":{"additionalProperties":{"type":"string"},"type":"object"},"name":{"type":"string"},"role":{"type":"string"},"version":{"format":"int64","minimum":0,"type":"integer"}},"type":"object"},"SwarmPaginatedResponseNodeSummary":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmPaginatedResponseNodeSummary.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"items":{"$ref":"#/components/schemas/SwarmNodeSummary"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"SwarmPaginatedResponseServiceSummary":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmPaginatedResponseServiceSummary.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"items":{"$ref":"#/components/schemas/SwarmServiceSummary"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"SwarmPaginatedResponseStackSummary":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmPaginatedResponseStackSummary.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"items":{"$ref":"#/components/schemas/SwarmStackSummary"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"SwarmPaginatedResponseTaskSummary":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmPaginatedResponseTaskSummary.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"items":{"$ref":"#/components/schemas/SwarmTaskSummary"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"SwarmRuntimeStatus":{"additionalProperties":false,"properties":{"enabled":{"type":"boolean"}},"required":["enabled"],"type":"object"},"SwarmSecretCreateRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmSecretCreateRequest.json"],"format":"uri","readOnly":true,"type":"string"},"spec":{"description":"Secret specification"}},"required":["spec"],"type":"object"},"SwarmSecretSummary":{"additionalProperties":false,"properties":{"createdAt":{"format":"date-time","type":"string"},"id":{"type":"string"},"spec":{"$ref":"#/components/schemas/DockerSwarmSecretSpec"},"updatedAt":{"format":"date-time","type":"string"},"version":{"$ref":"#/components/schemas/DockerSwarmVersion"}},"required":["id","version","createdAt","updatedAt","spec"],"type":"object"},"SwarmSecretUpdateRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmSecretUpdateRequest.json"],"format":"uri","readOnly":true,"type":"string"},"spec":{"description":"Updated secret specification"},"version":{"format":"int64","minimum":0,"type":"integer"}},"required":["spec"],"type":"object"},"SwarmServiceCreateOptions":{"additionalProperties":false,"properties":{"encodedRegistryAuth":{"type":"string"},"queryRegistry":{"type":"boolean"}},"type":"object"},"SwarmServiceCreateRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmServiceCreateRequest.json"],"format":"uri","readOnly":true,"type":"string"},"options":{"$ref":"#/components/schemas/SwarmServiceCreateOptions","description":"Additional create options"},"spec":{"description":"Service specification"}},"required":["spec"],"type":"object"},"SwarmServiceCreateResponse":{"additionalProperties":false,"properties":{"id":{"type":"string"},"warnings":{"items":{"type":"string"},"type":["array","null"]}},"required":["id"],"type":"object"},"SwarmServiceInspect":{"additionalProperties":false,"properties":{"createdAt":{"format":"date-time","type":"string"},"endpoint":{"$ref":"#/components/schemas/DockerSwarmEndpoint"},"id":{"type":"string"},"mounts":{"items":{"$ref":"#/components/schemas/SwarmServiceMount"},"type":["array","null"]},"networkDetails":{"additionalProperties":{"$ref":"#/components/schemas/SwarmServiceNetworkDetail"},"type":"object"},"nodes":{"items":{"type":"string"},"type":["array","null"]},"spec":{"$ref":"#/components/schemas/DockerSwarmServiceSpec"},"updateStatus":{"$ref":"#/components/schemas/DockerSwarmUpdateStatus"},"updatedAt":{"format":"date-time","type":"string"},"version":{"$ref":"#/components/schemas/DockerSwarmVersion"}},"required":["id","version","createdAt","updatedAt","spec","endpoint"],"type":"object"},"SwarmServiceMount":{"additionalProperties":false,"properties":{"devicePath":{"type":"string"},"readOnly":{"type":"boolean"},"source":{"type":"string"},"target":{"type":"string"},"type":{"type":"string"},"volumeDriver":{"type":"string"},"volumeOptions":{"additionalProperties":{"type":"string"},"type":"object"}},"required":["type","target"],"type":"object"},"SwarmServiceNetworkConfigDetail":{"additionalProperties":false,"properties":{"driver":{"type":"string"},"enableIPv4":{"type":"boolean"},"enableIPv6":{"type":"boolean"},"ipv4Configs":{"items":{"$ref":"#/components/schemas/SwarmServiceNetworkIPAMConfig"},"type":["array","null"]},"ipv6Configs":{"items":{"$ref":"#/components/schemas/SwarmServiceNetworkIPAMConfig"},"type":["array","null"]},"name":{"type":"string"},"options":{"additionalProperties":{"type":"string"},"type":"object"},"scope":{"type":"string"}},"required":["name","driver","scope","enableIPv4","enableIPv6"],"type":"object"},"SwarmServiceNetworkDetail":{"additionalProperties":false,"properties":{"attachable":{"type":"boolean"},"configFrom":{"type":"string"},"configNetwork":{"$ref":"#/components/schemas/SwarmServiceNetworkConfigDetail"},"configOnly":{"type":"boolean"},"driver":{"type":"string"},"enableIPv4":{"type":"boolean"},"enableIPv6":{"type":"boolean"},"id":{"type":"string"},"ingress":{"type":"boolean"},"internal":{"type":"boolean"},"ipamConfigs":{"items":{"$ref":"#/components/schemas/SwarmServiceNetworkIPAMConfig"},"type":["array","null"]},"name":{"type":"string"},"options":{"additionalProperties":{"type":"string"},"type":"object"},"scope":{"type":"string"}},"required":["id","name","driver","scope","internal","attachable","ingress","enableIPv4","enableIPv6","configOnly"],"type":"object"},"SwarmServiceNetworkIPAMConfig":{"additionalProperties":false,"properties":{"gateway":{"type":"string"},"ipRange":{"type":"string"},"subnet":{"type":"string"}},"type":"object"},"SwarmServicePort":{"additionalProperties":false,"properties":{"protocol":{"type":"string"},"publishMode":{"type":"string"},"publishedPort":{"format":"int32","minimum":0,"type":"integer"},"targetPort":{"format":"int32","minimum":0,"type":"integer"}},"required":["protocol","targetPort"],"type":"object"},"SwarmServiceScaleRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmServiceScaleRequest.json"],"format":"uri","readOnly":true,"type":"string"},"replicas":{"format":"int64","minimum":0,"type":"integer"}},"required":["replicas"],"type":"object"},"SwarmServiceSummary":{"additionalProperties":false,"properties":{"createdAt":{"format":"date-time","type":"string"},"id":{"type":"string"},"image":{"type":"string"},"labels":{"additionalProperties":{"type":"string"},"type":"object"},"mode":{"type":"string"},"mounts":{"items":{"$ref":"#/components/schemas/SwarmServiceMount"},"type":["array","null"]},"name":{"type":"string"},"networks":{"items":{"type":"string"},"type":["array","null"]},"nodes":{"items":{"type":"string"},"type":["array","null"]},"ports":{"items":{"$ref":"#/components/schemas/SwarmServicePort"},"type":["array","null"]},"replicas":{"format":"int64","minimum":0,"type":"integer"},"runningReplicas":{"format":"int64","minimum":0,"type":"integer"},"stackName":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","name","image","mode","replicas","runningReplicas","ports","createdAt","updatedAt","labels","nodes","networks","mounts"],"type":"object"},"SwarmServiceUpdateOptions":{"additionalProperties":false,"properties":{"encodedRegistryAuth":{"type":"string"},"queryRegistry":{"type":"boolean"},"registryAuthFrom":{"type":"string"},"rollback":{"type":"string"}},"type":"object"},"SwarmServiceUpdateRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmServiceUpdateRequest.json"],"format":"uri","readOnly":true,"type":"string"},"options":{"$ref":"#/components/schemas/SwarmServiceUpdateOptions"},"spec":{"$ref":"#/components/schemas/DockerSwarmServiceSpec"},"version":{"format":"int64","minimum":0,"type":"integer"}},"required":["version","spec"],"type":"object"},"SwarmServiceUpdateResponse":{"additionalProperties":false,"properties":{"warnings":{"items":{"type":"string"},"type":["array","null"]}},"type":"object"},"SwarmStackDeployRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmStackDeployRequest.json"],"format":"uri","readOnly":true,"type":"string"},"composeContent":{"type":"string"},"envContent":{"type":"string"},"name":{"type":"string"},"prune":{"type":"boolean"},"resolveImage":{"type":"string"},"withRegistryAuth":{"type":"boolean"}},"required":["name","composeContent"],"type":"object"},"SwarmStackDeployResponse":{"additionalProperties":false,"properties":{"name":{"type":"string"}},"required":["name"],"type":"object"},"SwarmStackInspect":{"additionalProperties":false,"properties":{"createdAt":{"format":"date-time","type":"string"},"name":{"type":"string"},"namespace":{"type":"string"},"services":{"format":"int64","type":"integer"},"updatedAt":{"format":"date-time","type":"string"}},"required":["name","namespace","services","createdAt","updatedAt"],"type":"object"},"SwarmStackRenderConfigRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmStackRenderConfigRequest.json"],"format":"uri","readOnly":true,"type":"string"},"composeContent":{"type":"string"},"envContent":{"type":"string"},"name":{"type":"string"}},"required":["name","composeContent"],"type":"object"},"SwarmStackRenderConfigResponse":{"additionalProperties":false,"properties":{"configs":{"items":{"type":"string"},"type":["array","null"]},"name":{"type":"string"},"networks":{"items":{"type":"string"},"type":["array","null"]},"renderedCompose":{"type":"string"},"secrets":{"items":{"type":"string"},"type":["array","null"]},"services":{"items":{"type":"string"},"type":["array","null"]},"volumes":{"items":{"type":"string"},"type":["array","null"]},"warnings":{"items":{"type":"string"},"type":["array","null"]}},"required":["name","renderedCompose","services","networks","volumes","configs","secrets"],"type":"object"},"SwarmStackSource":{"additionalProperties":false,"properties":{"composeContent":{"type":"string"},"envContent":{"type":"string"},"name":{"type":"string"}},"required":["name","composeContent"],"type":"object"},"SwarmStackSummary":{"additionalProperties":false,"properties":{"createdAt":{"format":"date-time","type":"string"},"id":{"type":"string"},"name":{"type":"string"},"namespace":{"type":"string"},"services":{"format":"int64","type":"integer"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","name","namespace","services","createdAt","updatedAt"],"type":"object"},"SwarmSwarmInfo":{"additionalProperties":false,"properties":{"createdAt":{"format":"date-time","type":"string"},"id":{"type":"string"},"rootRotationInProgress":{"type":"boolean"},"spec":{"$ref":"#/components/schemas/DockerSwarmSpec"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","createdAt","updatedAt","spec","rootRotationInProgress"],"type":"object"},"SwarmSwarmInitRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmSwarmInitRequest.json"],"format":"uri","readOnly":true,"type":"string"},"advertiseAddr":{"type":"string"},"autoLockManagers":{"type":"boolean"},"availability":{"type":"string"},"dataPathAddr":{"type":"string"},"dataPathPort":{"format":"int32","minimum":0,"type":"integer"},"defaultAddrPool":{"items":{"type":"string"},"type":["array","null"]},"forceNewCluster":{"type":"boolean"},"listenAddr":{"type":"string"},"spec":{"$ref":"#/components/schemas/DockerSwarmSpec"},"subnetSize":{"format":"int32","minimum":0,"type":"integer"}},"required":["spec"],"type":"object"},"SwarmSwarmInitResponse":{"additionalProperties":false,"properties":{"nodeId":{"type":"string"}},"required":["nodeId"],"type":"object"},"SwarmSwarmJoinRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmSwarmJoinRequest.json"],"format":"uri","readOnly":true,"type":"string"},"advertiseAddr":{"type":"string"},"availability":{"type":"string"},"dataPathAddr":{"type":"string"},"joinToken":{"type":"string"},"listenAddr":{"type":"string"},"remoteAddrs":{"items":{"type":"string"},"type":["array","null"]}},"required":["remoteAddrs","joinToken"],"type":"object"},"SwarmSwarmJoinTokensResponse":{"additionalProperties":false,"properties":{"manager":{"type":"string"},"worker":{"type":"string"}},"required":["worker","manager"],"type":"object"},"SwarmSwarmLeaveRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmSwarmLeaveRequest.json"],"format":"uri","readOnly":true,"type":"string"},"force":{"type":"boolean"}},"type":"object"},"SwarmSwarmRotateJoinTokensRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmSwarmRotateJoinTokensRequest.json"],"format":"uri","readOnly":true,"type":"string"},"rotateManagerToken":{"type":"boolean"},"rotateWorkerToken":{"type":"boolean"}},"type":"object"},"SwarmSwarmUnlockKeyResponse":{"additionalProperties":false,"properties":{"unlockKey":{"type":"string"}},"required":["unlockKey"],"type":"object"},"SwarmSwarmUnlockRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmSwarmUnlockRequest.json"],"format":"uri","readOnly":true,"type":"string"},"key":{"type":"string"}},"required":["key"],"type":"object"},"SwarmSwarmUpdateRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmSwarmUpdateRequest.json"],"format":"uri","readOnly":true,"type":"string"},"rotateManagerToken":{"type":"boolean"},"rotateManagerUnlockKey":{"type":"boolean"},"rotateWorkerToken":{"type":"boolean"},"spec":{"$ref":"#/components/schemas/DockerSwarmSpec"},"version":{"format":"int64","minimum":0,"type":"integer"}},"required":["spec"],"type":"object"},"SwarmTaskSummary":{"additionalProperties":false,"properties":{"containerId":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"currentState":{"type":"string"},"desiredState":{"type":"string"},"error":{"type":"string"},"id":{"type":"string"},"image":{"type":"string"},"name":{"type":"string"},"nodeId":{"type":"string"},"nodeName":{"type":"string"},"serviceId":{"type":"string"},"serviceName":{"type":"string"},"slot":{"format":"int64","type":"integer"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","name","serviceId","serviceName","nodeId","nodeName","desiredState","currentState","createdAt","updatedAt"],"type":"object"},"SystemConvertDockerRunRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SystemConvertDockerRunRequest.json"],"format":"uri","readOnly":true,"type":"string"},"dockerRunCommand":{"type":"string"}},"required":["dockerRunCommand"],"type":"object"},"SystemConvertDockerRunResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SystemConvertDockerRunResponse.json"],"format":"uri","readOnly":true,"type":"string"},"dockerCompose":{"type":"string"},"envVars":{"type":"string"},"serviceName":{"type":"string"},"success":{"type":"boolean"}},"required":["success","dockerCompose","envVars","serviceName"],"type":"object"},"SystemHealthResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SystemHealthResponse.json"],"format":"uri","readOnly":true,"type":"string"},"status":{"type":"string"}},"required":["status"],"type":"object"},"SystemPruneAllRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SystemPruneAllRequest.json"],"format":"uri","readOnly":true,"type":"string"},"buildCache":{"type":"boolean"},"containers":{"type":"boolean"},"dangling":{"type":"boolean"},"images":{"type":"boolean"},"networks":{"type":"boolean"},"volumes":{"type":"boolean"}},"required":["containers","images","volumes","networks","buildCache","dangling"],"type":"object"},"SystemPruneAllResult":{"additionalProperties":false,"properties":{"buildCacheSpaceReclaimed":{"format":"int64","minimum":0,"type":"integer"},"containerSpaceReclaimed":{"format":"int64","minimum":0,"type":"integer"},"containersPruned":{"items":{"type":"string"},"type":["array","null"]},"errors":{"items":{"type":"string"},"type":["array","null"]},"imageSpaceReclaimed":{"format":"int64","minimum":0,"type":"integer"},"imagesDeleted":{"items":{"type":"string"},"type":["array","null"]},"networksDeleted":{"items":{"type":"string"},"type":["array","null"]},"spaceReclaimed":{"format":"int64","minimum":0,"type":"integer"},"success":{"type":"boolean"},"volumeSpaceReclaimed":{"format":"int64","minimum":0,"type":"integer"},"volumesDeleted":{"items":{"type":"string"},"type":["array","null"]}},"required":["spaceReclaimed","success"],"type":"object"},"TemplateCreateRegistryRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/TemplateCreateRegistryRequest.json"],"format":"uri","readOnly":true,"type":"string"},"description":{"type":"string"},"enabled":{"type":"boolean"},"name":{"type":"string"},"url":{"type":"string"}},"required":["name","url","description","enabled"],"type":"object"},"TemplateCreateRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/TemplateCreateRequest.json"],"format":"uri","readOnly":true,"type":"string"},"content":{"type":"string"},"description":{"type":"string"},"envContent":{"type":"string"},"name":{"type":"string"}},"required":["name","description","content","envContent"],"type":"object"},"TemplateDefaultTemplatesResponse":{"additionalProperties":false,"properties":{"composeTemplate":{"type":"string"},"envTemplate":{"type":"string"},"swarmStackEnvTemplate":{"type":"string"},"swarmStackTemplate":{"type":"string"}},"required":["composeTemplate","swarmStackTemplate","swarmStackEnvTemplate","envTemplate"],"type":"object"},"TemplatePaginatedResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/TemplatePaginatedResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"items":{"$ref":"#/components/schemas/TemplateTemplate"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"TemplateRemoteRegistry":{"additionalProperties":false,"properties":{"$schema":{"type":"string"},"author":{"type":"string"},"description":{"type":"string"},"name":{"type":"string"},"templates":{"items":{"$ref":"#/components/schemas/TemplateRemoteTemplate"},"type":["array","null"]},"url":{"type":"string"},"version":{"type":"string"}},"required":["version","author","templates","name","description","url"],"type":"object"},"TemplateRemoteTemplate":{"additionalProperties":false,"properties":{"author":{"type":"string"},"compose_url":{"type":"string"},"description":{"type":"string"},"documentation_url":{"type":"string"},"env_url":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"tags":{"items":{"type":"string"},"type":["array","null"]},"version":{"type":"string"}},"required":["version","author","compose_url","env_url","documentation_url","tags","id","name","description"],"type":"object"},"TemplateSaveDefaultTemplatesRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/TemplateSaveDefaultTemplatesRequest.json"],"format":"uri","readOnly":true,"type":"string"},"composeContent":{"type":"string"},"envContent":{"type":"string"}},"required":["composeContent","envContent"],"type":"object"},"TemplateTemplate":{"additionalProperties":false,"properties":{"content":{"type":"string"},"description":{"type":"string"},"envContent":{"type":"string"},"id":{"type":"string"},"isCustom":{"type":"boolean"},"isRemote":{"type":"boolean"},"metadata":{"$ref":"#/components/schemas/MetaTemplateMeta"},"name":{"type":"string"},"registry":{"$ref":"#/components/schemas/TemplateTemplateRegistry"},"registryId":{"type":"string"}},"required":["content","isCustom","isRemote","id","name","description"],"type":"object"},"TemplateTemplateContent":{"additionalProperties":false,"properties":{"content":{"type":"string"},"envContent":{"type":"string"},"envVariables":{"items":{"$ref":"#/components/schemas/EnvVariable"},"type":["array","null"]},"services":{"items":{"type":"string"},"type":["array","null"]},"template":{"$ref":"#/components/schemas/TemplateTemplate"}},"required":["template","content","envContent","services","envVariables"],"type":"object"},"TemplateTemplateRegistry":{"additionalProperties":false,"properties":{"description":{"type":"string"},"enabled":{"type":"boolean"},"id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"}},"required":["id","enabled","name","description","url"],"type":"object"},"TemplateUpdateRegistryRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/TemplateUpdateRegistryRequest.json"],"format":"uri","readOnly":true,"type":"string"},"description":{"type":"string"},"enabled":{"type":"boolean"},"name":{"type":"string"},"url":{"type":"string"}},"required":["name","url","description","enabled"],"type":"object"},"TemplateUpdateRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/TemplateUpdateRequest.json"],"format":"uri","readOnly":true,"type":"string"},"content":{"type":"string"},"description":{"type":"string"},"envContent":{"type":"string"},"name":{"type":"string"}},"required":["name","description","content","envContent"],"type":"object"},"Ulimit":{"additionalProperties":false,"properties":{"Hard":{"format":"int64","type":"integer"},"Name":{"type":"string"},"Soft":{"format":"int64","type":"integer"}},"required":["Name","Hard","Soft"],"type":"object"},"UlimitsConfig":{"additionalProperties":false,"properties":{"hard":{"format":"int64","type":"integer"},"single":{"format":"int64","type":"integer"},"soft":{"format":"int64","type":"integer"}},"type":"object"},"UpdateConfig":{"additionalProperties":false,"properties":{"delay":{"format":"int64","type":"integer"},"failure_action":{"type":"string"},"max_failure_ratio":{"format":"float","type":"number"},"monitor":{"format":"int64","type":"integer"},"order":{"type":"string"},"parallelism":{"format":"int64","minimum":0,"type":"integer"}},"type":"object"},"UpdateContainerRegistryRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/UpdateContainerRegistryRequest.json"],"format":"uri","readOnly":true,"type":"string"},"awsAccessKeyId":{"type":["string","null"]},"awsRegion":{"type":["string","null"]},"awsSecretAccessKey":{"type":["string","null"]},"description":{"type":["string","null"]},"enabled":{"type":["boolean","null"]},"insecure":{"type":["boolean","null"]},"registryType":{"type":["string","null"]},"token":{"type":["string","null"]},"url":{"type":["string","null"]},"username":{"type":["string","null"]}},"required":["url","username","token","description","insecure","enabled","registryType","awsAccessKeyId","awsSecretAccessKey","awsRegion"],"type":"object"},"UpdateGitRepositoryRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/UpdateGitRepositoryRequest.json"],"format":"uri","readOnly":true,"type":"string"},"authType":{"type":"string"},"description":{"type":"string"},"enabled":{"type":"boolean"},"name":{"type":"string"},"sshHostKeyVerification":{"type":"string"},"sshKey":{"type":"string"},"token":{"type":"string"},"url":{"type":"string"},"username":{"type":"string"}},"type":"object"},"UpdaterOptions":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/UpdaterOptions.json"],"format":"uri","readOnly":true,"type":"string"},"dryRun":{"type":"boolean"},"forceUpdate":{"type":"boolean"},"resourceIds":{"items":{"type":"string"},"type":["array","null"]},"type":{"type":"string"}},"type":"object"},"UpdaterResourceResult":{"additionalProperties":false,"properties":{"details":{"additionalProperties":{},"type":"object"},"error":{"type":"string"},"newImages":{"additionalProperties":{"type":"string"},"type":"object"},"oldImages":{"additionalProperties":{"type":"string"},"type":"object"},"resourceId":{"type":"string"},"resourceName":{"type":"string"},"resourceType":{"type":"string"},"status":{"type":"string"},"updateApplied":{"type":"boolean"},"updateAvailable":{"type":"boolean"}},"required":["resourceId","resourceType","status"],"type":"object"},"UpdaterResult":{"additionalProperties":false,"properties":{"checked":{"format":"int64","type":"integer"},"duration":{"type":"string"},"endTime":{"type":"string"},"failed":{"format":"int64","type":"integer"},"items":{"items":{"$ref":"#/components/schemas/UpdaterResourceResult"},"type":["array","null"]},"skipped":{"format":"int64","type":"integer"},"startTime":{"type":"string"},"success":{"type":"boolean"},"updated":{"format":"int64","type":"integer"}},"required":["checked","updated","skipped","failed","duration","items"],"type":"object"},"UpdaterStatus":{"additionalProperties":false,"properties":{"containerIds":{"items":{"type":"string"},"type":["array","null"]},"projectIds":{"items":{"type":"string"},"type":["array","null"]},"updatingContainers":{"format":"int64","type":"integer"},"updatingProjects":{"format":"int64","type":"integer"}},"required":["updatingContainers","updatingProjects","containerIds","projectIds"],"type":"object"},"UpgradeCheckResultData":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/UpgradeCheckResultData.json"],"format":"uri","readOnly":true,"type":"string"},"canUpgrade":{"type":"boolean"},"error":{"type":"boolean"},"message":{"type":"string"}},"required":["canUpgrade","error","message"],"type":"object"},"UserCreateUser":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/UserCreateUser.json"],"format":"uri","readOnly":true,"type":"string"},"displayName":{"description":"Display name of the user","examples":["John Doe"],"maxLength":255,"type":"string"},"email":{"description":"Email address of the user","examples":["john@example.com"],"type":"string"},"locale":{"description":"Locale preference of the user","examples":["en-US"],"type":"string"},"password":{"description":"Password of the user","minLength":8,"type":"string"},"roles":{"description":"Roles assigned to the user","examples":[["user"]],"items":{"type":"string"},"type":["array","null"]},"username":{"description":"Username of the user","examples":["johndoe"],"maxLength":255,"minLength":1,"type":"string"}},"required":["username","password"],"type":"object"},"UserPaginatedResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/UserPaginatedResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"items":{"$ref":"#/components/schemas/UserUser"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"UserUpdateUser":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/UserUpdateUser.json"],"format":"uri","readOnly":true,"type":"string"},"displayName":{"description":"Display name of the user","maxLength":255,"type":"string"},"email":{"description":"Email address of the user","type":"string"},"locale":{"description":"Locale preference of the user","type":"string"},"password":{"description":"New password for the user","minLength":8,"type":"string"},"roles":{"description":"Roles assigned to the user","items":{"type":"string"},"type":["array","null"]},"username":{"description":"Username of the user","maxLength":255,"minLength":1,"type":"string"}},"type":"object"},"UserUser":{"additionalProperties":false,"properties":{"canDelete":{"description":"Whether the user can currently be deleted","type":"boolean"},"createdAt":{"description":"Date and time when the user was created","type":"string"},"displayName":{"description":"Display name of the user","examples":["John Doe"],"type":"string"},"email":{"description":"Email address of the user","examples":["john@example.com"],"type":"string"},"id":{"description":"Unique identifier of the user","examples":["550e8400-e29b-41d4-a716-446655440000"],"type":"string"},"locale":{"description":"Locale preference of the user","examples":["en-US"],"type":"string"},"oidcSubjectId":{"description":"OIDC subject identifier for SSO users","type":"string"},"requiresPasswordChange":{"description":"Whether the user must change their password","type":"boolean"},"roles":{"description":"Roles assigned to the user","examples":[["user","admin"]],"items":{"type":"string"},"type":["array","null"]},"updatedAt":{"description":"Date and time when the user was last updated","type":"string"},"username":{"description":"Username of the user","examples":["johndoe"],"type":"string"}},"required":["id","username","roles","canDelete","requiresPasswordChange"],"type":"object"},"Value":{"additionalProperties":false,"type":"object"},"VersionCheck":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/VersionCheck.json"],"format":"uri","readOnly":true,"type":"string"},"currentVersion":{"type":"string"},"newestVersion":{"type":"string"},"releaseUrl":{"type":"string"},"updateAvailable":{"type":"boolean"}},"required":["currentVersion","updateAvailable"],"type":"object"},"VersionInfo":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/VersionInfo.json"],"format":"uri","readOnly":true,"type":"string"},"buildTime":{"type":"string"},"currentDigest":{"type":"string"},"currentTag":{"type":"string"},"currentVersion":{"type":"string"},"displayVersion":{"type":"string"},"enabledFeatures":{"items":{"type":"string"},"type":["array","null"]},"goVersion":{"type":"string"},"isSemverVersion":{"type":"boolean"},"newestDigest":{"type":"string"},"newestVersion":{"type":"string"},"releaseUrl":{"type":"string"},"revision":{"type":"string"},"shortRevision":{"type":"string"},"updateAvailable":{"type":"boolean"}},"required":["currentVersion","revision","shortRevision","goVersion","displayVersion","isSemverVersion","updateAvailable"],"type":"object"},"VolumeBackup":{"additionalProperties":false,"properties":{"createdAt":{"format":"date-time","type":"string"},"id":{"type":"string"},"size":{"format":"int64","type":"integer"},"updatedAt":{"format":"date-time","type":"string"},"volumeName":{"type":"string"}},"required":["volumeName","size","createdAt","id"],"type":"object"},"VolumeBackupPaginatedResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/VolumeBackupPaginatedResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"items":{"$ref":"#/components/schemas/VolumeBackup"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"},"warnings":{"items":{"type":"string"},"type":["array","null"]}},"required":["success","data","pagination"],"type":"object"},"VolumeCreate":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/VolumeCreate.json"],"format":"uri","readOnly":true,"type":"string"},"driver":{"description":"Volume driver (e.g., local, nfs)","type":"string"},"driverOpts":{"additionalProperties":{"type":"string"},"description":"Driver-specific options","type":"object"},"labels":{"additionalProperties":{"type":"string"},"description":"User-defined labels","type":"object"},"name":{"description":"Name of the volume","minLength":1,"type":"string"}},"required":["name"],"type":"object"},"VolumeFileEntry":{"additionalProperties":false,"properties":{"isDirectory":{"description":"Whether this entry is a directory","type":"boolean"},"isSymlink":{"description":"Whether this entry is a symbolic link","type":"boolean"},"linkTarget":{"description":"Target of the symbolic link","type":"string"},"modTime":{"description":"Last modification time","format":"date-time","type":"string"},"mode":{"description":"File mode/permissions","type":"string"},"name":{"description":"Name of the file or directory","type":"string"},"path":{"description":"Full path to the file","type":"string"},"size":{"description":"Size of the file in bytes","format":"int64","type":"integer"}},"required":["name","path","isDirectory","size","modTime","mode","isSymlink"],"type":"object"},"VolumePaginatedResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/VolumePaginatedResponse.json"],"format":"uri","readOnly":true,"type":"string"},"counts":{"$ref":"#/components/schemas/VolumeUsageCountsData"},"data":{"items":{"$ref":"#/components/schemas/VolumeVolume"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","counts","pagination"],"type":"object"},"VolumePruneReportData":{"additionalProperties":false,"properties":{"spaceReclaimed":{"format":"int64","minimum":0,"type":"integer"},"volumesDeleted":{"items":{"type":"string"},"type":["array","null"]}},"required":["spaceReclaimed"],"type":"object"},"VolumeSizeInfo":{"additionalProperties":false,"properties":{"name":{"type":"string"},"refCount":{"format":"int64","type":"integer"},"size":{"format":"int64","type":"integer"}},"required":["name","size","refCount"],"type":"object"},"VolumeUsageCountsData":{"additionalProperties":false,"properties":{"inuse":{"format":"int64","type":"integer"},"total":{"format":"int64","type":"integer"},"unused":{"format":"int64","type":"integer"}},"required":["inuse","unused","total"],"type":"object"},"VolumeUsageResponse":{"additionalProperties":false,"properties":{"containers":{"items":{"type":"string"},"type":["array","null"]},"inUse":{"type":"boolean"}},"required":["inUse","containers"],"type":"object"},"VolumeVolume":{"additionalProperties":false,"properties":{"containers":{"items":{"type":"string"},"type":["array","null"]},"createdAt":{"type":"string"},"driver":{"type":"string"},"id":{"type":"string"},"inUse":{"type":"boolean"},"labels":{"additionalProperties":{"type":"string"},"type":"object"},"mountpoint":{"type":"string"},"name":{"type":"string"},"options":{"additionalProperties":{"type":"string"},"type":"object"},"scope":{"type":"string"},"size":{"format":"int64","type":"integer"},"usageData":{"$ref":"#/components/schemas/DockerVolumeUsageData"}},"required":["id","name","driver","mountpoint","scope","options","labels","createdAt","inUse","size","containers"],"type":"object"},"VulnerabilityCVSSInfo":{"additionalProperties":false,"properties":{"v2Score":{"format":"double","type":"number"},"v2Vector":{"type":"string"},"v3Score":{"format":"double","type":"number"},"v3Vector":{"type":"string"}},"type":"object"},"VulnerabilityEnvironmentVulnerabilitySummary":{"additionalProperties":false,"properties":{"scannedImages":{"format":"int64","type":"integer"},"summary":{"$ref":"#/components/schemas/VulnerabilitySeveritySummary"},"totalImages":{"format":"int64","type":"integer"}},"required":["totalImages","scannedImages"],"type":"object"},"VulnerabilityIgnorePayload":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/VulnerabilityIgnorePayload.json"],"format":"uri","readOnly":true,"type":"string"},"createdBy":{"examples":["user-123"],"type":"string"},"imageId":{"examples":["sha256:abc123"],"type":"string"},"installedVersion":{"examples":["1.1.1l"],"type":"string"},"pkgName":{"examples":["openssl"],"type":"string"},"reason":{"examples":["False positive - not exploitable"],"type":"string"},"vulnerabilityId":{"examples":["CVE-2023-1234"],"type":"string"}},"required":["imageId","vulnerabilityId","pkgName"],"type":"object"},"VulnerabilityIgnoredVulnerability":{"additionalProperties":false,"properties":{"createdAt":{"format":"date-time","type":"string"},"createdBy":{"type":"string"},"environmentId":{"type":"string"},"id":{"type":"string"},"imageId":{"type":"string"},"installedVersion":{"type":"string"},"pkgName":{"type":"string"},"reason":{"type":"string"},"vulnerabilityId":{"type":"string"}},"required":["id","environmentId","imageId","vulnerabilityId","pkgName","installedVersion","createdBy","createdAt"],"type":"object"},"VulnerabilityScanResult":{"additionalProperties":false,"properties":{"duration":{"format":"int64","type":"integer"},"error":{"type":"string"},"imageId":{"type":"string"},"imageName":{"type":"string"},"scanPhase":{"type":"string"},"scanTime":{"format":"date-time","type":"string"},"scannerVersion":{"type":"string"},"status":{"type":"string"},"summary":{"$ref":"#/components/schemas/VulnerabilitySeveritySummary"},"vulnerabilities":{"items":{"$ref":"#/components/schemas/VulnerabilityVulnerability"},"type":["array","null"]}},"required":["imageId","imageName","scanTime","status"],"type":"object"},"VulnerabilityScanSummariesRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/VulnerabilityScanSummariesRequest.json"],"format":"uri","readOnly":true,"type":"string"},"imageIds":{"items":{"type":"string"},"type":["array","null"]}},"required":["imageIds"],"type":"object"},"VulnerabilityScanSummariesResponse":{"additionalProperties":false,"properties":{"summaries":{"additionalProperties":{"$ref":"#/components/schemas/VulnerabilityScanSummary"},"type":"object"}},"required":["summaries"],"type":"object"},"VulnerabilityScanSummary":{"additionalProperties":false,"properties":{"error":{"type":"string"},"imageId":{"type":"string"},"scanPhase":{"type":"string"},"scanTime":{"format":"date-time","type":"string"},"status":{"type":"string"},"summary":{"$ref":"#/components/schemas/VulnerabilitySeveritySummary"}},"required":["imageId","scanTime","status"],"type":"object"},"VulnerabilitySeveritySummary":{"additionalProperties":false,"properties":{"critical":{"format":"int64","type":"integer"},"high":{"format":"int64","type":"integer"},"low":{"format":"int64","type":"integer"},"medium":{"format":"int64","type":"integer"},"total":{"format":"int64","type":"integer"},"unknown":{"format":"int64","type":"integer"}},"required":["critical","high","medium","low","unknown","total"],"type":"object"},"VulnerabilityVulnerability":{"additionalProperties":false,"properties":{"cvss":{"$ref":"#/components/schemas/VulnerabilityCVSSInfo"},"description":{"type":"string"},"fixedVersion":{"type":"string"},"installedVersion":{"type":"string"},"lastModifiedDate":{"format":"date-time","type":"string"},"pkgName":{"type":"string"},"publishedDate":{"format":"date-time","type":"string"},"references":{"items":{"type":"string"},"type":["array","null"]},"severity":{"type":"string"},"title":{"type":"string"},"vulnerabilityId":{"type":"string"}},"required":["vulnerabilityId","pkgName","installedVersion","severity"],"type":"object"},"VulnerabilityVulnerabilityWithImage":{"additionalProperties":false,"properties":{"cvss":{"$ref":"#/components/schemas/VulnerabilityCVSSInfo"},"description":{"type":"string"},"fixedVersion":{"type":"string"},"imageId":{"type":"string"},"imageName":{"type":"string"},"installedVersion":{"type":"string"},"lastModifiedDate":{"format":"date-time","type":"string"},"pkgName":{"type":"string"},"publishedDate":{"format":"date-time","type":"string"},"references":{"items":{"type":"string"},"type":["array","null"]},"severity":{"type":"string"},"title":{"type":"string"},"vulnerabilityId":{"type":"string"}},"required":["imageId","imageName","vulnerabilityId","pkgName","installedVersion","severity"],"type":"object"},"WebhookCreateInput":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/WebhookCreateInput.json"],"format":"uri","readOnly":true,"type":"string"},"actionType":{"description":"Action to run for the selected target type. Supported values depend on targetType.","enum":["update","start","stop","restart","redeploy","up","down","run","sync"],"type":"string"},"name":{"description":"Human-readable name for this webhook","maxLength":255,"minLength":1,"type":"string"},"targetId":{"description":"Container ID, project ID, or GitOps sync ID to target. Leave empty for 'updater' webhooks.","type":"string"},"targetType":{"description":"Resource type this webhook targets: 'container', 'project', 'updater', or 'gitops'","enum":["container","project","updater","gitops"],"type":"string"}},"required":["name","targetType","actionType","targetId"],"type":"object"},"WebhookCreated":{"additionalProperties":false,"properties":{"actionType":{"description":"Action type","type":"string"},"createdAt":{"description":"Creation timestamp","format":"date-time","type":"string"},"id":{"description":"Webhook ID","type":"string"},"name":{"description":"Webhook name","type":"string"},"targetId":{"description":"Target resource ID","type":"string"},"targetType":{"description":"Target type","type":"string"},"token":{"description":"Full webhook token — store this securely, it will not be shown again","type":"string"}},"required":["id","name","token","targetType","actionType","targetId","createdAt"],"type":"object"},"WebhookSummary":{"additionalProperties":false,"properties":{"actionType":{"description":"Action type resolved for this webhook","type":"string"},"createdAt":{"description":"Creation timestamp","format":"date-time","type":"string"},"enabled":{"description":"Whether the webhook is active","type":"boolean"},"environmentId":{"description":"Environment ID","type":"string"},"id":{"description":"Webhook ID","type":"string"},"lastTriggeredAt":{"description":"Timestamp of last successful trigger","format":"date-time","type":"string"},"name":{"description":"Webhook name","type":"string"},"targetId":{"description":"Target resource ID","type":"string"},"targetName":{"description":"Resolved target resource name when available","type":"string"},"targetType":{"description":"Target type: 'container', 'project', 'updater', or 'gitops'","type":"string"},"tokenPrefix":{"description":"Masked token prefix for identification","type":"string"}},"required":["id","name","tokenPrefix","targetType","actionType","targetId","environmentId","enabled","createdAt"],"type":"object"},"WebhookUpdateInput":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/WebhookUpdateInput.json"],"format":"uri","readOnly":true,"type":"string"},"enabled":{"description":"Whether the webhook is active","type":"boolean"}},"required":["enabled"],"type":"object"}},"securitySchemes":{"ApiKeyAuth":{"description":"API Key authentication","in":"header","name":"X-API-Key","type":"apiKey"},"BearerAuth":{"bearerFormat":"JWT","description":"JWT Bearer token authentication","scheme":"bearer","type":"http"}}},"info":{"description":"Modern Docker Management, Designed for Everyone","title":"Arcane API","version":"v1.17.0"},"openapi":"3.1.0","paths":{"/api-keys":{"get":{"description":"Get a paginated list of API keys","operationId":"list-api-keys","parameters":[{"description":"Search query for filtering by name or description","explode":false,"in":"query","name":"search","schema":{"description":"Search query for filtering by name or description","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction (asc or desc)","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction (asc or desc)","type":"string"}},{"description":"Start index for pagination","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index for pagination","format":"int64","type":"integer"}},{"description":"Number of items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Number of items per page","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyPaginatedResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List API keys","tags":["API Keys"]},"post":{"description":"Create a new API key for programmatic access","operationId":"create-api-key","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApikeyCreateApiKey"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseApiKeyCreatedDto"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create an API key","tags":["API Keys"]}},"/api-keys/{id}":{"delete":{"description":"Delete an API key by ID","operationId":"delete-api-key","parameters":[{"description":"API key ID","in":"path","name":"id","required":true,"schema":{"description":"API key ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete an API key","tags":["API Keys"]},"get":{"description":"Get details of a specific API key by ID","operationId":"get-api-key","parameters":[{"description":"API key ID","in":"path","name":"id","required":true,"schema":{"description":"API key ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseApiKey"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get an API key","tags":["API Keys"]},"put":{"description":"Update an existing API key's details","operationId":"update-api-key","parameters":[{"description":"API key ID","in":"path","name":"id","required":true,"schema":{"description":"API key ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApikeyUpdateApiKey"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseApiKey"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update an API key","tags":["API Keys"]}},"/app-images/favicon":{"get":{"description":"Get the application favicon image","operationId":"get-favicon","responses":{"200":{"content":{"application/json":{"schema":{"contentEncoding":"base64","type":"string"}}},"description":"OK","headers":{"Cache-Control":{"schema":{"type":"string"}},"Content-Type":{"schema":{"type":"string"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"summary":"Get application favicon","tags":["Application Images"]}},"/app-images/logo":{"get":{"description":"Get the application logo image","operationId":"get-logo","parameters":[{"description":"Return full logo instead of icon","explode":false,"in":"query","name":"full","schema":{"default":false,"description":"Return full logo instead of icon","type":"boolean"}},{"description":"Optional accent color override for preview (e.g., 'oklch(0.65 0.2 150)')","explode":false,"in":"query","name":"color","schema":{"description":"Optional accent color override for preview (e.g., 'oklch(0.65 0.2 150)')","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"contentEncoding":"base64","type":"string"}}},"description":"OK","headers":{"Cache-Control":{"schema":{"type":"string"}},"Content-Type":{"schema":{"type":"string"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"summary":"Get application logo","tags":["Application Images"]}},"/app-images/logo-email":{"get":{"description":"Get the application logo image in PNG format for emails","operationId":"get-logo-email","responses":{"200":{"content":{"application/json":{"schema":{"contentEncoding":"base64","type":"string"}}},"description":"OK","headers":{"Cache-Control":{"schema":{"type":"string"}},"Content-Type":{"schema":{"type":"string"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"summary":"Get application logo for email","tags":["Application Images"]}},"/app-images/profile":{"get":{"description":"Get the default user profile image","operationId":"get-default-profile","responses":{"200":{"content":{"application/json":{"schema":{"contentEncoding":"base64","type":"string"}}},"description":"OK","headers":{"Cache-Control":{"schema":{"type":"string"}},"Content-Type":{"schema":{"type":"string"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"summary":"Get default profile image","tags":["Application Images"]}},"/app-images/pwa/{filename}":{"get":{"description":"Get a Progressive Web App icon image","operationId":"get-pwa-icon","parameters":[{"description":"PWA icon filename","in":"path","name":"filename","required":true,"schema":{"description":"PWA icon filename","examples":["icon-192x192.png"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"contentEncoding":"base64","type":"string"}}},"description":"OK","headers":{"Cache-Control":{"schema":{"type":"string"}},"Content-Type":{"schema":{"type":"string"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"summary":"Get PWA icon","tags":["Application Images"]}},"/app-version":{"get":{"description":"Get the current application version","operationId":"getAppVersion","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionInfo"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"summary":"Get app version","tags":["Version"]}},"/auth/login":{"post":{"description":"Authenticate a user with username and password","operationId":"login","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthLogin"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseLoginResponse"}}},"description":"OK","headers":{"Set-Cookie":{"schema":{"description":"Session cookie","type":"string"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"summary":"Login","tags":["Auth"]}},"/auth/logout":{"post":{"description":"Clear authentication session","operationId":"logout","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK","headers":{"Set-Cookie":{"schema":{"description":"Cleared session cookie","type":"string"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"summary":"Logout","tags":["Auth"]}},"/auth/me":{"get":{"description":"Get the currently authenticated user's information","operationId":"get-current-user","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseUser"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get current user","tags":["Auth"]}},"/auth/password":{"post":{"description":"Change the current user's password","operationId":"change-password","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthPasswordChange"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Change password","tags":["Auth"]}},"/auth/refresh":{"post":{"description":"Obtain a new access token using a refresh token","operationId":"refresh-token","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthRefresh"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseTokenRefreshResponse"}}},"description":"OK","headers":{"Set-Cookie":{"schema":{"description":"Updated session cookie","type":"string"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"summary":"Refresh token","tags":["Auth"]}},"/container-registries":{"get":{"description":"Get a paginated list of container registries","operationId":"listContainerRegistries","parameters":[{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction","type":"string"}},{"description":"Start index","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index","format":"int64","type":"integer"}},{"description":"Items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Items per page","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContainerRegistryPaginatedResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List container registries","tags":["Container Registries"]},"post":{"description":"Create a new container registry","operationId":"createContainerRegistry","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateContainerRegistryRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseContainerRegistry"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a container registry","tags":["Container Registries"]}},"/container-registries/sync":{"post":{"description":"Sync container registries from a remote source","operationId":"syncContainerRegistries","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContainerregistrySyncRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Sync container registries","tags":["Container Registries"]}},"/container-registries/{id}":{"delete":{"description":"Delete a container registry by ID","operationId":"deleteContainerRegistry","parameters":[{"description":"Registry ID","in":"path","name":"id","required":true,"schema":{"description":"Registry ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete a container registry","tags":["Container Registries"]},"get":{"description":"Get a container registry by ID","operationId":"getContainerRegistry","parameters":[{"description":"Registry ID","in":"path","name":"id","required":true,"schema":{"description":"Registry ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseContainerRegistry"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get a container registry","tags":["Container Registries"]},"put":{"description":"Update an existing container registry","operationId":"updateContainerRegistry","parameters":[{"description":"Registry ID","in":"path","name":"id","required":true,"schema":{"description":"Registry ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateContainerRegistryRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseContainerRegistry"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update a container registry","tags":["Container Registries"]}},"/container-registries/{id}/test":{"post":{"description":"Test connectivity and authentication to a container registry","operationId":"testContainerRegistry","parameters":[{"description":"Registry ID","in":"path","name":"id","required":true,"schema":{"description":"Registry ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Test a container registry","tags":["Container Registries"]}},"/customize/categories":{"get":{"description":"Get all available customization categories with metadata","operationId":"get-customize-categories","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CategoryCategory"},"type":["array","null"]}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get customization categories","tags":["Customize"]}},"/customize/git-repositories":{"get":{"description":"Get a paginated list of git repositories","operationId":"listGitRepositories","parameters":[{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction","type":"string"}},{"description":"Start index","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index","format":"int64","type":"integer"}},{"description":"Items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Items per page","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GitRepositoryPaginatedResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List git repositories","tags":["Customize"]},"post":{"description":"Create a new git repository configuration","operationId":"createGitRepository","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateGitRepositoryRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseGitRepository"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a git repository","tags":["Customize"]}},"/customize/git-repositories/{id}":{"delete":{"description":"Delete a git repository configuration by ID","operationId":"deleteGitRepository","parameters":[{"description":"Repository ID","in":"path","name":"id","required":true,"schema":{"description":"Repository ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete a git repository","tags":["Customize"]},"get":{"description":"Get a git repository by ID","operationId":"getGitRepository","parameters":[{"description":"Repository ID","in":"path","name":"id","required":true,"schema":{"description":"Repository ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseGitRepository"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get a git repository","tags":["Customize"]},"put":{"description":"Update an existing git repository configuration","operationId":"updateGitRepository","parameters":[{"description":"Repository ID","in":"path","name":"id","required":true,"schema":{"description":"Repository ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateGitRepositoryRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseGitRepository"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update a git repository","tags":["Customize"]}},"/customize/git-repositories/{id}/branches":{"get":{"description":"Get all branches from a git repository with default branch detection","operationId":"listGitRepositoryBranches","parameters":[{"description":"Repository ID","in":"path","name":"id","required":true,"schema":{"description":"Repository ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseBranchesResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List repository branches","tags":["Customize"]}},"/customize/git-repositories/{id}/files":{"get":{"description":"Browse files and directories in a git repository","operationId":"browseGitRepositoryFiles","parameters":[{"description":"Repository ID","in":"path","name":"id","required":true,"schema":{"description":"Repository ID","type":"string"}},{"description":"Branch to browse","explode":false,"in":"query","name":"branch","schema":{"description":"Branch to browse","type":"string"}},{"description":"Path within repository (optional)","explode":false,"in":"query","name":"path","schema":{"description":"Path within repository (optional)","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseBrowseResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Browse repository files","tags":["Customize"]}},"/customize/git-repositories/{id}/test":{"post":{"description":"Test connectivity and authentication to a git repository","operationId":"testGitRepository","parameters":[{"description":"Repository ID","in":"path","name":"id","required":true,"schema":{"description":"Repository ID","type":"string"}},{"description":"Branch to test (optional, uses repository default branch when omitted)","explode":false,"in":"query","name":"branch","schema":{"description":"Branch to test (optional, uses repository default branch when omitted)","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Test a git repository","tags":["Customize"]}},"/customize/search":{"post":{"description":"Search customization categories and options by query","operationId":"search-customize","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Search customization options","tags":["Customize"]}},"/environments":{"get":{"description":"Get a paginated list of Docker environments","operationId":"listEnvironments","parameters":[{"description":"Search query for filtering by name or API URL","explode":false,"in":"query","name":"search","schema":{"description":"Search query for filtering by name or API URL","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction (asc or desc)","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction (asc or desc)","type":"string"}},{"description":"Start index for pagination","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index for pagination","format":"int64","type":"integer"}},{"description":"Items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Items per page","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvironmentPaginatedResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List environments","tags":["Environments"]},"post":{"description":"Create a new Docker environment","operationId":"createEnvironment","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvironmentCreate"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseEnvironmentWithApiKey"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create an environment","tags":["Environments"]}},"/environments/pair":{"post":{"description":"Agent sends API key to complete environment pairing","operationId":"pairEnvironment","parameters":[{"description":"API key for environment pairing","in":"header","name":"X-API-Key","schema":{"description":"API key for environment pairing","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"summary":"Pair agent with manager","tags":["Environments"]}},"/environments/{id}":{"delete":{"description":"Delete a Arcane environment","operationId":"deleteEnvironment","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete an environment","tags":["Environments"]},"get":{"description":"Get a Docker environment by ID","operationId":"getEnvironment","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseEnvironment"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get an environment","tags":["Environments"]},"put":{"description":"Update a Docker environment","operationId":"updateEnvironment","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvironmentUpdate"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseEnvironment"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update an environment","tags":["Environments"]}},"/environments/{id}/agent/pair":{"post":{"description":"Generate or rotate the local agent pairing token","operationId":"pairAgent","parameters":[{"description":"Environment ID (must be 0 for local)","in":"path","name":"id","required":true,"schema":{"description":"Environment ID (must be 0 for local)","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvironmentAgentPairRequest"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseAgentPairResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Pair with local agent","tags":["Environments"]}},"/environments/{id}/builds/browse":{"delete":{"description":"Delete a file or directory under the builds workspace root","operationId":"builds-browse-delete","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"File or directory path to delete","explode":false,"in":"query","name":"path","schema":{"description":"File or directory path to delete","type":"string"}}],"responses":{"204":{"description":"No Content","headers":{"Data":{"schema":{"$ref":"#/components/schemas/BaseMessageResponse","description":"Response data"}},"Success":{"schema":{"description":"Whether the request was successful","type":"boolean"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete build workspace file","tags":["Builds"]},"get":{"description":"List files and directories under the builds workspace root","operationId":"builds-browse","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Directory path to browse","explode":false,"in":"query","name":"path","schema":{"default":"/","description":"Directory path to browse","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseListFileEntry"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Browse build workspace files","tags":["Builds"]}},"/environments/{id}/builds/browse/content":{"get":{"description":"Read file content under the builds workspace root","operationId":"builds-browse-content","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"File path","explode":false,"in":"query","name":"path","schema":{"description":"File path","type":"string"}},{"description":"Maximum bytes to read (default 1MB)","explode":false,"in":"query","name":"maxBytes","schema":{"default":1048576,"description":"Maximum bytes to read (default 1MB)","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseBuildFileContentResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get build workspace file content","tags":["Builds"]}},"/environments/{id}/builds/browse/download":{"get":{"description":"Download a file from the builds workspace root","operationId":"builds-browse-download","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"File path","explode":false,"in":"query","name":"path","schema":{"description":"File path","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"OK","headers":{"Content-Disposition":{"schema":{"type":"string"}},"Content-Length":{"schema":{"format":"int64","type":"integer"}},"Content-Type":{"schema":{"type":"string"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Download build workspace file","tags":["Builds"]}},"/environments/{id}/builds/browse/mkdir":{"post":{"description":"Create a directory under the builds workspace root","operationId":"builds-browse-mkdir","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Directory path to create","explode":false,"in":"query","name":"path","schema":{"description":"Directory path to create","type":"string"}}],"responses":{"204":{"description":"No Content","headers":{"Data":{"schema":{"$ref":"#/components/schemas/BaseMessageResponse","description":"Response data"}},"Success":{"schema":{"description":"Whether the request was successful","type":"boolean"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create build workspace directory","tags":["Builds"]}},"/environments/{id}/builds/browse/upload":{"post":{"description":"Upload a file into the builds workspace root","operationId":"builds-browse-upload","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Destination path","explode":false,"in":"query","name":"path","schema":{"default":"/","description":"Destination path","type":"string"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"properties":{"file":{"contentMediaType":"application/octet-stream","description":"File to upload","format":"binary","type":"string"}},"required":["file"],"type":"object"}}},"required":true},"responses":{"204":{"description":"No Content","headers":{"Data":{"schema":{"$ref":"#/components/schemas/BaseMessageResponse","description":"Response data"}},"Success":{"schema":{"description":"Whether the request was successful","type":"boolean"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Upload build workspace file","tags":["Builds"]}},"/environments/{id}/containers":{"get":{"description":"Paginated list of containers","operationId":"list-containers","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction","type":"string"}},{"description":"Start index","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index","format":"int64","type":"integer"}},{"description":"Limit","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Limit","format":"int64","type":"integer"}},{"description":"Optional grouping mode (for example: project)","explode":false,"in":"query","name":"groupBy","schema":{"description":"Optional grouping mode (for example: project)","type":"string"}},{"description":"Include internal containers","explode":false,"in":"query","name":"includeInternal","schema":{"default":false,"description":"Include internal containers","type":"boolean"}},{"description":"Filter by update status (has_update, up_to_date, error, unknown)","explode":false,"in":"query","name":"updates","schema":{"description":"Filter by update status (has_update, up_to_date, error, unknown)","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContainerPaginatedResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List containers","tags":["Containers"]},"post":{"operationId":"create-container","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContainerCreate"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContainerCreatedResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create container","tags":["Containers"]}},"/environments/{id}/containers/counts":{"get":{"operationId":"container-status-counts","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Include internal containers","explode":false,"in":"query","name":"includeInternal","schema":{"default":false,"description":"Include internal containers","type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContainerStatusCountsResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Container status counts","tags":["Containers"]}},"/environments/{id}/containers/{containerId}":{"delete":{"operationId":"delete-container","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Container ID","in":"path","name":"containerId","required":true,"schema":{"description":"Container ID","type":"string"}},{"description":"Force delete running container","explode":false,"in":"query","name":"force","schema":{"default":false,"description":"Force delete running container","type":"boolean"}},{"description":"Remove associated volumes","explode":false,"in":"query","name":"volumes","schema":{"default":false,"description":"Remove associated volumes","type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContainerActionResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete container","tags":["Containers"]},"get":{"operationId":"get-container","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Container ID","in":"path","name":"containerId","required":true,"schema":{"description":"Container ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContainerDetailsResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get container","tags":["Containers"]}},"/environments/{id}/containers/{containerId}/auto-update":{"put":{"description":"Enable or disable auto-update for a specific container","operationId":"set-container-auto-update","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Container ID","in":"path","name":"containerId","required":true,"schema":{"description":"Container ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetAutoUpdateInputBody"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContainerActionResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Set container auto-update","tags":["Containers","Updater"]}},"/environments/{id}/containers/{containerId}/redeploy":{"post":{"description":"Pull latest image and recreate container","operationId":"redeploy-container","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Container ID","in":"path","name":"containerId","required":true,"schema":{"description":"Container ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContainerDetailsResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Redeploy container","tags":["Containers"]}},"/environments/{id}/containers/{containerId}/restart":{"post":{"operationId":"restart-container","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Container ID","in":"path","name":"containerId","required":true,"schema":{"description":"Container ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContainerActionResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Restart container","tags":["Containers"]}},"/environments/{id}/containers/{containerId}/start":{"post":{"operationId":"start-container","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Container ID","in":"path","name":"containerId","required":true,"schema":{"description":"Container ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContainerActionResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Start container","tags":["Containers"]}},"/environments/{id}/containers/{containerId}/stop":{"post":{"operationId":"stop-container","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Container ID","in":"path","name":"containerId","required":true,"schema":{"description":"Container ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContainerActionResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Stop container","tags":["Containers"]}},"/environments/{id}/containers/{containerId}/update":{"post":{"description":"Pull the latest image and apply the appropriate update strategy for a specific container","operationId":"update-container","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Container ID to update","in":"path","name":"containerId","required":true,"schema":{"description":"Container ID to update","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseResult"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update a single container","tags":["Updater","Containers"]}},"/environments/{id}/dashboard":{"get":{"description":"Returns the dashboard first-paint snapshot in a single response","operationId":"get-dashboard","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Debug mode: force an empty action item list","explode":false,"in":"query","name":"debugAllGood","schema":{"default":false,"description":"Debug mode: force an empty action item list","type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseSnapshot"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get dashboard snapshot","tags":["Dashboard"]}},"/environments/{id}/dashboard/action-items":{"get":{"description":"Returns only dashboard action items that currently need attention","operationId":"get-dashboard-action-items","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Debug mode: force an empty action item list","explode":false,"in":"query","name":"debugAllGood","schema":{"default":false,"description":"Debug mode: force an empty action item list","type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseActionItems"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get dashboard action items","tags":["Dashboard"]}},"/environments/{id}/deployment":{"get":{"description":"Get Docker run and compose snippets for environment deployment","operationId":"getDeploymentSnippets","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseDeploymentSnippet"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get deployment snippets","tags":["Environments"]}},"/environments/{id}/gitops-syncs":{"get":{"description":"Get a paginated list of GitOps syncs for an environment","operationId":"listGitOpsSyncs","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction","type":"string"}},{"description":"Start index","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index","format":"int64","type":"integer"}},{"description":"Items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Items per page","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GitOpsSyncPaginatedResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List GitOps syncs","tags":["GitOps Syncs"]},"post":{"description":"Create a new GitOps sync configuration for an environment","operationId":"createGitOpsSync","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GitopsCreateSyncRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseGitOpsSync"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a GitOps sync","tags":["GitOps Syncs"]}},"/environments/{id}/gitops-syncs/import":{"post":{"description":"Import multiple GitOps sync configurations from JSON","operationId":"importGitOpsSyncs","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/GitopsImportGitOpsSyncRequest"},"type":["array","null"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseImportGitOpsSyncResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Import GitOps syncs","tags":["GitOps Syncs"]}},"/environments/{id}/gitops-syncs/{syncId}":{"delete":{"description":"Delete a GitOps sync configuration by ID","operationId":"deleteGitOpsSync","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Sync ID","in":"path","name":"syncId","required":true,"schema":{"description":"Sync ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete a GitOps sync","tags":["GitOps Syncs"]},"get":{"description":"Get a GitOps sync by ID","operationId":"getGitOpsSync","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Sync ID","in":"path","name":"syncId","required":true,"schema":{"description":"Sync ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseGitOpsSync"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get a GitOps sync","tags":["GitOps Syncs"]},"put":{"description":"Update an existing GitOps sync configuration","operationId":"updateGitOpsSync","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Sync ID","in":"path","name":"syncId","required":true,"schema":{"description":"Sync ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GitopsUpdateSyncRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseGitOpsSync"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update a GitOps sync","tags":["GitOps Syncs"]}},"/environments/{id}/gitops-syncs/{syncId}/files":{"get":{"description":"Browse files in the synced repository","operationId":"browseGitOpsSyncFiles","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Sync ID","in":"path","name":"syncId","required":true,"schema":{"description":"Sync ID","type":"string"}},{"description":"Path to browse (optional)","explode":false,"in":"query","name":"path","schema":{"description":"Path to browse (optional)","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseBrowseResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Browse GitOps sync files","tags":["GitOps Syncs"]}},"/environments/{id}/gitops-syncs/{syncId}/status":{"get":{"description":"Get the current status of a GitOps sync","operationId":"getGitOpsSyncStatus","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Sync ID","in":"path","name":"syncId","required":true,"schema":{"description":"Sync ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseSyncStatus"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get GitOps sync status","tags":["GitOps Syncs"]}},"/environments/{id}/gitops-syncs/{syncId}/sync":{"post":{"description":"Manually trigger a sync operation","operationId":"performGitOpsSync","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Sync ID","in":"path","name":"syncId","required":true,"schema":{"description":"Sync ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseSyncResult"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Perform a GitOps sync","tags":["GitOps Syncs"]}},"/environments/{id}/heartbeat":{"post":{"description":"Update the heartbeat timestamp for an environment","operationId":"updateHeartbeat","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update environment heartbeat","tags":["Environments"]}},"/environments/{id}/image-updates/check":{"get":{"operationId":"check-image-update","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Image reference","explode":false,"in":"query","name":"imageRef","schema":{"description":"Image reference","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Check image update by reference","tags":["Image Updates"]}},"/environments/{id}/image-updates/check-all":{"post":{"operationId":"check-all-images","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageupdateCheckAllImagesRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseBatchResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Check all images","tags":["Image Updates"]}},"/environments/{id}/image-updates/check-batch":{"post":{"operationId":"check-multiple-images","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageupdateBatchImageUpdateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseBatchResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Check multiple images","tags":["Image Updates"]}},"/environments/{id}/image-updates/check/{imageId}":{"get":{"operationId":"check-image-update-by-id","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Image ID","in":"path","name":"imageId","required":true,"schema":{"description":"Image ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Check image update by ID","tags":["Image Updates"]},"post":{"operationId":"check-image-update-by-id-post","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Image ID","in":"path","name":"imageId","required":true,"schema":{"description":"Image ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Check image update by ID (POST)","tags":["Image Updates"]}},"/environments/{id}/image-updates/summary":{"get":{"operationId":"get-update-summary","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get update summary","tags":["Image Updates"]}},"/environments/{id}/images":{"get":{"description":"Get a paginated list of Docker images","operationId":"list-images","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction (asc or desc)","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction (asc or desc)","type":"string"}},{"description":"Start index for pagination","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index for pagination","format":"int64","type":"integer"}},{"description":"Number of items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Number of items per page","format":"int64","type":"integer"}},{"description":"Filter by in-use status (true/false)","explode":false,"in":"query","name":"inUse","schema":{"description":"Filter by in-use status (true/false)","type":"string"}},{"description":"Filter by update availability (true/false)","explode":false,"in":"query","name":"updates","schema":{"description":"Filter by update availability (true/false)","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImagePaginatedResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List images","tags":["Images"]}},"/environments/{id}/images/build":{"post":{"description":"Build a Docker image using BuildKit with streaming progress output","operationId":"build-image","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageBuildRequest"}}},"required":true},"responses":{"200":{"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Build an image","tags":["Images"]}},"/environments/{id}/images/builds":{"get":{"description":"Get a paginated list of image build history for an environment","operationId":"list-image-builds","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction (asc or desc)","explode":false,"in":"query","name":"order","schema":{"default":"desc","description":"Sort direction (asc or desc)","type":"string"}},{"description":"Start index for pagination","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index for pagination","format":"int64","type":"integer"}},{"description":"Number of items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Number of items per page","format":"int64","type":"integer"}},{"description":"Filter by status","explode":false,"in":"query","name":"status","schema":{"description":"Filter by status","type":"string"}},{"description":"Filter by provider","explode":false,"in":"query","name":"provider","schema":{"description":"Filter by provider","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageBuildPaginatedResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List image builds","tags":["Images"]}},"/environments/{id}/images/builds/{buildId}":{"get":{"description":"Get a single image build history entry with output","operationId":"get-image-build","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Build ID","in":"path","name":"buildId","required":true,"schema":{"description":"Build ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseBuildRecord"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get image build","tags":["Images"]}},"/environments/{id}/images/counts":{"get":{"description":"Get counts of images in use, unused, total, and total size","operationId":"get-image-usage-counts","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageUsageCountsResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get image usage counts","tags":["Images"]}},"/environments/{id}/images/prune":{"post":{"description":"Remove unused Docker images","operationId":"prune-images","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Only remove dangling images","explode":false,"in":"query","name":"dangling","schema":{"description":"Only remove dangling images","type":"boolean"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PruneImagesInputBody"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponsePruneReport"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Prune unused images","tags":["Images"]}},"/environments/{id}/images/pull":{"post":{"description":"Pull a Docker image from a registry with streaming progress output","operationId":"pull-image","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImagePullOptions"}}},"required":true},"responses":{"200":{"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Pull an image","tags":["Images"]}},"/environments/{id}/images/upload":{"post":{"description":"Upload a Docker image from a tar archive","operationId":"upload-image","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"properties":{"file":{"contentMediaType":"application/octet-stream","description":"Docker image tar archive","format":"binary","type":"string"}},"required":["file"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseLoadResult"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Upload an image","tags":["Images"]}},"/environments/{id}/images/vulnerabilities/summaries":{"post":{"description":"Retrieves scan summaries for a list of images (batch)","operationId":"get-image-vulnerability-summaries","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VulnerabilityScanSummariesRequest","description":"Batch scan summary request"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseScanSummariesResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get vulnerability scan summaries","tags":["Vulnerabilities"]}},"/environments/{id}/images/{imageId}":{"delete":{"description":"Remove a Docker image by ID","operationId":"remove-image","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Image ID","in":"path","name":"imageId","required":true,"schema":{"description":"Image ID","type":"string"}},{"description":"Force removal","explode":false,"in":"query","name":"force","schema":{"description":"Force removal","type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Remove an image","tags":["Images"]},"get":{"description":"Get a Docker image by its ID","operationId":"get-image","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Image ID","in":"path","name":"imageId","required":true,"schema":{"description":"Image ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseDetailSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get image by ID","tags":["Images"]}},"/environments/{id}/images/{imageId}/vulnerabilities":{"get":{"description":"Retrieves the most recent vulnerability scan result for an image","operationId":"get-image-vulnerabilities","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Image ID","in":"path","name":"imageId","required":true,"schema":{"description":"Image ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseScanResult"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get vulnerability scan result","tags":["Vulnerabilities"]}},"/environments/{id}/images/{imageId}/vulnerabilities/list":{"get":{"description":"Retrieves paginated vulnerabilities for an image","operationId":"list-image-vulnerabilities","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Image ID","in":"path","name":"imageId","required":true,"schema":{"description":"Image ID","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Sort field","explode":false,"in":"query","name":"sort","schema":{"description":"Sort field","type":"string"}},{"description":"Sort order","explode":false,"in":"query","name":"order","schema":{"description":"Sort order","type":"string"}},{"description":"Start offset","explode":false,"in":"query","name":"start","schema":{"description":"Start offset","format":"int64","type":"integer"}},{"description":"Limit","explode":false,"in":"query","name":"limit","schema":{"description":"Limit","format":"int64","type":"integer"}},{"description":"Page number","explode":false,"in":"query","name":"page","schema":{"description":"Page number","format":"int64","type":"integer"}},{"description":"Comma-separated severity filter","explode":false,"in":"query","name":"severity","schema":{"description":"Comma-separated severity filter","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BasePaginatedVulnerability"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List image vulnerabilities","tags":["Vulnerabilities"]}},"/environments/{id}/images/{imageId}/vulnerabilities/scan":{"post":{"description":"Initiates a vulnerability scan for the specified image using Trivy","operationId":"scan-image-vulnerabilities","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Image ID to scan","in":"path","name":"imageId","required":true,"schema":{"description":"Image ID to scan","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseScanResult"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Scan image for vulnerabilities","tags":["Vulnerabilities"]}},"/environments/{id}/images/{imageId}/vulnerabilities/summary":{"get":{"description":"Retrieves just the summary of vulnerabilities for an image (for list views)","operationId":"get-image-vulnerability-summary","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Image ID","in":"path","name":"imageId","required":true,"schema":{"description":"Image ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseScanSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get vulnerability scan summary","tags":["Vulnerabilities"]}},"/environments/{id}/job-schedules":{"get":{"description":"Get configured cron schedules for background jobs","operationId":"get-job-schedules","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobscheduleConfig"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get job schedules","tags":["JobSchedules"]},"put":{"description":"Update background job cron schedules and reschedule running jobs","operationId":"update-job-schedules","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobscheduleUpdate","description":"Job schedule update data"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseConfig"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update job schedules","tags":["JobSchedules"]}},"/environments/{id}/jobs":{"get":{"description":"Get status, schedule, and metadata for all background jobs","operationId":"list-jobs","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobscheduleJobListResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List all background jobs","tags":["JobSchedules"]}},"/environments/{id}/jobs/{jobId}/run":{"post":{"description":"Manually trigger a background job to run immediately","operationId":"run-job","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Job ID to run","in":"path","name":"jobId","required":true,"schema":{"description":"Job ID to run","minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobscheduleJobRunResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Run a job now","tags":["JobSchedules"]}},"/environments/{id}/networks":{"get":{"operationId":"list-networks","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction (asc or desc)","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction (asc or desc)","type":"string"}},{"description":"Start index for pagination","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index for pagination","format":"int64","type":"integer"}},{"description":"Number of items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Number of items per page","format":"int64","type":"integer"}},{"description":"Filter by in-use status (true/false)","explode":false,"in":"query","name":"inUse","schema":{"description":"Filter by in-use status (true/false)","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkPaginatedResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List networks","tags":["Networks"]},"post":{"operationId":"create-network","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkCreateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkCreatedApiResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create network","tags":["Networks"]}},"/environments/{id}/networks/counts":{"get":{"operationId":"network-counts","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkCountsApiResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Network counts","tags":["Networks"]}},"/environments/{id}/networks/prune":{"post":{"operationId":"prune-networks","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkPruneResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Prune networks","tags":["Networks"]}},"/environments/{id}/networks/topology":{"get":{"operationId":"get-network-topology","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkTopologyApiResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get network topology","tags":["Networks"]}},"/environments/{id}/networks/{networkId}":{"delete":{"operationId":"delete-network","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Network ID","in":"path","name":"networkId","required":true,"schema":{"description":"Network ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkMessageApiResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete network","tags":["Networks"]},"get":{"operationId":"get-network","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Network ID","in":"path","name":"networkId","required":true,"schema":{"description":"Network ID","type":"string"}},{"explode":false,"in":"query","name":"sort","schema":{"default":"name","type":"string"}},{"explode":false,"in":"query","name":"order","schema":{"default":"asc","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkInspectApiResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get network","tags":["Networks"]}},"/environments/{id}/notifications/apprise":{"get":{"operationId":"get-apprise-settings","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationAppriseResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get Apprise settings","tags":["Notifications"]},"post":{"operationId":"create-or-update-apprise-settings","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationAppriseUpdate"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationAppriseResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create or update Apprise settings","tags":["Notifications"]}},"/environments/{id}/notifications/apprise/test":{"post":{"operationId":"test-apprise-notification","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"explode":false,"in":"query","name":"type","schema":{"default":"simple","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Test Apprise notification","tags":["Notifications"]}},"/environments/{id}/notifications/settings":{"get":{"operationId":"get-all-notification-settings","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/NotificationResponse"},"type":["array","null"]}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get all notification settings","tags":["Notifications"]},"post":{"operationId":"create-or-update-notification-settings","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationUpdate"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create or update notification settings","tags":["Notifications"]}},"/environments/{id}/notifications/settings/{provider}":{"delete":{"operationId":"delete-notification-settings","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Provider","in":"path","name":"provider","required":true,"schema":{"description":"Provider","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete notification settings","tags":["Notifications"]},"get":{"operationId":"get-notification-settings","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Provider","in":"path","name":"provider","required":true,"schema":{"description":"Provider","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get notification settings by provider","tags":["Notifications"]}},"/environments/{id}/notifications/test/{provider}":{"post":{"operationId":"test-notification","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Provider","in":"path","name":"provider","required":true,"schema":{"description":"Provider","type":"string"}},{"explode":false,"in":"query","name":"type","schema":{"default":"simple","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Test notification","tags":["Notifications"]}},"/environments/{id}/ports":{"get":{"operationId":"list-ports","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction (asc or desc)","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction (asc or desc)","type":"string"}},{"description":"Start index for pagination","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index for pagination","format":"int64","type":"integer"}},{"description":"Number of items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Number of items per page","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortPaginatedResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List port mappings","tags":["Ports"]}},"/environments/{id}/projects":{"get":{"description":"Get a paginated list of Docker Compose projects","operationId":"list-projects","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction (asc or desc)","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction (asc or desc)","type":"string"}},{"description":"Start index for pagination","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index for pagination","format":"int64","type":"integer"}},{"description":"Number of items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Number of items per page","format":"int64","type":"integer"}},{"description":"Filter by status (comma-separated: running,stopped,partially running)","explode":false,"in":"query","name":"status","schema":{"description":"Filter by status (comma-separated: running,stopped,partially running)","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectPaginatedResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List projects","tags":["Projects"]},"post":{"description":"Create a new Docker Compose project","operationId":"create-project","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectCreateProject"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseCreateReponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a project","tags":["Projects"]}},"/environments/{id}/projects/counts":{"get":{"description":"Get counts of running, stopped, and total projects","operationId":"get-project-status-counts","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseStatusCounts"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get project status counts","tags":["Projects"]}},"/environments/{id}/projects/{projectId}":{"get":{"description":"Get a Docker Compose project by ID","operationId":"get-project","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Project ID","in":"path","name":"projectId","required":true,"schema":{"description":"Project ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseDetails"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get a project","tags":["Projects"]},"put":{"description":"Update a Docker Compose project configuration","operationId":"update-project","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Project ID","in":"path","name":"projectId","required":true,"schema":{"description":"Project ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectUpdateProject"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseDetails"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update a project","tags":["Projects"]}},"/environments/{id}/projects/{projectId}/build":{"post":{"description":"Build Docker Compose services with build directives using BuildKit","operationId":"build-project-images","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Project ID","in":"path","name":"projectId","required":true,"schema":{"description":"Project ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildProjectInputBody"}}}},"responses":{"200":{"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Build project images","tags":["Projects"]}},"/environments/{id}/projects/{projectId}/destroy":{"delete":{"description":"Destroy a Docker Compose project and optionally remove files/volumes","operationId":"destroy-project","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Project ID","in":"path","name":"projectId","required":true,"schema":{"description":"Project ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectDestroy"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Destroy a project","tags":["Projects"]}},"/environments/{id}/projects/{projectId}/down":{"post":{"description":"Bring down a Docker Compose project (docker-compose down)","operationId":"down-project","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Project ID","in":"path","name":"projectId","required":true,"schema":{"description":"Project ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Bring down a project","tags":["Projects"]}},"/environments/{id}/projects/{projectId}/includes":{"put":{"description":"Update an include file within a Docker Compose project","operationId":"update-project-include","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Project ID","in":"path","name":"projectId","required":true,"schema":{"description":"Project ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectUpdateIncludeFile"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseDetails"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update project include file","tags":["Projects"]}},"/environments/{id}/projects/{projectId}/pull":{"post":{"description":"Pull all images for a Docker Compose project with streaming progress output","operationId":"pull-project-images","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Project ID","in":"path","name":"projectId","required":true,"schema":{"description":"Project ID","type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Pull project images","tags":["Projects"]}},"/environments/{id}/projects/{projectId}/redeploy":{"post":{"description":"Redeploy a Docker Compose project (down + up)","operationId":"redeploy-project","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Project ID","in":"path","name":"projectId","required":true,"schema":{"description":"Project ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Redeploy a project","tags":["Projects"]}},"/environments/{id}/projects/{projectId}/restart":{"post":{"description":"Restart all containers in a Docker Compose project","operationId":"restart-project","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Project ID","in":"path","name":"projectId","required":true,"schema":{"description":"Project ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Restart a project","tags":["Projects"]}},"/environments/{id}/projects/{projectId}/up":{"post":{"description":"Deploy a Docker Compose project (docker-compose up)","operationId":"deploy-project","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Project ID","in":"path","name":"projectId","required":true,"schema":{"description":"Project ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectDeployOptions"}}}},"responses":{"200":{"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Deploy a project","tags":["Projects"]}},"/environments/{id}/settings":{"get":{"description":"Get all settings for an environment","operationId":"get-settings","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/SettingsPublicSetting"},"type":["array","null"]}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get settings","tags":["Settings"]},"put":{"description":"Update settings for an environment","operationId":"update-settings","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SettingsUpdate","description":"Settings update data"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseListSettingDto"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update settings","tags":["Settings"]}},"/environments/{id}/settings/public":{"get":{"description":"Get all public settings for an environment","operationId":"get-public-settings","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/SettingsPublicSetting"},"type":["array","null"]}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"summary":"Get public settings","tags":["Settings"]}},"/environments/{id}/swarm/configs":{"get":{"operationId":"list-swarm-configs","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseListConfigSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List swarm configs","tags":["Swarm"]},"post":{"operationId":"create-swarm-config","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmConfigCreateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseConfigSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create swarm config","tags":["Swarm"]}},"/environments/{id}/swarm/configs/{configId}":{"delete":{"operationId":"delete-swarm-config","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Config ID","in":"path","name":"configId","required":true,"schema":{"description":"Config ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete swarm config","tags":["Swarm"]},"get":{"operationId":"get-swarm-config","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Config ID","in":"path","name":"configId","required":true,"schema":{"description":"Config ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseConfigSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get swarm config","tags":["Swarm"]},"put":{"operationId":"update-swarm-config","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Config ID","in":"path","name":"configId","required":true,"schema":{"description":"Config ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmConfigUpdateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseConfigSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update swarm config","tags":["Swarm"]}},"/environments/{id}/swarm/info":{"get":{"operationId":"get-swarm-info","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseSwarmInfo"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get swarm info","tags":["Swarm"]}},"/environments/{id}/swarm/init":{"post":{"operationId":"init-swarm","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmSwarmInitRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseSwarmInitResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Initialize swarm","tags":["Swarm"]}},"/environments/{id}/swarm/join":{"post":{"operationId":"join-swarm","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmSwarmJoinRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Join swarm","tags":["Swarm"]}},"/environments/{id}/swarm/join-tokens":{"get":{"operationId":"get-swarm-join-tokens","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseSwarmJoinTokensResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get swarm join tokens","tags":["Swarm"]}},"/environments/{id}/swarm/join-tokens/rotate":{"post":{"operationId":"rotate-swarm-join-tokens","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmSwarmRotateJoinTokensRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Rotate swarm join tokens","tags":["Swarm"]}},"/environments/{id}/swarm/leave":{"post":{"operationId":"leave-swarm","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmSwarmLeaveRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Leave swarm","tags":["Swarm"]}},"/environments/{id}/swarm/nodes":{"get":{"operationId":"list-swarm-nodes","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction (asc or desc)","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction (asc or desc)","type":"string"}},{"description":"Start index for pagination","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index for pagination","format":"int64","type":"integer"}},{"description":"Number of items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Number of items per page","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmPaginatedResponseNodeSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List swarm nodes","tags":["Swarm"]}},"/environments/{id}/swarm/nodes/{nodeId}":{"delete":{"operationId":"delete-swarm-node","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Node ID","in":"path","name":"nodeId","required":true,"schema":{"description":"Node ID","type":"string"}},{"description":"Force node removal","explode":false,"in":"query","name":"force","schema":{"default":false,"description":"Force node removal","type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete swarm node","tags":["Swarm"]},"get":{"operationId":"get-swarm-node","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Node ID","in":"path","name":"nodeId","required":true,"schema":{"description":"Node ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseNodeSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get swarm node","tags":["Swarm"]},"patch":{"operationId":"update-swarm-node","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Node ID","in":"path","name":"nodeId","required":true,"schema":{"description":"Node ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmNodeUpdateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update swarm node","tags":["Swarm"]}},"/environments/{id}/swarm/nodes/{nodeId}/agent/deployment":{"post":{"operationId":"get-swarm-node-agent-deployment","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Node ID","in":"path","name":"nodeId","required":true,"schema":{"description":"Node ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetSwarmNodeAgentDeploymentInputBody"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseSwarmNodeAgentDeployment"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get swarm node agent deployment snippets","tags":["Swarm"]}},"/environments/{id}/swarm/nodes/{nodeId}/demote":{"post":{"operationId":"demote-swarm-node","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Node ID","in":"path","name":"nodeId","required":true,"schema":{"description":"Node ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Demote swarm node","tags":["Swarm"]}},"/environments/{id}/swarm/nodes/{nodeId}/promote":{"post":{"operationId":"promote-swarm-node","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Node ID","in":"path","name":"nodeId","required":true,"schema":{"description":"Node ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Promote swarm node","tags":["Swarm"]}},"/environments/{id}/swarm/nodes/{nodeId}/tasks":{"get":{"operationId":"list-swarm-node-tasks","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Node ID","in":"path","name":"nodeId","required":true,"schema":{"description":"Node ID","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction (asc or desc)","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction (asc or desc)","type":"string"}},{"description":"Start index for pagination","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index for pagination","format":"int64","type":"integer"}},{"description":"Number of items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Number of items per page","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmPaginatedResponseTaskSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List tasks for a swarm node","tags":["Swarm"]}},"/environments/{id}/swarm/secrets":{"get":{"operationId":"list-swarm-secrets","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseListSecretSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List swarm secrets","tags":["Swarm"]},"post":{"operationId":"create-swarm-secret","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmSecretCreateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseSecretSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create swarm secret","tags":["Swarm"]}},"/environments/{id}/swarm/secrets/{secretId}":{"delete":{"operationId":"delete-swarm-secret","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Secret ID","in":"path","name":"secretId","required":true,"schema":{"description":"Secret ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete swarm secret","tags":["Swarm"]},"get":{"operationId":"get-swarm-secret","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Secret ID","in":"path","name":"secretId","required":true,"schema":{"description":"Secret ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseSecretSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get swarm secret","tags":["Swarm"]},"put":{"operationId":"update-swarm-secret","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Secret ID","in":"path","name":"secretId","required":true,"schema":{"description":"Secret ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmSecretUpdateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseSecretSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update swarm secret","tags":["Swarm"]}},"/environments/{id}/swarm/services":{"get":{"operationId":"list-swarm-services","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction (asc or desc)","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction (asc or desc)","type":"string"}},{"description":"Start index for pagination","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index for pagination","format":"int64","type":"integer"}},{"description":"Number of items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Number of items per page","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmPaginatedResponseServiceSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List swarm services","tags":["Swarm"]},"post":{"operationId":"create-swarm-service","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmServiceCreateRequest","description":"Service creation request"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseServiceCreateResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create swarm service","tags":["Swarm"]}},"/environments/{id}/swarm/services/{serviceId}":{"delete":{"operationId":"delete-swarm-service","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Service ID","in":"path","name":"serviceId","required":true,"schema":{"description":"Service ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete swarm service","tags":["Swarm"]},"get":{"operationId":"get-swarm-service","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Service ID","in":"path","name":"serviceId","required":true,"schema":{"description":"Service ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseServiceInspect"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get swarm service","tags":["Swarm"]},"put":{"operationId":"update-swarm-service","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Service ID","in":"path","name":"serviceId","required":true,"schema":{"description":"Service ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmServiceUpdateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseServiceUpdateResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update swarm service","tags":["Swarm"]}},"/environments/{id}/swarm/services/{serviceId}/rollback":{"post":{"operationId":"rollback-swarm-service","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Service ID","in":"path","name":"serviceId","required":true,"schema":{"description":"Service ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseServiceUpdateResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Rollback a swarm service","tags":["Swarm"]}},"/environments/{id}/swarm/services/{serviceId}/scale":{"post":{"operationId":"scale-swarm-service","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Service ID","in":"path","name":"serviceId","required":true,"schema":{"description":"Service ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmServiceScaleRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseServiceUpdateResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Scale a swarm service","tags":["Swarm"]}},"/environments/{id}/swarm/services/{serviceId}/tasks":{"get":{"operationId":"list-swarm-service-tasks","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Service ID","in":"path","name":"serviceId","required":true,"schema":{"description":"Service ID","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction (asc or desc)","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction (asc or desc)","type":"string"}},{"description":"Start index for pagination","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index for pagination","format":"int64","type":"integer"}},{"description":"Number of items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Number of items per page","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmPaginatedResponseTaskSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List tasks for a swarm service","tags":["Swarm"]}},"/environments/{id}/swarm/spec":{"put":{"operationId":"update-swarm-spec","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmSwarmUpdateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update swarm spec","tags":["Swarm"]}},"/environments/{id}/swarm/stacks":{"get":{"operationId":"list-swarm-stacks","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction (asc or desc)","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction (asc or desc)","type":"string"}},{"description":"Start index for pagination","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index for pagination","format":"int64","type":"integer"}},{"description":"Number of items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Number of items per page","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmPaginatedResponseStackSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List swarm stacks","tags":["Swarm"]},"post":{"operationId":"deploy-swarm-stack","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmStackDeployRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseStackDeployResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Deploy swarm stack","tags":["Swarm"]}},"/environments/{id}/swarm/stacks/config/render":{"post":{"operationId":"render-swarm-stack-config","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmStackRenderConfigRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseStackRenderConfigResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Render/validate swarm stack config","tags":["Swarm"]}},"/environments/{id}/swarm/stacks/{name}":{"delete":{"operationId":"delete-swarm-stack","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Stack name","in":"path","name":"name","required":true,"schema":{"description":"Stack name","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete swarm stack","tags":["Swarm"]},"get":{"operationId":"get-swarm-stack","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Stack name","in":"path","name":"name","required":true,"schema":{"description":"Stack name","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseStackInspect"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get swarm stack","tags":["Swarm"]}},"/environments/{id}/swarm/stacks/{name}/services":{"get":{"operationId":"list-swarm-stack-services","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Stack name","in":"path","name":"name","required":true,"schema":{"description":"Stack name","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction (asc or desc)","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction (asc or desc)","type":"string"}},{"description":"Start index for pagination","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index for pagination","format":"int64","type":"integer"}},{"description":"Number of items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Number of items per page","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmPaginatedResponseServiceSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List swarm stack services","tags":["Swarm"]}},"/environments/{id}/swarm/stacks/{name}/source":{"get":{"operationId":"get-swarm-stack-source","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Stack name","in":"path","name":"name","required":true,"schema":{"description":"Stack name","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseStackSource"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get swarm stack source","tags":["Swarm"]}},"/environments/{id}/swarm/stacks/{name}/tasks":{"get":{"operationId":"list-swarm-stack-tasks","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Stack name","in":"path","name":"name","required":true,"schema":{"description":"Stack name","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction (asc or desc)","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction (asc or desc)","type":"string"}},{"description":"Start index for pagination","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index for pagination","format":"int64","type":"integer"}},{"description":"Number of items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Number of items per page","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmPaginatedResponseTaskSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List swarm stack tasks","tags":["Swarm"]}},"/environments/{id}/swarm/status":{"get":{"operationId":"get-swarm-status","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseRuntimeStatus"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get swarm status","tags":["Swarm"]}},"/environments/{id}/swarm/tasks":{"get":{"operationId":"list-swarm-tasks","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction (asc or desc)","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction (asc or desc)","type":"string"}},{"description":"Start index for pagination","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index for pagination","format":"int64","type":"integer"}},{"description":"Number of items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Number of items per page","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmPaginatedResponseTaskSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List swarm tasks","tags":["Swarm"]}},"/environments/{id}/swarm/unlock":{"post":{"operationId":"unlock-swarm","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmSwarmUnlockRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Unlock swarm","tags":["Swarm"]}},"/environments/{id}/swarm/unlock-key":{"get":{"operationId":"get-swarm-unlock-key","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseSwarmUnlockKeyResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get swarm unlock key","tags":["Swarm"]}},"/environments/{id}/sync":{"post":{"description":"Sync container registries and git repositories to a remote environment","operationId":"syncEnvironment","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Sync environment","tags":["Environments"]}},"/environments/{id}/system/containers/start-all":{"post":{"description":"Start all Docker containers","operationId":"start-all-containers","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseActionResult"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Start all containers","tags":["System"]}},"/environments/{id}/system/containers/start-stopped":{"post":{"description":"Start all stopped Docker containers","operationId":"start-all-stopped-containers","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseActionResult"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Start all stopped containers","tags":["System"]}},"/environments/{id}/system/containers/stop-all":{"post":{"description":"Stop all running Docker containers","operationId":"stop-all-containers","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseActionResult"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Stop all containers","tags":["System"]}},"/environments/{id}/system/convert":{"post":{"description":"Convert a docker run command to docker-compose format","operationId":"convert-docker-run","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemConvertDockerRunRequest","description":"Docker run command"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemConvertDockerRunResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Convert docker run command","tags":["System"]}},"/environments/{id}/system/docker/info":{"get":{"description":"Get Docker daemon version and system information","operationId":"get-docker-info","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DockerinfoInfo"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get Docker info","tags":["System"]}},"/environments/{id}/system/health":{"head":{"description":"Check if the Docker daemon is responsive","operationId":"system-health","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Check system health","tags":["System"]}},"/environments/{id}/system/prune":{"post":{"description":"Remove unused Docker resources (containers, images, volumes, networks)","operationId":"prune-all","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemPruneAllRequest","description":"Prune options"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponsePruneAllResult"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Prune Docker resources","tags":["System"]}},"/environments/{id}/system/upgrade":{"post":{"description":"Trigger a system upgrade","operationId":"trigger-upgrade","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"Accepted"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Trigger system upgrade","tags":["System"]}},"/environments/{id}/system/upgrade/check":{"get":{"description":"Check if a system upgrade is available","operationId":"check-upgrade","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpgradeCheckResultData"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Check for system upgrade","tags":["System"]}},"/environments/{id}/templates/variables":{"get":{"description":"Get global template variables for an environment","operationId":"getGlobalVariables","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseListVariable"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get global variables","tags":["Templates"]},"put":{"description":"Update global template variables for an environment","operationId":"updateGlobalVariables","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvSummary"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update global variables","tags":["Templates"]}},"/environments/{id}/test":{"post":{"description":"Test connectivity to a Arcane environment","operationId":"testConnection","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvironmentTestConnectionRequest"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseTest"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Test environment connection","tags":["Environments"]}},"/environments/{id}/updater/history":{"get":{"description":"Get the history of update operations","operationId":"get-updater-history","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Number of history entries to return","explode":false,"in":"query","name":"limit","schema":{"default":50,"description":"Number of history entries to return","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseListAutoUpdateRecord"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get updater history","tags":["Updater"]}},"/environments/{id}/updater/run":{"post":{"description":"Apply pending container updates","operationId":"run-updater","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdaterOptions","description":"Updater run options"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseResult"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Run updater","tags":["Updater"]}},"/environments/{id}/updater/status":{"get":{"description":"Get the current status of the updater","operationId":"get-updater-status","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseStatus"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get updater status","tags":["Updater"]}},"/environments/{id}/version":{"get":{"description":"Get the version of a remote environment","operationId":"getEnvironmentVersion","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseInfo"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get environment version","tags":["Environments"]}},"/environments/{id}/volumes":{"get":{"description":"Get a paginated list of Docker volumes","operationId":"list-volumes","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction (asc or desc)","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction (asc or desc)","type":"string"}},{"description":"Start index for pagination","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index for pagination","format":"int64","type":"integer"}},{"description":"Number of items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Number of items per page","format":"int64","type":"integer"}},{"description":"Filter by in-use status (true/false)","explode":false,"in":"query","name":"inUse","schema":{"description":"Filter by in-use status (true/false)","type":"string"}},{"description":"Include internal volumes","explode":false,"in":"query","name":"includeInternal","schema":{"default":false,"description":"Include internal volumes","type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VolumePaginatedResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List volumes","tags":["Volumes"]},"post":{"description":"Create a new Docker volume","operationId":"create-volume","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VolumeCreate","description":"Volume creation data"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseVolume"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a volume","tags":["Volumes"]}},"/environments/{id}/volumes/backups/{backupId}":{"delete":{"operationId":"delete-volume-backup","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Backup ID","in":"path","name":"backupId","required":true,"schema":{"description":"Backup ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete volume backup","tags":["Volume Backup"]}},"/environments/{id}/volumes/backups/{backupId}/download":{"get":{"operationId":"download-volume-backup","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Backup ID","in":"path","name":"backupId","required":true,"schema":{"description":"Backup ID","type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Download volume backup","tags":["Volume Backup"]}},"/environments/{id}/volumes/backups/{backupId}/files":{"get":{"operationId":"list-backup-files","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Backup ID","in":"path","name":"backupId","required":true,"schema":{"description":"Backup ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseListString"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List files in a volume backup","tags":["Volume Backup"]}},"/environments/{id}/volumes/backups/{backupId}/has-path":{"get":{"operationId":"backup-has-path","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Backup ID","in":"path","name":"backupId","required":true,"schema":{"description":"Backup ID","type":"string"}},{"description":"Path to check","explode":false,"in":"query","name":"path","schema":{"description":"Path to check","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseBackupHasPathResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Check if backup contains path","tags":["Volume Backup"]}},"/environments/{id}/volumes/counts":{"get":{"description":"Get counts of volumes in use, unused, and total","operationId":"get-volume-usage-counts","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Include internal volumes","explode":false,"in":"query","name":"includeInternal","schema":{"default":false,"description":"Include internal volumes","type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseVolumeUsageCountsData"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get volume usage counts","tags":["Volumes"]}},"/environments/{id}/volumes/prune":{"post":{"description":"Remove all unused Docker volumes","operationId":"prune-volumes","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseVolumePruneReportData"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Prune unused volumes","tags":["Volumes"]}},"/environments/{id}/volumes/sizes":{"get":{"description":"Get disk usage sizes for all volumes (slow operation)","operationId":"get-volume-sizes","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseListVolumeSizeInfo"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get volume sizes","tags":["Volumes"]}},"/environments/{id}/volumes/{volumeName}":{"delete":{"description":"Remove a Docker volume by name","operationId":"remove-volume","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Volume name","in":"path","name":"volumeName","required":true,"schema":{"description":"Volume name","type":"string"}},{"description":"Force removal","explode":false,"in":"query","name":"force","schema":{"description":"Force removal","type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Remove a volume","tags":["Volumes"]},"get":{"description":"Get a Docker volume by its name","operationId":"get-volume","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Volume name","in":"path","name":"volumeName","required":true,"schema":{"description":"Volume name","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseVolume"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get volume by name","tags":["Volumes"]}},"/environments/{id}/volumes/{volumeName}/backups":{"get":{"operationId":"list-volume-backups","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Volume name","in":"path","name":"volumeName","required":true,"schema":{"description":"Volume name","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction","type":"string"}},{"description":"Start index","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index","format":"int64","type":"integer"}},{"description":"Limit","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Limit","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VolumeBackupPaginatedResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List volume backups","tags":["Volume Backup"]},"post":{"operationId":"create-volume-backup","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Volume name","in":"path","name":"volumeName","required":true,"schema":{"description":"Volume name","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseVolumeBackup"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create volume backup","tags":["Volume Backup"]}},"/environments/{id}/volumes/{volumeName}/backups/upload":{"post":{"operationId":"upload-volume-backup","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Volume name","in":"path","name":"volumeName","required":true,"schema":{"description":"Volume name","type":"string"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"properties":{"file":{"contentMediaType":"application/octet-stream","description":"Backup archive (tar.gz)","format":"binary","type":"string"}},"required":["file"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Upload and restore volume backup","tags":["Volume Backup"]}},"/environments/{id}/volumes/{volumeName}/backups/{backupId}/restore":{"post":{"operationId":"restore-volume-backup","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Volume name","in":"path","name":"volumeName","required":true,"schema":{"description":"Volume name","type":"string"}},{"description":"Backup ID","in":"path","name":"backupId","required":true,"schema":{"description":"Backup ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Restore volume backup","tags":["Volume Backup"]}},"/environments/{id}/volumes/{volumeName}/backups/{backupId}/restore-files":{"post":{"operationId":"restore-volume-backup-files","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Volume name","in":"path","name":"volumeName","required":true,"schema":{"description":"Volume name","type":"string"}},{"description":"Backup ID","in":"path","name":"backupId","required":true,"schema":{"description":"Backup ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestoreBackupFilesInputBody"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Restore specific files from a volume backup","tags":["Volume Backup"]}},"/environments/{id}/volumes/{volumeName}/browse":{"delete":{"operationId":"delete-volume-file","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Volume name","in":"path","name":"volumeName","required":true,"schema":{"description":"Volume name","type":"string"}},{"description":"File or directory path to delete","explode":false,"in":"query","name":"path","schema":{"description":"File or directory path to delete","type":"string"}}],"responses":{"204":{"description":"No Content","headers":{"Data":{"schema":{"$ref":"#/components/schemas/BaseMessageResponse","description":"Response data"}},"Success":{"schema":{"description":"Whether the request was successful","type":"boolean"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete file or directory in volume","tags":["Volume Browser"]},"get":{"operationId":"browse-volume-directory","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Volume name","in":"path","name":"volumeName","required":true,"schema":{"description":"Volume name","type":"string"}},{"description":"Directory path to browse","explode":false,"in":"query","name":"path","schema":{"default":"/","description":"Directory path to browse","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseListFileEntry"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List volume directory","tags":["Volume Browser"]}},"/environments/{id}/volumes/{volumeName}/browse/content":{"get":{"operationId":"get-volume-file-content","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Volume name","in":"path","name":"volumeName","required":true,"schema":{"description":"Volume name","type":"string"}},{"description":"File path","explode":false,"in":"query","name":"path","schema":{"description":"File path","type":"string"}},{"description":"Maximum bytes to read (default 1MB)","explode":false,"in":"query","name":"maxBytes","schema":{"default":1048576,"description":"Maximum bytes to read (default 1MB)","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseFileContentResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get file content preview","tags":["Volume Browser"]}},"/environments/{id}/volumes/{volumeName}/browse/download":{"get":{"operationId":"download-volume-file","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Volume name","in":"path","name":"volumeName","required":true,"schema":{"description":"Volume name","type":"string"}},{"description":"File path","explode":false,"in":"query","name":"path","schema":{"description":"File path","type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Download file from volume","tags":["Volume Browser"]}},"/environments/{id}/volumes/{volumeName}/browse/mkdir":{"post":{"operationId":"create-volume-directory","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Volume name","in":"path","name":"volumeName","required":true,"schema":{"description":"Volume name","type":"string"}},{"description":"Directory path to create","explode":false,"in":"query","name":"path","schema":{"description":"Directory path to create","type":"string"}}],"responses":{"204":{"description":"No Content","headers":{"Data":{"schema":{"$ref":"#/components/schemas/BaseMessageResponse","description":"Response data"}},"Success":{"schema":{"description":"Whether the request was successful","type":"boolean"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create directory in volume","tags":["Volume Browser"]}},"/environments/{id}/volumes/{volumeName}/browse/upload":{"post":{"operationId":"upload-volume-file","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Volume name","in":"path","name":"volumeName","required":true,"schema":{"description":"Volume name","type":"string"}},{"description":"Destination path","explode":false,"in":"query","name":"path","schema":{"default":"/","description":"Destination path","type":"string"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"properties":{"file":{"contentMediaType":"application/octet-stream","description":"File to upload","format":"binary","type":"string"}},"required":["file"],"type":"object"}}},"required":true},"responses":{"204":{"description":"No Content","headers":{"Data":{"schema":{"$ref":"#/components/schemas/BaseMessageResponse","description":"Response data"}},"Success":{"schema":{"description":"Whether the request was successful","type":"boolean"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Upload file to volume","tags":["Volume Browser"]}},"/environments/{id}/volumes/{volumeName}/usage":{"get":{"description":"Get containers using a specific volume","operationId":"get-volume-usage","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Volume name","in":"path","name":"volumeName","required":true,"schema":{"description":"Volume name","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseVolumeUsageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get volume usage","tags":["Volumes"]}},"/environments/{id}/vulnerabilities/all":{"get":{"description":"Retrieves paginated vulnerabilities across all scanned images in the environment","operationId":"list-environment-vulnerabilities","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Sort field","explode":false,"in":"query","name":"sort","schema":{"description":"Sort field","type":"string"}},{"description":"Sort order","explode":false,"in":"query","name":"order","schema":{"description":"Sort order","type":"string"}},{"description":"Start offset","explode":false,"in":"query","name":"start","schema":{"description":"Start offset","format":"int64","type":"integer"}},{"description":"Limit","explode":false,"in":"query","name":"limit","schema":{"description":"Limit","format":"int64","type":"integer"}},{"description":"Page number","explode":false,"in":"query","name":"page","schema":{"description":"Page number","format":"int64","type":"integer"}},{"description":"Comma-separated severity filter","explode":false,"in":"query","name":"severity","schema":{"description":"Comma-separated severity filter","type":"string"}},{"description":"Filter by image/repo name (substring)","explode":false,"in":"query","name":"imageName","schema":{"description":"Filter by image/repo name (substring)","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BasePaginatedVulnerabilityWithImage"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List environment vulnerabilities","tags":["Vulnerabilities"]}},"/environments/{id}/vulnerabilities/ignore":{"post":{"description":"Creates an ignore record for a specific vulnerability","operationId":"ignore-vulnerability","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VulnerabilityIgnorePayload"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseIgnoredVulnerability"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Ignore a vulnerability","tags":["Vulnerabilities"]}},"/environments/{id}/vulnerabilities/ignore/{ignoreId}":{"delete":{"description":"Removes an ignore record for a vulnerability","operationId":"unignore-vulnerability","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Ignore record ID","in":"path","name":"ignoreId","required":true,"schema":{"description":"Ignore record ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseStruct {}"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Unignore a vulnerability","tags":["Vulnerabilities"]}},"/environments/{id}/vulnerabilities/ignored":{"get":{"description":"Retrieves a list of all ignored vulnerabilities for the environment","operationId":"list-ignored-vulnerabilities","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Sort field","explode":false,"in":"query","name":"sort","schema":{"description":"Sort field","type":"string"}},{"description":"Sort order","explode":false,"in":"query","name":"order","schema":{"description":"Sort order","type":"string"}},{"description":"Start offset","explode":false,"in":"query","name":"start","schema":{"description":"Start offset","format":"int64","type":"integer"}},{"description":"Limit","explode":false,"in":"query","name":"limit","schema":{"description":"Limit","format":"int64","type":"integer"}},{"description":"Page number","explode":false,"in":"query","name":"page","schema":{"description":"Page number","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BasePaginatedIgnoredVulnerability"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List ignored vulnerabilities","tags":["Vulnerabilities"]}},"/environments/{id}/vulnerabilities/image-options":{"get":{"description":"Retrieves available image filter options for environment vulnerabilities","operationId":"list-environment-vulnerability-image-options","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Comma-separated severity filter","explode":false,"in":"query","name":"severity","schema":{"description":"Comma-separated severity filter","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseListString"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List vulnerability image options","tags":["Vulnerabilities"]}},"/environments/{id}/vulnerabilities/scanner-status":{"get":{"description":"Check if the vulnerability scanner (Trivy) is available and get its version","operationId":"get-vulnerability-scanner-status","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseScannerStatus"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get vulnerability scanner status","tags":["Vulnerabilities"]}},"/environments/{id}/vulnerabilities/summary":{"get":{"description":"Retrieves aggregated vulnerability counts across all images in the environment","operationId":"get-environment-vulnerability-summary","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseEnvironmentVulnerabilitySummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get environment vulnerability summary","tags":["Vulnerabilities"]}},"/environments/{id}/webhooks":{"get":{"description":"List all webhooks configured for this environment","operationId":"list-webhooks","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseListSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List webhooks","tags":["Webhooks"]},"post":{"description":"Create a webhook that triggers a container or stack update. The token is only returned once.","operationId":"create-webhook","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreateInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseCreated"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create webhook","tags":["Webhooks"]}},"/environments/{id}/webhooks/{webhookId}":{"delete":{"description":"Delete a webhook by ID","operationId":"delete-webhook","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Webhook ID","in":"path","name":"webhookId","required":true,"schema":{"description":"Webhook ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseInterface {}"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete webhook","tags":["Webhooks"]},"patch":{"description":"Update a webhook's enabled state","operationId":"update-webhook","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Webhook ID","in":"path","name":"webhookId","required":true,"schema":{"description":"Webhook ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookUpdateInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseInterface {}"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update webhook","tags":["Webhooks"]}},"/events":{"get":{"description":"Get a paginated list of system events","operationId":"listEvents","parameters":[{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction","type":"string"}},{"description":"Start index","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index","format":"int64","type":"integer"}},{"description":"Limit","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Limit","format":"int64","type":"integer"}},{"description":"Filter by severity","explode":false,"in":"query","name":"severity","schema":{"description":"Filter by severity","type":"string"}},{"description":"Filter by event type","explode":false,"in":"query","name":"type","schema":{"description":"Filter by event type","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventPaginatedResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List events","tags":["Events"]},"post":{"description":"Create a new system event","operationId":"createEvent","parameters":[{"description":"API key for environment-scoped event forwarding","in":"header","name":"X-API-Key","schema":{"description":"API key for environment-scoped event forwarding","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventCreateEvent"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseEvent"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create an event","tags":["Events"]}},"/events/environment/{environmentId}":{"get":{"description":"Get a paginated list of events for a specific environment","operationId":"getEventsByEnvironment","parameters":[{"description":"Environment ID","in":"path","name":"environmentId","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction","type":"string"}},{"description":"Start index","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index","format":"int64","type":"integer"}},{"description":"Limit","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Limit","format":"int64","type":"integer"}},{"description":"Filter by severity","explode":false,"in":"query","name":"severity","schema":{"description":"Filter by severity","type":"string"}},{"description":"Filter by event type","explode":false,"in":"query","name":"type","schema":{"description":"Filter by event type","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventPaginatedResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get events by environment","tags":["Events"]}},"/events/{eventId}":{"delete":{"description":"Delete a system event by ID","operationId":"deleteEvent","parameters":[{"description":"Event ID","in":"path","name":"eventId","required":true,"schema":{"description":"Event ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete an event","tags":["Events"]}},"/fonts/mono":{"get":{"description":"Get the application monospace font (Geist Mono)","operationId":"get-mono-font","responses":{"200":{"content":{"application/json":{"schema":{"contentEncoding":"base64","type":"string"}}},"description":"OK","headers":{"Cache-Control":{"schema":{"type":"string"}},"Content-Type":{"schema":{"type":"string"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[],"summary":"Get monospace font","tags":["Fonts"]}},"/fonts/sans":{"get":{"description":"Get the application sans-serif font (Geist)","operationId":"get-sans-font","responses":{"200":{"content":{"application/json":{"schema":{"contentEncoding":"base64","type":"string"}}},"description":"OK","headers":{"Cache-Control":{"schema":{"type":"string"}},"Content-Type":{"schema":{"type":"string"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[],"summary":"Get sans-serif font","tags":["Fonts"]}},"/fonts/serif":{"get":{"description":"Get the application serif font (Calistoga)","operationId":"get-serif-font","responses":{"200":{"content":{"application/json":{"schema":{"contentEncoding":"base64","type":"string"}}},"description":"OK","headers":{"Cache-Control":{"schema":{"type":"string"}},"Content-Type":{"schema":{"type":"string"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[],"summary":"Get serif font","tags":["Fonts"]}},"/git-repositories/sync":{"post":{"description":"Sync git repositories from a manager to this agent instance","operationId":"syncGitRepositories","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GitopsRepositorySyncRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Sync git repositories","tags":["Git Repositories"]}},"/health":{"get":{"description":"Check if the API is healthy","operationId":"health-check","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemHealthResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"summary":"Health check","tags":["Health"]},"head":{"description":"Check if the API is healthy (HEAD request)","operationId":"health-check-head","responses":{"200":{"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"summary":"Health check (HEAD)","tags":["Health"]}},"/notifications/dispatch":{"post":{"operationId":"dispatch-notification","parameters":[{"description":"Remote environment access token","in":"header","name":"X-API-Key","schema":{"description":"Remote environment access token","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationDispatchRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"ApiKeyAuth":[]}],"summary":"Dispatch notification from remote agent to manager","tags":["Notifications"]}},"/oidc/callback":{"post":{"description":"Process the OIDC callback and complete authentication","operationId":"handle-oidc-callback","parameters":[{"in":"header","name":"Origin","schema":{"type":"string"}},{"in":"header","name":"X-Forwarded-Host","schema":{"type":"string"}},{"in":"header","name":"X-Forwarded-Proto","schema":{"type":"string"}},{"in":"header","name":"Host","schema":{"type":"string"}},{"description":"OIDC state cookie from auth URL request","in":"cookie","name":"oidc_state","schema":{"description":"OIDC state cookie from auth URL request","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthOidcCallbackRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthOidcCallbackResponse"}}},"description":"OK","headers":{"Set-Cookie":{"schema":{"description":"Session and clear state cookies","type":"string"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"summary":"Handle OIDC callback","tags":["OIDC"]}},"/oidc/config":{"get":{"description":"Get the OIDC client configuration","operationId":"get-oidc-config","parameters":[{"in":"header","name":"Origin","schema":{"type":"string"}},{"in":"header","name":"X-Forwarded-Host","schema":{"type":"string"}},{"in":"header","name":"X-Forwarded-Proto","schema":{"type":"string"}},{"in":"header","name":"Host","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthOidcConfigResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"summary":"Get OIDC config","tags":["OIDC"]}},"/oidc/device/code":{"post":{"description":"Start the device authorization flow for CLI authentication","operationId":"initiate-oidc-device-auth","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthOidcDeviceAuthResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"summary":"Initiate OIDC device authorization","tags":["OIDC"]}},"/oidc/device/token":{"post":{"description":"Exchange a device code for authentication tokens","operationId":"exchange-oidc-device-token","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthOidcDeviceTokenRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthOidcDeviceTokenResponse"}}},"description":"OK","headers":{"Set-Cookie":{"schema":{"description":"Session token cookie","type":"string"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"summary":"Exchange device code for tokens","tags":["OIDC"]}},"/oidc/status":{"get":{"description":"Get the current OIDC configuration status","operationId":"get-oidc-status","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthOidcStatusInfo"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"summary":"Get OIDC status","tags":["OIDC"]}},"/oidc/url":{"post":{"description":"Generate an OIDC authorization URL for login","operationId":"get-oidc-auth-url","parameters":[{"in":"header","name":"Origin","schema":{"type":"string"}},{"in":"header","name":"X-Forwarded-Host","schema":{"type":"string"}},{"in":"header","name":"X-Forwarded-Proto","schema":{"type":"string"}},{"in":"header","name":"Host","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthOidcAuthUrlRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthOidcAuthUrlResponse"}}},"description":"OK","headers":{"Set-Cookie":{"schema":{"description":"OIDC state cookie","type":"string"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"summary":"Get OIDC auth URL","tags":["OIDC"]}},"/settings/categories":{"get":{"description":"Get all available settings categories with metadata","operationId":"get-settings-categories","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CategoryCategory"},"type":["array","null"]}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get settings categories","tags":["Settings"]}},"/settings/search":{"post":{"description":"Search settings categories and individual settings by query","operationId":"search-settings","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchRequest","description":"Search query"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Search settings","tags":["Settings"]}},"/swarm/node-identity":{"get":{"operationId":"get-swarm-node-identity","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseSwarmNodeIdentity"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get local swarm node identity","tags":["Swarm"]}},"/templates":{"get":{"description":"Get a paginated list of compose templates","operationId":"listTemplatesPaginated","parameters":[{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction","type":"string"}},{"description":"Start index","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index","format":"int64","type":"integer"}},{"description":"Items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Items per page","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplatePaginatedResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"summary":"List templates (paginated)","tags":["Templates"]},"post":{"description":"Create a new compose template","operationId":"createTemplate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateCreateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseTemplate"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a template","tags":["Templates"]}},"/templates/all":{"get":{"description":"Get all compose templates without pagination","operationId":"getAllTemplates","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseListTemplate"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"summary":"List all templates","tags":["Templates"]}},"/templates/default":{"get":{"description":"Get the default compose and env templates","operationId":"getDefaultTemplates","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseDefaultTemplatesResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get default templates","tags":["Templates"]},"post":{"description":"Save the default compose and env templates","operationId":"saveDefaultTemplates","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateSaveDefaultTemplatesRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Save default templates","tags":["Templates"]}},"/templates/fetch":{"get":{"description":"Fetch templates from a remote registry URL","operationId":"fetchTemplateRegistry","parameters":[{"description":"Registry URL","explode":false,"in":"query","name":"url","required":true,"schema":{"description":"Registry URL","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseRemoteRegistry"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"summary":"Fetch remote registry","tags":["Templates"]}},"/templates/registries":{"get":{"description":"Get all template registries","operationId":"getTemplateRegistries","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseListTemplateRegistry"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List template registries","tags":["Templates"]},"post":{"description":"Create a new template registry","operationId":"createTemplateRegistry","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateCreateRegistryRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseTemplateRegistry"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a template registry","tags":["Templates"]}},"/templates/registries/{id}":{"delete":{"description":"Delete a template registry","operationId":"deleteTemplateRegistry","parameters":[{"description":"Registry ID","in":"path","name":"id","required":true,"schema":{"description":"Registry ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete a template registry","tags":["Templates"]},"put":{"description":"Update an existing template registry","operationId":"updateTemplateRegistry","parameters":[{"description":"Registry ID","in":"path","name":"id","required":true,"schema":{"description":"Registry ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateUpdateRegistryRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update a template registry","tags":["Templates"]}},"/templates/{id}":{"delete":{"description":"Delete a compose template","operationId":"deleteTemplate","parameters":[{"description":"Template ID","in":"path","name":"id","required":true,"schema":{"description":"Template ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete a template","tags":["Templates"]},"get":{"description":"Get a compose template by ID","operationId":"getTemplate","parameters":[{"description":"Template ID","in":"path","name":"id","required":true,"schema":{"description":"Template ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseTemplate"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"summary":"Get a template","tags":["Templates"]},"put":{"description":"Update an existing compose template","operationId":"updateTemplate","parameters":[{"description":"Template ID","in":"path","name":"id","required":true,"schema":{"description":"Template ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateUpdateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseTemplate"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update a template","tags":["Templates"]}},"/templates/{id}/content":{"get":{"description":"Get the compose content for a template with parsed data","operationId":"getTemplateContent","parameters":[{"description":"Template ID","in":"path","name":"id","required":true,"schema":{"description":"Template ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseTemplateContent"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"summary":"Get template content","tags":["Templates"]}},"/templates/{id}/download":{"post":{"description":"Download a remote template to local storage","operationId":"downloadTemplate","parameters":[{"description":"Template ID","in":"path","name":"id","required":true,"schema":{"description":"Template ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseTemplate"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Download a template","tags":["Templates"]}},"/users":{"get":{"description":"Get a paginated list of all users","operationId":"listUsers","parameters":[{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction","type":"string"}},{"description":"Start index","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index","format":"int64","type":"integer"}},{"description":"Items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Items per page","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPaginatedResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List users","tags":["Users"]},"post":{"description":"Create a new user account","operationId":"createUser","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreateUser"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseUser"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a user","tags":["Users"]}},"/users/{userId}":{"delete":{"description":"Delete a user by ID","operationId":"deleteUser","parameters":[{"description":"User ID","in":"path","name":"userId","required":true,"schema":{"description":"User ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete a user","tags":["Users"]},"get":{"description":"Get a user by ID","operationId":"getUser","parameters":[{"description":"User ID","in":"path","name":"userId","required":true,"schema":{"description":"User ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseUser"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get a user","tags":["Users"]},"put":{"description":"Update an existing user's information","operationId":"updateUser","parameters":[{"description":"User ID","in":"path","name":"userId","required":true,"schema":{"description":"User ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdateUser"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseUser"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update a user","tags":["Users"]}},"/version":{"get":{"description":"Get application version information and check for updates","operationId":"getVersion","parameters":[{"description":"Current version to compare against","explode":false,"in":"query","name":"current","schema":{"description":"Current version to compare against","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionCheck"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"summary":"Get version information","tags":["Version"]}}},"servers":[{"url":"https://arcane.randomsynergy.xyz:3552/api"}]}
\ No newline at end of file
+{"components":{"schemas":{"ActivityActivity":{"additionalProperties":false,"properties":{"createdAt":{"format":"date-time","type":"string"},"durationMs":{"format":"int64","type":"integer"},"endedAt":{"format":"date-time","type":"string"},"environmentId":{"type":"string"},"error":{"type":"string"},"id":{"type":"string"},"latestMessage":{"type":"string"},"metadata":{"additionalProperties":{},"type":"object"},"progress":{"format":"int64","type":"integer"},"resourceId":{"type":"string"},"resourceName":{"type":"string"},"resourceType":{"type":"string"},"sourceEnvironmentId":{"type":"string"},"sourceEnvironmentName":{"type":"string"},"startedAt":{"format":"date-time","type":"string"},"startedBy":{"$ref":"#/components/schemas/ActivityStartedBy"},"status":{"type":"string"},"step":{"type":"string"},"type":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","environmentId","type","status","startedAt","createdAt"],"type":"object"},"ActivityClearHistoryResult":{"additionalProperties":false,"properties":{"deleted":{"format":"int64","type":"integer"}},"required":["deleted"],"type":"object"},"ActivityDetail":{"additionalProperties":false,"properties":{"activity":{"$ref":"#/components/schemas/ActivityActivity"},"messages":{"items":{"$ref":"#/components/schemas/ActivityMessage"},"type":["array","null"]}},"required":["activity","messages"],"type":"object"},"ActivityMessage":{"additionalProperties":false,"properties":{"activityId":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"id":{"type":"string"},"level":{"type":"string"},"message":{"type":"string"},"payload":{"additionalProperties":{},"type":"object"}},"required":["id","activityId","level","message","createdAt"],"type":"object"},"ActivityStartedBy":{"additionalProperties":false,"properties":{"displayName":{"type":"string"},"userId":{"type":"string"},"username":{"type":"string"}},"required":["username"],"type":"object"},"ApiKeyPaginatedResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ApiKeyPaginatedResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"items":{"$ref":"#/components/schemas/ApikeyApiKey"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"ApiResponseStruct {}DataStruct":{"additionalProperties":false,"type":"object"},"ApikeyApiKey":{"additionalProperties":false,"properties":{"createdAt":{"description":"Creation timestamp","format":"date-time","type":"string"},"description":{"description":"Description of the API key","type":"string"},"expiresAt":{"description":"Expiration date of the API key","format":"date-time","type":"string"},"id":{"description":"Unique identifier of the API key","type":"string"},"isBootstrap":{"description":"Whether the API key is an auto-generated environment bootstrap key (locked from manual edit / delete)","type":"boolean"},"isStatic":{"description":"Whether the API key is environment-managed and protected from deletion","type":"boolean"},"keyPrefix":{"description":"Prefix of the API key for identification","type":"string"},"kind":{"description":"Key kind: 'scoped' keys use their own permission grants, 'personal' keys inherit the owner's role permissions","type":"string"},"lastUsedAt":{"description":"Last time the API key was used","format":"date-time","type":"string"},"name":{"description":"Name of the API key","type":"string"},"permissions":{"description":"Permissions held by this key","items":{"$ref":"#/components/schemas/ApikeyPermissionGrant"},"type":["array","null"]},"updatedAt":{"description":"Last update timestamp","format":"date-time","type":"string"},"userId":{"description":"ID of the user who owns the API key","type":"string"}},"required":["id","name","keyPrefix","kind","isStatic","isBootstrap","createdAt","permissions"],"type":"object"},"ApikeyApiKeyCreatedDto":{"additionalProperties":false,"properties":{"createdAt":{"description":"Creation timestamp","format":"date-time","type":"string"},"description":{"description":"Description of the API key","type":"string"},"expiresAt":{"description":"Expiration date of the API key","format":"date-time","type":"string"},"id":{"description":"Unique identifier of the API key","type":"string"},"isBootstrap":{"description":"Whether the API key is an auto-generated environment bootstrap key (locked from manual edit / delete)","type":"boolean"},"isStatic":{"description":"Whether the API key is environment-managed and protected from deletion","type":"boolean"},"key":{"description":"The full API key secret (only shown once)","type":"string"},"keyPrefix":{"description":"Prefix of the API key for identification","type":"string"},"kind":{"description":"Key kind: 'scoped' keys use their own permission grants, 'personal' keys inherit the owner's role permissions","type":"string"},"lastUsedAt":{"description":"Last time the API key was used","format":"date-time","type":"string"},"name":{"description":"Name of the API key","type":"string"},"permissions":{"description":"Permissions held by this key","items":{"$ref":"#/components/schemas/ApikeyPermissionGrant"},"type":["array","null"]},"updatedAt":{"description":"Last update timestamp","format":"date-time","type":"string"},"userId":{"description":"ID of the user who owns the API key","type":"string"}},"required":["key","id","name","keyPrefix","kind","isStatic","isBootstrap","createdAt","permissions"],"type":"object"},"ApikeyCreateApiKey":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ApikeyCreateApiKey.json"],"format":"uri","readOnly":true,"type":"string"},"description":{"description":"Optional description of the API key","maxLength":1000,"type":"string"},"expiresAt":{"description":"Optional expiration date for the API key","format":"date-time","type":"string"},"name":{"description":"Name of the API key","examples":["My API Key"],"maxLength":255,"minLength":1,"type":"string"},"permissions":{"description":"Permissions granted to this key. Cannot exceed the creator's own permissions.","items":{"$ref":"#/components/schemas/ApikeyPermissionGrant"},"minItems":1,"type":["array","null"]}},"required":["name","permissions"],"type":"object"},"ApikeyCreateUserApiKey":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ApikeyCreateUserApiKey.json"],"format":"uri","readOnly":true,"type":"string"},"description":{"description":"Optional description of the API key","maxLength":1000,"type":"string"},"expiresAt":{"description":"Optional expiration date for the API key","format":"date-time","type":"string"},"name":{"description":"Name of the API key","examples":["My API Key"],"maxLength":255,"minLength":1,"type":"string"}},"required":["name"],"type":"object"},"ApikeyPermissionGrant":{"additionalProperties":false,"properties":{"environmentId":{"description":"Environment ID to scope the grant to; omit for a global grant","type":"string"},"permission":{"description":"Permission string","examples":["containers:list"],"minLength":1,"type":"string"}},"required":["permission"],"type":"object"},"ApikeyUpdateApiKey":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ApikeyUpdateApiKey.json"],"format":"uri","readOnly":true,"type":"string"},"description":{"description":"New description for the API key","maxLength":1000,"type":"string"},"expiresAt":{"description":"New expiration date for the API key","format":"date-time","type":"string"},"name":{"description":"New name for the API key","maxLength":255,"type":"string"},"permissions":{"description":"Replace the key's permission grants. Omit to leave unchanged. Cannot exceed the updater's own permissions.","items":{"$ref":"#/components/schemas/ApikeyPermissionGrant"},"type":["array","null"]}},"type":"object"},"AuthLogin":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/AuthLogin.json"],"format":"uri","readOnly":true,"type":"string"},"password":{"description":"Password of the user","minLength":1,"type":"string"},"username":{"description":"Username of the user","examples":["admin"],"maxLength":255,"minLength":1,"type":"string"}},"required":["username","password"],"type":"object"},"AuthLoginResponse":{"additionalProperties":false,"properties":{"expiresAt":{"description":"Expiration time of the access token","format":"date-time","type":"string"},"refreshToken":{"description":"Refresh token for obtaining new access tokens","type":"string"},"token":{"description":"JWT access token","type":"string"},"user":{"$ref":"#/components/schemas/UserUser","description":"Authenticated user information"}},"required":["token","refreshToken","expiresAt","user"],"type":"object"},"AuthOidcAuthUrlRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/AuthOidcAuthUrlRequest.json"],"format":"uri","readOnly":true,"type":"string"},"mobileRedirectUri":{"type":"string"},"redirectUri":{"type":"string"}},"required":["redirectUri"],"type":"object"},"AuthOidcAuthUrlResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/AuthOidcAuthUrlResponse.json"],"format":"uri","readOnly":true,"type":"string"},"authUrl":{"type":"string"}},"required":["authUrl"],"type":"object"},"AuthOidcCallbackRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/AuthOidcCallbackRequest.json"],"format":"uri","readOnly":true,"type":"string"},"code":{"type":"string"},"mobileRedirectUri":{"type":"string"},"state":{"type":"string"}},"required":["code","state"],"type":"object"},"AuthOidcCallbackResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/AuthOidcCallbackResponse.json"],"format":"uri","readOnly":true,"type":"string"},"expiresAt":{"format":"date-time","type":"string"},"refreshToken":{"type":"string"},"success":{"type":"boolean"},"token":{"type":"string"},"user":{"$ref":"#/components/schemas/UserUser"}},"required":["success","token","refreshToken","expiresAt","user"],"type":"object"},"AuthOidcConfigResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/AuthOidcConfigResponse.json"],"format":"uri","readOnly":true,"type":"string"},"authorizationEndpoint":{"type":"string"},"clientId":{"type":"string"},"deviceAuthorizationEndpoint":{"type":"string"},"issuerUrl":{"type":"string"},"redirectUri":{"type":"string"},"scopes":{"type":"string"},"tokenEndpoint":{"type":"string"},"userinfoEndpoint":{"type":"string"}},"required":["clientId","redirectUri","issuerUrl","authorizationEndpoint","tokenEndpoint","userinfoEndpoint","scopes"],"type":"object"},"AuthOidcDeviceAuthResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/AuthOidcDeviceAuthResponse.json"],"format":"uri","readOnly":true,"type":"string"},"deviceCode":{"type":"string"},"expiresIn":{"format":"int64","type":"integer"},"interval":{"format":"int64","type":"integer"},"userCode":{"type":"string"},"verificationUri":{"type":"string"},"verificationUriComplete":{"type":"string"}},"required":["deviceCode","userCode","verificationUri","expiresIn"],"type":"object"},"AuthOidcDeviceTokenRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/AuthOidcDeviceTokenRequest.json"],"format":"uri","readOnly":true,"type":"string"},"deviceCode":{"type":"string"}},"required":["deviceCode"],"type":"object"},"AuthOidcDeviceTokenResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/AuthOidcDeviceTokenResponse.json"],"format":"uri","readOnly":true,"type":"string"},"expiresAt":{"format":"date-time","type":"string"},"refreshToken":{"type":"string"},"success":{"type":"boolean"},"token":{"type":"string"},"user":{"$ref":"#/components/schemas/UserUser"}},"required":["success","token","refreshToken","expiresAt","user"],"type":"object"},"AuthOidcStatusInfo":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/AuthOidcStatusInfo.json"],"format":"uri","readOnly":true,"type":"string"},"envConfigured":{"type":"boolean"},"envForced":{"type":"boolean"},"mergeAccounts":{"type":"boolean"},"providerLogoUrl":{"type":"string"},"providerName":{"type":"string"}},"required":["envForced","envConfigured","mergeAccounts"],"type":"object"},"AuthPasswordChange":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/AuthPasswordChange.json"],"format":"uri","readOnly":true,"type":"string"},"currentPassword":{"description":"Current password of the user (required for non-OIDC users)","type":"string"},"newPassword":{"description":"New password for the user","minLength":8,"type":"string"}},"required":["newPassword"],"type":"object"},"AuthRefresh":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/AuthRefresh.json"],"format":"uri","readOnly":true,"type":"string"},"refreshToken":{"description":"Refresh token used to obtain a new access token","minLength":1,"type":"string"}},"required":["refreshToken"],"type":"object"},"AuthTokenRefreshResponse":{"additionalProperties":false,"properties":{"expiresAt":{"description":"Expiration time of the new access token","format":"date-time","type":"string"},"refreshToken":{"description":"New refresh token","type":"string"},"token":{"description":"New JWT access token","type":"string"}},"required":["token","refreshToken","expiresAt"],"type":"object"},"AutoUpdateRecord":{"additionalProperties":false,"properties":{"createdAt":{"format":"date-time","type":"string"},"details":{"additionalProperties":{},"type":"object"},"endTime":{"format":"date-time","type":"string"},"error":{"type":"string"},"id":{"type":"string"},"newImageVersions":{"additionalProperties":{},"type":"object"},"oldImageVersions":{"additionalProperties":{},"type":"object"},"resourceId":{"type":"string"},"resourceName":{"type":"string"},"resourceType":{"type":"string"},"startTime":{"format":"date-time","type":"string"},"status":{"type":"string"},"updateApplied":{"type":"boolean"},"updateAvailable":{"type":"boolean"},"updatedAt":{"format":"date-time","type":"string"}},"required":["resourceId","resourceType","resourceName","status","startTime","updateAvailable","updateApplied","id","createdAt"],"type":"object"},"BackupHasPathResponse":{"additionalProperties":false,"properties":{"exists":{"type":"boolean"}},"required":["exists"],"type":"object"},"BaseApiResponseActionResult":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseActionResult.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ContainerActionResult","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseActivity":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseActivity.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ActivityActivity","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseAgentPairResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseAgentPairResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/EnvironmentAgentPairResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseApiKey":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseApiKey.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ApikeyApiKey","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseApiKeyCreatedDto":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseApiKeyCreatedDto.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ApikeyApiKeyCreatedDto","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseAttestationList":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseAttestationList.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ImageAttestationList","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseBackupHasPathResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseBackupHasPathResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/BackupHasPathResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseBatchResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseBatchResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"additionalProperties":{"$ref":"#/components/schemas/ImageupdateResponse"},"description":"Response data","type":"object"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseBranchesResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseBranchesResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/GitopsBranchesResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseBrowseResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseBrowseResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/GitopsBrowseResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseBuildFileContentResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseBuildFileContentResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/BuildFileContentResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseBuildRecord":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseBuildRecord.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ImageBuildRecord","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseClearHistoryResult":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseClearHistoryResult.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ActivityClearHistoryResult","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseCommitResult":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseCommitResult.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ContainerCommitResult","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseConfig":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseConfig.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/JobscheduleConfig","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseConfigSummary":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseConfigSummary.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/SwarmConfigSummary","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseContainerRegistry":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseContainerRegistry.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ContainerregistryContainerRegistry","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseCreateReponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseCreateReponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ProjectCreateReponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseCreated":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseCreated.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/WebhookCreated","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseDefaultTemplatesResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseDefaultTemplatesResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/TemplateDefaultTemplatesResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseDeploymentSnippet":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseDeploymentSnippet.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/DeploymentSnippet","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseDetail":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseDetail.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ActivityDetail","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseDetailSummary":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseDetailSummary.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ImageDetailSummary","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseDetails":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseDetails.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ProjectDetails","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseDispatchResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseDispatchResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/NotificationDispatchResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseEnvironment":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseEnvironment.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/EnvironmentEnvironment","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseEnvironmentUpdateJob":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseEnvironmentUpdateJob.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/EnvironmentUpdateJob","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseEnvironmentVulnerabilitySummary":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseEnvironmentVulnerabilitySummary.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/VulnerabilityEnvironmentVulnerabilitySummary","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseEnvironmentWithApiKey":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseEnvironmentWithApiKey.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/EnvironmentWithApiKey","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseFederatedCredential":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseFederatedCredential.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/FederatedFederatedCredential","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseFileContentResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseFileContentResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/FileContentResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseGitOpsSync":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseGitOpsSync.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/GitopsGitOpsSync","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseGitRepository":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseGitRepository.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/GitopsGitRepository","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseIgnoredVulnerability":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseIgnoredVulnerability.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/VulnerabilityIgnoredVulnerability","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseImportGitOpsSyncResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseImportGitOpsSyncResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/GitopsImportGitOpsSyncResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseIncludeFile":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseIncludeFile.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ProjectIncludeFile","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseInfo":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseInfo.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/VersionInfo","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseInterface {}":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseInterface {}.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseListApiKey":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListApiKey.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"description":"Response data","items":{"$ref":"#/components/schemas/ApikeyApiKey"},"type":["array","null"]},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseListAutoUpdateRecord":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListAutoUpdateRecord.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"description":"Response data","items":{"$ref":"#/components/schemas/AutoUpdateRecord"},"type":["array","null"]},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseListConfigSummary":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListConfigSummary.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"description":"Response data","items":{"$ref":"#/components/schemas/SwarmConfigSummary"},"type":["array","null"]},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseListFileEntry":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListFileEntry.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"description":"Response data","items":{"$ref":"#/components/schemas/VolumeFileEntry"},"type":["array","null"]},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseListHistoryItem":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListHistoryItem.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"description":"Response data","items":{"$ref":"#/components/schemas/ImageHistoryItem"},"type":["array","null"]},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseListRoleAssignment":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListRoleAssignment.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"description":"Response data","items":{"$ref":"#/components/schemas/RoleRoleAssignment"},"type":["array","null"]},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseListSearchResult":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListSearchResult.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"description":"Response data","items":{"$ref":"#/components/schemas/ImageSearchResult"},"type":["array","null"]},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseListSecretSummary":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListSecretSummary.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"description":"Response data","items":{"$ref":"#/components/schemas/SwarmSecretSummary"},"type":["array","null"]},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseListSettingDto":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListSettingDto.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"description":"Response data","items":{"$ref":"#/components/schemas/SettingsSettingDto"},"type":["array","null"]},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseListString":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListString.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"description":"Response data","items":{"type":"string"},"type":["array","null"]},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseListSummary":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListSummary.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"description":"Response data","items":{"$ref":"#/components/schemas/WebhookSummary"},"type":["array","null"]},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseListTemplate":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListTemplate.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"description":"Response data","items":{"$ref":"#/components/schemas/TemplateTemplate"},"type":["array","null"]},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseListTemplateRegistry":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListTemplateRegistry.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"description":"Response data","items":{"$ref":"#/components/schemas/TemplateTemplateRegistry"},"type":["array","null"]},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseListVariable":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListVariable.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"description":"Response data","items":{"$ref":"#/components/schemas/EnvVariable"},"type":["array","null"]},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseListVolumeSizeInfo":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListVolumeSizeInfo.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"description":"Response data","items":{"$ref":"#/components/schemas/VolumeSizeInfo"},"type":["array","null"]},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseLoadResult":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseLoadResult.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ImageLoadResult","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseLoginResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseLoginResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/AuthLoginResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseMapStringUpdateInfo":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseMapStringUpdateInfo.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"additionalProperties":{"$ref":"#/components/schemas/ImageUpdateInfo"},"description":"Response data","type":"object"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseMessageResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseMessageResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/BaseMessageResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseNodeSummary":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseNodeSummary.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/SwarmNodeSummary","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponsePermissionsManifest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponsePermissionsManifest.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/RolePermissionsManifest","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponsePruneAllResult":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponsePruneAllResult.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/SystemPruneAllResult","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponsePruneReport":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponsePruneReport.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ImagePruneReport","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponsePullUsageResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponsePullUsageResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ContainerregistryPullUsageResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseRemoteRegistry":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseRemoteRegistry.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/TemplateRemoteRegistry","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ImageupdateResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseResult":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseResult.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/UpdaterResult","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseRole":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseRole.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/RoleRole","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseRuntimeStatus":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseRuntimeStatus.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/SwarmRuntimeStatus","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseScanResult":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseScanResult.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/VulnerabilityScanResult","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseScanSummariesResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseScanSummariesResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/VulnerabilityScanSummariesResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseScanSummary":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseScanSummary.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/VulnerabilityScanSummary","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseScannerStatus":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseScannerStatus.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ScannerStatus","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseSecretSummary":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSecretSummary.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/SwarmSecretSummary","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseServiceCreateResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseServiceCreateResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/SwarmServiceCreateResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseServiceInspect":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseServiceInspect.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/SwarmServiceInspect","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseServiceUpdateResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseServiceUpdateResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/SwarmServiceUpdateResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseSnapshot":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSnapshot.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/DashboardSnapshot","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseStackDeployResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseStackDeployResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/SwarmStackDeployResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseStackInspect":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseStackInspect.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/SwarmStackInspect","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseStackRenderConfigResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseStackRenderConfigResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/SwarmStackRenderConfigResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseStackSource":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseStackSource.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/SwarmStackSource","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseStatus":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseStatus.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/UpdaterStatus","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseStatusCounts":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseStatusCounts.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ProjectStatusCounts","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseStruct {}":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseStruct {}.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ApiResponseStruct {}DataStruct","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseSummary":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSummary.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ImageupdateSummary","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseSwarmInfo":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSwarmInfo.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/SwarmSwarmInfo","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseSwarmInitResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSwarmInitResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/SwarmSwarmInitResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseSwarmJoinTokensResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSwarmJoinTokensResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/SwarmSwarmJoinTokensResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseSwarmNodeAgentDeployment":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSwarmNodeAgentDeployment.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/SwarmNodeAgentDeployment","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseSwarmNodeIdentity":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSwarmNodeIdentity.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/SwarmNodeIdentity","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseSwarmUnlockKeyResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSwarmUnlockKeyResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/SwarmSwarmUnlockKeyResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseSyncResult":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSyncResult.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/GitopsSyncResult","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseSyncStatus":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSyncStatus.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/GitopsSyncStatus","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseTemplate":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseTemplate.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/TemplateTemplate","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseTemplateContent":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseTemplateContent.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/TemplateTemplateContent","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseTemplateRegistry":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseTemplateRegistry.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/TemplateTemplateRegistry","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseTest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseTest.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/EnvironmentTest","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseTestResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseTestResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/NotificationTestResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseTokenRefreshResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseTokenRefreshResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/AuthTokenRefreshResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseUser":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseUser.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/UserUser","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseVolume":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseVolume.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/VolumeVolume","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseVolumeBackup":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseVolumeBackup.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/VolumeBackup","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseVolumePruneReportData":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseVolumePruneReportData.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/VolumePruneReportData","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseVolumeUsageCountsData":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseVolumeUsageCountsData.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/VolumeUsageCountsData","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseApiResponseVolumeUsageResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseVolumeUsageResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/VolumeUsageResponse","description":"Response data"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data"],"type":"object"},"BaseMessageResponse":{"additionalProperties":false,"properties":{"activityId":{"description":"Background activity ID tracking this action","type":"string"},"message":{"description":"Response message","type":"string"}},"required":["message"],"type":"object"},"BasePaginatedActivity":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BasePaginatedActivity.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"description":"Array of items for the current page","items":{"$ref":"#/components/schemas/ActivityActivity"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse","description":"Pagination metadata"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"BasePaginatedFederatedCredential":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BasePaginatedFederatedCredential.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"description":"Array of items for the current page","items":{"$ref":"#/components/schemas/FederatedFederatedCredential"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse","description":"Pagination metadata"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"BasePaginatedIgnoredVulnerability":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BasePaginatedIgnoredVulnerability.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"description":"Array of items for the current page","items":{"$ref":"#/components/schemas/VulnerabilityIgnoredVulnerability"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse","description":"Pagination metadata"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"BasePaginatedVulnerability":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BasePaginatedVulnerability.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"description":"Array of items for the current page","items":{"$ref":"#/components/schemas/VulnerabilityVulnerability"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse","description":"Pagination metadata"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"BasePaginatedVulnerabilityWithImage":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BasePaginatedVulnerabilityWithImage.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"description":"Array of items for the current page","items":{"$ref":"#/components/schemas/VulnerabilityVulnerabilityWithImage"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse","description":"Pagination metadata"},"success":{"description":"Whether the request was successful","type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"BasePaginationResponse":{"additionalProperties":false,"properties":{"currentPage":{"description":"Current page number (1-indexed)","format":"int64","type":"integer"},"grandTotalItems":{"description":"Total number of items without filters","format":"int64","type":"integer"},"itemsPerPage":{"description":"Number of items per page","format":"int64","type":"integer"},"totalItems":{"description":"Total number of items in the current filtered set","format":"int64","type":"integer"},"totalPages":{"description":"Total number of pages","format":"int64","type":"integer"}},"required":["totalPages","totalItems","currentPage","itemsPerPage"],"type":"object"},"BlkioConfig":{"additionalProperties":false,"properties":{"device_read_bps":{"items":{"$ref":"#/components/schemas/DockerTypesThrottleDevice"},"type":["array","null"]},"device_read_iops":{"items":{"$ref":"#/components/schemas/DockerTypesThrottleDevice"},"type":["array","null"]},"device_write_bps":{"items":{"$ref":"#/components/schemas/DockerTypesThrottleDevice"},"type":["array","null"]},"device_write_iops":{"items":{"$ref":"#/components/schemas/DockerTypesThrottleDevice"},"type":["array","null"]},"weight":{"format":"int32","minimum":0,"type":"integer"},"weight_device":{"items":{"$ref":"#/components/schemas/DockerTypesWeightDevice"},"type":["array","null"]}},"type":"object"},"BuildConfig":{"additionalProperties":false,"properties":{"additional_contexts":{"additionalProperties":{"type":"string"},"type":"object"},"args":{"additionalProperties":{"type":["string","null"]},"type":"object"},"cache_from":{"items":{"type":"string"},"type":["array","null"]},"cache_to":{"items":{"type":"string"},"type":["array","null"]},"context":{"type":"string"},"dockerfile":{"type":"string"},"dockerfile_inline":{"type":"string"},"entitlements":{"items":{"type":"string"},"type":["array","null"]},"extra_hosts":{"additionalProperties":{"items":{"type":"string"},"type":["array","null"]},"type":"object"},"isolation":{"type":"string"},"labels":{"additionalProperties":{"type":"string"},"type":"object"},"network":{"type":"string"},"no_cache":{"type":"boolean"},"no_cache_filter":{"items":{"type":"string"},"type":["array","null"]},"platforms":{"items":{"type":"string"},"type":["array","null"]},"privileged":{"type":"boolean"},"provenance":{"type":"string"},"pull":{"type":"boolean"},"sbom":{"type":"string"},"secrets":{"items":{"$ref":"#/components/schemas/DockerTypesServiceSecretConfig"},"type":["array","null"]},"shm_size":{"format":"int64","type":"integer"},"ssh":{"items":{"$ref":"#/components/schemas/DockerTypesSSHKey"},"type":["array","null"]},"tags":{"items":{"type":"string"},"type":["array","null"]},"target":{"type":"string"},"ulimits":{"additionalProperties":{"$ref":"#/components/schemas/UlimitsConfig"},"type":"object"}},"type":"object"},"BuildFileContentResponse":{"additionalProperties":false,"properties":{"content":{"contentEncoding":"base64","type":"string"},"mimeType":{"type":"string"}},"required":["content","mimeType"],"type":"object"},"BuildProjectInputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/BuildProjectInputBody.json"],"format":"uri","readOnly":true,"type":"string"},"load":{"description":"Load images into Docker","type":"boolean"},"provider":{"description":"Build provider override","type":"string"},"push":{"description":"Push images","type":"boolean"},"services":{"description":"Service names to build","items":{"type":"string"},"type":["array","null"]}},"type":"object"},"CategoryCategory":{"additionalProperties":false,"properties":{"description":{"type":"string"},"icon":{"type":"string"},"id":{"type":"string"},"keywords":{"items":{"type":"string"},"type":["array","null"]},"matchingSettings":{"items":{"$ref":"#/components/schemas/MetaMetadata"},"type":["array","null"]},"relevanceScore":{"format":"int64","type":"integer"},"settings":{"items":{"$ref":"#/components/schemas/MetaMetadata"},"type":["array","null"]},"title":{"type":"string"},"url":{"type":"string"}},"required":["id","title","description","icon","url","keywords","settings"],"type":"object"},"ContainerActionResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ContainerActionResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/BaseMessageResponse"},"success":{"type":"boolean"}},"required":["success","data"],"type":"object"},"ContainerActionResult":{"additionalProperties":false,"properties":{"activityId":{"type":"string"},"errors":{"items":{"type":"string"},"type":["array","null"]},"failed":{"items":{"type":"string"},"type":["array","null"]},"started":{"items":{"type":"string"},"type":["array","null"]},"stopped":{"items":{"type":"string"},"type":["array","null"]},"success":{"type":"boolean"}},"required":["success"],"type":"object"},"ContainerCommitRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ContainerCommitRequest.json"],"format":"uri","readOnly":true,"type":"string"},"author":{"description":"Commit author","type":"string"},"changes":{"description":"Dockerfile changes to apply","items":{"type":"string"},"type":["array","null"]},"comment":{"description":"Commit comment","type":"string"},"noPause":{"description":"Do not pause the container during commit","type":"boolean"},"repository":{"description":"Target image repository","type":"string"},"tag":{"description":"Target image tag","type":"string"}},"type":"object"},"ContainerCommitResult":{"additionalProperties":false,"properties":{"id":{"type":"string"}},"required":["id"],"type":"object"},"ContainerComposeInfo":{"additionalProperties":false,"properties":{"configFiles":{"type":"string"},"projectName":{"type":"string"},"serviceName":{"type":"string"},"workingDir":{"type":"string"}},"required":["projectName","serviceName"],"type":"object"},"ContainerConfig":{"additionalProperties":false,"properties":{"cmd":{"items":{"type":"string"},"type":["array","null"]},"entrypoint":{"items":{"type":"string"},"type":["array","null"]},"env":{"items":{"type":"string"},"type":["array","null"]},"healthcheck":{"$ref":"#/components/schemas/ContainerHealthcheck"},"user":{"type":"string"},"workingDir":{"type":"string"}},"type":"object"},"ContainerCreate":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ContainerCreate.json"],"format":"uri","readOnly":true,"type":"string"},"attachStderr":{"type":"boolean"},"attachStdin":{"type":"boolean"},"attachStdout":{"type":"boolean"},"autoRemove":{"type":"boolean"},"cmd":{"items":{"type":"string"},"type":["array","null"]},"command":{"items":{"type":"string"},"type":["array","null"]},"cpus":{"format":"double","type":"number"},"credentials":{"items":{"$ref":"#/components/schemas/ContainerregistryCredential"},"type":["array","null"]},"domainname":{"type":"string"},"entrypoint":{"items":{"type":"string"},"type":["array","null"]},"env":{"items":{"type":"string"},"type":["array","null"]},"environment":{"items":{"type":"string"},"type":["array","null"]},"exposedPorts":{"additionalProperties":{"$ref":"#/components/schemas/Value"},"type":"object"},"hostConfig":{"$ref":"#/components/schemas/ContainerHostConfigCreate"},"hostname":{"type":"string"},"image":{"type":"string"},"labels":{"additionalProperties":{"type":"string"},"type":"object"},"memory":{"format":"int64","type":"integer"},"name":{"type":"string"},"networkDisabled":{"type":"boolean"},"networkingConfig":{"$ref":"#/components/schemas/ContainerNetworkingConfigCreate"},"networks":{"items":{"type":"string"},"type":["array","null"]},"openStdin":{"type":"boolean"},"ports":{"additionalProperties":{"type":"string"},"type":"object"},"privileged":{"type":"boolean"},"restartPolicy":{"type":"string"},"stdinOnce":{"type":"boolean"},"tty":{"type":"boolean"},"user":{"type":"string"},"volumes":{"items":{"type":"string"},"type":["array","null"]},"workingDir":{"type":"string"}},"required":["name","image"],"type":"object"},"ContainerCreated":{"additionalProperties":false,"properties":{"created":{"type":"string"},"id":{"type":"string"},"image":{"type":"string"},"name":{"type":"string"},"status":{"type":"string"}},"required":["id","name","image","status","created"],"type":"object"},"ContainerCreatedResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ContainerCreatedResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ContainerCreated"},"success":{"type":"boolean"}},"required":["success","data"],"type":"object"},"ContainerDetails":{"additionalProperties":false,"properties":{"activityId":{"type":"string"},"composeInfo":{"$ref":"#/components/schemas/ContainerComposeInfo"},"config":{"$ref":"#/components/schemas/ContainerConfig"},"created":{"type":"string"},"hostConfig":{"$ref":"#/components/schemas/ContainerHostConfig"},"iconDarkUrl":{"type":"string"},"iconLightUrl":{"type":"string"},"id":{"type":"string"},"image":{"type":"string"},"imageId":{"type":"string"},"labels":{"additionalProperties":{"type":"string"},"type":"object"},"mounts":{"items":{"$ref":"#/components/schemas/ContainerMount"},"type":["array","null"]},"name":{"type":"string"},"networkSettings":{"$ref":"#/components/schemas/ContainerNetworkSettings"},"ports":{"items":{"$ref":"#/components/schemas/ContainerPort"},"type":["array","null"]},"redeployDisabled":{"type":"boolean"},"state":{"$ref":"#/components/schemas/ContainerState"}},"required":["id","name","image","imageId","created","state","config","hostConfig","networkSettings","ports","mounts"],"type":"object"},"ContainerDetailsResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ContainerDetailsResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ContainerDetails"},"success":{"type":"boolean"}},"required":["success","data"],"type":"object"},"ContainerEndpointSettingsCreate":{"additionalProperties":false,"properties":{"aliases":{"items":{"type":"string"},"type":["array","null"]}},"type":"object"},"ContainerHealth":{"additionalProperties":false,"properties":{"failingStreak":{"format":"int64","type":"integer"},"log":{"items":{"$ref":"#/components/schemas/ContainerHealthLogEntry"},"type":["array","null"]},"status":{"type":"string"}},"required":["status","failingStreak"],"type":"object"},"ContainerHealthLogEntry":{"additionalProperties":false,"properties":{"end":{"type":"string"},"exitCode":{"format":"int64","type":"integer"},"output":{"type":"string"},"start":{"type":"string"}},"required":["exitCode"],"type":"object"},"ContainerHealthcheck":{"additionalProperties":false,"properties":{"interval":{"format":"int64","type":"integer"},"retries":{"format":"int64","type":"integer"},"startInterval":{"format":"int64","type":"integer"},"startPeriod":{"format":"int64","type":"integer"},"test":{"items":{"type":"string"},"type":["array","null"]},"timeout":{"format":"int64","type":"integer"}},"type":"object"},"ContainerHostConfig":{"additionalProperties":false,"properties":{"autoRemove":{"type":"boolean"},"memory":{"format":"int64","type":"integer"},"nanoCpus":{"format":"int64","type":"integer"},"networkMode":{"type":"string"},"privileged":{"type":"boolean"},"restartPolicy":{"type":"string"}},"type":"object"},"ContainerHostConfigCreate":{"additionalProperties":false,"properties":{"autoRemove":{"type":"boolean"},"binds":{"items":{"type":"string"},"type":["array","null"]},"cpuShares":{"format":"int64","type":"integer"},"memory":{"format":"int64","type":"integer"},"memorySwap":{"format":"int64","type":"integer"},"nanoCpus":{"format":"int64","type":"integer"},"networkMode":{"type":"string"},"portBindings":{"additionalProperties":{"items":{"$ref":"#/components/schemas/ContainerPortBindingCreate"},"type":["array","null"]},"type":"object"},"privileged":{"type":"boolean"},"publishAllPorts":{"type":"boolean"},"readonlyRootfs":{"type":"boolean"},"restartPolicy":{"$ref":"#/components/schemas/ContainerRestartPolicyCreate"}},"type":"object"},"ContainerMount":{"additionalProperties":false,"properties":{"destination":{"type":"string"},"driver":{"type":"string"},"mode":{"type":"string"},"name":{"type":"string"},"propagation":{"type":"string"},"rw":{"type":"boolean"},"source":{"type":"string"},"type":{"type":"string"}},"required":["type","destination"],"type":"object"},"ContainerNetworkEndpoint":{"additionalProperties":false,"properties":{"aliases":{"items":{"type":"string"},"type":["array","null"]},"dnsNames":{"items":{"type":"string"},"type":["array","null"]},"driverOpts":{"additionalProperties":{"type":"string"},"type":"object"},"endpointId":{"type":"string"},"gateway":{"type":"string"},"globalIPv6Address":{"type":"string"},"globalIPv6PrefixLen":{"format":"int64","type":"integer"},"gwPriority":{"format":"int64","type":"integer"},"ipAddress":{"type":"string"},"ipPrefixLen":{"format":"int64","type":"integer"},"ipamConfig":{},"ipv6Gateway":{"type":"string"},"links":{"items":{"type":"string"},"type":["array","null"]},"macAddress":{"type":"string"},"networkId":{"type":"string"}},"type":"object"},"ContainerNetworkSettings":{"additionalProperties":false,"properties":{"networks":{"additionalProperties":{"$ref":"#/components/schemas/ContainerNetworkEndpoint"},"type":"object"}},"required":["networks"],"type":"object"},"ContainerNetworkingConfigCreate":{"additionalProperties":false,"properties":{"endpointsConfig":{"additionalProperties":{"$ref":"#/components/schemas/ContainerEndpointSettingsCreate"},"type":"object"}},"type":"object"},"ContainerPaginatedResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ContainerPaginatedResponse.json"],"format":"uri","readOnly":true,"type":"string"},"counts":{"$ref":"#/components/schemas/ContainerStatusCounts"},"data":{"items":{"$ref":"#/components/schemas/ContainerSummary"},"type":["array","null"]},"groups":{"items":{"$ref":"#/components/schemas/ContainerSummaryGroup"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","counts","pagination"],"type":"object"},"ContainerPort":{"additionalProperties":false,"properties":{"ip":{"type":"string"},"privatePort":{"format":"int64","type":"integer"},"publicPort":{"format":"int64","type":"integer"},"type":{"type":"string"}},"required":["privatePort","type"],"type":"object"},"ContainerPortBindingCreate":{"additionalProperties":false,"properties":{"hostIp":{"type":"string"},"hostPort":{"type":"string"}},"type":"object"},"ContainerRegistryPaginatedResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ContainerRegistryPaginatedResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"items":{"$ref":"#/components/schemas/ContainerregistryContainerRegistry"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"ContainerRestartPolicyCreate":{"additionalProperties":false,"properties":{"maximumRetryCount":{"format":"int64","type":"integer"},"name":{"type":"string"}},"type":"object"},"ContainerState":{"additionalProperties":false,"properties":{"exitCode":{"format":"int64","type":"integer"},"finishedAt":{"type":"string"},"health":{"$ref":"#/components/schemas/ContainerHealth"},"running":{"type":"boolean"},"startedAt":{"type":"string"},"status":{"type":"string"}},"required":["status","running"],"type":"object"},"ContainerStatusCounts":{"additionalProperties":false,"properties":{"runningContainers":{"format":"int64","type":"integer"},"stoppedContainers":{"format":"int64","type":"integer"},"totalContainers":{"format":"int64","type":"integer"}},"required":["runningContainers","stoppedContainers","totalContainers"],"type":"object"},"ContainerStatusCountsResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ContainerStatusCountsResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ContainerStatusCounts"},"success":{"type":"boolean"}},"required":["success","data"],"type":"object"},"ContainerSummary":{"additionalProperties":false,"properties":{"command":{"type":"string"},"created":{"format":"int64","type":"integer"},"hostConfig":{"$ref":"#/components/schemas/ContainerHostConfig"},"iconDarkUrl":{"type":"string"},"iconLightUrl":{"type":"string"},"id":{"type":"string"},"image":{"type":"string"},"imageId":{"type":"string"},"labels":{"additionalProperties":{"type":"string"},"type":"object"},"mounts":{"items":{"$ref":"#/components/schemas/ContainerMount"},"type":["array","null"]},"names":{"items":{"type":"string"},"type":["array","null"]},"networkSettings":{"$ref":"#/components/schemas/ContainerNetworkSettings"},"ports":{"items":{"$ref":"#/components/schemas/ContainerPort"},"type":["array","null"]},"redeployDisabled":{"type":"boolean"},"state":{"type":"string"},"status":{"type":"string"},"updateInfo":{"$ref":"#/components/schemas/ImageUpdateInfo"}},"required":["id","names","image","imageId","command","created","ports","labels","state","status","hostConfig","networkSettings","mounts"],"type":"object"},"ContainerSummaryGroup":{"additionalProperties":false,"properties":{"groupName":{"type":"string"},"items":{"items":{"$ref":"#/components/schemas/ContainerSummary"},"type":["array","null"]}},"required":["groupName","items"],"type":"object"},"ContainerregistryContainerRegistry":{"additionalProperties":false,"properties":{"awsAccessKeyId":{"type":"string"},"awsRegion":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"description":{"type":"string"},"enabled":{"type":"boolean"},"id":{"type":"string"},"insecure":{"type":"boolean"},"registryType":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"url":{"type":"string"},"username":{"type":"string"}},"required":["id","url","username","insecure","enabled","registryType","createdAt","updatedAt"],"type":"object"},"ContainerregistryCredential":{"additionalProperties":false,"properties":{"enabled":{"type":"boolean"},"token":{"type":"string"},"url":{"type":"string"},"username":{"type":"string"}},"required":["url","username","token","enabled"],"type":"object"},"ContainerregistryPullUsage":{"additionalProperties":false,"properties":{"authMethod":{"type":"string"},"authUsername":{"type":"string"},"checkedAt":{"format":"date-time","type":"string"},"displayName":{"type":"string"},"error":{"type":"string"},"limit":{"format":"int64","type":"integer"},"observedPulls":{"format":"int64","type":"integer"},"provider":{"type":"string"},"registry":{"type":"string"},"registryId":{"type":"string"},"remaining":{"format":"int64","type":"integer"},"repository":{"type":"string"},"source":{"type":"string"},"used":{"format":"int64","type":"integer"},"windowSeconds":{"format":"int64","type":"integer"}},"required":["registryId","provider","registry","displayName","observedPulls","authMethod","checkedAt"],"type":"object"},"ContainerregistryPullUsageResponse":{"additionalProperties":false,"properties":{"registries":{"items":{"$ref":"#/components/schemas/ContainerregistryPullUsage"},"type":["array","null"]}},"required":["registries"],"type":"object"},"ContainerregistrySync":{"additionalProperties":false,"properties":{"awsAccessKeyId":{"type":"string"},"awsRegion":{"type":"string"},"awsSecretAccessKey":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"description":{"type":"string"},"enabled":{"type":"boolean"},"id":{"type":"string"},"insecure":{"type":"boolean"},"registryType":{"type":"string"},"token":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"url":{"type":"string"},"username":{"type":"string"}},"required":["id","url","username","token","insecure","enabled","registryType","createdAt","updatedAt"],"type":"object"},"ContainerregistrySyncRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ContainerregistrySyncRequest.json"],"format":"uri","readOnly":true,"type":"string"},"registries":{"items":{"$ref":"#/components/schemas/ContainerregistrySync"},"type":["array","null"]}},"required":["registries"],"type":"object"},"CreateContainerRegistryRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/CreateContainerRegistryRequest.json"],"format":"uri","readOnly":true,"type":"string"},"awsAccessKeyId":{"type":"string"},"awsRegion":{"type":"string"},"awsSecretAccessKey":{"type":"string"},"description":{"type":["string","null"]},"enabled":{"type":["boolean","null"]},"insecure":{"type":["boolean","null"]},"registryType":{"type":"string"},"token":{"type":"string"},"url":{"type":"string"},"username":{"type":"string"}},"required":["url","username","token","description","insecure","enabled","registryType","awsAccessKeyId","awsSecretAccessKey","awsRegion"],"type":"object"},"CreateGitRepositoryRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/CreateGitRepositoryRequest.json"],"format":"uri","readOnly":true,"type":"string"},"authType":{"type":"string"},"description":{"type":"string"},"enabled":{"type":"boolean"},"name":{"type":"string"},"sshHostKeyVerification":{"type":"string"},"sshKey":{"type":"string"},"token":{"type":"string"},"url":{"type":"string"},"username":{"type":"string"}},"required":["name","url","authType"],"type":"object"},"CreateOidcRoleMappingOutputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/CreateOidcRoleMappingOutputBody.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/RoleOidcRoleMapping"},"success":{"type":"boolean"}},"required":["success","data"],"type":"object"},"CredentialSpecConfig":{"additionalProperties":false,"properties":{"config":{"type":"string"},"file":{"type":"string"},"registry":{"type":"string"}},"type":"object"},"DashboardActionItem":{"additionalProperties":false,"properties":{"count":{"format":"int64","type":"integer"},"kind":{"type":"string"},"severity":{"type":"string"}},"required":["kind","count","severity"],"type":"object"},"DashboardActionItems":{"additionalProperties":false,"properties":{"items":{"items":{"$ref":"#/components/schemas/DashboardActionItem"},"type":["array","null"]}},"required":["items"],"type":"object"},"DashboardSnapshot":{"additionalProperties":false,"properties":{"actionItems":{"$ref":"#/components/schemas/DashboardActionItems"},"containers":{"$ref":"#/components/schemas/DashboardSnapshotContainers"},"imageUsageCounts":{"$ref":"#/components/schemas/ImageUsageCounts"},"images":{"$ref":"#/components/schemas/DashboardSnapshotImages"},"settings":{"$ref":"#/components/schemas/DashboardSnapshotSettings"},"versionInfo":{"$ref":"#/components/schemas/VersionInfo"}},"required":["containers","images","imageUsageCounts","actionItems","settings"],"type":"object"},"DashboardSnapshotContainers":{"additionalProperties":false,"properties":{"counts":{"$ref":"#/components/schemas/ContainerStatusCounts"},"data":{"items":{"$ref":"#/components/schemas/ContainerSummary"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"}},"required":["data","counts","pagination"],"type":"object"},"DashboardSnapshotImages":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/ImageSummary"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"}},"required":["data","pagination"],"type":"object"},"DashboardSnapshotSettings":{"additionalProperties":false,"type":"object"},"DeleteOidcRoleMappingOutputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/DeleteOidcRoleMappingOutputBody.json"],"format":"uri","readOnly":true,"type":"string"},"message":{"type":"string"},"success":{"type":"boolean"}},"required":["success","message"],"type":"object"},"DeployConfig":{"additionalProperties":false,"properties":{"endpoint_mode":{"type":"string"},"labels":{"additionalProperties":{"type":"string"},"type":"object"},"mode":{"type":"string"},"placement":{"$ref":"#/components/schemas/DockerTypesPlacement"},"replicas":{"format":"int64","type":"integer"},"resources":{"$ref":"#/components/schemas/DockerTypesResources"},"restart_policy":{"$ref":"#/components/schemas/RestartPolicy"},"rollback_config":{"$ref":"#/components/schemas/UpdateConfig"},"update_config":{"$ref":"#/components/schemas/UpdateConfig"}},"type":"object"},"DeploymentSnippet":{"additionalProperties":false,"properties":{"dockerCompose":{"description":"Docker compose YAML snippet","type":"string"},"dockerRun":{"description":"Docker run command snippet","type":"string"},"mtls":{"$ref":"#/components/schemas/DeploymentSnippetMTLS","description":"Optional Arcane-generated mTLS deployment assets for edge agents"}},"required":["dockerRun","dockerCompose"],"type":"object"},"DeploymentSnippetFile":{"additionalProperties":false,"properties":{"containerPath":{"description":"Container mount path expected by the mTLS snippet","type":"string"},"content":{"description":"PEM file contents. Omitted for sensitive files such as private keys; use downloadUrl instead.","type":"string"},"downloadUrl":{"description":"Pairing-permission endpoint to download this file when content is withheld","type":"string"},"name":{"description":"Suggested filename","type":"string"},"permissions":{"description":"Suggested file mode","type":"string"},"sensitive":{"description":"True when this file is sensitive and must be fetched via downloadUrl","type":"boolean"}},"required":["name","containerPath","permissions"],"type":"object"},"DeploymentSnippetMTLS":{"additionalProperties":false,"properties":{"dockerCompose":{"description":"Docker compose snippet using Arcane-generated mTLS assets","type":"string"},"dockerRun":{"description":"Docker run snippet using Arcane-generated mTLS assets","type":"string"},"files":{"description":"Generated PEM files to place on the edge host","items":{"$ref":"#/components/schemas/DeploymentSnippetFile"},"type":["array","null"]},"hostDirHint":{"description":"Suggested host directory containing the generated PEM files","type":"string"}},"required":["dockerRun","dockerCompose","files","hostDirHint"],"type":"object"},"DetailSummaryConfigStruct":{"additionalProperties":false,"properties":{"argsEscaped":{"type":"boolean"},"cmd":{"items":{"type":"string"},"type":["array","null"]},"env":{"items":{"type":"string"},"type":["array","null"]},"exposedPorts":{"additionalProperties":{"$ref":"#/components/schemas/Value"},"type":"object"},"volumes":{"additionalProperties":{"$ref":"#/components/schemas/Value"},"type":"object"},"workingDir":{"type":"string"}},"type":"object"},"DetailSummaryDescriptorStruct":{"additionalProperties":false,"properties":{"digest":{"type":"string"},"mediaType":{"type":"string"},"size":{"format":"int64","type":"integer"}},"required":["mediaType","digest","size"],"type":"object"},"DetailSummaryGraphDriverStruct":{"additionalProperties":false,"properties":{"data":{},"name":{"type":"string"}},"required":["data","name"],"type":"object"},"DetailSummaryMetadataStruct":{"additionalProperties":false,"properties":{"lastTagTime":{"type":"string"}},"required":["lastTagTime"],"type":"object"},"DetailSummaryRootFsStruct":{"additionalProperties":false,"properties":{"layers":{"items":{"type":"string"},"type":["array","null"]},"type":{"type":"string"}},"required":["type","layers"],"type":"object"},"DevelopConfig":{"additionalProperties":false,"properties":{"watch":{"items":{"$ref":"#/components/schemas/DockerTypesTrigger"},"type":["array","null"]}},"type":"object"},"DiscreteGenericResource":{"additionalProperties":false,"properties":{"kind":{"type":"string"},"value":{"format":"int64","type":"integer"}},"required":["kind","value"],"type":"object"},"DockerMountBindOptions":{"additionalProperties":false,"properties":{"CreateMountpoint":{"type":"boolean"},"NonRecursive":{"type":"boolean"},"Propagation":{"type":"string"},"ReadOnlyForceRecursive":{"type":"boolean"},"ReadOnlyNonRecursive":{"type":"boolean"}},"type":"object"},"DockerMountClusterOptions":{"additionalProperties":false,"type":"object"},"DockerMountDriver":{"additionalProperties":false,"properties":{"Name":{"type":"string"},"Options":{"additionalProperties":{"type":"string"},"type":"object"}},"type":"object"},"DockerMountImageOptions":{"additionalProperties":false,"properties":{"Subpath":{"type":"string"}},"type":"object"},"DockerMountMount":{"additionalProperties":false,"properties":{"BindOptions":{"$ref":"#/components/schemas/DockerMountBindOptions"},"ClusterOptions":{"$ref":"#/components/schemas/DockerMountClusterOptions"},"Consistency":{"type":"string"},"ImageOptions":{"$ref":"#/components/schemas/DockerMountImageOptions"},"ReadOnly":{"type":"boolean"},"Source":{"type":"string"},"Target":{"type":"string"},"TmpfsOptions":{"$ref":"#/components/schemas/DockerMountTmpfsOptions"},"Type":{"type":"string"},"VolumeOptions":{"$ref":"#/components/schemas/DockerMountVolumeOptions"}},"type":"object"},"DockerMountTmpfsOptions":{"additionalProperties":false,"properties":{"Mode":{"format":"int32","minimum":0,"type":"integer"},"Options":{"items":{"items":{"type":"string"},"type":["array","null"]},"type":["array","null"]},"SizeBytes":{"format":"int64","type":"integer"}},"type":"object"},"DockerMountVolumeOptions":{"additionalProperties":false,"properties":{"DriverConfig":{"$ref":"#/components/schemas/DockerMountDriver"},"Labels":{"additionalProperties":{"type":"string"},"type":"object"},"NoCopy":{"type":"boolean"},"Subpath":{"type":"string"}},"type":"object"},"DockerNetworkConfigReference":{"additionalProperties":false,"properties":{"Network":{"type":"string"}},"required":["Network"],"type":"object"},"DockerNetworkEndpointResource":{"additionalProperties":false,"properties":{"EndpointID":{"type":"string"},"IPv4Address":{"type":"string"},"IPv6Address":{"type":"string"},"MacAddress":{"type":"string"},"Name":{"type":"string"}},"required":["Name","EndpointID","MacAddress","IPv4Address","IPv6Address"],"type":"object"},"DockerNetworkPeerInfo":{"additionalProperties":false,"properties":{"IP":{"format":"ip","type":"string"},"Name":{"type":"string"}},"required":["Name","IP"],"type":"object"},"DockerNetworkServiceInfo":{"additionalProperties":false,"properties":{"LocalLBIndex":{"format":"int64","type":"integer"},"Ports":{"items":{"type":"string"},"type":["array","null"]},"Tasks":{"items":{"$ref":"#/components/schemas/DockerNetworkTask"},"type":["array","null"]},"VIP":{"format":"ip","type":"string"}},"required":["VIP","Ports","LocalLBIndex","Tasks"],"type":"object"},"DockerNetworkTask":{"additionalProperties":false,"properties":{"EndpointID":{"type":"string"},"EndpointIP":{"format":"ip","type":"string"},"Info":{"additionalProperties":{"type":"string"},"type":"object"},"Name":{"type":"string"}},"required":["Name","EndpointID","EndpointIP","Info"],"type":"object"},"DockerRegistryIndexInfo":{"additionalProperties":false,"properties":{"Mirrors":{"items":{"type":"string"},"type":["array","null"]},"Name":{"type":"string"},"Official":{"type":"boolean"},"Secure":{"type":"boolean"}},"required":["Name","Mirrors","Secure","Official"],"type":"object"},"DockerRegistryServiceConfig":{"additionalProperties":false,"properties":{"IndexConfigs":{"additionalProperties":{"$ref":"#/components/schemas/DockerRegistryIndexInfo"},"type":"object"},"InsecureRegistryCIDRs":{"items":{"type":"string"},"type":["array","null"]},"Mirrors":{"items":{"type":"string"},"type":["array","null"]}},"required":["InsecureRegistryCIDRs","IndexConfigs","Mirrors"],"type":"object"},"DockerSwarmAppArmorOpts":{"additionalProperties":false,"properties":{"Mode":{"type":"string"}},"type":"object"},"DockerSwarmCAConfig":{"additionalProperties":false,"properties":{"ExternalCAs":{"items":{"$ref":"#/components/schemas/DockerSwarmExternalCA"},"type":["array","null"]},"ForceRotate":{"format":"int64","minimum":0,"type":"integer"},"NodeCertExpiry":{"format":"int64","type":"integer"},"SigningCACert":{"type":"string"},"SigningCAKey":{"type":"string"}},"type":"object"},"DockerSwarmClusterInfo":{"additionalProperties":false,"properties":{"CreatedAt":{"format":"date-time","type":"string"},"DataPathPort":{"format":"int32","minimum":0,"type":"integer"},"DefaultAddrPool":{"items":{"type":"string"},"type":["array","null"]},"ID":{"type":"string"},"RootRotationInProgress":{"type":"boolean"},"Spec":{"$ref":"#/components/schemas/DockerSwarmSpec"},"SubnetSize":{"format":"int32","minimum":0,"type":"integer"},"TLSInfo":{"$ref":"#/components/schemas/DockerSwarmTLSInfo"},"UpdatedAt":{"format":"date-time","type":"string"},"Version":{"$ref":"#/components/schemas/DockerSwarmVersion"}},"required":["ID","Spec","TLSInfo","RootRotationInProgress","DefaultAddrPool","SubnetSize","DataPathPort"],"type":"object"},"DockerSwarmConfigReference":{"additionalProperties":false,"properties":{"ConfigID":{"type":"string"},"ConfigName":{"type":"string"},"File":{"$ref":"#/components/schemas/DockerSwarmConfigReferenceFileTarget"},"Runtime":{"$ref":"#/components/schemas/DockerSwarmConfigReferenceRuntimeTarget"}},"required":["ConfigID","ConfigName"],"type":"object"},"DockerSwarmConfigReferenceFileTarget":{"additionalProperties":false,"properties":{"GID":{"type":"string"},"Mode":{"format":"int32","minimum":0,"type":"integer"},"Name":{"type":"string"},"UID":{"type":"string"}},"required":["Name","UID","GID","Mode"],"type":"object"},"DockerSwarmConfigReferenceRuntimeTarget":{"additionalProperties":false,"type":"object"},"DockerSwarmConfigSpec":{"additionalProperties":false,"properties":{"Data":{"contentEncoding":"base64","type":"string"},"Labels":{"additionalProperties":{"type":"string"},"type":"object"},"Name":{"type":"string"},"Templating":{"$ref":"#/components/schemas/DockerSwarmDriver"}},"required":["Labels"],"type":"object"},"DockerSwarmContainerSpec":{"additionalProperties":false,"properties":{"Args":{"items":{"type":"string"},"type":["array","null"]},"CapabilityAdd":{"items":{"type":"string"},"type":["array","null"]},"CapabilityDrop":{"items":{"type":"string"},"type":["array","null"]},"Command":{"items":{"type":"string"},"type":["array","null"]},"Configs":{"items":{"$ref":"#/components/schemas/DockerSwarmConfigReference"},"type":["array","null"]},"DNSConfig":{"$ref":"#/components/schemas/DockerSwarmDNSConfig"},"Dir":{"type":"string"},"Env":{"items":{"type":"string"},"type":["array","null"]},"Groups":{"items":{"type":"string"},"type":["array","null"]},"Healthcheck":{"$ref":"#/components/schemas/HealthcheckConfig"},"Hostname":{"type":"string"},"Hosts":{"items":{"type":"string"},"type":["array","null"]},"Image":{"type":"string"},"Init":{"type":"boolean"},"Isolation":{"type":"string"},"Labels":{"additionalProperties":{"type":"string"},"type":"object"},"Mounts":{"items":{"$ref":"#/components/schemas/DockerMountMount"},"type":["array","null"]},"OomScoreAdj":{"format":"int64","type":"integer"},"OpenStdin":{"type":"boolean"},"Privileges":{"$ref":"#/components/schemas/DockerSwarmPrivileges"},"ReadOnly":{"type":"boolean"},"Secrets":{"items":{"$ref":"#/components/schemas/DockerSwarmSecretReference"},"type":["array","null"]},"StopGracePeriod":{"format":"int64","type":"integer"},"StopSignal":{"type":"string"},"Sysctls":{"additionalProperties":{"type":"string"},"type":"object"},"TTY":{"type":"boolean"},"Ulimits":{"items":{"$ref":"#/components/schemas/Ulimit"},"type":["array","null"]},"User":{"type":"string"}},"type":"object"},"DockerSwarmCredentialSpec":{"additionalProperties":false,"properties":{"Config":{"type":"string"},"File":{"type":"string"},"Registry":{"type":"string"}},"required":["Config","File","Registry"],"type":"object"},"DockerSwarmDNSConfig":{"additionalProperties":false,"properties":{"Nameservers":{"items":{"format":"ip","type":"string"},"type":["array","null"]},"Options":{"items":{"type":"string"},"type":["array","null"]},"Search":{"items":{"type":"string"},"type":["array","null"]}},"type":"object"},"DockerSwarmDiscreteGenericResource":{"additionalProperties":false,"properties":{"Kind":{"type":"string"},"Value":{"format":"int64","type":"integer"}},"type":"object"},"DockerSwarmDispatcherConfig":{"additionalProperties":false,"properties":{"HeartbeatPeriod":{"format":"int64","type":"integer"}},"type":"object"},"DockerSwarmDriver":{"additionalProperties":false,"properties":{"Name":{"type":"string"},"Options":{"additionalProperties":{"type":"string"},"type":"object"}},"type":"object"},"DockerSwarmEncryptionConfig":{"additionalProperties":false,"properties":{"AutoLockManagers":{"type":"boolean"}},"required":["AutoLockManagers"],"type":"object"},"DockerSwarmEndpoint":{"additionalProperties":false,"properties":{"Ports":{"items":{"$ref":"#/components/schemas/DockerSwarmPortConfig"},"type":["array","null"]},"Spec":{"$ref":"#/components/schemas/DockerSwarmEndpointSpec"},"VirtualIPs":{"items":{"$ref":"#/components/schemas/DockerSwarmEndpointVirtualIP"},"type":["array","null"]}},"type":"object"},"DockerSwarmEndpointSpec":{"additionalProperties":false,"properties":{"Mode":{"type":"string"},"Ports":{"items":{"$ref":"#/components/schemas/DockerSwarmPortConfig"},"type":["array","null"]}},"type":"object"},"DockerSwarmEndpointVirtualIP":{"additionalProperties":false,"properties":{"Addr":{"type":"string"},"NetworkID":{"type":"string"}},"type":"object"},"DockerSwarmExternalCA":{"additionalProperties":false,"properties":{"CACert":{"type":"string"},"Options":{"additionalProperties":{"type":"string"},"type":"object"},"Protocol":{"type":"string"},"URL":{"type":"string"}},"required":["Protocol","URL","CACert"],"type":"object"},"DockerSwarmGenericResource":{"additionalProperties":false,"properties":{"DiscreteResourceSpec":{"$ref":"#/components/schemas/DockerSwarmDiscreteGenericResource"},"NamedResourceSpec":{"$ref":"#/components/schemas/DockerSwarmNamedGenericResource"}},"type":"object"},"DockerSwarmGlobalJob":{"additionalProperties":false,"type":"object"},"DockerSwarmGlobalService":{"additionalProperties":false,"type":"object"},"DockerSwarmInfo":{"additionalProperties":false,"properties":{"Cluster":{"$ref":"#/components/schemas/DockerSwarmClusterInfo"},"ControlAvailable":{"type":"boolean"},"Error":{"type":"string"},"LocalNodeState":{"type":"string"},"Managers":{"format":"int64","type":"integer"},"NodeAddr":{"type":"string"},"NodeID":{"type":"string"},"Nodes":{"format":"int64","type":"integer"},"RemoteManagers":{"items":{"$ref":"#/components/schemas/DockerSwarmPeer"},"type":["array","null"]},"Warnings":{"items":{"type":"string"},"type":["array","null"]}},"required":["NodeID","NodeAddr","LocalNodeState","ControlAvailable","Error","RemoteManagers"],"type":"object"},"DockerSwarmLimit":{"additionalProperties":false,"properties":{"MemoryBytes":{"format":"int64","type":"integer"},"NanoCPUs":{"format":"int64","type":"integer"},"Pids":{"format":"int64","type":"integer"}},"type":"object"},"DockerSwarmNamedGenericResource":{"additionalProperties":false,"properties":{"Kind":{"type":"string"},"Value":{"type":"string"}},"type":"object"},"DockerSwarmNetworkAttachmentConfig":{"additionalProperties":false,"properties":{"Aliases":{"items":{"type":"string"},"type":["array","null"]},"DriverOpts":{"additionalProperties":{"type":"string"},"type":"object"},"Target":{"type":"string"}},"type":"object"},"DockerSwarmNetworkAttachmentSpec":{"additionalProperties":false,"properties":{"ContainerID":{"type":"string"}},"required":["ContainerID"],"type":"object"},"DockerSwarmOrchestrationConfig":{"additionalProperties":false,"properties":{"TaskHistoryRetentionLimit":{"format":"int64","type":"integer"}},"type":"object"},"DockerSwarmPeer":{"additionalProperties":false,"properties":{"Addr":{"type":"string"},"NodeID":{"type":"string"}},"required":["NodeID","Addr"],"type":"object"},"DockerSwarmPlacement":{"additionalProperties":false,"properties":{"Constraints":{"items":{"type":"string"},"type":["array","null"]},"MaxReplicas":{"format":"int64","minimum":0,"type":"integer"},"Platforms":{"items":{"$ref":"#/components/schemas/DockerSwarmPlatform"},"type":["array","null"]},"Preferences":{"items":{"$ref":"#/components/schemas/DockerSwarmPlacementPreference"},"type":["array","null"]}},"type":"object"},"DockerSwarmPlacementPreference":{"additionalProperties":false,"properties":{"Spread":{"$ref":"#/components/schemas/DockerSwarmSpreadOver"}},"required":["Spread"],"type":"object"},"DockerSwarmPlatform":{"additionalProperties":false,"properties":{"Architecture":{"type":"string"},"OS":{"type":"string"}},"type":"object"},"DockerSwarmPortConfig":{"additionalProperties":false,"properties":{"Name":{"type":"string"},"Protocol":{"type":"string"},"PublishMode":{"type":"string"},"PublishedPort":{"format":"int32","minimum":0,"type":"integer"},"TargetPort":{"format":"int32","minimum":0,"type":"integer"}},"type":"object"},"DockerSwarmPrivileges":{"additionalProperties":false,"properties":{"AppArmor":{"$ref":"#/components/schemas/DockerSwarmAppArmorOpts"},"CredentialSpec":{"$ref":"#/components/schemas/DockerSwarmCredentialSpec"},"NoNewPrivileges":{"type":"boolean"},"SELinuxContext":{"$ref":"#/components/schemas/DockerSwarmSELinuxContext"},"Seccomp":{"$ref":"#/components/schemas/DockerSwarmSeccompOpts"}},"required":["CredentialSpec","SELinuxContext","NoNewPrivileges"],"type":"object"},"DockerSwarmRaftConfig":{"additionalProperties":false,"properties":{"ElectionTick":{"format":"int64","type":"integer"},"HeartbeatTick":{"format":"int64","type":"integer"},"KeepOldSnapshots":{"format":"int64","minimum":0,"type":"integer"},"LogEntriesForSlowFollowers":{"format":"int64","minimum":0,"type":"integer"},"SnapshotInterval":{"format":"int64","minimum":0,"type":"integer"}},"required":["ElectionTick","HeartbeatTick"],"type":"object"},"DockerSwarmReplicatedJob":{"additionalProperties":false,"properties":{"MaxConcurrent":{"format":"int64","minimum":0,"type":"integer"},"TotalCompletions":{"format":"int64","minimum":0,"type":"integer"}},"type":"object"},"DockerSwarmReplicatedService":{"additionalProperties":false,"properties":{"Replicas":{"format":"int64","minimum":0,"type":"integer"}},"type":"object"},"DockerSwarmResourceRequirements":{"additionalProperties":false,"properties":{"Limits":{"$ref":"#/components/schemas/DockerSwarmLimit"},"MemorySwappiness":{"format":"int64","type":["integer","null"]},"Reservations":{"$ref":"#/components/schemas/DockerSwarmResources"},"SwapBytes":{"format":"int64","type":["integer","null"]}},"type":"object"},"DockerSwarmResources":{"additionalProperties":false,"properties":{"GenericResources":{"items":{"$ref":"#/components/schemas/DockerSwarmGenericResource"},"type":["array","null"]},"MemoryBytes":{"format":"int64","type":"integer"},"NanoCPUs":{"format":"int64","type":"integer"}},"type":"object"},"DockerSwarmRestartPolicy":{"additionalProperties":false,"properties":{"Condition":{"type":"string"},"Delay":{"format":"int64","type":"integer"},"MaxAttempts":{"format":"int64","minimum":0,"type":"integer"},"Window":{"format":"int64","type":"integer"}},"type":"object"},"DockerSwarmRuntimePrivilege":{"additionalProperties":false,"properties":{"description":{"type":"string"},"name":{"type":"string"},"value":{"items":{"type":"string"},"type":["array","null"]}},"type":"object"},"DockerSwarmRuntimeSpec":{"additionalProperties":false,"properties":{"disabled":{"type":"boolean"},"env":{"items":{"type":"string"},"type":["array","null"]},"name":{"type":"string"},"privileges":{"items":{"$ref":"#/components/schemas/DockerSwarmRuntimePrivilege"},"type":["array","null"]},"remote":{"type":"string"}},"type":"object"},"DockerSwarmSELinuxContext":{"additionalProperties":false,"properties":{"Disable":{"type":"boolean"},"Level":{"type":"string"},"Role":{"type":"string"},"Type":{"type":"string"},"User":{"type":"string"}},"required":["Disable","User","Role","Type","Level"],"type":"object"},"DockerSwarmSeccompOpts":{"additionalProperties":false,"properties":{"Mode":{"type":"string"},"Profile":{"contentEncoding":"base64","type":"string"}},"type":"object"},"DockerSwarmSecretReference":{"additionalProperties":false,"properties":{"File":{"$ref":"#/components/schemas/DockerSwarmSecretReferenceFileTarget"},"SecretID":{"type":"string"},"SecretName":{"type":"string"}},"required":["File","SecretID","SecretName"],"type":"object"},"DockerSwarmSecretReferenceFileTarget":{"additionalProperties":false,"properties":{"GID":{"type":"string"},"Mode":{"format":"int32","minimum":0,"type":"integer"},"Name":{"type":"string"},"UID":{"type":"string"}},"required":["Name","UID","GID","Mode"],"type":"object"},"DockerSwarmSecretSpec":{"additionalProperties":false,"properties":{"Data":{"contentEncoding":"base64","type":"string"},"Driver":{"$ref":"#/components/schemas/DockerSwarmDriver"},"Labels":{"additionalProperties":{"type":"string"},"type":"object"},"Name":{"type":"string"},"Templating":{"$ref":"#/components/schemas/DockerSwarmDriver"}},"required":["Labels"],"type":"object"},"DockerSwarmServiceMode":{"additionalProperties":false,"properties":{"Global":{"$ref":"#/components/schemas/DockerSwarmGlobalService"},"GlobalJob":{"$ref":"#/components/schemas/DockerSwarmGlobalJob"},"Replicated":{"$ref":"#/components/schemas/DockerSwarmReplicatedService"},"ReplicatedJob":{"$ref":"#/components/schemas/DockerSwarmReplicatedJob"}},"type":"object"},"DockerSwarmServiceSpec":{"additionalProperties":false,"properties":{"EndpointSpec":{"$ref":"#/components/schemas/DockerSwarmEndpointSpec"},"Labels":{"additionalProperties":{"type":"string"},"type":"object"},"Mode":{"$ref":"#/components/schemas/DockerSwarmServiceMode"},"Name":{"type":"string"},"RollbackConfig":{"$ref":"#/components/schemas/DockerSwarmUpdateConfig"},"TaskTemplate":{"$ref":"#/components/schemas/DockerSwarmTaskSpec"},"UpdateConfig":{"$ref":"#/components/schemas/DockerSwarmUpdateConfig"}},"required":["Labels"],"type":"object"},"DockerSwarmSpec":{"additionalProperties":false,"properties":{"CAConfig":{"$ref":"#/components/schemas/DockerSwarmCAConfig"},"Dispatcher":{"$ref":"#/components/schemas/DockerSwarmDispatcherConfig"},"EncryptionConfig":{"$ref":"#/components/schemas/DockerSwarmEncryptionConfig"},"Labels":{"additionalProperties":{"type":"string"},"type":"object"},"Name":{"type":"string"},"Orchestration":{"$ref":"#/components/schemas/DockerSwarmOrchestrationConfig"},"Raft":{"$ref":"#/components/schemas/DockerSwarmRaftConfig"},"TaskDefaults":{"$ref":"#/components/schemas/DockerSwarmTaskDefaults"}},"required":["Labels"],"type":"object"},"DockerSwarmSpreadOver":{"additionalProperties":false,"properties":{"SpreadDescriptor":{"type":"string"}},"required":["SpreadDescriptor"],"type":"object"},"DockerSwarmTLSInfo":{"additionalProperties":false,"properties":{"CertIssuerPublicKey":{"contentEncoding":"base64","type":"string"},"CertIssuerSubject":{"contentEncoding":"base64","type":"string"},"TrustRoot":{"type":"string"}},"type":"object"},"DockerSwarmTaskDefaults":{"additionalProperties":false,"properties":{"LogDriver":{"$ref":"#/components/schemas/DockerSwarmDriver"}},"type":"object"},"DockerSwarmTaskSpec":{"additionalProperties":false,"properties":{"ContainerSpec":{"$ref":"#/components/schemas/DockerSwarmContainerSpec"},"ForceUpdate":{"format":"int64","minimum":0,"type":"integer"},"LogDriver":{"$ref":"#/components/schemas/DockerSwarmDriver"},"NetworkAttachmentSpec":{"$ref":"#/components/schemas/DockerSwarmNetworkAttachmentSpec"},"Networks":{"items":{"$ref":"#/components/schemas/DockerSwarmNetworkAttachmentConfig"},"type":["array","null"]},"Placement":{"$ref":"#/components/schemas/DockerSwarmPlacement"},"PluginSpec":{"$ref":"#/components/schemas/DockerSwarmRuntimeSpec"},"Resources":{"$ref":"#/components/schemas/DockerSwarmResourceRequirements"},"RestartPolicy":{"$ref":"#/components/schemas/DockerSwarmRestartPolicy"},"Runtime":{"type":"string"}},"required":["ForceUpdate"],"type":"object"},"DockerSwarmUpdateConfig":{"additionalProperties":false,"properties":{"Delay":{"format":"int64","type":"integer"},"FailureAction":{"type":"string"},"MaxFailureRatio":{"format":"float","type":"number"},"Monitor":{"format":"int64","type":"integer"},"Order":{"type":"string"},"Parallelism":{"format":"int64","minimum":0,"type":"integer"}},"required":["Parallelism","MaxFailureRatio","Order"],"type":"object"},"DockerSwarmUpdateStatus":{"additionalProperties":false,"properties":{"CompletedAt":{"format":"date-time","type":"string"},"Message":{"type":"string"},"StartedAt":{"format":"date-time","type":"string"},"State":{"type":"string"}},"type":"object"},"DockerSwarmVersion":{"additionalProperties":false,"properties":{"Index":{"format":"int64","minimum":0,"type":"integer"}},"type":"object"},"DockerSystemCommit":{"additionalProperties":false,"properties":{"ID":{"type":"string"}},"required":["ID"],"type":"object"},"DockerSystemContainerdInfo":{"additionalProperties":false,"properties":{"Address":{"type":"string"},"Namespaces":{"$ref":"#/components/schemas/DockerSystemContainerdNamespaces"}},"required":["Namespaces"],"type":"object"},"DockerSystemContainerdNamespaces":{"additionalProperties":false,"properties":{"Containers":{"type":"string"},"Plugins":{"type":"string"}},"required":["Containers","Plugins"],"type":"object"},"DockerSystemDeviceInfo":{"additionalProperties":false,"properties":{"ID":{"type":"string"},"Source":{"type":"string"}},"required":["Source","ID"],"type":"object"},"DockerSystemFirewallInfo":{"additionalProperties":false,"properties":{"Driver":{"type":"string"},"Info":{"items":{"items":{"type":"string"},"maxItems":2,"minItems":2,"type":["array","null"]},"type":["array","null"]}},"required":["Driver"],"type":"object"},"DockerSystemNRIInfo":{"additionalProperties":false,"properties":{"Info":{"items":{"items":{"type":"string"},"maxItems":2,"minItems":2,"type":["array","null"]},"type":["array","null"]}},"type":"object"},"DockerSystemNetworkAddressPool":{"additionalProperties":false,"properties":{"Base":{"type":"string"},"Size":{"format":"int64","type":"integer"}},"required":["Base","Size"],"type":"object"},"DockerSystemPluginsInfo":{"additionalProperties":false,"properties":{"Authorization":{"items":{"type":"string"},"type":["array","null"]},"Log":{"items":{"type":"string"},"type":["array","null"]},"Network":{"items":{"type":"string"},"type":["array","null"]},"Volume":{"items":{"type":"string"},"type":["array","null"]}},"required":["Volume","Network","Authorization","Log"],"type":"object"},"DockerSystemRuntimeWithStatus":{"additionalProperties":false,"properties":{"options":{"additionalProperties":{},"type":"object"},"path":{"type":"string"},"runtimeArgs":{"items":{"type":"string"},"type":["array","null"]},"runtimeType":{"type":"string"},"status":{"additionalProperties":{"type":"string"},"type":"object"}},"type":"object"},"DockerTypesBuildRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/DockerTypesBuildRequest.json"],"format":"uri","readOnly":true,"type":"string"},"buildArgs":{"additionalProperties":{"type":"string"},"description":"Build arguments","type":"object"},"cacheFrom":{"description":"Build cache sources","items":{"type":"string"},"type":["array","null"]},"cacheTo":{"description":"Build cache targets","items":{"type":"string"},"type":["array","null"]},"contextDir":{"description":"Build context directory or Git URL","minLength":1,"type":"string"},"dockerfile":{"description":"Dockerfile path","type":"string"},"dockerfileInline":{"description":"Inline Dockerfile content","type":"string"},"entitlements":{"description":"Build entitlements","items":{"type":"string"},"type":["array","null"]},"extraHosts":{"description":"Build extra host mappings","items":{"type":"string"},"type":["array","null"]},"isolation":{"description":"Build isolation mode","type":"string"},"labels":{"additionalProperties":{"type":"string"},"description":"Build labels","type":"object"},"load":{"description":"Load image into local Docker","type":"boolean"},"network":{"description":"Build network mode","type":"string"},"noCache":{"description":"Disable build cache","type":"boolean"},"platforms":{"description":"Target platforms","items":{"type":"string"},"type":["array","null"]},"privileged":{"description":"Enable privileged build","type":"boolean"},"provider":{"description":"Build provider override","type":"string"},"pull":{"description":"Always pull referenced base images","type":"boolean"},"push":{"description":"Push image","type":"boolean"},"shmSize":{"description":"Build shared memory size in bytes","format":"int64","type":"integer"},"tags":{"description":"Image tags","items":{"type":"string"},"type":["array","null"]},"target":{"description":"Target stage","type":"string"},"ulimits":{"additionalProperties":{"type":"string"},"description":"Build ulimits","type":"object"}},"required":["contextDir"],"type":"object"},"DockerTypesDeviceMapping":{"additionalProperties":false,"properties":{"permissions":{"type":"string"},"source":{"type":"string"},"target":{"type":"string"}},"type":"object"},"DockerTypesDeviceRequest":{"additionalProperties":false,"properties":{"capabilities":{"items":{"type":"string"},"type":["array","null"]},"count":{"format":"int64","type":"integer"},"device_ids":{"items":{"type":"string"},"type":["array","null"]},"driver":{"type":"string"},"options":{"additionalProperties":{"type":"string"},"type":"object"}},"type":"object"},"DockerTypesEnvFile":{"additionalProperties":false,"properties":{"format":{"type":"string"},"path":{"type":"string"},"required":{"type":"boolean"}},"type":"object"},"DockerTypesGenericResource":{"additionalProperties":false,"properties":{"discrete_resource_spec":{"$ref":"#/components/schemas/DiscreteGenericResource"}},"type":"object"},"DockerTypesPlacement":{"additionalProperties":false,"properties":{"constraints":{"items":{"type":"string"},"type":["array","null"]},"max_replicas_per_node":{"format":"int64","minimum":0,"type":"integer"},"preferences":{"items":{"$ref":"#/components/schemas/DockerTypesPlacementPreferences"},"type":["array","null"]}},"type":"object"},"DockerTypesPlacementPreferences":{"additionalProperties":false,"properties":{"spread":{"type":"string"}},"type":"object"},"DockerTypesResources":{"additionalProperties":false,"properties":{"limits":{"$ref":"#/components/schemas/Resource"},"reservations":{"$ref":"#/components/schemas/Resource"}},"type":"object"},"DockerTypesSSHKey":{"additionalProperties":false,"properties":{"id":{"type":"string"},"path":{"type":"string"}},"type":"object"},"DockerTypesServiceConfig":{"additionalProperties":false,"properties":{"annotations":{"additionalProperties":{"type":"string"},"type":"object"},"attach":{"type":"boolean"},"blkio_config":{"$ref":"#/components/schemas/BlkioConfig"},"build":{"$ref":"#/components/schemas/BuildConfig"},"cap_add":{"items":{"type":"string"},"type":["array","null"]},"cap_drop":{"items":{"type":"string"},"type":["array","null"]},"cgroup":{"type":"string"},"cgroup_parent":{"type":"string"},"command":{"items":{"type":"string"},"type":["array","null"]},"configs":{"items":{"$ref":"#/components/schemas/DockerTypesServiceConfigObjConfig"},"type":["array","null"]},"container_name":{"type":"string"},"cpu_count":{"format":"int64","type":"integer"},"cpu_percent":{"format":"float","type":"number"},"cpu_period":{"format":"int64","type":"integer"},"cpu_quota":{"format":"int64","type":"integer"},"cpu_rt_period":{"format":"int64","type":"integer"},"cpu_rt_runtime":{"format":"int64","type":"integer"},"cpu_shares":{"format":"int64","type":"integer"},"cpus":{"format":"float","type":"number"},"cpuset":{"type":"string"},"credential_spec":{"$ref":"#/components/schemas/CredentialSpecConfig"},"depends_on":{"additionalProperties":{"$ref":"#/components/schemas/DockerTypesServiceDependency"},"type":"object"},"deploy":{"$ref":"#/components/schemas/DeployConfig"},"develop":{"$ref":"#/components/schemas/DevelopConfig"},"device_cgroup_rules":{"items":{"type":"string"},"type":["array","null"]},"devices":{"items":{"$ref":"#/components/schemas/DockerTypesDeviceMapping"},"type":["array","null"]},"dns":{"items":{"type":"string"},"type":["array","null"]},"dns_opt":{"items":{"type":"string"},"type":["array","null"]},"dns_search":{"items":{"type":"string"},"type":["array","null"]},"dockerfile":{"type":"string"},"domainname":{"type":"string"},"entrypoint":{"items":{"type":"string"},"type":["array","null"]},"env_file":{"items":{"$ref":"#/components/schemas/DockerTypesEnvFile"},"type":["array","null"]},"environment":{"additionalProperties":{"type":["string","null"]},"type":"object"},"expose":{"items":{"type":"string"},"type":["array","null"]},"extends":{"$ref":"#/components/schemas/ExtendsConfig"},"external_links":{"items":{"type":"string"},"type":["array","null"]},"extra_hosts":{"additionalProperties":{"items":{"type":"string"},"type":["array","null"]},"type":"object"},"gpus":{"items":{"$ref":"#/components/schemas/DockerTypesDeviceRequest"},"type":["array","null"]},"group_add":{"items":{"type":"string"},"type":["array","null"]},"healthcheck":{"$ref":"#/components/schemas/HealthCheckConfig"},"hostname":{"type":"string"},"image":{"type":"string"},"init":{"type":"boolean"},"ipc":{"type":"string"},"isolation":{"type":"string"},"label_file":{"items":{"type":"string"},"type":["array","null"]},"labels":{"additionalProperties":{"type":"string"},"type":"object"},"links":{"items":{"type":"string"},"type":["array","null"]},"log_driver":{"type":"string"},"log_opt":{"additionalProperties":{"type":"string"},"type":"object"},"logging":{"$ref":"#/components/schemas/LoggingConfig"},"mac_address":{"type":"string"},"mem_limit":{"format":"int64","type":"integer"},"mem_reservation":{"format":"int64","type":"integer"},"mem_swappiness":{"format":"int64","type":"integer"},"memswap_limit":{"format":"int64","type":"integer"},"models":{"additionalProperties":{"$ref":"#/components/schemas/ServiceModelConfig"},"type":"object"},"net":{"type":"string"},"network_mode":{"type":"string"},"networks":{"additionalProperties":{"$ref":"#/components/schemas/ServiceNetworkConfig"},"type":"object"},"oom_kill_disable":{"type":"boolean"},"oom_score_adj":{"format":"int64","type":"integer"},"pid":{"type":"string"},"pids_limit":{"format":"int64","type":"integer"},"platform":{"type":"string"},"ports":{"items":{"$ref":"#/components/schemas/DockerTypesServicePortConfig"},"type":["array","null"]},"post_start":{"items":{"$ref":"#/components/schemas/DockerTypesServiceHook"},"type":["array","null"]},"pre_start":{"items":{"$ref":"#/components/schemas/DockerTypesServiceHook"},"type":["array","null"]},"pre_stop":{"items":{"$ref":"#/components/schemas/DockerTypesServiceHook"},"type":["array","null"]},"privileged":{"type":"boolean"},"profiles":{"items":{"type":"string"},"type":["array","null"]},"provider":{"$ref":"#/components/schemas/ServiceProviderConfig"},"pull_policy":{"type":"string"},"read_only":{"type":"boolean"},"restart":{"type":"string"},"runtime":{"type":"string"},"scale":{"format":"int64","type":"integer"},"secrets":{"items":{"$ref":"#/components/schemas/DockerTypesServiceSecretConfig"},"type":["array","null"]},"security_opt":{"items":{"type":"string"},"type":["array","null"]},"shm_size":{"format":"int64","type":"integer"},"stdin_open":{"type":"boolean"},"stop_grace_period":{"format":"int64","type":"integer"},"stop_signal":{"type":"string"},"storage_opt":{"additionalProperties":{"type":"string"},"type":"object"},"sysctls":{"additionalProperties":{"type":"string"},"type":"object"},"tmpfs":{"items":{"type":"string"},"type":["array","null"]},"tty":{"type":"boolean"},"ulimits":{"additionalProperties":{"$ref":"#/components/schemas/UlimitsConfig"},"type":"object"},"use_api_socket":{"type":"boolean"},"user":{"type":"string"},"userns_mode":{"type":"string"},"uts":{"type":"string"},"volume_driver":{"type":"string"},"volumes":{"items":{"$ref":"#/components/schemas/DockerTypesServiceVolumeConfig"},"type":["array","null"]},"volumes_from":{"items":{"type":"string"},"type":["array","null"]},"working_dir":{"type":"string"}},"required":["command","entrypoint"],"type":"object"},"DockerTypesServiceConfigObjConfig":{"additionalProperties":false,"properties":{"gid":{"type":"string"},"mode":{"format":"int64","type":"integer"},"source":{"type":"string"},"target":{"type":"string"},"uid":{"type":"string"}},"type":"object"},"DockerTypesServiceDependency":{"additionalProperties":false,"properties":{"condition":{"type":"string"},"required":{"type":"boolean"},"restart":{"type":"boolean"}},"required":["required"],"type":"object"},"DockerTypesServiceHook":{"additionalProperties":false,"properties":{"command":{"items":{"type":"string"},"type":["array","null"]},"environment":{"additionalProperties":{"type":["string","null"]},"type":"object"},"image":{"type":"string"},"per_replica":{"type":"boolean"},"privileged":{"type":"boolean"},"user":{"type":"string"},"working_dir":{"type":"string"}},"required":["command"],"type":"object"},"DockerTypesServicePortConfig":{"additionalProperties":false,"properties":{"app_protocol":{"type":"string"},"host_ip":{"type":"string"},"mode":{"type":"string"},"name":{"type":"string"},"protocol":{"type":"string"},"published":{"type":"string"},"target":{"format":"int32","minimum":0,"type":"integer"}},"type":"object"},"DockerTypesServiceSecretConfig":{"additionalProperties":false,"properties":{"gid":{"type":"string"},"mode":{"format":"int64","type":"integer"},"source":{"type":"string"},"target":{"type":"string"},"uid":{"type":"string"}},"type":"object"},"DockerTypesServiceVolumeConfig":{"additionalProperties":false,"properties":{"bind":{"$ref":"#/components/schemas/ServiceVolumeBind"},"consistency":{"type":"string"},"image":{"$ref":"#/components/schemas/ServiceVolumeImage"},"read_only":{"type":"boolean"},"source":{"type":"string"},"target":{"type":"string"},"tmpfs":{"$ref":"#/components/schemas/ServiceVolumeTmpfs"},"type":{"type":"string"},"volume":{"$ref":"#/components/schemas/ServiceVolumeVolume"}},"type":"object"},"DockerTypesThrottleDevice":{"additionalProperties":false,"properties":{"Path":{"type":"string"},"Rate":{"format":"int64","type":"integer"}},"required":["Path","Rate"],"type":"object"},"DockerTypesTrigger":{"additionalProperties":false,"properties":{"action":{"type":"string"},"exec":{"$ref":"#/components/schemas/DockerTypesServiceHook"},"ignore":{"items":{"type":"string"},"type":["array","null"]},"include":{"items":{"type":"string"},"type":["array","null"]},"initial_sync":{"type":"boolean"},"path":{"type":"string"},"target":{"type":"string"}},"required":["path","action"],"type":"object"},"DockerTypesWeightDevice":{"additionalProperties":false,"properties":{"Path":{"type":"string"},"Weight":{"format":"int32","minimum":0,"type":"integer"}},"required":["Path","Weight"],"type":"object"},"DockerVolumeUsageData":{"additionalProperties":false,"properties":{"RefCount":{"format":"int64","type":"integer"},"Size":{"format":"int64","type":"integer"}},"required":["RefCount","Size"],"type":"object"},"DockerinfoInfo":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/DockerinfoInfo.json"],"format":"uri","readOnly":true,"type":"string"},"Architecture":{"type":"string"},"CDISpecDirs":{"items":{"type":"string"},"type":["array","null"]},"CPUSet":{"type":"boolean"},"CPUShares":{"type":"boolean"},"CgroupDriver":{"type":"string"},"CgroupVersion":{"type":"string"},"Containerd":{"$ref":"#/components/schemas/DockerSystemContainerdInfo"},"ContainerdCommit":{"$ref":"#/components/schemas/DockerSystemCommit"},"Containers":{"format":"int64","type":"integer"},"ContainersPaused":{"format":"int64","type":"integer"},"ContainersRunning":{"format":"int64","type":"integer"},"ContainersStopped":{"format":"int64","type":"integer"},"CpuCfsPeriod":{"type":"boolean"},"CpuCfsQuota":{"type":"boolean"},"Debug":{"type":"boolean"},"DefaultAddressPools":{"items":{"$ref":"#/components/schemas/DockerSystemNetworkAddressPool"},"type":["array","null"]},"DefaultRuntime":{"type":"string"},"DiscoveredDevices":{"items":{"$ref":"#/components/schemas/DockerSystemDeviceInfo"},"type":["array","null"]},"DockerRootDir":{"type":"string"},"Driver":{"type":"string"},"DriverStatus":{"items":{"items":{"type":"string"},"maxItems":2,"minItems":2,"type":["array","null"]},"type":["array","null"]},"ExperimentalBuild":{"type":"boolean"},"FirewallBackend":{"$ref":"#/components/schemas/DockerSystemFirewallInfo"},"GenericResources":{"items":{"$ref":"#/components/schemas/DockerSwarmGenericResource"},"type":["array","null"]},"HttpProxy":{"type":"string"},"HttpsProxy":{"type":"string"},"ID":{"type":"string"},"IPv4Forwarding":{"type":"boolean"},"Images":{"format":"int64","type":"integer"},"IndexServerAddress":{"type":"string"},"InitBinary":{"type":"string"},"InitCommit":{"$ref":"#/components/schemas/DockerSystemCommit"},"Isolation":{"type":"string"},"KernelVersion":{"type":"string"},"Labels":{"items":{"type":"string"},"type":["array","null"]},"LiveRestoreEnabled":{"type":"boolean"},"LoggingDriver":{"type":"string"},"MemTotal":{"format":"int64","type":"integer"},"MemoryLimit":{"type":"boolean"},"NCPU":{"format":"int64","type":"integer"},"NEventsListener":{"format":"int64","type":"integer"},"NFd":{"format":"int64","type":"integer"},"NGoroutines":{"format":"int64","type":"integer"},"NRI":{"$ref":"#/components/schemas/DockerSystemNRIInfo"},"Name":{"type":"string"},"NoProxy":{"type":"string"},"OSType":{"type":"string"},"OSVersion":{"type":"string"},"OomKillDisable":{"type":"boolean"},"OperatingSystem":{"type":"string"},"PidsLimit":{"type":"boolean"},"Plugins":{"$ref":"#/components/schemas/DockerSystemPluginsInfo"},"ProductLicense":{"type":"string"},"RegistryConfig":{"$ref":"#/components/schemas/DockerRegistryServiceConfig"},"RuncCommit":{"$ref":"#/components/schemas/DockerSystemCommit"},"Runtimes":{"additionalProperties":{"$ref":"#/components/schemas/DockerSystemRuntimeWithStatus"},"type":"object"},"SecurityOptions":{"items":{"type":"string"},"type":["array","null"]},"ServerVersion":{"type":"string"},"SwapLimit":{"type":"boolean"},"Swarm":{"$ref":"#/components/schemas/DockerSwarmInfo"},"SystemStatus":{"items":{"items":{"type":"string"},"maxItems":2,"minItems":2,"type":["array","null"]},"type":["array","null"]},"SystemTime":{"type":"string"},"Warnings":{"items":{"type":"string"},"type":["array","null"]},"apiVersion":{"type":"string"},"arch":{"type":"string"},"buildTime":{"type":"string"},"gitCommit":{"type":"string"},"goVersion":{"type":"string"},"os":{"type":"string"},"success":{"type":"boolean"}},"required":["success","apiVersion","gitCommit","goVersion","os","arch","buildTime","ID","Containers","ContainersRunning","ContainersPaused","ContainersStopped","Images","Driver","DriverStatus","Plugins","MemoryLimit","SwapLimit","CpuCfsPeriod","CpuCfsQuota","CPUShares","CPUSet","PidsLimit","IPv4Forwarding","Debug","NFd","OomKillDisable","NGoroutines","SystemTime","LoggingDriver","CgroupDriver","NEventsListener","KernelVersion","OperatingSystem","OSVersion","OSType","Architecture","IndexServerAddress","RegistryConfig","NCPU","MemTotal","GenericResources","DockerRootDir","HttpProxy","HttpsProxy","NoProxy","Name","Labels","ExperimentalBuild","ServerVersion","Runtimes","DefaultRuntime","Swarm","LiveRestoreEnabled","Isolation","InitBinary","ContainerdCommit","RuncCommit","InitCommit","SecurityOptions","CDISpecDirs","Warnings"],"type":"object"},"EnvSummary":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/EnvSummary.json"],"format":"uri","readOnly":true,"type":"string"},"variables":{"items":{"$ref":"#/components/schemas/EnvVariable"},"type":["array","null"]}},"required":["variables"],"type":"object"},"EnvVariable":{"additionalProperties":false,"properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"type":"object"},"EnvironmentAgentPairRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/EnvironmentAgentPairRequest.json"],"format":"uri","readOnly":true,"type":"string"},"rotate":{"type":"boolean"}},"type":"object"},"EnvironmentAgentPairResponse":{"additionalProperties":false,"properties":{"token":{"type":"string"}},"required":["token"],"type":"object"},"EnvironmentCreate":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/EnvironmentCreate.json"],"format":"uri","readOnly":true,"type":"string"},"accessToken":{"type":"string"},"apiUrl":{"type":"string"},"enabled":{"type":"boolean"},"isEdge":{"type":"boolean"},"name":{"type":"string"},"useApiKey":{"type":"boolean"}},"required":["apiUrl"],"type":"object"},"EnvironmentEdgeMTLSCertificate":{"additionalProperties":false,"properties":{"commonName":{"type":"string"},"daysRemaining":{"format":"int64","type":"integer"},"expired":{"type":"boolean"},"expiresAt":{"format":"date-time","type":"string"},"expiringSoon":{"type":"boolean"}},"required":["expired","expiringSoon"],"type":"object"},"EnvironmentEnvironment":{"additionalProperties":false,"properties":{"apiKey":{"type":"string"},"apiUrl":{"type":"string"},"connected":{"type":"boolean"},"connectedAt":{"format":"date-time","type":"string"},"edgeAgentInstance":{"type":"string"},"edgeCapabilities":{"items":{"type":"string"},"type":["array","null"]},"edgeMTLSCertificate":{"$ref":"#/components/schemas/EnvironmentEdgeMTLSCertificate"},"edgeSecurityMode":{"type":"string"},"edgeSessionId":{"type":"string"},"edgeTransport":{"type":"string"},"enabled":{"type":"boolean"},"id":{"type":"string"},"isEdge":{"type":"boolean"},"lastEdgeTransport":{"type":"string"},"lastHeartbeat":{"format":"date-time","type":"string"},"lastPollAt":{"format":"date-time","type":"string"},"lastSeen":{"format":"date-time","type":"string"},"name":{"type":"string"},"status":{"type":"string"}},"required":["id","apiUrl","status","enabled","isEdge"],"type":"object"},"EnvironmentPaginatedResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/EnvironmentPaginatedResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"items":{"$ref":"#/components/schemas/EnvironmentEnvironment"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"EnvironmentTest":{"additionalProperties":false,"properties":{"message":{"type":"string"},"status":{"type":"string"}},"required":["status"],"type":"object"},"EnvironmentTestConnectionRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/EnvironmentTestConnectionRequest.json"],"format":"uri","readOnly":true,"type":"string"},"apiUrl":{"type":"string"}},"type":"object"},"EnvironmentUpdate":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/EnvironmentUpdate.json"],"format":"uri","readOnly":true,"type":"string"},"accessToken":{"type":"string"},"apiUrl":{"type":"string"},"enabled":{"type":"boolean"},"name":{"type":"string"},"regenerateApiKey":{"type":"boolean"}},"type":"object"},"EnvironmentUpdateJob":{"additionalProperties":false,"properties":{"completedAt":{"format":"date-time","type":"string"},"createdAt":{"format":"date-time","type":"string"},"error":{"type":"string"},"id":{"type":"string"},"managerDigestAtStart":{"type":"string"},"managerTargetVersion":{"type":"string"},"managerVersionAtStart":{"type":"string"},"results":{"items":{"$ref":"#/components/schemas/EnvironmentUpdateResult"},"type":["array","null"]},"status":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"userId":{"type":"string"},"username":{"type":"string"}},"required":["status","userId","username","managerVersionAtStart","managerDigestAtStart","managerTargetVersion","id","createdAt"],"type":"object"},"EnvironmentUpdateResult":{"additionalProperties":false,"properties":{"environmentId":{"type":"string"},"environmentName":{"type":"string"},"error":{"type":"string"},"fromVersion":{"type":"string"},"status":{"type":"string"},"toVersion":{"type":"string"}},"required":["environmentId","environmentName","status"],"type":"object"},"EnvironmentWithApiKey":{"additionalProperties":false,"properties":{"apiKey":{"description":"API key for pairing (only shown once during creation)","type":"string"},"apiUrl":{"type":"string"},"connected":{"type":"boolean"},"connectedAt":{"format":"date-time","type":"string"},"edgeAgentInstance":{"type":"string"},"edgeCapabilities":{"items":{"type":"string"},"type":["array","null"]},"edgeMTLSCertificate":{"$ref":"#/components/schemas/EnvironmentEdgeMTLSCertificate"},"edgeSecurityMode":{"type":"string"},"edgeSessionId":{"type":"string"},"edgeTransport":{"type":"string"},"enabled":{"type":"boolean"},"id":{"type":"string"},"isEdge":{"type":"boolean"},"lastEdgeTransport":{"type":"string"},"lastHeartbeat":{"format":"date-time","type":"string"},"lastPollAt":{"format":"date-time","type":"string"},"lastSeen":{"format":"date-time","type":"string"},"name":{"type":"string"},"status":{"type":"string"}},"required":["id","apiUrl","status","enabled","isEdge"],"type":"object"},"ErrorDetail":{"additionalProperties":false,"properties":{"location":{"description":"Where the error occurred, e.g. 'body.items[3].tags' or 'path.thing-id'","type":"string"},"message":{"description":"Error message text","type":"string"},"value":{"description":"The value at the given location"}},"type":"object"},"ErrorModel":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ErrorModel.json"],"format":"uri","readOnly":true,"type":"string"},"detail":{"description":"A human-readable explanation specific to this occurrence of the problem.","examples":["Property foo is required but is missing."],"type":"string"},"errors":{"description":"Optional list of individual error details","items":{"$ref":"#/components/schemas/ErrorDetail"},"type":["array","null"]},"instance":{"description":"A URI reference that identifies the specific occurrence of the problem.","examples":["https://example.com/error-log/abc123"],"format":"uri","type":"string"},"status":{"description":"HTTP status code","examples":[400],"format":"int64","type":"integer"},"title":{"description":"A short, human-readable summary of the problem type. This value should not change between occurrences of the error.","examples":["Bad Request"],"type":"string"},"type":{"default":"about:blank","description":"A URI reference to human-readable documentation for the error.","examples":["https://example.com/errors/example"],"format":"uri","type":"string"}},"type":"object"},"EventEvent":{"additionalProperties":false,"properties":{"createdAt":{"format":"date-time","type":"string"},"description":{"type":"string"},"environmentId":{"type":"string"},"id":{"type":"string"},"metadata":{"additionalProperties":{},"type":"object"},"resourceId":{"type":"string"},"resourceName":{"type":"string"},"resourceType":{"type":"string"},"severity":{"type":"string"},"timestamp":{"format":"date-time","type":"string"},"title":{"type":"string"},"type":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"userId":{"type":"string"},"username":{"type":"string"}},"required":["id","type","severity","title","timestamp","createdAt"],"type":"object"},"EventPaginatedResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/EventPaginatedResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"items":{"$ref":"#/components/schemas/EventEvent"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"ExtendsConfig":{"additionalProperties":false,"properties":{"file":{"type":"string"},"service":{"type":"string"}},"type":"object"},"FederatedCreateFederatedCredential":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/FederatedCreateFederatedCredential.json"],"format":"uri","readOnly":true,"type":"string"},"audiences":{"description":"Allowed external token audiences","items":{"type":"string"},"minItems":1,"type":["array","null"]},"description":{"description":"Optional description","maxLength":1000,"type":"string"},"enabled":{"description":"Whether exchanges are allowed","type":"boolean"},"environmentId":{"description":"Optional environment scope for the role assignment","type":"string"},"expiresAt":{"description":"Optional credential expiration","format":"date-time","type":"string"},"issuerUrl":{"description":"Trusted external OIDC issuer URL","format":"uri","minLength":1,"type":"string"},"matchType":{"description":"Subject match strategy","enum":["exact","glob"],"type":"string"},"name":{"description":"Display name","maxLength":255,"minLength":1,"type":"string"},"roleId":{"description":"Mapped role ID","minLength":1,"type":"string"},"subjectClaim":{"description":"Claim path to match against; defaults to sub","type":"string"},"subjectMatch":{"description":"Exact subject or anchored glob pattern","minLength":1,"type":"string"},"tokenTtlSeconds":{"description":"Issued token lifetime in seconds","format":"int64","maximum":3600,"minimum":60,"type":"integer"}},"required":["name","enabled","issuerUrl","audiences","subjectMatch","roleId"],"type":"object"},"FederatedFederatedCredential":{"additionalProperties":false,"properties":{"audiences":{"description":"Allowed external token audiences","items":{"type":"string"},"type":["array","null"]},"createdAt":{"description":"Creation timestamp","format":"date-time","type":"string"},"description":{"description":"Optional description","type":"string"},"enabled":{"description":"Whether exchanges are allowed","type":"boolean"},"environmentId":{"description":"Optional environment scope for the role assignment","type":"string"},"environmentName":{"description":"Mapped environment name when scoped","type":"string"},"expiresAt":{"description":"Optional credential expiration","format":"date-time","type":"string"},"id":{"description":"Unique identifier of the federated credential","type":"string"},"identityUserId":{"description":"Dedicated service user ID backing issued tokens","type":"string"},"issuerUrl":{"description":"Trusted external OIDC issuer URL","type":"string"},"lastUsedAt":{"description":"Last successful token exchange","format":"date-time","type":"string"},"matchType":{"description":"Subject match strategy","enum":["exact","glob"],"type":"string"},"name":{"description":"Display name","type":"string"},"roleId":{"description":"Mapped role ID","type":"string"},"roleName":{"description":"Mapped role name","type":"string"},"serviceUsername":{"description":"Dedicated service account username","type":"string"},"subjectClaim":{"description":"Claim path to match against","type":"string"},"subjectMatch":{"description":"Exact subject or anchored glob pattern","type":"string"},"tokenTtlSeconds":{"description":"Issued token lifetime in seconds","format":"int64","type":"integer"},"updatedAt":{"description":"Last update timestamp","format":"date-time","type":"string"}},"required":["id","name","enabled","issuerUrl","audiences","subjectClaim","subjectMatch","matchType","roleId","identityUserId","tokenTtlSeconds","createdAt"],"type":"object"},"FederatedUpdateFederatedCredential":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/FederatedUpdateFederatedCredential.json"],"format":"uri","readOnly":true,"type":"string"},"audiences":{"description":"Allowed external token audiences","items":{"type":"string"},"minItems":1,"type":["array","null"]},"description":{"description":"Optional description","maxLength":1000,"type":"string"},"enabled":{"description":"Whether exchanges are allowed","type":"boolean"},"environmentId":{"description":"Optional environment scope for the role assignment","type":"string"},"expiresAt":{"description":"Optional credential expiration","format":"date-time","type":"string"},"issuerUrl":{"description":"Trusted external OIDC issuer URL","format":"uri","type":"string"},"matchType":{"description":"Subject match strategy","enum":["exact","glob"],"type":"string"},"name":{"description":"Display name","maxLength":255,"type":"string"},"roleId":{"description":"Mapped role ID","minLength":1,"type":"string"},"subjectClaim":{"description":"Claim path to match against","type":"string"},"subjectMatch":{"description":"Exact subject or anchored glob pattern","minLength":1,"type":"string"},"tokenTtlSeconds":{"description":"Issued token lifetime in seconds","format":"int64","maximum":3600,"minimum":60,"type":"integer"}},"type":"object"},"FileContentResponse":{"additionalProperties":false,"properties":{"content":{"contentEncoding":"base64","type":"string"},"mimeType":{"type":"string"}},"required":["content","mimeType"],"type":"object"},"GetSwarmNodeAgentDeploymentInputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/GetSwarmNodeAgentDeploymentInputBody.json"],"format":"uri","readOnly":true,"type":"string"},"rotate":{"description":"Rotate the environment token before generating snippets","type":"boolean"}},"type":"object"},"GitOpsSyncPaginatedResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/GitOpsSyncPaginatedResponse.json"],"format":"uri","readOnly":true,"type":"string"},"counts":{"$ref":"#/components/schemas/GitopsSyncCounts"},"data":{"items":{"$ref":"#/components/schemas/GitopsGitOpsSync"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","counts","pagination"],"type":"object"},"GitRepositoryPaginatedResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/GitRepositoryPaginatedResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"items":{"$ref":"#/components/schemas/GitopsGitRepository"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"GitopsBranchInfo":{"additionalProperties":false,"properties":{"isDefault":{"type":"boolean"},"name":{"type":"string"}},"required":["name","isDefault"],"type":"object"},"GitopsBranchesResponse":{"additionalProperties":false,"properties":{"branches":{"items":{"$ref":"#/components/schemas/GitopsBranchInfo"},"type":["array","null"]}},"required":["branches"],"type":"object"},"GitopsBrowseResponse":{"additionalProperties":false,"properties":{"files":{"items":{"$ref":"#/components/schemas/GitopsFileTreeNode"},"type":["array","null"]},"path":{"type":"string"}},"required":["path","files"],"type":"object"},"GitopsCreateSyncRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/GitopsCreateSyncRequest.json"],"format":"uri","readOnly":true,"type":"string"},"autoSync":{"type":"boolean"},"branch":{"type":"string"},"composePath":{"type":"string"},"maxSyncBinarySize":{"format":"int64","type":"integer"},"maxSyncFiles":{"format":"int64","type":"integer"},"maxSyncTotalSize":{"format":"int64","type":"integer"},"name":{"type":"string"},"preDeployEnv":{"type":"string"},"preDeployExtraMounts":{"type":"string"},"preDeployNetworkMode":{"type":"string"},"preDeployRunnerImage":{"type":"string"},"preDeployScriptPath":{"type":"string"},"preDeployTimeoutSec":{"format":"int64","type":"integer"},"projectName":{"type":"string"},"repositoryId":{"type":"string"},"syncDirectory":{"type":"boolean"},"syncInterval":{"format":"int64","type":"integer"},"targetType":{"type":"string"}},"required":["name","repositoryId","branch","composePath"],"type":"object"},"GitopsFileTreeNode":{"additionalProperties":false,"properties":{"children":{"items":{"$ref":"#/components/schemas/GitopsFileTreeNode"},"type":["array","null"]},"name":{"type":"string"},"path":{"type":"string"},"size":{"format":"int64","type":"integer"},"type":{"type":"string"}},"required":["name","path","type"],"type":"object"},"GitopsGitOpsSync":{"additionalProperties":false,"properties":{"autoSync":{"type":"boolean"},"branch":{"type":"string"},"composePath":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"environmentId":{"type":"string"},"id":{"type":"string"},"lastSyncAt":{"format":"date-time","type":"string"},"lastSyncCommit":{"type":"string"},"lastSyncError":{"type":"string"},"lastSyncStatus":{"type":"string"},"maxSyncBinarySize":{"format":"int64","type":"integer"},"maxSyncFiles":{"format":"int64","type":"integer"},"maxSyncTotalSize":{"format":"int64","type":"integer"},"name":{"type":"string"},"preDeployEnv":{"type":"string"},"preDeployExtraMounts":{"type":"string"},"preDeployLastRunAt":{"format":"date-time","type":"string"},"preDeployLastRunOutput":{"type":"string"},"preDeployLastRunStatus":{"type":"string"},"preDeployNetworkMode":{"type":"string"},"preDeployRunnerImage":{"type":"string"},"preDeployScriptPath":{"type":"string"},"preDeployTimeoutSec":{"format":"int64","type":"integer"},"projectId":{"type":"string"},"projectName":{"type":"string"},"repository":{"$ref":"#/components/schemas/GitopsGitRepository"},"repositoryId":{"type":"string"},"syncDirectory":{"type":"boolean"},"syncInterval":{"format":"int64","type":"integer"},"syncedFiles":{"type":"string"},"targetType":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","name","environmentId","repositoryId","branch","composePath","targetType","projectName","autoSync","syncInterval","syncDirectory","maxSyncFiles","maxSyncTotalSize","maxSyncBinarySize","preDeployTimeoutSec","preDeployNetworkMode","createdAt","updatedAt"],"type":"object"},"GitopsGitRepository":{"additionalProperties":false,"properties":{"authType":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"description":{"type":"string"},"enabled":{"type":"boolean"},"id":{"type":"string"},"name":{"type":"string"},"sshHostKeyVerification":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"url":{"type":"string"},"username":{"type":"string"}},"required":["id","name","url","authType","enabled","createdAt","updatedAt"],"type":"object"},"GitopsImportGitOpsSyncRequest":{"additionalProperties":false,"properties":{"autoSync":{"type":"boolean"},"branch":{"type":"string"},"dockerComposePath":{"type":"string"},"gitRepo":{"type":"string"},"maxSyncBinarySize":{"format":"int64","type":"integer"},"maxSyncFiles":{"format":"int64","type":"integer"},"maxSyncTotalSize":{"format":"int64","type":"integer"},"syncDirectory":{"type":"boolean"},"syncInterval":{"format":"int64","type":"integer"},"syncName":{"type":"string"}},"required":["syncName","gitRepo","branch","dockerComposePath","autoSync","syncInterval"],"type":"object"},"GitopsImportGitOpsSyncResponse":{"additionalProperties":false,"properties":{"errors":{"items":{"type":"string"},"type":["array","null"]},"failedCount":{"format":"int64","type":"integer"},"successCount":{"format":"int64","type":"integer"}},"required":["successCount","failedCount","errors"],"type":"object"},"GitopsRepositorySync":{"additionalProperties":false,"properties":{"authType":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"description":{"type":"string"},"enabled":{"type":"boolean"},"id":{"type":"string"},"name":{"type":"string"},"sshHostKeyVerification":{"type":"string"},"sshKey":{"type":"string"},"token":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"url":{"type":"string"},"username":{"type":"string"}},"required":["id","name","url","authType","enabled","createdAt","updatedAt"],"type":"object"},"GitopsRepositorySyncRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/GitopsRepositorySyncRequest.json"],"format":"uri","readOnly":true,"type":"string"},"repositories":{"items":{"$ref":"#/components/schemas/GitopsRepositorySync"},"type":["array","null"]}},"required":["repositories"],"type":"object"},"GitopsSyncCounts":{"additionalProperties":false,"properties":{"activeSyncs":{"format":"int64","type":"integer"},"successfulSyncs":{"format":"int64","type":"integer"},"totalSyncs":{"format":"int64","type":"integer"}},"required":["totalSyncs","activeSyncs","successfulSyncs"],"type":"object"},"GitopsSyncResult":{"additionalProperties":false,"properties":{"error":{"type":"string"},"message":{"type":"string"},"success":{"type":"boolean"},"syncedAt":{"format":"date-time","type":"string"}},"required":["success","message","syncedAt"],"type":"object"},"GitopsSyncStatus":{"additionalProperties":false,"properties":{"autoSync":{"type":"boolean"},"id":{"type":"string"},"lastSyncAt":{"format":"date-time","type":"string"},"lastSyncCommit":{"type":"string"},"lastSyncError":{"type":"string"},"lastSyncStatus":{"type":"string"},"nextSyncAt":{"format":"date-time","type":"string"}},"required":["id","autoSync"],"type":"object"},"GitopsUpdateSyncRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/GitopsUpdateSyncRequest.json"],"format":"uri","readOnly":true,"type":"string"},"autoSync":{"type":"boolean"},"branch":{"type":"string"},"composePath":{"type":"string"},"maxSyncBinarySize":{"format":"int64","type":"integer"},"maxSyncFiles":{"format":"int64","type":"integer"},"maxSyncTotalSize":{"format":"int64","type":"integer"},"name":{"type":"string"},"preDeployEnv":{"type":"string"},"preDeployExtraMounts":{"type":"string"},"preDeployNetworkMode":{"type":"string"},"preDeployRunnerImage":{"type":"string"},"preDeployScriptPath":{"type":"string"},"preDeployTimeoutSec":{"format":"int64","type":"integer"},"projectName":{"type":"string"},"repositoryId":{"type":"string"},"syncDirectory":{"type":"boolean"},"syncInterval":{"format":"int64","type":"integer"},"targetType":{"type":"string"}},"type":"object"},"HealthCheckConfig":{"additionalProperties":false,"properties":{"disable":{"type":"boolean"},"interval":{"format":"int64","type":"integer"},"retries":{"format":"int64","minimum":0,"type":"integer"},"start_interval":{"format":"int64","type":"integer"},"start_period":{"format":"int64","type":"integer"},"test":{"items":{"type":"string"},"type":["array","null"]},"timeout":{"format":"int64","type":"integer"}},"type":"object"},"HealthcheckConfig":{"additionalProperties":false,"properties":{"Interval":{"format":"int64","type":"integer"},"Retries":{"format":"int64","type":"integer"},"StartInterval":{"format":"int64","type":"integer"},"StartPeriod":{"format":"int64","type":"integer"},"Test":{"items":{"type":"string"},"type":["array","null"]},"Timeout":{"format":"int64","type":"integer"}},"type":"object"},"ImageAttestation":{"additionalProperties":false,"properties":{"artifactType":{"type":"string"},"digest":{"type":"string"},"mediaType":{"type":"string"},"platform":{"type":"string"},"predicateType":{"type":"string"},"size":{"format":"int64","type":"integer"},"statement":{},"statementType":{"type":"string"},"subject":{"items":{"$ref":"#/components/schemas/ImageAttestationSubject"},"type":["array","null"]}},"required":["digest","mediaType","predicateType","subject","size"],"type":"object"},"ImageAttestationList":{"additionalProperties":false,"properties":{"attestations":{"items":{"$ref":"#/components/schemas/ImageAttestation"},"type":["array","null"]},"imageRef":{"type":"string"},"platform":{"type":"string"},"subjectDigest":{"type":"string"}},"required":["imageRef","subjectDigest","attestations"],"type":"object"},"ImageAttestationSubject":{"additionalProperties":false,"properties":{"digest":{"additionalProperties":{"type":"string"},"type":"object"},"name":{"type":"string"}},"required":["name","digest"],"type":"object"},"ImageBuildPaginatedResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ImageBuildPaginatedResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"items":{"$ref":"#/components/schemas/ImageBuildRecord"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"ImageBuildRecord":{"additionalProperties":false,"properties":{"buildArgs":{"additionalProperties":{"type":"string"},"type":"object"},"cacheFrom":{"items":{"type":"string"},"type":["array","null"]},"cacheTo":{"items":{"type":"string"},"type":["array","null"]},"completedAt":{"format":"date-time","type":"string"},"contextDir":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"digest":{"type":"string"},"dockerfile":{"type":"string"},"durationMs":{"format":"int64","type":"integer"},"entitlements":{"items":{"type":"string"},"type":["array","null"]},"environmentId":{"type":"string"},"errorMessage":{"type":"string"},"extraHosts":{"items":{"type":"string"},"type":["array","null"]},"id":{"type":"string"},"isolation":{"type":"string"},"labels":{"additionalProperties":{"type":"string"},"type":"object"},"load":{"type":"boolean"},"network":{"type":"string"},"noCache":{"type":"boolean"},"output":{"type":"string"},"outputTruncated":{"type":"boolean"},"platforms":{"items":{"type":"string"},"type":["array","null"]},"privileged":{"type":"boolean"},"provider":{"type":"string"},"pull":{"type":"boolean"},"push":{"type":"boolean"},"shmSize":{"format":"int64","type":"integer"},"status":{"type":"string"},"tags":{"items":{"type":"string"},"type":["array","null"]},"target":{"type":"string"},"ulimits":{"additionalProperties":{"type":"string"},"type":"object"},"userId":{"type":"string"},"username":{"type":"string"}},"required":["id","environmentId","status","contextDir","noCache","pull","privileged","push","load","outputTruncated","createdAt"],"type":"object"},"ImageDetailSummary":{"additionalProperties":false,"properties":{"architecture":{"type":"string"},"author":{"type":"string"},"comment":{"type":"string"},"config":{"$ref":"#/components/schemas/DetailSummaryConfigStruct"},"created":{"type":"string"},"descriptor":{"$ref":"#/components/schemas/DetailSummaryDescriptorStruct"},"graphDriver":{"$ref":"#/components/schemas/DetailSummaryGraphDriverStruct"},"id":{"type":"string"},"metadata":{"$ref":"#/components/schemas/DetailSummaryMetadataStruct"},"os":{"type":"string"},"repoDigests":{"items":{"type":"string"},"type":["array","null"]},"repoTags":{"items":{"type":"string"},"type":["array","null"]},"rootFs":{"$ref":"#/components/schemas/DetailSummaryRootFsStruct"},"size":{"format":"int64","type":"integer"}},"required":["id","repoTags","repoDigests","comment","created","author","config","architecture","os","size","graphDriver","rootFs","metadata","descriptor"],"type":"object"},"ImageHistoryItem":{"additionalProperties":false,"properties":{"comment":{"type":"string"},"created":{"format":"int64","type":"integer"},"createdBy":{"type":"string"},"id":{"type":"string"},"size":{"format":"int64","type":"integer"},"tags":{"items":{"type":"string"},"type":["array","null"]}},"required":["id","created","createdBy","tags","size","comment"],"type":"object"},"ImageLoadResult":{"additionalProperties":false,"properties":{"stream":{"type":"string"}},"required":["stream"],"type":"object"},"ImagePaginatedResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ImagePaginatedResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"items":{"$ref":"#/components/schemas/ImageSummary"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"ImagePruneReport":{"additionalProperties":false,"properties":{"imagesDeleted":{"items":{"type":"string"},"type":["array","null"]},"spaceReclaimed":{"format":"int64","type":"integer"}},"required":["imagesDeleted","spaceReclaimed"],"type":"object"},"ImagePullOptions":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ImagePullOptions.json"],"format":"uri","readOnly":true,"type":"string"},"auth":{"$ref":"#/components/schemas/ContainerregistryCredential"},"credentials":{"items":{"$ref":"#/components/schemas/ContainerregistryCredential"},"type":["array","null"]},"imageName":{"description":"Name of the image to pull (e.g., nginx)","minLength":1,"type":"string"},"tag":{"description":"Tag of the image to pull (e.g., latest)","type":"string"}},"required":["imageName"],"type":"object"},"ImageSearchResult":{"additionalProperties":false,"properties":{"automated":{"type":"boolean"},"description":{"type":"string"},"name":{"type":"string"},"official":{"type":"boolean"},"starCount":{"format":"int64","type":"integer"}},"required":["name","description","starCount","official","automated"],"type":"object"},"ImageSummary":{"additionalProperties":false,"properties":{"created":{"format":"int64","type":"integer"},"id":{"type":"string"},"inUse":{"type":"boolean"},"labels":{"additionalProperties":{},"type":"object"},"repo":{"type":"string"},"repoDigests":{"items":{"type":"string"},"type":["array","null"]},"repoTags":{"items":{"type":"string"},"type":["array","null"]},"size":{"format":"int64","type":"integer"},"tag":{"type":"string"},"updateInfo":{"$ref":"#/components/schemas/ImageUpdateInfo"},"usedBy":{"items":{"$ref":"#/components/schemas/ImageUsedBy"},"type":["array","null"]},"virtualSize":{"format":"int64","type":"integer"},"vulnerabilityScan":{"$ref":"#/components/schemas/VulnerabilityScanSummary"}},"required":["id","repoTags","repoDigests","created","size","virtualSize","labels","inUse","repo","tag"],"type":"object"},"ImageTagRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ImageTagRequest.json"],"format":"uri","readOnly":true,"type":"string"},"repository":{"description":"Target repository name","type":"string"},"tag":{"description":"Target tag","type":"string"}},"required":["repository"],"type":"object"},"ImageUpdateInfo":{"additionalProperties":false,"properties":{"authMethod":{"type":"string"},"authRegistry":{"type":"string"},"authUsername":{"type":"string"},"checkTime":{"format":"date-time","type":"string"},"currentDigest":{"type":"string"},"currentVersion":{"type":"string"},"error":{"type":"string"},"hasUpdate":{"type":"boolean"},"latestDigest":{"type":"string"},"latestVersion":{"type":"string"},"responseTimeMs":{"format":"int64","type":"integer"},"updateType":{"type":"string"},"usedCredential":{"type":"boolean"}},"required":["hasUpdate","updateType","currentVersion","latestVersion","currentDigest","latestDigest","checkTime","responseTimeMs","error"],"type":"object"},"ImageUsageCounts":{"additionalProperties":false,"properties":{"imagesInuse":{"format":"int64","type":"integer"},"imagesUnused":{"format":"int64","type":"integer"},"totalImageSize":{"format":"int64","type":"integer"},"totalImages":{"format":"int64","type":"integer"}},"required":["imagesInuse","imagesUnused","totalImages","totalImageSize"],"type":"object"},"ImageUsageCountsResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ImageUsageCountsResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/ImageUsageCounts"},"success":{"type":"boolean"}},"required":["success","data"],"type":"object"},"ImageUsedBy":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"}},"required":["type","name"],"type":"object"},"ImageupdateBatchImageUpdateRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ImageupdateBatchImageUpdateRequest.json"],"format":"uri","readOnly":true,"type":"string"},"credentials":{"items":{"$ref":"#/components/schemas/ContainerregistryCredential"},"type":["array","null"]},"imageRefs":{"items":{"type":"string"},"type":["array","null"]}},"required":["imageRefs"],"type":"object"},"ImageupdateCheckAllImagesRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ImageupdateCheckAllImagesRequest.json"],"format":"uri","readOnly":true,"type":"string"},"credentials":{"items":{"$ref":"#/components/schemas/ContainerregistryCredential"},"type":["array","null"]}},"type":"object"},"ImageupdateResponse":{"additionalProperties":false,"properties":{"activityId":{"type":"string"},"authMethod":{"type":"string"},"authRegistry":{"type":"string"},"authUsername":{"type":"string"},"checkTime":{"format":"date-time","type":"string"},"currentDigest":{"type":"string"},"currentVersion":{"type":"string"},"error":{"type":"string"},"hasUpdate":{"type":"boolean"},"latestDigest":{"type":"string"},"latestVersion":{"type":"string"},"responseTimeMs":{"format":"int64","type":"integer"},"updateType":{"type":"string"},"usedCredential":{"type":"boolean"}},"required":["hasUpdate","updateType","currentVersion","checkTime","responseTimeMs"],"type":"object"},"ImageupdateSummary":{"additionalProperties":false,"properties":{"digestUpdates":{"format":"int64","type":"integer"},"errorsCount":{"format":"int64","type":"integer"},"imagesWithUpdates":{"format":"int64","type":"integer"},"totalImages":{"format":"int64","type":"integer"}},"required":["totalImages","imagesWithUpdates","digestUpdates","errorsCount"],"type":"object"},"JobscheduleConfig":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/JobscheduleConfig.json"],"format":"uri","readOnly":true,"type":"string"},"autoHealInterval":{"type":"string"},"autoUpdateInterval":{"type":"string"},"dockerClientRefreshInterval":{"type":"string"},"environmentHealthInterval":{"type":"string"},"eventCleanupInterval":{"type":"string"},"expiredSessionsCleanupInterval":{"type":"string"},"pollingInterval":{"type":"string"},"scheduledPruneInterval":{"type":"string"},"vulnerabilityScanInterval":{"type":"string"}},"required":["environmentHealthInterval","eventCleanupInterval","expiredSessionsCleanupInterval","autoUpdateInterval","dockerClientRefreshInterval","pollingInterval","scheduledPruneInterval","vulnerabilityScanInterval","autoHealInterval"],"type":"object"},"JobscheduleJobListResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/JobscheduleJobListResponse.json"],"format":"uri","readOnly":true,"type":"string"},"isAgent":{"type":"boolean"},"jobs":{"items":{"$ref":"#/components/schemas/JobscheduleJobStatus"},"type":["array","null"]}},"required":["jobs","isAgent"],"type":"object"},"JobscheduleJobPrerequisite":{"additionalProperties":false,"properties":{"isMet":{"type":"boolean"},"label":{"type":"string"},"settingKey":{"type":"string"},"settingsUrl":{"type":"string"}},"required":["settingKey","label","isMet"],"type":"object"},"JobscheduleJobRunResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/JobscheduleJobRunResponse.json"],"format":"uri","readOnly":true,"type":"string"},"message":{"type":"string"},"success":{"type":"boolean"}},"required":["success","message"],"type":"object"},"JobscheduleJobStatus":{"additionalProperties":false,"properties":{"canRunManually":{"type":"boolean"},"category":{"type":"string"},"description":{"type":"string"},"enabled":{"type":"boolean"},"id":{"type":"string"},"isContinuous":{"type":"boolean"},"managerOnly":{"type":"boolean"},"name":{"type":"string"},"nextRun":{"format":"date-time","type":"string"},"prerequisites":{"items":{"$ref":"#/components/schemas/JobscheduleJobPrerequisite"},"type":["array","null"]},"schedule":{"type":"string"},"settingsKey":{"type":"string"}},"required":["id","name","description","category","schedule","enabled","managerOnly","isContinuous","canRunManually","prerequisites"],"type":"object"},"JobscheduleUpdate":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/JobscheduleUpdate.json"],"format":"uri","readOnly":true,"type":"string"},"autoHealInterval":{"type":"string"},"autoUpdateInterval":{"type":"string"},"dockerClientRefreshInterval":{"type":"string"},"environmentHealthInterval":{"type":"string"},"eventCleanupInterval":{"type":"string"},"expiredSessionsCleanupInterval":{"type":"string"},"pollingInterval":{"type":"string"},"scheduledPruneInterval":{"type":"string"},"vulnerabilityScanInterval":{"type":"string"}},"type":"object"},"ListOidcRoleMappingsOutputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ListOidcRoleMappingsOutputBody.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"items":{"$ref":"#/components/schemas/RoleOidcRoleMapping"},"type":["array","null"]},"success":{"type":"boolean"}},"required":["success","data"],"type":"object"},"LoggingConfig":{"additionalProperties":false,"properties":{"driver":{"type":"string"},"options":{"additionalProperties":{"type":"string"},"type":"object"}},"type":"object"},"MetaMetadata":{"additionalProperties":false,"properties":{"description":{"type":"string"},"key":{"type":"string"},"keywords":{"items":{"type":"string"},"type":["array","null"]},"label":{"type":"string"},"type":{"type":"string"}},"required":["key","label","type"],"type":"object"},"MetaTemplateMeta":{"additionalProperties":false,"properties":{"author":{"type":"string"},"documentationUrl":{"type":"string"},"envUrl":{"type":"string"},"iconUrl":{"type":"string"},"remoteUrl":{"type":"string"},"tags":{"items":{"type":"string"},"type":["array","null"]},"updatedAt":{"type":"string"},"version":{"type":"string"}},"type":"object"},"NetworkContainerEndpoint":{"additionalProperties":false,"properties":{"endpointId":{"type":"string"},"id":{"type":"string"},"ipv4Address":{"type":"string"},"ipv6Address":{"type":"string"},"macAddress":{"type":"string"},"name":{"type":"string"}},"required":["id","name","endpointId","ipv4Address","ipv6Address","macAddress"],"type":"object"},"NetworkCountsApiResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/NetworkCountsApiResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/NetworkUsageCounts"},"success":{"type":"boolean"}},"required":["success","data"],"type":"object"},"NetworkCreateOptions":{"additionalProperties":false,"properties":{"attachable":{"description":"Allow manual container attachment","type":"boolean"},"checkDuplicate":{"description":"Check for duplicate network names","type":"boolean"},"driver":{"description":"Network driver (e.g., bridge, overlay)","type":"string"},"enableIPv6":{"description":"Enable IPv6 networking","type":"boolean"},"ingress":{"description":"Enable routing-mesh for swarm cluster","type":"boolean"},"internal":{"description":"Restrict external access to the network","type":"boolean"},"ipam":{"$ref":"#/components/schemas/NetworkIPAM","description":"IP Address Management configuration"},"labels":{"additionalProperties":{"type":"string"},"description":"User-defined labels","type":"object"},"options":{"additionalProperties":{"type":"string"},"description":"Driver-specific options","type":"object"}},"type":"object"},"NetworkCreateRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/NetworkCreateRequest.json"],"format":"uri","readOnly":true,"type":"string"},"name":{"description":"Name of the network","minLength":1,"type":"string"},"options":{"$ref":"#/components/schemas/NetworkCreateOptions","description":"Network creation options"}},"required":["name","options"],"type":"object"},"NetworkCreateResponse":{"additionalProperties":false,"properties":{"activityId":{"type":"string"},"id":{"type":"string"},"warning":{"type":"string"}},"required":["id"],"type":"object"},"NetworkCreatedApiResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/NetworkCreatedApiResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/NetworkCreateResponse"},"success":{"type":"boolean"}},"required":["success","data"],"type":"object"},"NetworkIPAM":{"additionalProperties":false,"properties":{"config":{"items":{"$ref":"#/components/schemas/NetworkIPAMConfig"},"type":["array","null"]},"driver":{"type":"string"},"options":{"additionalProperties":{"type":"string"},"type":"object"}},"type":"object"},"NetworkIPAMConfig":{"additionalProperties":false,"properties":{"auxAddress":{"additionalProperties":{"type":"string"},"type":"object"},"gateway":{"type":"string"},"ipRange":{"type":"string"},"subnet":{"type":"string"}},"type":"object"},"NetworkInspect":{"additionalProperties":false,"properties":{"attachable":{"type":"boolean"},"configFrom":{"$ref":"#/components/schemas/DockerNetworkConfigReference"},"configOnly":{"type":"boolean"},"containers":{"additionalProperties":{"$ref":"#/components/schemas/DockerNetworkEndpointResource"},"type":"object"},"containersList":{"items":{"$ref":"#/components/schemas/NetworkContainerEndpoint"},"type":["array","null"]},"created":{"format":"date-time","type":"string"},"driver":{"type":"string"},"enableIPv4":{"type":"boolean"},"enableIPv6":{"type":"boolean"},"id":{"type":"string"},"ingress":{"type":"boolean"},"internal":{"type":"boolean"},"ipam":{"$ref":"#/components/schemas/NetworkIPAM"},"labels":{"additionalProperties":{"type":"string"},"type":"object"},"name":{"type":"string"},"options":{"additionalProperties":{"type":"string"},"type":"object"},"peers":{"items":{"$ref":"#/components/schemas/DockerNetworkPeerInfo"},"type":["array","null"]},"scope":{"type":"string"},"services":{"additionalProperties":{"$ref":"#/components/schemas/DockerNetworkServiceInfo"},"type":"object"}},"required":["id","name","driver","scope","created","enableIPv4","enableIPv6","ipam","internal","attachable","ingress","configFrom","configOnly","containers","options","labels","containersList"],"type":"object"},"NetworkInspectApiResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/NetworkInspectApiResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/NetworkInspect"},"success":{"type":"boolean"}},"required":["success","data"],"type":"object"},"NetworkMessageApiResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/NetworkMessageApiResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/BaseMessageResponse"},"success":{"type":"boolean"}},"required":["success","data"],"type":"object"},"NetworkPaginatedResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/NetworkPaginatedResponse.json"],"format":"uri","readOnly":true,"type":"string"},"counts":{"$ref":"#/components/schemas/NetworkUsageCounts"},"data":{"items":{"$ref":"#/components/schemas/NetworkSummary"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","counts","pagination"],"type":"object"},"NetworkPruneReport":{"additionalProperties":false,"properties":{"activityId":{"type":"string"},"networksDeleted":{"items":{"type":"string"},"type":["array","null"]},"spaceReclaimed":{"format":"int64","minimum":0,"type":"integer"}},"required":["networksDeleted","spaceReclaimed"],"type":"object"},"NetworkPruneResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/NetworkPruneResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/NetworkPruneReport"},"success":{"type":"boolean"}},"required":["success","data"],"type":"object"},"NetworkSummary":{"additionalProperties":false,"properties":{"created":{"format":"date-time","type":"string"},"driver":{"type":"string"},"id":{"type":"string"},"inUse":{"type":"boolean"},"isDefault":{"type":"boolean"},"labels":{"additionalProperties":{"type":"string"},"type":"object"},"name":{"type":"string"},"options":{"additionalProperties":{"type":"string"},"type":"object"},"scope":{"type":"string"}},"required":["id","name","driver","scope","created","options","labels","inUse","isDefault"],"type":"object"},"NetworkTopology":{"additionalProperties":false,"properties":{"edges":{"items":{"$ref":"#/components/schemas/NetworkTopologyEdge"},"type":["array","null"]},"nodes":{"items":{"$ref":"#/components/schemas/NetworkTopologyNode"},"type":["array","null"]}},"required":["nodes","edges"],"type":"object"},"NetworkTopologyApiResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/NetworkTopologyApiResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/NetworkTopology"},"success":{"type":"boolean"}},"required":["success","data"],"type":"object"},"NetworkTopologyEdge":{"additionalProperties":false,"properties":{"id":{"type":"string"},"ipv4Address":{"type":"string"},"ipv6Address":{"type":"string"},"source":{"type":"string"},"target":{"type":"string"}},"required":["id","source","target"],"type":"object"},"NetworkTopologyNode":{"additionalProperties":false,"properties":{"id":{"type":"string"},"metadata":{"$ref":"#/components/schemas/NetworkTopologyNodeMetadata"},"name":{"type":"string"},"type":{"type":"string"}},"required":["id","name","type","metadata"],"type":"object"},"NetworkTopologyNodeMetadata":{"additionalProperties":false,"properties":{"driver":{"type":"string"},"image":{"type":"string"},"isDefault":{"type":"boolean"},"scope":{"type":"string"},"status":{"type":"string"}},"type":"object"},"NetworkUsageCounts":{"additionalProperties":false,"properties":{"inuse":{"format":"int64","type":"integer"},"total":{"format":"int64","type":"integer"},"unused":{"format":"int64","type":"integer"}},"required":["inuse","unused","total"],"type":"object"},"NotificationDispatchAutoHeal":{"additionalProperties":false,"properties":{"containerId":{"type":"string"},"containerName":{"type":"string"}},"required":["containerName","containerId"],"type":"object"},"NotificationDispatchBatchImageUpdate":{"additionalProperties":false,"properties":{"updates":{"additionalProperties":{"$ref":"#/components/schemas/ImageupdateResponse"},"type":"object"}},"required":["updates"],"type":"object"},"NotificationDispatchContainerUpdate":{"additionalProperties":false,"properties":{"containerName":{"type":"string"},"imageRef":{"type":"string"},"newDigest":{"type":"string"},"oldDigest":{"type":"string"}},"required":["containerName","imageRef"],"type":"object"},"NotificationDispatchImageUpdate":{"additionalProperties":false,"properties":{"imageRef":{"type":"string"},"updateInfo":{"$ref":"#/components/schemas/ImageupdateResponse"}},"required":["imageRef","updateInfo"],"type":"object"},"NotificationDispatchPruneReport":{"additionalProperties":false,"properties":{"result":{"$ref":"#/components/schemas/SystemPruneAllResult"}},"required":["result"],"type":"object"},"NotificationDispatchRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/NotificationDispatchRequest.json"],"format":"uri","readOnly":true,"type":"string"},"autoHeal":{"$ref":"#/components/schemas/NotificationDispatchAutoHeal"},"batchImageUpdate":{"$ref":"#/components/schemas/NotificationDispatchBatchImageUpdate"},"containerUpdate":{"$ref":"#/components/schemas/NotificationDispatchContainerUpdate"},"imageUpdate":{"$ref":"#/components/schemas/NotificationDispatchImageUpdate"},"kind":{"type":"string"},"pruneReport":{"$ref":"#/components/schemas/NotificationDispatchPruneReport"},"vulnerabilityFound":{"$ref":"#/components/schemas/NotificationDispatchVulnerabilityFound"}},"required":["kind"],"type":"object"},"NotificationDispatchResponse":{"additionalProperties":false,"properties":{"delivered":{"format":"int64","type":"integer"},"message":{"type":"string"}},"required":["message","delivered"],"type":"object"},"NotificationDispatchVulnerabilityFound":{"additionalProperties":false,"properties":{"cveId":{"type":"string"},"cveLink":{"type":"string"},"fixedVersion":{"type":"string"},"imageName":{"type":"string"},"installedVersion":{"type":"string"},"pkgName":{"type":"string"},"severity":{"type":"string"}},"required":["cveId","cveLink","severity","imageName"],"type":"object"},"NotificationResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/NotificationResponse.json"],"format":"uri","readOnly":true,"type":"string"},"config":{"additionalProperties":{},"type":"object"},"enabled":{"type":"boolean"},"id":{"format":"int64","minimum":0,"type":"integer"},"provider":{"type":"string"}},"required":["id","provider","enabled","config"],"type":"object"},"NotificationTestResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"},"warning":{"type":"string"}},"required":["message"],"type":"object"},"NotificationUpdate":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/NotificationUpdate.json"],"format":"uri","readOnly":true,"type":"string"},"config":{"additionalProperties":{},"type":"object"},"enabled":{"type":"boolean"},"provider":{"type":"string"}},"required":["provider","enabled","config"],"type":"object"},"PortPaginatedResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/PortPaginatedResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"items":{"$ref":"#/components/schemas/PortPortMapping"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"PortPortMapping":{"additionalProperties":false,"properties":{"containerId":{"type":"string"},"containerName":{"type":"string"},"containerPort":{"format":"int64","type":"integer"},"hostIp":{"type":"string"},"hostPort":{"format":"int64","type":"integer"},"id":{"type":"string"},"isPublished":{"type":"boolean"},"protocol":{"type":"string"}},"required":["id","containerId","containerName","containerPort","protocol","isPublished"],"type":"object"},"ProjectCreateProject":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ProjectCreateProject.json"],"format":"uri","readOnly":true,"type":"string"},"composeContent":{"type":"string"},"envContent":{"type":"string"},"name":{"type":"string"},"projectFiles":{"items":{"$ref":"#/components/schemas/ProjectProjectFileDraft"},"maxItems":500,"type":["array","null"]}},"required":["name","composeContent"],"type":"object"},"ProjectCreateReponse":{"additionalProperties":false,"properties":{"activityId":{"type":"string"},"archivedAt":{"format":"date-time","type":"string"},"createdAt":{"type":"string"},"dirName":{"type":"string"},"gitOpsManagedBy":{"type":"string"},"id":{"type":"string"},"isArchived":{"type":"boolean"},"name":{"type":"string"},"path":{"type":"string"},"relativePath":{"type":"string"},"runningCount":{"format":"int64","type":"integer"},"serviceCount":{"format":"int64","type":"integer"},"status":{"type":"string"},"statusReason":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","name","path","status","serviceCount","runningCount","isArchived","createdAt","updatedAt"],"type":"object"},"ProjectDeployOptions":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ProjectDeployOptions.json"],"format":"uri","readOnly":true,"type":"string"},"forceRecreate":{"type":"boolean"},"pullPolicy":{"type":"string"},"removeOrphans":{"type":"boolean"}},"type":"object"},"ProjectDestroy":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ProjectDestroy.json"],"format":"uri","readOnly":true,"type":"string"},"removeFiles":{"type":"boolean"},"removeVolumes":{"type":"boolean"}},"type":"object"},"ProjectDetails":{"additionalProperties":false,"properties":{"activityId":{"type":"string"},"archivedAt":{"format":"date-time","type":"string"},"composeContent":{"type":"string"},"composeFileName":{"type":"string"},"createdAt":{"type":"string"},"dirName":{"type":"string"},"directoryFiles":{"items":{"$ref":"#/components/schemas/ProjectIncludeFile"},"type":["array","null"]},"envContent":{"type":"string"},"fileTreeRevision":{"type":"string"},"gitOpsManagedBy":{"type":"string"},"gitRepositoryURL":{"type":"string"},"hasBuildDirective":{"type":"boolean"},"iconDarkUrl":{"type":"string"},"iconLightUrl":{"type":"string"},"id":{"type":"string"},"includeFiles":{"items":{"$ref":"#/components/schemas/ProjectIncludeFile"},"type":["array","null"]},"isArchived":{"type":"boolean"},"isDiscovered":{"type":"boolean"},"lastSyncCommit":{"type":"string"},"name":{"type":"string"},"path":{"type":"string"},"projectFiles":{"items":{"$ref":"#/components/schemas/ProjectProjectFile"},"type":["array","null"]},"redeployDisabled":{"type":"boolean"},"relativePath":{"type":"string"},"runningCount":{"format":"int64","type":"integer"},"runtimeServices":{"items":{"$ref":"#/components/schemas/ProjectRuntimeService"},"type":["array","null"]},"serviceCount":{"format":"int64","type":"integer"},"services":{"items":{"$ref":"#/components/schemas/DockerTypesServiceConfig"},"type":["array","null"]},"status":{"type":"string"},"statusReason":{"type":"string"},"updateInfo":{"$ref":"#/components/schemas/ProjectUpdateInfo"},"updatedAt":{"type":"string"},"urls":{"items":{"type":"string"},"type":["array","null"]}},"required":["id","name","path","status","serviceCount","runningCount","isArchived","createdAt","updatedAt"],"type":"object"},"ProjectIncludeFile":{"additionalProperties":false,"properties":{"content":{"type":"string"},"path":{"type":"string"},"relativePath":{"type":"string"}},"required":["path","relativePath"],"type":"object"},"ProjectPaginatedResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ProjectPaginatedResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"items":{"$ref":"#/components/schemas/ProjectDetails"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"ProjectProjectFile":{"additionalProperties":false,"properties":{"content":{"type":"string"},"isDirectory":{"type":"boolean"},"modTime":{"format":"date-time","type":"string"},"name":{"type":"string"},"path":{"type":"string"},"protected":{"type":"boolean"},"relativePath":{"type":"string"},"size":{"format":"int64","type":"integer"}},"required":["path","relativePath","name","isDirectory","size","modTime"],"type":"object"},"ProjectProjectFileChange":{"additionalProperties":false,"properties":{"content":{"type":"string"},"newName":{"type":"string"},"newParentPath":{"type":"string"},"operation":{"enum":["create_file","create_folder","update_file","rename","move","delete"],"type":"string"},"recursive":{"type":"boolean"},"relativePath":{"type":"string"}},"required":["operation","relativePath"],"type":"object"},"ProjectProjectFileDraft":{"additionalProperties":false,"properties":{"content":{"type":"string"},"isDirectory":{"type":"boolean"},"relativePath":{"type":"string"}},"required":["relativePath","isDirectory"],"type":"object"},"ProjectRuntimeService":{"additionalProperties":false,"properties":{"containerId":{"type":"string"},"containerName":{"type":"string"},"health":{"type":"string"},"iconDarkUrl":{"type":"string"},"iconLightUrl":{"type":"string"},"image":{"type":"string"},"name":{"type":"string"},"ports":{"items":{"type":"string"},"type":["array","null"]},"redeployDisabled":{"type":"boolean"},"serviceConfig":{"$ref":"#/components/schemas/ServiceConfig"},"status":{"type":"string"}},"required":["name","image","status"],"type":"object"},"ProjectStatusCounts":{"additionalProperties":false,"properties":{"archivedProjects":{"format":"int64","type":"integer"},"runningProjects":{"format":"int64","type":"integer"},"stoppedProjects":{"format":"int64","type":"integer"},"totalProjects":{"format":"int64","type":"integer"}},"required":["runningProjects","stoppedProjects","totalProjects","archivedProjects"],"type":"object"},"ProjectUpdateIncludeFile":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ProjectUpdateIncludeFile.json"],"format":"uri","readOnly":true,"type":"string"},"content":{"type":"string"},"relativePath":{"type":"string"}},"required":["relativePath","content"],"type":"object"},"ProjectUpdateInfo":{"additionalProperties":false,"properties":{"checkedImageCount":{"format":"int64","type":"integer"},"errorCount":{"format":"int64","type":"integer"},"errorMessage":{"type":"string"},"hasUpdate":{"type":"boolean"},"imageCount":{"format":"int64","type":"integer"},"imageRefs":{"items":{"type":"string"},"type":["array","null"]},"imagesWithUpdates":{"format":"int64","type":"integer"},"lastCheckedAt":{"format":"date-time","type":"string"},"status":{"type":"string"},"updatedImageRefs":{"items":{"type":"string"},"type":["array","null"]}},"required":["status","hasUpdate","imageCount","checkedImageCount","imagesWithUpdates","errorCount"],"type":"object"},"ProjectUpdateProject":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/ProjectUpdateProject.json"],"format":"uri","readOnly":true,"type":"string"},"composeContent":{"type":"string"},"envContent":{"type":"string"},"fileChanges":{"items":{"$ref":"#/components/schemas/ProjectProjectFileChange"},"maxItems":500,"type":["array","null"]},"fileTreeRevision":{"type":"string"},"name":{"type":"string"}},"type":"object"},"PruneImagesInputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/PruneImagesInputBody.json"],"format":"uri","readOnly":true,"type":"string"},"dangling":{"type":"boolean"},"filters":{"additionalProperties":{"items":{"type":"string"},"type":["array","null"]},"type":"object"},"mode":{"type":"string"},"until":{"type":"string"}},"type":"object"},"Resource":{"additionalProperties":false,"properties":{"cpus":{"format":"float","type":"number"},"devices":{"items":{"$ref":"#/components/schemas/DockerTypesDeviceRequest"},"type":["array","null"]},"generic_resources":{"items":{"$ref":"#/components/schemas/DockerTypesGenericResource"},"type":["array","null"]},"memory":{"format":"int64","type":"integer"},"pids":{"format":"int64","type":"integer"}},"type":"object"},"RestartPolicy":{"additionalProperties":false,"properties":{"condition":{"type":"string"},"delay":{"format":"int64","type":"integer"},"max_attempts":{"format":"int64","minimum":0,"type":"integer"},"window":{"format":"int64","type":"integer"}},"type":"object"},"RestoreBackupFilesInputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/RestoreBackupFilesInputBody.json"],"format":"uri","readOnly":true,"type":"string"},"paths":{"description":"Paths to restore from backup","items":{"type":"string"},"type":["array","null"]}},"required":["paths"],"type":"object"},"RoleAccessSurface":{"additionalProperties":false,"properties":{"accessMode":{"description":"How reachability is evaluated","enum":["permissions","any-child"],"type":"string"},"children":{"description":"Child surface IDs used by aggregate landing surfaces","items":{"type":"string"},"type":["array","null"]},"fallbackOrder":{"description":"Positive ordering hint for route fallback selection","format":"int64","type":"integer"},"id":{"description":"Stable surface identifier","examples":["settings.category.webhooks"],"type":"string"},"kind":{"description":"Surface type","enum":["route","settings-category","customize-category","landing"],"type":"string"},"label":{"description":"Human-readable surface label","examples":["Webhooks"],"type":"string"},"matchMode":{"description":"How permissions are combined when accessMode is permissions","enum":["any-of","all-of"],"type":"string"},"permissions":{"description":"Permissions used by permission-based surfaces","items":{"type":"string"},"type":["array","null"]},"scopeMode":{"description":"Which effective permission scope is considered","enum":["global-only","selected-env-plus-global","any-effective-scope"],"type":"string"},"url":{"description":"Route URL or prefix represented by this surface","examples":["/settings/webhooks"],"type":"string"}},"required":["id","kind","label","accessMode","matchMode","scopeMode"],"type":"object"},"RoleCreateOidcRoleMapping":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/RoleCreateOidcRoleMapping.json"],"format":"uri","readOnly":true,"type":"string"},"claimValue":{"description":"OIDC claim value to match","minLength":1,"type":"string"},"environmentId":{"description":"Environment ID to scope the assignment to; omit for a global assignment","type":"string"},"roleId":{"description":"Role to grant","minLength":1,"type":"string"}},"required":["claimValue","roleId"],"type":"object"},"RoleCreateRole":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/RoleCreateRole.json"],"format":"uri","readOnly":true,"type":"string"},"description":{"description":"Optional human description","maxLength":500,"type":"string"},"name":{"description":"Display name of the role","examples":["Deploy Bot"],"maxLength":100,"minLength":1,"type":"string"},"permissions":{"description":"Permission strings granted by this role","items":{"type":"string"},"minItems":1,"type":["array","null"]}},"required":["name","permissions"],"type":"object"},"RoleOidcRoleMapping":{"additionalProperties":false,"properties":{"claimValue":{"description":"OIDC claim value that triggers this mapping","examples":["docker-admins"],"type":"string"},"createdAt":{"format":"date-time","type":"string"},"environmentId":{"description":"Environment ID to scope the assignment to; omit for a global assignment","type":"string"},"id":{"description":"Unique identifier of the mapping","type":"string"},"roleId":{"description":"Role to assign when the claim matches","type":"string"},"source":{"description":"How this mapping was created. 'manual' rows are UI/API-managed and freely editable; 'env' rows are declared via OIDC_ROLE_MAPPINGS and are read-only at runtime.","enum":["manual","env"],"type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","claimValue","roleId","source","createdAt"],"type":"object"},"RolePaginatedResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/RolePaginatedResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"items":{"$ref":"#/components/schemas/RoleRole"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"RolePermissionAction":{"additionalProperties":false,"properties":{"description":{"description":"Optional longer description","type":"string"},"key":{"description":"Action verb","examples":["start"],"type":"string"},"label":{"description":"Human-readable label","examples":["Start"],"type":"string"},"permission":{"description":"Fully-qualified permission string used in role definitions","examples":["containers:start"],"type":"string"},"requires":{"description":"Permissions that should be auto-selected when this permission is chosen in the UI","items":{"type":"string"},"type":["array","null"]}},"required":["key","permission","label"],"type":"object"},"RolePermissionPreset":{"additionalProperties":false,"properties":{"description":{"description":"Optional longer description for the preset","type":"string"},"key":{"description":"Stable preset key","examples":["editor"],"type":"string"},"label":{"description":"Human-readable preset label","examples":["All permissions (non-admin)"],"type":"string"},"permissions":{"description":"Permissions included when the preset is selected","items":{"type":"string"},"type":["array","null"]}},"required":["key","label","permissions"],"type":"object"},"RolePermissionResource":{"additionalProperties":false,"properties":{"actions":{"description":"Actions available on this resource","items":{"$ref":"#/components/schemas/RolePermissionAction"},"type":["array","null"]},"key":{"description":"Stable resource key","examples":["containers"],"type":"string"},"label":{"description":"Human-readable label","examples":["Containers"],"type":"string"},"scope":{"description":"'global' for org-level perms; 'env' for per-environment perms","enum":["global","env"],"type":"string"}},"required":["key","label","scope","actions"],"type":"object"},"RolePermissionsManifest":{"additionalProperties":false,"properties":{"accessSurfaces":{"description":"Backend-owned route, landing, and category access metadata for frontend UX gating","items":{"$ref":"#/components/schemas/RoleAccessSurface"},"type":["array","null"]},"presets":{"description":"Optional preset permission bundles for bulk selection in the UI","items":{"$ref":"#/components/schemas/RolePermissionPreset"},"type":["array","null"]},"resources":{"description":"Resource groups, in display order","items":{"$ref":"#/components/schemas/RolePermissionResource"},"type":["array","null"]}},"required":["resources"],"type":"object"},"RoleRole":{"additionalProperties":false,"properties":{"assignedUserCount":{"description":"How many users currently hold an assignment to this role","format":"int64","type":"integer"},"builtIn":{"description":"True for built-in roles (Admin/Editor/Deployer/Viewer); built-ins cannot be edited or deleted","type":"boolean"},"createdAt":{"description":"Creation timestamp","format":"date-time","type":"string"},"description":{"description":"Optional human description","type":"string"},"id":{"description":"Unique identifier of the role","examples":["role_admin"],"type":"string"},"name":{"description":"Display name of the role","examples":["Admin"],"type":"string"},"permissions":{"description":"Permission strings granted by this role","examples":[["containers:start","projects:deploy"]],"items":{"type":"string"},"type":["array","null"]},"updatedAt":{"description":"Last update timestamp","format":"date-time","type":"string"}},"required":["id","name","permissions","builtIn","assignedUserCount","createdAt"],"type":"object"},"RoleRoleAssignment":{"additionalProperties":false,"properties":{"createdAt":{"description":"Creation timestamp","format":"date-time","type":"string"},"environmentId":{"description":"Environment ID this assignment is scoped to; omit for a global assignment","type":"string"},"id":{"description":"Unique identifier of the assignment","type":"string"},"roleId":{"description":"ID of the granted role","type":"string"},"source":{"description":"How the assignment was created","enum":["manual","oidc"],"type":"string"},"userId":{"description":"ID of the user holding this assignment","type":"string"}},"required":["id","userId","roleId","source","createdAt"],"type":"object"},"RoleSetUserAssignments":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/RoleSetUserAssignments.json"],"format":"uri","readOnly":true,"type":"string"},"assignments":{"description":"Desired manual role assignments for the user","items":{"$ref":"#/components/schemas/RoleUserAssignmentInput"},"type":["array","null"]}},"required":["assignments"],"type":"object"},"RoleUpdateOidcRoleMapping":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/RoleUpdateOidcRoleMapping.json"],"format":"uri","readOnly":true,"type":"string"},"claimValue":{"minLength":1,"type":"string"},"environmentId":{"type":"string"},"roleId":{"minLength":1,"type":"string"}},"required":["claimValue","roleId"],"type":"object"},"RoleUpdateRole":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/RoleUpdateRole.json"],"format":"uri","readOnly":true,"type":"string"},"description":{"description":"Optional human description","maxLength":500,"type":"string"},"name":{"description":"Display name of the role","maxLength":100,"minLength":1,"type":"string"},"permissions":{"description":"Permission strings granted by this role","items":{"type":"string"},"minItems":1,"type":["array","null"]}},"required":["name","permissions"],"type":"object"},"RoleUserAssignmentInput":{"additionalProperties":false,"properties":{"environmentId":{"description":"Environment ID to scope the assignment to; omit for a global assignment","type":"string"},"roleId":{"description":"ID of the role to grant","type":"string"}},"required":["roleId"],"type":"object"},"ScannerStatus":{"additionalProperties":false,"properties":{"available":{"type":"boolean"},"version":{"type":"string"}},"required":["available"],"type":"object"},"SearchRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SearchRequest.json"],"format":"uri","readOnly":true,"type":"string"},"query":{"type":"string"}},"required":["query"],"type":"object"},"SearchResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SearchResponse.json"],"format":"uri","readOnly":true,"type":"string"},"count":{"format":"int64","type":"integer"},"query":{"type":"string"},"results":{"items":{"$ref":"#/components/schemas/CategoryCategory"},"type":["array","null"]}},"required":["results","query","count"],"type":"object"},"ServiceConfig":{"additionalProperties":false,"properties":{"annotations":{"additionalProperties":{"type":"string"},"type":"object"},"attach":{"type":"boolean"},"blkio_config":{"$ref":"#/components/schemas/BlkioConfig"},"build":{"$ref":"#/components/schemas/BuildConfig"},"cap_add":{"items":{"type":"string"},"type":["array","null"]},"cap_drop":{"items":{"type":"string"},"type":["array","null"]},"cgroup":{"type":"string"},"cgroup_parent":{"type":"string"},"command":{"items":{"type":"string"},"type":["array","null"]},"configs":{"items":{"$ref":"#/components/schemas/DockerTypesServiceConfigObjConfig"},"type":["array","null"]},"container_name":{"type":"string"},"cpu_count":{"format":"int64","type":"integer"},"cpu_percent":{"format":"float","type":"number"},"cpu_period":{"format":"int64","type":"integer"},"cpu_quota":{"format":"int64","type":"integer"},"cpu_rt_period":{"format":"int64","type":"integer"},"cpu_rt_runtime":{"format":"int64","type":"integer"},"cpu_shares":{"format":"int64","type":"integer"},"cpus":{"format":"float","type":"number"},"cpuset":{"type":"string"},"credential_spec":{"$ref":"#/components/schemas/CredentialSpecConfig"},"depends_on":{"additionalProperties":{"$ref":"#/components/schemas/DockerTypesServiceDependency"},"type":"object"},"deploy":{"$ref":"#/components/schemas/DeployConfig"},"develop":{"$ref":"#/components/schemas/DevelopConfig"},"device_cgroup_rules":{"items":{"type":"string"},"type":["array","null"]},"devices":{"items":{"$ref":"#/components/schemas/DockerTypesDeviceMapping"},"type":["array","null"]},"dns":{"items":{"type":"string"},"type":["array","null"]},"dns_opt":{"items":{"type":"string"},"type":["array","null"]},"dns_search":{"items":{"type":"string"},"type":["array","null"]},"dockerfile":{"type":"string"},"domainname":{"type":"string"},"entrypoint":{"items":{"type":"string"},"type":["array","null"]},"env_file":{"items":{"$ref":"#/components/schemas/DockerTypesEnvFile"},"type":["array","null"]},"environment":{"additionalProperties":{"type":["string","null"]},"type":"object"},"expose":{"items":{"type":"string"},"type":["array","null"]},"extends":{"$ref":"#/components/schemas/ExtendsConfig"},"external_links":{"items":{"type":"string"},"type":["array","null"]},"extra_hosts":{"additionalProperties":{"items":{"type":"string"},"type":["array","null"]},"type":"object"},"gpus":{"items":{"$ref":"#/components/schemas/DockerTypesDeviceRequest"},"type":["array","null"]},"group_add":{"items":{"type":"string"},"type":["array","null"]},"healthcheck":{"$ref":"#/components/schemas/HealthCheckConfig"},"hostname":{"type":"string"},"image":{"type":"string"},"init":{"type":"boolean"},"ipc":{"type":"string"},"isolation":{"type":"string"},"label_file":{"items":{"type":"string"},"type":["array","null"]},"labels":{"additionalProperties":{"type":"string"},"type":"object"},"links":{"items":{"type":"string"},"type":["array","null"]},"log_driver":{"type":"string"},"log_opt":{"additionalProperties":{"type":"string"},"type":"object"},"logging":{"$ref":"#/components/schemas/LoggingConfig"},"mac_address":{"type":"string"},"mem_limit":{"format":"int64","type":"integer"},"mem_reservation":{"format":"int64","type":"integer"},"mem_swappiness":{"format":"int64","type":"integer"},"memswap_limit":{"format":"int64","type":"integer"},"models":{"additionalProperties":{"$ref":"#/components/schemas/ServiceModelConfig"},"type":"object"},"net":{"type":"string"},"network_mode":{"type":"string"},"networks":{"additionalProperties":{"$ref":"#/components/schemas/ServiceNetworkConfig"},"type":"object"},"oom_kill_disable":{"type":"boolean"},"oom_score_adj":{"format":"int64","type":"integer"},"pid":{"type":"string"},"pids_limit":{"format":"int64","type":"integer"},"platform":{"type":"string"},"ports":{"items":{"$ref":"#/components/schemas/DockerTypesServicePortConfig"},"type":["array","null"]},"post_start":{"items":{"$ref":"#/components/schemas/DockerTypesServiceHook"},"type":["array","null"]},"pre_start":{"items":{"$ref":"#/components/schemas/DockerTypesServiceHook"},"type":["array","null"]},"pre_stop":{"items":{"$ref":"#/components/schemas/DockerTypesServiceHook"},"type":["array","null"]},"privileged":{"type":"boolean"},"profiles":{"items":{"type":"string"},"type":["array","null"]},"provider":{"$ref":"#/components/schemas/ServiceProviderConfig"},"pull_policy":{"type":"string"},"read_only":{"type":"boolean"},"restart":{"type":"string"},"runtime":{"type":"string"},"scale":{"format":"int64","type":"integer"},"secrets":{"items":{"$ref":"#/components/schemas/DockerTypesServiceSecretConfig"},"type":["array","null"]},"security_opt":{"items":{"type":"string"},"type":["array","null"]},"shm_size":{"format":"int64","type":"integer"},"stdin_open":{"type":"boolean"},"stop_grace_period":{"format":"int64","type":"integer"},"stop_signal":{"type":"string"},"storage_opt":{"additionalProperties":{"type":"string"},"type":"object"},"sysctls":{"additionalProperties":{"type":"string"},"type":"object"},"tmpfs":{"items":{"type":"string"},"type":["array","null"]},"tty":{"type":"boolean"},"ulimits":{"additionalProperties":{"$ref":"#/components/schemas/UlimitsConfig"},"type":"object"},"use_api_socket":{"type":"boolean"},"user":{"type":"string"},"userns_mode":{"type":"string"},"uts":{"type":"string"},"volume_driver":{"type":"string"},"volumes":{"items":{"$ref":"#/components/schemas/DockerTypesServiceVolumeConfig"},"type":["array","null"]},"volumes_from":{"items":{"type":"string"},"type":["array","null"]},"working_dir":{"type":"string"}},"required":["command","entrypoint"],"type":"object"},"ServiceModelConfig":{"additionalProperties":false,"properties":{"endpoint_var":{"type":"string"},"model_var":{"type":"string"}},"type":"object"},"ServiceNetworkConfig":{"additionalProperties":false,"properties":{"aliases":{"items":{"type":"string"},"type":["array","null"]},"driver_opts":{"additionalProperties":{"type":"string"},"type":"object"},"gw_priority":{"format":"int64","type":"integer"},"interface_name":{"type":"string"},"ipv4_address":{"type":"string"},"ipv6_address":{"type":"string"},"link_local_ips":{"items":{"type":"string"},"type":["array","null"]},"mac_address":{"type":"string"},"priority":{"format":"int64","type":"integer"}},"type":"object"},"ServiceProviderConfig":{"additionalProperties":false,"properties":{"options":{"additionalProperties":{"items":{"type":"string"},"type":["array","null"]},"type":"object"},"type":{"type":"string"}},"type":"object"},"ServiceVolumeBind":{"additionalProperties":false,"properties":{"create_host_path":{"type":"boolean"},"propagation":{"type":"string"},"recursive":{"type":"string"},"selinux":{"type":"string"}},"type":"object"},"ServiceVolumeImage":{"additionalProperties":false,"properties":{"subpath":{"type":"string"}},"type":"object"},"ServiceVolumeTmpfs":{"additionalProperties":false,"properties":{"mode":{"format":"int32","minimum":0,"type":"integer"},"size":{"format":"int64","type":"integer"}},"type":"object"},"ServiceVolumeVolume":{"additionalProperties":false,"properties":{"labels":{"additionalProperties":{"type":"string"},"type":"object"},"nocopy":{"type":"boolean"},"subpath":{"type":"string"}},"type":"object"},"SetAutoUpdateInputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SetAutoUpdateInputBody.json"],"format":"uri","readOnly":true,"type":"string"},"enabled":{"description":"Whether auto-update is enabled for this container","type":"boolean"}},"required":["enabled"],"type":"object"},"SettingsPublicSetting":{"additionalProperties":false,"properties":{"key":{"type":"string"},"type":{"type":"string"},"value":{"type":"string"}},"required":["key","type","value"],"type":"object"},"SettingsSettingDto":{"additionalProperties":false,"properties":{"isPublic":{"type":"boolean"},"key":{"type":"string"},"type":{"type":"string"},"value":{"type":"string"}},"required":["isPublic","key","type","value"],"type":"object"},"SettingsUpdate":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SettingsUpdate.json"],"format":"uri","readOnly":true,"type":"string"},"accentColor":{"type":"string"},"activityHistoryMaxEntries":{"type":"string"},"activityHistoryRetentionDays":{"type":"string"},"animationsEnabled":{"type":"string"},"applicationTheme":{"type":"string"},"authLocalEnabled":{"type":"string"},"authPasswordPolicy":{"type":"string"},"authSessionTimeout":{"type":"string"},"autoHealEnabled":{"type":"string"},"autoHealExcludedContainers":{"type":"string"},"autoHealInterval":{"type":"string"},"autoHealMaxRestarts":{"type":"string"},"autoHealRestartWindow":{"type":"string"},"autoInjectEnv":{"type":"string"},"autoUpdate":{"type":"string"},"autoUpdateExcludedContainers":{"type":"string"},"autoUpdateInterval":{"type":"string"},"avatarMaxUploadSizeMb":{"type":"string"},"baseServerUrl":{"type":"string"},"buildProvider":{"type":"string"},"buildTimeout":{"type":"string"},"buildsDirectory":{"type":"string"},"defaultDeployPullPolicy":{"type":"string"},"defaultShell":{"type":"string"},"depotProjectId":{"type":"string"},"depotToken":{"type":"string"},"diskUsagePath":{"type":"string"},"dockerApiTimeout":{"type":"string"},"dockerClientRefreshInterval":{"type":"string"},"dockerHost":{"type":"string"},"dockerImagePullTimeout":{"type":"string"},"enableGravatar":{"type":"string"},"environmentHealthInterval":{"type":"string"},"followProjectSymlinks":{"type":"string"},"gitOperationTimeout":{"type":"string"},"gitSyncMaxBinarySizeMb":{"type":"string"},"gitSyncMaxFiles":{"type":"string"},"gitSyncMaxTotalSizeMb":{"type":"string"},"glassEffectsEnabled":{"type":"string"},"httpClientTimeout":{"type":"string"},"iconCatalog":{"type":"string"},"keyboardShortcutsEnabled":{"type":"string"},"lifecycleDefaultRunnerImage":{"type":"string"},"lifecycleEnabled":{"type":"string"},"lifecycleMaxTimeoutSec":{"type":"string"},"maxImageUploadSize":{"type":"string"},"mobileNavigationMode":{"type":"string"},"mobileNavigationShowLabels":{"type":"string"},"oidcAutoRedirectToProvider":{"type":"string"},"oidcClientId":{"type":"string"},"oidcClientSecret":{"type":"string"},"oidcEnabled":{"type":"string"},"oidcGroupsClaim":{"type":"string"},"oidcIssuerUrl":{"type":"string"},"oidcMergeAccounts":{"type":"string"},"oidcProviderLogoUrl":{"type":"string"},"oidcProviderName":{"type":"string"},"oidcScopes":{"type":"string"},"oidcSkipTlsVerify":{"type":"string"},"oledMode":{"type":"string"},"pollingEnabled":{"type":"string"},"pollingInterval":{"type":"string"},"projectsDirectory":{"type":"string"},"proxyRequestTimeout":{"type":"string"},"pruneBuildCacheMode":{"type":"string"},"pruneBuildCacheUntil":{"type":"string"},"pruneContainerMode":{"type":"string"},"pruneContainerUntil":{"type":"string"},"pruneImageMode":{"type":"string"},"pruneImageUntil":{"type":"string"},"pruneNetworkMode":{"type":"string"},"pruneNetworkUntil":{"type":"string"},"pruneVolumeMode":{"type":"string"},"registryTimeout":{"type":"string"},"scheduledPruneEnabled":{"type":"string"},"scheduledPruneInterval":{"type":"string"},"sidebarHoverExpansion":{"type":"string"},"swarmStackSourcesDirectory":{"type":"string"},"templatesDirectory":{"type":"string"},"trivyConcurrentScanContainers":{"type":"string"},"trivyCpuLimit":{"type":"string"},"trivyIgnoreUnfixed":{"type":"string"},"trivyImage":{"type":"string"},"trivyMemoryLimitMb":{"type":"string"},"trivyNetwork":{"type":"string"},"trivyPreserveCacheOnVolumePrune":{"type":"string"},"trivyPrivileged":{"type":"string"},"trivyResourceLimitsEnabled":{"type":"string"},"trivyScanTimeout":{"type":"string"},"trivySecurityOpts":{"type":"string"},"trivyServerEnabled":{"type":"string"},"trivyServerToken":{"type":"string"},"trivyServerUrl":{"type":"string"},"volumeBrowserHelperIdleTimeout":{"type":"string"},"vulnerabilityScanEnabled":{"type":"string"},"vulnerabilityScanInterval":{"type":"string"}},"type":"object"},"SwarmConfigCreateRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmConfigCreateRequest.json"],"format":"uri","readOnly":true,"type":"string"},"spec":{"description":"Config specification"}},"required":["spec"],"type":"object"},"SwarmConfigSummary":{"additionalProperties":false,"properties":{"createdAt":{"format":"date-time","type":"string"},"id":{"type":"string"},"spec":{"$ref":"#/components/schemas/DockerSwarmConfigSpec"},"updatedAt":{"format":"date-time","type":"string"},"version":{"$ref":"#/components/schemas/DockerSwarmVersion"}},"required":["id","version","createdAt","updatedAt","spec"],"type":"object"},"SwarmConfigUpdateRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmConfigUpdateRequest.json"],"format":"uri","readOnly":true,"type":"string"},"spec":{"description":"Updated config specification"},"version":{"format":"int64","minimum":0,"type":"integer"}},"required":["spec"],"type":"object"},"SwarmNodeAgentDeployment":{"additionalProperties":false,"properties":{"agent":{"$ref":"#/components/schemas/SwarmNodeAgentStatus"},"dockerCompose":{"description":"Docker compose YAML snippet","type":"string"},"dockerRun":{"description":"Docker run command snippet","type":"string"},"environmentId":{"type":"string"},"mtls":{"$ref":"#/components/schemas/DeploymentSnippetMTLS","description":"Optional Arcane-generated mTLS deployment assets for edge agents"}},"required":["environmentId","agent","dockerRun","dockerCompose"],"type":"object"},"SwarmNodeAgentStatus":{"additionalProperties":false,"properties":{"connected":{"type":"boolean"},"environmentId":{"type":"string"},"lastHeartbeat":{"format":"date-time","type":"string"},"lastPollAt":{"format":"date-time","type":"string"},"reportedHostname":{"type":"string"},"reportedNodeId":{"type":"string"},"state":{"type":"string"}},"required":["state"],"type":"object"},"SwarmNodeIdentity":{"additionalProperties":false,"properties":{"engineVersion":{"type":"string"},"hostname":{"type":"string"},"role":{"type":"string"},"swarmActive":{"type":"boolean"},"swarmNodeId":{"type":"string"}},"required":["swarmNodeId","hostname","role","engineVersion","swarmActive"],"type":"object"},"SwarmNodeSummary":{"additionalProperties":false,"properties":{"address":{"type":"string"},"agent":{"$ref":"#/components/schemas/SwarmNodeAgentStatus"},"availability":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"engineVersion":{"type":"string"},"hostname":{"type":"string"},"id":{"type":"string"},"labels":{"additionalProperties":{"type":"string"},"type":"object"},"managerStatus":{"type":"string"},"platform":{"type":"string"},"reachability":{"type":"string"},"role":{"type":"string"},"status":{"type":"string"},"systemLabels":{"additionalProperties":{"type":"string"},"type":"object"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","hostname","role","availability","status","createdAt","updatedAt","agent"],"type":"object"},"SwarmNodeUpdateRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmNodeUpdateRequest.json"],"format":"uri","readOnly":true,"type":"string"},"availability":{"type":"string"},"labels":{"additionalProperties":{"type":"string"},"type":"object"},"name":{"type":"string"},"role":{"type":"string"},"version":{"format":"int64","minimum":0,"type":"integer"}},"type":"object"},"SwarmPaginatedResponseNodeSummary":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmPaginatedResponseNodeSummary.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"items":{"$ref":"#/components/schemas/SwarmNodeSummary"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"SwarmPaginatedResponseServiceSummary":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmPaginatedResponseServiceSummary.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"items":{"$ref":"#/components/schemas/SwarmServiceSummary"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"SwarmPaginatedResponseStackSummary":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmPaginatedResponseStackSummary.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"items":{"$ref":"#/components/schemas/SwarmStackSummary"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"SwarmPaginatedResponseTaskSummary":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmPaginatedResponseTaskSummary.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"items":{"$ref":"#/components/schemas/SwarmTaskSummary"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"SwarmRuntimeStatus":{"additionalProperties":false,"properties":{"enabled":{"type":"boolean"}},"required":["enabled"],"type":"object"},"SwarmSecretCreateRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmSecretCreateRequest.json"],"format":"uri","readOnly":true,"type":"string"},"spec":{"description":"Secret specification"}},"required":["spec"],"type":"object"},"SwarmSecretSummary":{"additionalProperties":false,"properties":{"createdAt":{"format":"date-time","type":"string"},"id":{"type":"string"},"spec":{"$ref":"#/components/schemas/DockerSwarmSecretSpec"},"updatedAt":{"format":"date-time","type":"string"},"version":{"$ref":"#/components/schemas/DockerSwarmVersion"}},"required":["id","version","createdAt","updatedAt","spec"],"type":"object"},"SwarmSecretUpdateRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmSecretUpdateRequest.json"],"format":"uri","readOnly":true,"type":"string"},"spec":{"description":"Updated secret specification"},"version":{"format":"int64","minimum":0,"type":"integer"}},"required":["spec"],"type":"object"},"SwarmServiceCreateOptions":{"additionalProperties":false,"properties":{"encodedRegistryAuth":{"type":"string"},"queryRegistry":{"type":"boolean"}},"type":"object"},"SwarmServiceCreateRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmServiceCreateRequest.json"],"format":"uri","readOnly":true,"type":"string"},"options":{"$ref":"#/components/schemas/SwarmServiceCreateOptions","description":"Additional create options"},"spec":{"description":"Service specification"}},"required":["spec"],"type":"object"},"SwarmServiceCreateResponse":{"additionalProperties":false,"properties":{"id":{"type":"string"},"warnings":{"items":{"type":"string"},"type":["array","null"]}},"required":["id"],"type":"object"},"SwarmServiceInspect":{"additionalProperties":false,"properties":{"createdAt":{"format":"date-time","type":"string"},"endpoint":{"$ref":"#/components/schemas/DockerSwarmEndpoint"},"id":{"type":"string"},"mounts":{"items":{"$ref":"#/components/schemas/SwarmServiceMount"},"type":["array","null"]},"networkDetails":{"additionalProperties":{"$ref":"#/components/schemas/SwarmServiceNetworkDetail"},"type":"object"},"nodes":{"items":{"type":"string"},"type":["array","null"]},"spec":{"$ref":"#/components/schemas/DockerSwarmServiceSpec"},"updateStatus":{"$ref":"#/components/schemas/DockerSwarmUpdateStatus"},"updatedAt":{"format":"date-time","type":"string"},"version":{"$ref":"#/components/schemas/DockerSwarmVersion"}},"required":["id","version","createdAt","updatedAt","spec","endpoint"],"type":"object"},"SwarmServiceMount":{"additionalProperties":false,"properties":{"devicePath":{"type":"string"},"readOnly":{"type":"boolean"},"source":{"type":"string"},"target":{"type":"string"},"type":{"type":"string"},"volumeDriver":{"type":"string"},"volumeOptions":{"additionalProperties":{"type":"string"},"type":"object"}},"required":["type","target"],"type":"object"},"SwarmServiceNetworkConfigDetail":{"additionalProperties":false,"properties":{"driver":{"type":"string"},"enableIPv4":{"type":"boolean"},"enableIPv6":{"type":"boolean"},"ipv4Configs":{"items":{"$ref":"#/components/schemas/SwarmServiceNetworkIPAMConfig"},"type":["array","null"]},"ipv6Configs":{"items":{"$ref":"#/components/schemas/SwarmServiceNetworkIPAMConfig"},"type":["array","null"]},"name":{"type":"string"},"options":{"additionalProperties":{"type":"string"},"type":"object"},"scope":{"type":"string"}},"required":["name","driver","scope","enableIPv4","enableIPv6"],"type":"object"},"SwarmServiceNetworkDetail":{"additionalProperties":false,"properties":{"attachable":{"type":"boolean"},"configFrom":{"type":"string"},"configNetwork":{"$ref":"#/components/schemas/SwarmServiceNetworkConfigDetail"},"configOnly":{"type":"boolean"},"driver":{"type":"string"},"enableIPv4":{"type":"boolean"},"enableIPv6":{"type":"boolean"},"id":{"type":"string"},"ingress":{"type":"boolean"},"internal":{"type":"boolean"},"ipamConfigs":{"items":{"$ref":"#/components/schemas/SwarmServiceNetworkIPAMConfig"},"type":["array","null"]},"name":{"type":"string"},"options":{"additionalProperties":{"type":"string"},"type":"object"},"scope":{"type":"string"}},"required":["id","name","driver","scope","internal","attachable","ingress","enableIPv4","enableIPv6","configOnly"],"type":"object"},"SwarmServiceNetworkIPAMConfig":{"additionalProperties":false,"properties":{"gateway":{"type":"string"},"ipRange":{"type":"string"},"subnet":{"type":"string"}},"type":"object"},"SwarmServicePort":{"additionalProperties":false,"properties":{"protocol":{"type":"string"},"publishMode":{"type":"string"},"publishedPort":{"format":"int32","minimum":0,"type":"integer"},"targetPort":{"format":"int32","minimum":0,"type":"integer"}},"required":["protocol","targetPort"],"type":"object"},"SwarmServiceScaleRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmServiceScaleRequest.json"],"format":"uri","readOnly":true,"type":"string"},"replicas":{"format":"int64","minimum":0,"type":"integer"}},"required":["replicas"],"type":"object"},"SwarmServiceSummary":{"additionalProperties":false,"properties":{"createdAt":{"format":"date-time","type":"string"},"id":{"type":"string"},"image":{"type":"string"},"labels":{"additionalProperties":{"type":"string"},"type":"object"},"mode":{"type":"string"},"mounts":{"items":{"$ref":"#/components/schemas/SwarmServiceMount"},"type":["array","null"]},"name":{"type":"string"},"networks":{"items":{"type":"string"},"type":["array","null"]},"nodes":{"items":{"type":"string"},"type":["array","null"]},"ports":{"items":{"$ref":"#/components/schemas/SwarmServicePort"},"type":["array","null"]},"replicas":{"format":"int64","minimum":0,"type":"integer"},"runningReplicas":{"format":"int64","minimum":0,"type":"integer"},"stackName":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","name","image","mode","replicas","runningReplicas","ports","createdAt","updatedAt","labels","nodes","networks","mounts"],"type":"object"},"SwarmServiceUpdateOptions":{"additionalProperties":false,"properties":{"encodedRegistryAuth":{"type":"string"},"queryRegistry":{"type":"boolean"},"registryAuthFrom":{"type":"string"},"rollback":{"type":"string"}},"type":"object"},"SwarmServiceUpdateRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmServiceUpdateRequest.json"],"format":"uri","readOnly":true,"type":"string"},"options":{"$ref":"#/components/schemas/SwarmServiceUpdateOptions"},"spec":{"$ref":"#/components/schemas/DockerSwarmServiceSpec"},"version":{"format":"int64","minimum":0,"type":"integer"}},"required":["version","spec"],"type":"object"},"SwarmServiceUpdateResponse":{"additionalProperties":false,"properties":{"warnings":{"items":{"type":"string"},"type":["array","null"]}},"type":"object"},"SwarmStackDeployRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmStackDeployRequest.json"],"format":"uri","readOnly":true,"type":"string"},"composeContent":{"type":"string"},"envContent":{"type":"string"},"files":{"items":{"$ref":"#/components/schemas/SwarmSyncFile"},"type":["array","null"]},"name":{"type":"string"},"prune":{"type":"boolean"},"resolveImage":{"type":"string"},"withRegistryAuth":{"type":"boolean"},"workingDir":{"type":"string"}},"required":["name","composeContent"],"type":"object"},"SwarmStackDeployResponse":{"additionalProperties":false,"properties":{"name":{"type":"string"}},"required":["name"],"type":"object"},"SwarmStackInspect":{"additionalProperties":false,"properties":{"createdAt":{"format":"date-time","type":"string"},"name":{"type":"string"},"namespace":{"type":"string"},"services":{"format":"int64","type":"integer"},"updatedAt":{"format":"date-time","type":"string"}},"required":["name","namespace","services","createdAt","updatedAt"],"type":"object"},"SwarmStackRenderConfigRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmStackRenderConfigRequest.json"],"format":"uri","readOnly":true,"type":"string"},"composeContent":{"type":"string"},"envContent":{"type":"string"},"name":{"type":"string"}},"required":["name","composeContent"],"type":"object"},"SwarmStackRenderConfigResponse":{"additionalProperties":false,"properties":{"configs":{"items":{"type":"string"},"type":["array","null"]},"name":{"type":"string"},"networks":{"items":{"type":"string"},"type":["array","null"]},"renderedCompose":{"type":"string"},"secrets":{"items":{"type":"string"},"type":["array","null"]},"services":{"items":{"type":"string"},"type":["array","null"]},"volumes":{"items":{"type":"string"},"type":["array","null"]},"warnings":{"items":{"type":"string"},"type":["array","null"]}},"required":["name","renderedCompose","services","networks","volumes","configs","secrets"],"type":"object"},"SwarmStackSource":{"additionalProperties":false,"properties":{"composeContent":{"type":"string"},"envContent":{"type":"string"},"files":{"items":{"$ref":"#/components/schemas/SwarmSyncFile"},"type":["array","null"]},"name":{"type":"string"}},"required":["name","composeContent"],"type":"object"},"SwarmStackSourceUpdateRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmStackSourceUpdateRequest.json"],"format":"uri","readOnly":true,"type":"string"},"composeContent":{"type":"string"},"envContent":{"type":"string"},"files":{"items":{"$ref":"#/components/schemas/SwarmSyncFile"},"type":["array","null"]}},"required":["composeContent"],"type":"object"},"SwarmStackSummary":{"additionalProperties":false,"properties":{"createdAt":{"format":"date-time","type":"string"},"id":{"type":"string"},"name":{"type":"string"},"namespace":{"type":"string"},"services":{"format":"int64","type":"integer"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","name","namespace","services","createdAt","updatedAt"],"type":"object"},"SwarmSwarmInfo":{"additionalProperties":false,"properties":{"createdAt":{"format":"date-time","type":"string"},"id":{"type":"string"},"rootRotationInProgress":{"type":"boolean"},"spec":{"$ref":"#/components/schemas/DockerSwarmSpec"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","createdAt","updatedAt","spec","rootRotationInProgress"],"type":"object"},"SwarmSwarmInitRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmSwarmInitRequest.json"],"format":"uri","readOnly":true,"type":"string"},"advertiseAddr":{"type":"string"},"autoLockManagers":{"type":"boolean"},"availability":{"type":"string"},"dataPathAddr":{"type":"string"},"dataPathPort":{"format":"int32","minimum":0,"type":"integer"},"defaultAddrPool":{"items":{"type":"string"},"type":["array","null"]},"forceNewCluster":{"type":"boolean"},"listenAddr":{"type":"string"},"spec":{"description":"Swarm specification"},"subnetSize":{"format":"int32","minimum":0,"type":"integer"}},"required":["spec"],"type":"object"},"SwarmSwarmInitResponse":{"additionalProperties":false,"properties":{"nodeId":{"type":"string"}},"required":["nodeId"],"type":"object"},"SwarmSwarmJoinRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmSwarmJoinRequest.json"],"format":"uri","readOnly":true,"type":"string"},"advertiseAddr":{"type":"string"},"availability":{"type":"string"},"dataPathAddr":{"type":"string"},"joinToken":{"type":"string"},"listenAddr":{"type":"string"},"remoteAddrs":{"items":{"type":"string"},"type":["array","null"]}},"required":["remoteAddrs","joinToken"],"type":"object"},"SwarmSwarmJoinTokensResponse":{"additionalProperties":false,"properties":{"manager":{"type":"string"},"worker":{"type":"string"}},"required":["worker","manager"],"type":"object"},"SwarmSwarmLeaveRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmSwarmLeaveRequest.json"],"format":"uri","readOnly":true,"type":"string"},"force":{"type":"boolean"}},"type":"object"},"SwarmSwarmRotateJoinTokensRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmSwarmRotateJoinTokensRequest.json"],"format":"uri","readOnly":true,"type":"string"},"rotateManagerToken":{"type":"boolean"},"rotateWorkerToken":{"type":"boolean"}},"type":"object"},"SwarmSwarmUnlockKeyResponse":{"additionalProperties":false,"properties":{"unlockKey":{"type":"string"}},"required":["unlockKey"],"type":"object"},"SwarmSwarmUnlockRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmSwarmUnlockRequest.json"],"format":"uri","readOnly":true,"type":"string"},"key":{"type":"string"}},"required":["key"],"type":"object"},"SwarmSwarmUpdateRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmSwarmUpdateRequest.json"],"format":"uri","readOnly":true,"type":"string"},"rotateManagerToken":{"type":"boolean"},"rotateManagerUnlockKey":{"type":"boolean"},"rotateWorkerToken":{"type":"boolean"},"spec":{"description":"Updated swarm specification"},"version":{"format":"int64","minimum":0,"type":"integer"}},"required":["spec"],"type":"object"},"SwarmSyncFile":{"additionalProperties":false,"properties":{"content":{"contentEncoding":"base64","type":"string"},"relativePath":{"type":"string"}},"required":["relativePath","content"],"type":"object"},"SwarmTaskSummary":{"additionalProperties":false,"properties":{"containerId":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"currentState":{"type":"string"},"desiredState":{"type":"string"},"error":{"type":"string"},"id":{"type":"string"},"image":{"type":"string"},"name":{"type":"string"},"nodeId":{"type":"string"},"nodeName":{"type":"string"},"serviceId":{"type":"string"},"serviceName":{"type":"string"},"slot":{"format":"int64","type":"integer"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","name","serviceId","serviceName","nodeId","nodeName","desiredState","currentState","createdAt","updatedAt"],"type":"object"},"SystemConvertDockerRunRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SystemConvertDockerRunRequest.json"],"format":"uri","readOnly":true,"type":"string"},"dockerRunCommand":{"type":"string"}},"required":["dockerRunCommand"],"type":"object"},"SystemConvertDockerRunResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SystemConvertDockerRunResponse.json"],"format":"uri","readOnly":true,"type":"string"},"dockerCompose":{"type":"string"},"envVars":{"type":"string"},"serviceName":{"type":"string"},"success":{"type":"boolean"}},"required":["success","dockerCompose","envVars","serviceName"],"type":"object"},"SystemDiagnostics":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SystemDiagnostics.json"],"format":"uri","readOnly":true,"type":"string"},"gc":{"$ref":"#/components/schemas/SystemGCInfo"},"memory":{"$ref":"#/components/schemas/SystemMemoryInfo"},"runtime":{"$ref":"#/components/schemas/SystemRuntimeInfo"},"timestamp":{"format":"date-time","type":"string"},"websocket":{"$ref":"#/components/schemas/SystemWebSocketDiagnostics"}},"required":["timestamp","runtime","memory","gc","websocket"],"type":"object"},"SystemGCInfo":{"additionalProperties":false,"properties":{"lastGc":{"format":"date-time","type":"string"},"numGc":{"format":"int64","type":"integer"},"pauseTotalNs":{"format":"int64","type":"integer"},"recentPausesNs":{"items":{"format":"int64","type":"integer"},"type":["array","null"]}},"required":["lastGc","numGc","pauseTotalNs","recentPausesNs"],"type":"object"},"SystemHealthResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SystemHealthResponse.json"],"format":"uri","readOnly":true,"type":"string"},"status":{"type":"string"}},"required":["status"],"type":"object"},"SystemLogEntry":{"additionalProperties":false,"properties":{"attrs":{"additionalProperties":{},"type":"object"},"level":{"type":"string"},"message":{"type":"string"},"time":{"format":"date-time","type":"string"}},"required":["time","level","message"],"type":"object"},"SystemMemoryInfo":{"additionalProperties":false,"properties":{"alloc":{"format":"int64","minimum":0,"type":"integer"},"gcCpuFraction":{"format":"double","type":"number"},"heapAlloc":{"format":"int64","minimum":0,"type":"integer"},"heapIdle":{"format":"int64","minimum":0,"type":"integer"},"heapInuse":{"format":"int64","minimum":0,"type":"integer"},"heapObjects":{"format":"int64","minimum":0,"type":"integer"},"heapReleased":{"format":"int64","minimum":0,"type":"integer"},"heapSys":{"format":"int64","minimum":0,"type":"integer"},"mcacheInuse":{"format":"int64","minimum":0,"type":"integer"},"mspanInuse":{"format":"int64","minimum":0,"type":"integer"},"nextGc":{"format":"int64","minimum":0,"type":"integer"},"numForcedGc":{"format":"int32","minimum":0,"type":"integer"},"numGc":{"format":"int32","minimum":0,"type":"integer"},"stackInuse":{"format":"int64","minimum":0,"type":"integer"},"stackSys":{"format":"int64","minimum":0,"type":"integer"},"sys":{"format":"int64","minimum":0,"type":"integer"},"totalAlloc":{"format":"int64","minimum":0,"type":"integer"}},"required":["alloc","totalAlloc","sys","heapAlloc","heapSys","heapInuse","heapIdle","heapReleased","heapObjects","stackInuse","stackSys","mspanInuse","mcacheInuse","nextGc","numGc","numForcedGc","gcCpuFraction"],"type":"object"},"SystemPruneAllRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/SystemPruneAllRequest.json"],"format":"uri","readOnly":true,"type":"string"},"buildCache":{"$ref":"#/components/schemas/SystemPruneBuildCacheOptions"},"containers":{"$ref":"#/components/schemas/SystemPruneContainersOptions"},"images":{"$ref":"#/components/schemas/SystemPruneImagesOptions"},"networks":{"$ref":"#/components/schemas/SystemPruneNetworksOptions"},"volumes":{"$ref":"#/components/schemas/SystemPruneVolumesOptions"}},"type":"object"},"SystemPruneAllResult":{"additionalProperties":false,"properties":{"activityId":{"type":"string"},"buildCacheSpaceReclaimed":{"format":"int64","minimum":0,"type":"integer"},"containerSpaceReclaimed":{"format":"int64","minimum":0,"type":"integer"},"containersPruned":{"items":{"type":"string"},"type":["array","null"]},"errors":{"items":{"type":"string"},"type":["array","null"]},"imageSpaceReclaimed":{"format":"int64","minimum":0,"type":"integer"},"imagesDeleted":{"items":{"type":"string"},"type":["array","null"]},"networksDeleted":{"items":{"type":"string"},"type":["array","null"]},"spaceReclaimed":{"format":"int64","minimum":0,"type":"integer"},"success":{"type":"boolean"},"volumeSpaceReclaimed":{"format":"int64","minimum":0,"type":"integer"},"volumesDeleted":{"items":{"type":"string"},"type":["array","null"]}},"required":["spaceReclaimed","success"],"type":"object"},"SystemPruneBuildCacheOptions":{"additionalProperties":false,"properties":{"mode":{"type":"string"},"until":{"type":"string"}},"required":["mode"],"type":"object"},"SystemPruneContainersOptions":{"additionalProperties":false,"properties":{"mode":{"type":"string"},"until":{"type":"string"}},"required":["mode"],"type":"object"},"SystemPruneImagesOptions":{"additionalProperties":false,"properties":{"mode":{"type":"string"},"until":{"type":"string"}},"required":["mode"],"type":"object"},"SystemPruneNetworksOptions":{"additionalProperties":false,"properties":{"mode":{"type":"string"},"until":{"type":"string"}},"required":["mode"],"type":"object"},"SystemPruneVolumesOptions":{"additionalProperties":false,"properties":{"mode":{"type":"string"}},"required":["mode"],"type":"object"},"SystemRuntimeInfo":{"additionalProperties":false,"properties":{"arch":{"type":"string"},"goVersion":{"type":"string"},"gomaxprocs":{"format":"int64","type":"integer"},"goroutines":{"format":"int64","type":"integer"},"numCgoCall":{"format":"int64","type":"integer"},"numCpu":{"format":"int64","type":"integer"},"os":{"type":"string"},"uptimeSeconds":{"format":"int64","type":"integer"},"wsWorkerGoroutines":{"format":"int64","type":"integer"}},"required":["goroutines","wsWorkerGoroutines","gomaxprocs","numCpu","goVersion","os","arch","numCgoCall","uptimeSeconds"],"type":"object"},"SystemWebSocketConnectionInfo":{"additionalProperties":false,"properties":{"clientIp":{"type":"string"},"envId":{"type":"string"},"id":{"type":"string"},"kind":{"type":"string"},"resourceId":{"type":"string"},"startedAt":{"format":"date-time","type":"string"},"userAgent":{"type":"string"},"userId":{"type":"string"}},"required":["id","kind","startedAt"],"type":"object"},"SystemWebSocketDiagnostics":{"additionalProperties":false,"properties":{"connections":{"items":{"$ref":"#/components/schemas/SystemWebSocketConnectionInfo"},"type":["array","null"]},"snapshot":{"$ref":"#/components/schemas/SystemWebSocketMetricsSnapshot"}},"required":["snapshot","connections"],"type":"object"},"SystemWebSocketMetricsSnapshot":{"additionalProperties":false,"properties":{"containerExec":{"format":"int64","type":"integer"},"containerLogsActive":{"format":"int64","type":"integer"},"containerStats":{"format":"int64","type":"integer"},"projectLogsActive":{"format":"int64","type":"integer"},"serviceLogsActive":{"format":"int64","type":"integer"},"systemStats":{"format":"int64","type":"integer"}},"required":["projectLogsActive","containerLogsActive","containerStats","containerExec","systemStats","serviceLogsActive"],"type":"object"},"TemplateCreateRegistryRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/TemplateCreateRegistryRequest.json"],"format":"uri","readOnly":true,"type":"string"},"description":{"type":"string"},"enabled":{"type":"boolean"},"name":{"type":"string"},"url":{"type":"string"}},"required":["name","url","description","enabled"],"type":"object"},"TemplateCreateRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/TemplateCreateRequest.json"],"format":"uri","readOnly":true,"type":"string"},"content":{"type":"string"},"description":{"type":"string"},"envContent":{"type":"string"},"name":{"type":"string"}},"required":["name","description","content","envContent"],"type":"object"},"TemplateDefaultTemplatesResponse":{"additionalProperties":false,"properties":{"composeTemplate":{"type":"string"},"envTemplate":{"type":"string"},"swarmStackEnvTemplate":{"type":"string"},"swarmStackTemplate":{"type":"string"}},"required":["composeTemplate","swarmStackTemplate","swarmStackEnvTemplate","envTemplate"],"type":"object"},"TemplatePaginatedResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/TemplatePaginatedResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"items":{"$ref":"#/components/schemas/TemplateTemplate"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"TemplateRemoteRegistry":{"additionalProperties":false,"properties":{"$schema":{"type":"string"},"author":{"type":"string"},"description":{"type":"string"},"name":{"type":"string"},"templates":{"items":{"$ref":"#/components/schemas/TemplateRemoteTemplate"},"type":["array","null"]},"url":{"type":"string"},"version":{"type":"string"}},"required":["version","author","templates","name","description","url"],"type":"object"},"TemplateRemoteTemplate":{"additionalProperties":false,"properties":{"author":{"type":"string"},"compose_url":{"type":"string"},"description":{"type":"string"},"documentation_url":{"type":"string"},"env_url":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"tags":{"items":{"type":"string"},"type":["array","null"]},"version":{"type":"string"}},"required":["version","author","compose_url","env_url","documentation_url","tags","id","name","description"],"type":"object"},"TemplateSaveDefaultTemplatesRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/TemplateSaveDefaultTemplatesRequest.json"],"format":"uri","readOnly":true,"type":"string"},"composeContent":{"type":"string"},"envContent":{"type":"string"}},"required":["composeContent","envContent"],"type":"object"},"TemplateTemplate":{"additionalProperties":false,"properties":{"content":{"type":"string"},"description":{"type":"string"},"envContent":{"type":"string"},"id":{"type":"string"},"isCustom":{"type":"boolean"},"isRemote":{"type":"boolean"},"metadata":{"$ref":"#/components/schemas/MetaTemplateMeta"},"name":{"type":"string"},"registry":{"$ref":"#/components/schemas/TemplateTemplateRegistry"},"registryId":{"type":"string"}},"required":["content","isCustom","isRemote","id","name","description"],"type":"object"},"TemplateTemplateContent":{"additionalProperties":false,"properties":{"content":{"type":"string"},"envContent":{"type":"string"},"envVariables":{"items":{"$ref":"#/components/schemas/EnvVariable"},"type":["array","null"]},"services":{"items":{"type":"string"},"type":["array","null"]},"template":{"$ref":"#/components/schemas/TemplateTemplate"}},"required":["template","content","envContent","services","envVariables"],"type":"object"},"TemplateTemplateRegistry":{"additionalProperties":false,"properties":{"description":{"type":"string"},"enabled":{"type":"boolean"},"id":{"type":"string"},"lastFetchError":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"}},"required":["id","enabled","name","description","url"],"type":"object"},"TemplateUpdateRegistryRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/TemplateUpdateRegistryRequest.json"],"format":"uri","readOnly":true,"type":"string"},"description":{"type":"string"},"enabled":{"type":"boolean"},"name":{"type":"string"},"url":{"type":"string"}},"required":["name","url","description","enabled"],"type":"object"},"TemplateUpdateRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/TemplateUpdateRequest.json"],"format":"uri","readOnly":true,"type":"string"},"content":{"type":"string"},"description":{"type":"string"},"envContent":{"type":"string"},"name":{"type":"string"}},"required":["name","description","content","envContent"],"type":"object"},"Ulimit":{"additionalProperties":false,"properties":{"Hard":{"format":"int64","type":"integer"},"Name":{"type":"string"},"Soft":{"format":"int64","type":"integer"}},"required":["Name","Hard","Soft"],"type":"object"},"UlimitsConfig":{"additionalProperties":false,"properties":{"hard":{"format":"int64","type":"integer"},"single":{"format":"int64","type":"integer"},"soft":{"format":"int64","type":"integer"}},"type":"object"},"UpdateConfig":{"additionalProperties":false,"properties":{"delay":{"format":"int64","type":"integer"},"failure_action":{"type":"string"},"max_failure_ratio":{"format":"float","type":"number"},"monitor":{"format":"int64","type":"integer"},"order":{"type":"string"},"parallelism":{"format":"int64","minimum":0,"type":"integer"}},"type":"object"},"UpdateContainerRegistryRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/UpdateContainerRegistryRequest.json"],"format":"uri","readOnly":true,"type":"string"},"awsAccessKeyId":{"type":["string","null"]},"awsRegion":{"type":["string","null"]},"awsSecretAccessKey":{"type":["string","null"]},"description":{"type":["string","null"]},"enabled":{"type":["boolean","null"]},"insecure":{"type":["boolean","null"]},"registryType":{"type":["string","null"]},"token":{"type":["string","null"]},"url":{"type":["string","null"]},"username":{"type":["string","null"]}},"required":["url","username","token","description","insecure","enabled","registryType","awsAccessKeyId","awsSecretAccessKey","awsRegion"],"type":"object"},"UpdateGitRepositoryRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/UpdateGitRepositoryRequest.json"],"format":"uri","readOnly":true,"type":"string"},"authType":{"type":"string"},"description":{"type":"string"},"enabled":{"type":"boolean"},"name":{"type":"string"},"sshHostKeyVerification":{"type":"string"},"sshKey":{"type":"string"},"token":{"type":"string"},"url":{"type":"string"},"username":{"type":"string"}},"type":"object"},"UpdateMyProfileInputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/UpdateMyProfileInputBody.json"],"format":"uri","readOnly":true,"type":"string"},"displayName":{"type":"string"},"email":{"type":"string"},"fontSize":{"format":"int64","maximum":20,"minimum":12,"type":"integer"},"locale":{"type":"string"}},"type":"object"},"UpdateOidcRoleMappingOutputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/UpdateOidcRoleMappingOutputBody.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"$ref":"#/components/schemas/RoleOidcRoleMapping"},"success":{"type":"boolean"}},"required":["success","data"],"type":"object"},"UpdateProjectServicesInputBody":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/UpdateProjectServicesInputBody.json"],"format":"uri","readOnly":true,"type":"string"},"services":{"description":"Service names to update; empty updates all services","items":{"type":"string"},"type":["array","null"]}},"type":"object"},"UpdaterOptions":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/UpdaterOptions.json"],"format":"uri","readOnly":true,"type":"string"},"dryRun":{"type":"boolean"},"forceUpdate":{"type":"boolean"},"resourceIds":{"items":{"type":"string"},"type":["array","null"]},"type":{"type":"string"}},"type":"object"},"UpdaterResourceResult":{"additionalProperties":false,"properties":{"details":{"additionalProperties":{},"type":"object"},"error":{"type":"string"},"newImages":{"additionalProperties":{"type":"string"},"type":"object"},"oldImages":{"additionalProperties":{"type":"string"},"type":"object"},"resourceId":{"type":"string"},"resourceName":{"type":"string"},"resourceType":{"type":"string"},"status":{"type":"string"},"updateApplied":{"type":"boolean"},"updateAvailable":{"type":"boolean"}},"required":["resourceId","resourceType","status"],"type":"object"},"UpdaterResult":{"additionalProperties":false,"properties":{"activityId":{"type":"string"},"checked":{"format":"int64","type":"integer"},"duration":{"type":"string"},"endTime":{"type":"string"},"failed":{"format":"int64","type":"integer"},"items":{"items":{"$ref":"#/components/schemas/UpdaterResourceResult"},"type":["array","null"]},"restarted":{"format":"int64","type":"integer"},"skipped":{"format":"int64","type":"integer"},"startTime":{"type":"string"},"success":{"type":"boolean"},"updated":{"format":"int64","type":"integer"}},"required":["checked","updated","skipped","failed","duration","items"],"type":"object"},"UpdaterStatus":{"additionalProperties":false,"properties":{"containerIds":{"items":{"type":"string"},"type":["array","null"]},"projectIds":{"items":{"type":"string"},"type":["array","null"]},"updatingContainers":{"format":"int64","type":"integer"},"updatingProjects":{"format":"int64","type":"integer"}},"required":["updatingContainers","updatingProjects","containerIds","projectIds"],"type":"object"},"UpgradeCheckResultData":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/UpgradeCheckResultData.json"],"format":"uri","readOnly":true,"type":"string"},"canUpgrade":{"type":"boolean"},"error":{"type":"boolean"},"message":{"type":"string"}},"required":["canUpgrade","error","message"],"type":"object"},"UserCreateUser":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/UserCreateUser.json"],"format":"uri","readOnly":true,"type":"string"},"displayName":{"description":"Display name of the user","examples":["John Doe"],"maxLength":255,"type":"string"},"email":{"description":"Email address of the user","examples":["john@example.com"],"type":"string"},"locale":{"description":"Locale preference of the user","examples":["en-US"],"type":"string"},"password":{"description":"Password of the user","minLength":8,"type":"string"},"username":{"description":"Username of the user","examples":["johndoe"],"maxLength":255,"minLength":1,"type":"string"}},"required":["username","password"],"type":"object"},"UserPaginatedResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/UserPaginatedResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"items":{"$ref":"#/components/schemas/UserUser"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","pagination"],"type":"object"},"UserRoleAssignmentSummary":{"additionalProperties":false,"properties":{"environmentId":{"description":"Environment ID this assignment is scoped to; omit for a global assignment","type":"string"},"roleId":{"description":"Role ID granted by this assignment","type":"string"},"source":{"description":"How the assignment was created","enum":["manual","oidc"],"type":"string"}},"required":["roleId","source"],"type":"object"},"UserUpdateUser":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/UserUpdateUser.json"],"format":"uri","readOnly":true,"type":"string"},"displayName":{"description":"Display name of the user","maxLength":255,"type":"string"},"email":{"description":"Email address of the user","type":"string"},"locale":{"description":"Locale preference of the user","type":"string"},"password":{"description":"New password for the user","minLength":8,"type":"string"},"username":{"description":"Username of the user","maxLength":255,"minLength":1,"type":"string"}},"type":"object"},"UserUser":{"additionalProperties":false,"properties":{"avatarUrl":{"description":"URL to the user's custom avatar image; omitted when using the default profile picture","type":"string"},"canDelete":{"description":"Whether the user can currently be deleted","type":"boolean"},"createdAt":{"description":"Date and time when the user was created","type":"string"},"displayName":{"description":"Display name of the user","examples":["John Doe"],"type":"string"},"email":{"description":"Email address of the user","examples":["john@example.com"],"type":"string"},"fontSize":{"description":"Preferred root UI font size in px","examples":[14],"format":"int64","maximum":20,"minimum":12,"type":"integer"},"id":{"description":"Unique identifier of the user","examples":["550e8400-e29b-41d4-a716-446655440000"],"type":"string"},"isGlobalAdmin":{"description":"Whether the user effectively holds global administrator access","type":"boolean"},"locale":{"description":"Locale preference of the user","examples":["en-US"],"type":"string"},"oidcSubjectId":{"description":"OIDC subject identifier for SSO users","type":"string"},"permissionsByEnv":{"additionalProperties":{"items":{"type":"string"},"type":["array","null"]},"description":"Permissions the user effectively holds, keyed by environment ID. The 'global' key holds permissions that apply across every environment (and to org-level endpoints).","type":"object"},"requiresPasswordChange":{"description":"Whether the user must change their password","type":"boolean"},"roleAssignments":{"description":"Role assignments held by the user","items":{"$ref":"#/components/schemas/UserRoleAssignmentSummary"},"type":["array","null"]},"updatedAt":{"description":"Date and time when the user was last updated","type":"string"},"username":{"description":"Username of the user","examples":["johndoe"],"type":"string"}},"required":["id","username","roleAssignments","permissionsByEnv","isGlobalAdmin","canDelete","requiresPasswordChange"],"type":"object"},"Value":{"additionalProperties":false,"type":"object"},"VersionCheck":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/VersionCheck.json"],"format":"uri","readOnly":true,"type":"string"},"currentVersion":{"type":"string"},"newestVersion":{"type":"string"},"releaseUrl":{"type":"string"},"updateAvailable":{"type":"boolean"}},"required":["currentVersion","updateAvailable"],"type":"object"},"VersionInfo":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/VersionInfo.json"],"format":"uri","readOnly":true,"type":"string"},"buildTime":{"type":"string"},"currentDigest":{"type":"string"},"currentTag":{"type":"string"},"currentVersion":{"type":"string"},"displayVersion":{"type":"string"},"enabledFeatures":{"items":{"type":"string"},"type":["array","null"]},"goVersion":{"type":"string"},"isSemverVersion":{"type":"boolean"},"newestDigest":{"type":"string"},"newestVersion":{"type":"string"},"nodeVersion":{"type":"string"},"releaseNotes":{"type":"string"},"releaseUrl":{"type":"string"},"releasedAt":{"type":"string"},"revision":{"type":"string"},"shortRevision":{"type":"string"},"svelteKitVersion":{"type":"string"},"updateAvailable":{"type":"boolean"}},"required":["currentVersion","revision","shortRevision","goVersion","nodeVersion","svelteKitVersion","displayVersion","isSemverVersion","updateAvailable"],"type":"object"},"VolumeBackup":{"additionalProperties":false,"properties":{"activityId":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"id":{"type":"string"},"size":{"format":"int64","type":"integer"},"updatedAt":{"format":"date-time","type":"string"},"volumeName":{"type":"string"}},"required":["volumeName","size","createdAt","id"],"type":"object"},"VolumeBackupPaginatedResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/VolumeBackupPaginatedResponse.json"],"format":"uri","readOnly":true,"type":"string"},"data":{"items":{"$ref":"#/components/schemas/VolumeBackup"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"},"warnings":{"items":{"type":"string"},"type":["array","null"]}},"required":["success","data","pagination"],"type":"object"},"VolumeCreate":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/VolumeCreate.json"],"format":"uri","readOnly":true,"type":"string"},"driver":{"description":"Volume driver (e.g., local, nfs)","type":"string"},"driverOpts":{"additionalProperties":{"type":"string"},"description":"Driver-specific options","type":"object"},"labels":{"additionalProperties":{"type":"string"},"description":"User-defined labels","type":"object"},"name":{"description":"Name of the volume","minLength":1,"type":"string"}},"required":["name"],"type":"object"},"VolumeFileEntry":{"additionalProperties":false,"properties":{"isDirectory":{"description":"Whether this entry is a directory","type":"boolean"},"isSymlink":{"description":"Whether this entry is a symbolic link","type":"boolean"},"linkTarget":{"description":"Target of the symbolic link","type":"string"},"modTime":{"description":"Last modification time","format":"date-time","type":"string"},"mode":{"description":"File mode/permissions","type":"string"},"name":{"description":"Name of the file or directory","type":"string"},"path":{"description":"Full path to the file","type":"string"},"size":{"description":"Size of the file in bytes","format":"int64","type":"integer"}},"required":["name","path","isDirectory","size","modTime","mode","isSymlink"],"type":"object"},"VolumePaginatedResponse":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/VolumePaginatedResponse.json"],"format":"uri","readOnly":true,"type":"string"},"counts":{"$ref":"#/components/schemas/VolumeUsageCountsData"},"data":{"items":{"$ref":"#/components/schemas/VolumeVolume"},"type":["array","null"]},"pagination":{"$ref":"#/components/schemas/BasePaginationResponse"},"success":{"type":"boolean"}},"required":["success","data","counts","pagination"],"type":"object"},"VolumePruneReportData":{"additionalProperties":false,"properties":{"activityId":{"type":"string"},"spaceReclaimed":{"format":"int64","minimum":0,"type":"integer"},"volumesDeleted":{"items":{"type":"string"},"type":["array","null"]}},"required":["spaceReclaimed"],"type":"object"},"VolumeSizeInfo":{"additionalProperties":false,"properties":{"name":{"type":"string"},"refCount":{"format":"int64","type":"integer"},"size":{"format":"int64","type":"integer"}},"required":["name","size","refCount"],"type":"object"},"VolumeUsageCountsData":{"additionalProperties":false,"properties":{"inuse":{"format":"int64","type":"integer"},"total":{"format":"int64","type":"integer"},"unused":{"format":"int64","type":"integer"}},"required":["inuse","unused","total"],"type":"object"},"VolumeUsageResponse":{"additionalProperties":false,"properties":{"containers":{"items":{"type":"string"},"type":["array","null"]},"inUse":{"type":"boolean"}},"required":["inUse","containers"],"type":"object"},"VolumeVolume":{"additionalProperties":false,"properties":{"activityId":{"type":"string"},"containers":{"items":{"type":"string"},"type":["array","null"]},"createdAt":{"type":"string"},"driver":{"type":"string"},"id":{"type":"string"},"inUse":{"type":"boolean"},"labels":{"additionalProperties":{"type":"string"},"type":"object"},"mountpoint":{"type":"string"},"name":{"type":"string"},"options":{"additionalProperties":{"type":"string"},"type":"object"},"scope":{"type":"string"},"size":{"format":"int64","type":"integer"},"usageData":{"$ref":"#/components/schemas/DockerVolumeUsageData"}},"required":["id","name","driver","mountpoint","scope","options","labels","createdAt","inUse","size","containers"],"type":"object"},"VulnerabilityCVSSInfo":{"additionalProperties":false,"properties":{"v2Score":{"format":"double","type":"number"},"v2Vector":{"type":"string"},"v3Score":{"format":"double","type":"number"},"v3Vector":{"type":"string"}},"type":"object"},"VulnerabilityEnvironmentVulnerabilitySummary":{"additionalProperties":false,"properties":{"scannedImages":{"format":"int64","type":"integer"},"summary":{"$ref":"#/components/schemas/VulnerabilitySeveritySummary"},"totalImages":{"format":"int64","type":"integer"}},"required":["totalImages","scannedImages"],"type":"object"},"VulnerabilityIgnorePayload":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/VulnerabilityIgnorePayload.json"],"format":"uri","readOnly":true,"type":"string"},"createdBy":{"examples":["user-123"],"type":"string"},"imageId":{"examples":["sha256:abc123"],"type":"string"},"installedVersion":{"examples":["1.1.1l"],"type":"string"},"pkgName":{"examples":["openssl"],"type":"string"},"reason":{"examples":["False positive - not exploitable"],"type":"string"},"vulnerabilityId":{"examples":["CVE-2023-1234"],"type":"string"}},"required":["imageId","vulnerabilityId","pkgName"],"type":"object"},"VulnerabilityIgnoredVulnerability":{"additionalProperties":false,"properties":{"createdAt":{"format":"date-time","type":"string"},"createdBy":{"type":"string"},"environmentId":{"type":"string"},"id":{"type":"string"},"imageId":{"type":"string"},"installedVersion":{"type":"string"},"pkgName":{"type":"string"},"reason":{"type":"string"},"vulnerabilityId":{"type":"string"}},"required":["id","environmentId","imageId","vulnerabilityId","pkgName","installedVersion","createdBy","createdAt"],"type":"object"},"VulnerabilityScanResult":{"additionalProperties":false,"properties":{"activityId":{"type":"string"},"duration":{"format":"int64","type":"integer"},"error":{"type":"string"},"imageId":{"type":"string"},"imageName":{"type":"string"},"scanPhase":{"type":"string"},"scanTime":{"format":"date-time","type":"string"},"scannerVersion":{"type":"string"},"status":{"type":"string"},"summary":{"$ref":"#/components/schemas/VulnerabilitySeveritySummary"},"vulnerabilities":{"items":{"$ref":"#/components/schemas/VulnerabilityVulnerability"},"type":["array","null"]}},"required":["imageId","imageName","scanTime","status"],"type":"object"},"VulnerabilityScanSummariesRequest":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/VulnerabilityScanSummariesRequest.json"],"format":"uri","readOnly":true,"type":"string"},"imageIds":{"items":{"type":"string"},"type":["array","null"]}},"required":["imageIds"],"type":"object"},"VulnerabilityScanSummariesResponse":{"additionalProperties":false,"properties":{"summaries":{"additionalProperties":{"$ref":"#/components/schemas/VulnerabilityScanSummary"},"type":"object"}},"required":["summaries"],"type":"object"},"VulnerabilityScanSummary":{"additionalProperties":false,"properties":{"error":{"type":"string"},"imageId":{"type":"string"},"scanPhase":{"type":"string"},"scanTime":{"format":"date-time","type":"string"},"status":{"type":"string"},"summary":{"$ref":"#/components/schemas/VulnerabilitySeveritySummary"}},"required":["imageId","scanTime","status"],"type":"object"},"VulnerabilitySeveritySummary":{"additionalProperties":false,"properties":{"critical":{"format":"int64","type":"integer"},"high":{"format":"int64","type":"integer"},"low":{"format":"int64","type":"integer"},"medium":{"format":"int64","type":"integer"},"total":{"format":"int64","type":"integer"},"unknown":{"format":"int64","type":"integer"}},"required":["critical","high","medium","low","unknown","total"],"type":"object"},"VulnerabilityVulnerability":{"additionalProperties":false,"properties":{"cvss":{"$ref":"#/components/schemas/VulnerabilityCVSSInfo"},"description":{"type":"string"},"fixedVersion":{"type":"string"},"installedVersion":{"type":"string"},"lastModifiedDate":{"format":"date-time","type":"string"},"pkgName":{"type":"string"},"publishedDate":{"format":"date-time","type":"string"},"references":{"items":{"type":"string"},"type":["array","null"]},"severity":{"type":"string"},"title":{"type":"string"},"vulnerabilityId":{"type":"string"}},"required":["vulnerabilityId","pkgName","installedVersion","severity"],"type":"object"},"VulnerabilityVulnerabilityWithImage":{"additionalProperties":false,"properties":{"cvss":{"$ref":"#/components/schemas/VulnerabilityCVSSInfo"},"description":{"type":"string"},"fixedVersion":{"type":"string"},"imageId":{"type":"string"},"imageName":{"type":"string"},"installedVersion":{"type":"string"},"lastModifiedDate":{"format":"date-time","type":"string"},"pkgName":{"type":"string"},"publishedDate":{"format":"date-time","type":"string"},"references":{"items":{"type":"string"},"type":["array","null"]},"severity":{"type":"string"},"title":{"type":"string"},"vulnerabilityId":{"type":"string"}},"required":["imageId","imageName","vulnerabilityId","pkgName","installedVersion","severity"],"type":"object"},"WebhookCreateInput":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/WebhookCreateInput.json"],"format":"uri","readOnly":true,"type":"string"},"actionType":{"description":"Action to run for the selected target type. Supported values depend on targetType.","enum":["update","start","stop","restart","redeploy","up","down","run","sync"],"type":"string"},"name":{"description":"Human-readable name for this webhook","maxLength":255,"minLength":1,"type":"string"},"targetId":{"description":"Container ID, project ID, or GitOps sync ID to target. Leave empty for 'updater' webhooks.","type":"string"},"targetType":{"description":"Resource type this webhook targets: 'container', 'project', 'updater', or 'gitops'","enum":["container","project","updater","gitops"],"type":"string"}},"required":["name","targetType","actionType","targetId"],"type":"object"},"WebhookCreated":{"additionalProperties":false,"properties":{"actionType":{"description":"Action type","type":"string"},"createdAt":{"description":"Creation timestamp","format":"date-time","type":"string"},"id":{"description":"Webhook ID","type":"string"},"name":{"description":"Webhook name","type":"string"},"targetId":{"description":"Target resource ID","type":"string"},"targetType":{"description":"Target type","type":"string"},"token":{"description":"Full webhook token — store this securely, it will not be shown again","type":"string"}},"required":["id","name","token","targetType","actionType","targetId","createdAt"],"type":"object"},"WebhookSummary":{"additionalProperties":false,"properties":{"actionType":{"description":"Action type resolved for this webhook","type":"string"},"createdAt":{"description":"Creation timestamp","format":"date-time","type":"string"},"enabled":{"description":"Whether the webhook is active","type":"boolean"},"environmentId":{"description":"Environment ID","type":"string"},"id":{"description":"Webhook ID","type":"string"},"lastTriggeredAt":{"description":"Timestamp of last successful trigger","format":"date-time","type":"string"},"name":{"description":"Webhook name","type":"string"},"targetId":{"description":"Target resource ID","type":"string"},"targetName":{"description":"Resolved target resource name when available","type":"string"},"targetType":{"description":"Target type: 'container', 'project', 'updater', or 'gitops'","type":"string"},"tokenPrefix":{"description":"Masked token prefix for identification","type":"string"}},"required":["id","name","tokenPrefix","targetType","actionType","targetId","environmentId","enabled","createdAt"],"type":"object"},"WebhookUpdateInput":{"additionalProperties":false,"properties":{"$schema":{"description":"A URL to the JSON Schema for this object.","examples":["https://arcane.randomsynergy.xyz:3552/api/schemas/WebhookUpdateInput.json"],"format":"uri","readOnly":true,"type":"string"},"enabled":{"description":"Whether the webhook is active","type":"boolean"}},"required":["enabled"],"type":"object"}},"securitySchemes":{"ApiKeyAuth":{"description":"API Key authentication","in":"header","name":"X-API-Key","type":"apiKey"},"BearerAuth":{"bearerFormat":"JWT","description":"JWT Bearer token authentication","scheme":"bearer","type":"http"}}},"info":{"description":"Modern Docker Management, Designed for Everyone","title":"Arcane API","version":"v2.3.2"},"openapi":"3.1.0","paths":{"/activities/stream":{"get":{"description":"Stream background activity updates for the local environment and all enabled remote environments as JSON lines","operationId":"stream-all-activities","parameters":[{"description":"Snapshot limit per environment","explode":false,"in":"query","name":"limit","schema":{"default":50,"description":"Snapshot limit per environment","format":"int64","type":"integer"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Stream background activities across all environments","tags":["Activities"]}},"/api-keys":{"get":{"description":"Get a paginated list of API keys","operationId":"list-api-keys","parameters":[{"description":"Search query for filtering by name or description","explode":false,"in":"query","name":"search","schema":{"description":"Search query for filtering by name or description","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction (asc or desc)","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction (asc or desc)","type":"string"}},{"description":"Start index for pagination","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index for pagination","format":"int64","type":"integer"}},{"description":"Number of items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Number of items per page","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyPaginatedResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List API keys","tags":["API Keys"]},"post":{"description":"Create a new API key for programmatic access","operationId":"create-api-key","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApikeyCreateApiKey"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseApiKeyCreatedDto"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create an API key","tags":["API Keys"]}},"/api-keys/{id}":{"delete":{"description":"Delete an API key by ID","operationId":"delete-api-key","parameters":[{"description":"API key ID","in":"path","name":"id","required":true,"schema":{"description":"API key ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete an API key","tags":["API Keys"]},"get":{"description":"Get details of a specific API key by ID","operationId":"get-api-key","parameters":[{"description":"API key ID","in":"path","name":"id","required":true,"schema":{"description":"API key ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseApiKey"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get an API key","tags":["API Keys"]},"put":{"description":"Update an existing API key's details","operationId":"update-api-key","parameters":[{"description":"API key ID","in":"path","name":"id","required":true,"schema":{"description":"API key ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApikeyUpdateApiKey"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseApiKey"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update an API key","tags":["API Keys"]}},"/app-images/favicon":{"get":{"description":"Get the application favicon image","operationId":"get-favicon","responses":{"200":{"content":{"application/json":{"schema":{"contentEncoding":"base64","type":"string"}}},"description":"OK","headers":{"Cache-Control":{"schema":{"type":"string"}},"Content-Type":{"schema":{"type":"string"}},"X-Content-Type-Options":{"schema":{"type":"string"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[],"summary":"Get application favicon","tags":["Application Images"]}},"/app-images/logo":{"get":{"description":"Get the application logo image","operationId":"get-logo","parameters":[{"description":"Return full logo instead of icon","explode":false,"in":"query","name":"full","schema":{"default":false,"description":"Return full logo instead of icon","type":"boolean"}},{"description":"Optional accent color override for preview (e.g., 'oklch(0.65 0.2 150)')","explode":false,"in":"query","name":"color","schema":{"description":"Optional accent color override for preview (e.g., 'oklch(0.65 0.2 150)')","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"contentEncoding":"base64","type":"string"}}},"description":"OK","headers":{"Cache-Control":{"schema":{"type":"string"}},"Content-Type":{"schema":{"type":"string"}},"X-Content-Type-Options":{"schema":{"type":"string"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[],"summary":"Get application logo","tags":["Application Images"]}},"/app-images/logo-email":{"get":{"description":"Get the application logo image in PNG format for emails","operationId":"get-logo-email","responses":{"200":{"content":{"application/json":{"schema":{"contentEncoding":"base64","type":"string"}}},"description":"OK","headers":{"Cache-Control":{"schema":{"type":"string"}},"Content-Type":{"schema":{"type":"string"}},"X-Content-Type-Options":{"schema":{"type":"string"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[],"summary":"Get application logo for email","tags":["Application Images"]}},"/app-images/profile":{"get":{"description":"Get the default user profile image","operationId":"get-default-profile","responses":{"200":{"content":{"application/json":{"schema":{"contentEncoding":"base64","type":"string"}}},"description":"OK","headers":{"Cache-Control":{"schema":{"type":"string"}},"Content-Type":{"schema":{"type":"string"}},"X-Content-Type-Options":{"schema":{"type":"string"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[],"summary":"Get default profile image","tags":["Application Images"]}},"/app-images/pwa/{filename}":{"get":{"description":"Get a Progressive Web App icon image","operationId":"get-pwa-icon","parameters":[{"description":"PWA icon filename","in":"path","name":"filename","required":true,"schema":{"description":"PWA icon filename","examples":["icon-192x192.png"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"contentEncoding":"base64","type":"string"}}},"description":"OK","headers":{"Cache-Control":{"schema":{"type":"string"}},"Content-Type":{"schema":{"type":"string"}},"X-Content-Type-Options":{"schema":{"type":"string"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[],"summary":"Get PWA icon","tags":["Application Images"]}},"/app-version":{"get":{"description":"Get the current application version","operationId":"getAppVersion","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionInfo"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[],"summary":"Get app version","tags":["Version"]}},"/auth/login":{"post":{"description":"Authenticate a user with username and password","operationId":"login","parameters":[{"in":"header","name":"User-Agent","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthLogin"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseLoginResponse"}}},"description":"OK","headers":{"Set-Cookie":{"schema":{"description":"Session cookie","type":"string"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[],"summary":"Login","tags":["Auth"]}},"/auth/logout":{"post":{"description":"Clear authentication session","operationId":"logout","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK","headers":{"Set-Cookie":{"schema":{"description":"Cleared session cookie","type":"string"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[],"summary":"Logout","tags":["Auth"]}},"/auth/me":{"get":{"description":"Get the currently authenticated user's information","operationId":"get-current-user","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseUser"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get current user","tags":["Auth"]}},"/auth/me/api-keys":{"get":{"description":"List API keys owned by the current user","operationId":"list-my-api-keys","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseListApiKey"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List my API keys","tags":["API Keys"]},"post":{"description":"Create a new personal API key owned by the current user. Personal keys inherit the owner's role permissions.","operationId":"create-my-api-key","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApikeyCreateUserApiKey"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseApiKeyCreatedDto"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]}],"summary":"Create my API key","tags":["API Keys"]}},"/auth/me/api-keys/{id}":{"delete":{"description":"Delete one of the current user's own API keys","operationId":"delete-my-api-key","parameters":[{"description":"API key ID","in":"path","name":"id","required":true,"schema":{"description":"API key ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]}],"summary":"Delete my API key","tags":["API Keys"]}},"/auth/me/avatar":{"delete":{"description":"Remove the current user's custom profile picture, reverting to the default avatar.","operationId":"delete-my-avatar","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseUser"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete own avatar","tags":["Auth"]},"post":{"description":"Upload a custom profile picture (PNG, JPEG or WebP). Replaces any existing avatar.","operationId":"upload-my-avatar","requestBody":{"content":{"multipart/form-data":{"schema":{"properties":{"file":{"contentMediaType":"application/octet-stream","format":"binary","type":"string"}},"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseUser"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Upload own avatar","tags":["Auth"]}},"/auth/me/profile":{"put":{"description":"Update the current user's display name and email. Forbidden for OIDC-managed accounts.","operationId":"update-my-profile","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMyProfileInputBody"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseUser"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update own profile","tags":["Auth"]}},"/auth/password":{"post":{"description":"Change the current user's password","operationId":"change-password","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthPasswordChange"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Change password","tags":["Auth"]}},"/auth/refresh":{"post":{"description":"Obtain a new access token using a refresh token","operationId":"refresh-token","parameters":[{"in":"header","name":"User-Agent","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthRefresh"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseTokenRefreshResponse"}}},"description":"OK","headers":{"Set-Cookie":{"schema":{"description":"Updated session cookie","type":"string"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[],"summary":"Refresh token","tags":["Auth"]}},"/auth/sessions/logout-all":{"post":{"description":"Revoke every session for the current user except the one making this request","operationId":"logout-all-other-sessions","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Logout all other sessions","tags":["Auth"]}},"/container-registries":{"get":{"description":"Get a paginated list of container registries","operationId":"listContainerRegistries","parameters":[{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction","type":"string"}},{"description":"Start index","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index","format":"int64","type":"integer"}},{"description":"Items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Items per page","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContainerRegistryPaginatedResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List container registries","tags":["Container Registries"]},"post":{"description":"Create a new container registry","operationId":"createContainerRegistry","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateContainerRegistryRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseContainerRegistry"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a container registry","tags":["Container Registries"]}},"/container-registries/pull-usage":{"get":{"description":"Get configured registry pull usage and rate limit visibility","operationId":"getContainerRegistryPullUsage","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponsePullUsageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get container registry pull usage","tags":["Container Registries"]}},"/container-registries/sync":{"post":{"description":"Sync container registries from a remote source","operationId":"syncContainerRegistries","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContainerregistrySyncRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Sync container registries","tags":["Container Registries"]}},"/container-registries/{id}":{"delete":{"description":"Delete a container registry by ID","operationId":"deleteContainerRegistry","parameters":[{"description":"Registry ID","in":"path","name":"id","required":true,"schema":{"description":"Registry ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete a container registry","tags":["Container Registries"]},"get":{"description":"Get a container registry by ID","operationId":"getContainerRegistry","parameters":[{"description":"Registry ID","in":"path","name":"id","required":true,"schema":{"description":"Registry ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseContainerRegistry"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get a container registry","tags":["Container Registries"]},"put":{"description":"Update an existing container registry","operationId":"updateContainerRegistry","parameters":[{"description":"Registry ID","in":"path","name":"id","required":true,"schema":{"description":"Registry ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateContainerRegistryRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseContainerRegistry"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update a container registry","tags":["Container Registries"]}},"/container-registries/{id}/test":{"post":{"description":"Test connectivity and authentication to a container registry","operationId":"testContainerRegistry","parameters":[{"description":"Registry ID","in":"path","name":"id","required":true,"schema":{"description":"Registry ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Test a container registry","tags":["Container Registries"]}},"/customize/categories":{"get":{"description":"Get all available customization categories with metadata","operationId":"get-customize-categories","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CategoryCategory"},"type":["array","null"]}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get customization categories","tags":["Customize"]}},"/customize/git-repositories":{"get":{"description":"Get a paginated list of git repositories","operationId":"listGitRepositories","parameters":[{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction","type":"string"}},{"description":"Start index","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index","format":"int64","type":"integer"}},{"description":"Items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Items per page","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GitRepositoryPaginatedResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List git repositories","tags":["Customize"]},"post":{"description":"Create a new git repository configuration","operationId":"createGitRepository","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateGitRepositoryRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseGitRepository"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a git repository","tags":["Customize"]}},"/customize/git-repositories/{id}":{"delete":{"description":"Delete a git repository configuration by ID","operationId":"deleteGitRepository","parameters":[{"description":"Repository ID","in":"path","name":"id","required":true,"schema":{"description":"Repository ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete a git repository","tags":["Customize"]},"get":{"description":"Get a git repository by ID","operationId":"getGitRepository","parameters":[{"description":"Repository ID","in":"path","name":"id","required":true,"schema":{"description":"Repository ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseGitRepository"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get a git repository","tags":["Customize"]},"put":{"description":"Update an existing git repository configuration","operationId":"updateGitRepository","parameters":[{"description":"Repository ID","in":"path","name":"id","required":true,"schema":{"description":"Repository ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateGitRepositoryRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseGitRepository"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update a git repository","tags":["Customize"]}},"/customize/git-repositories/{id}/branches":{"get":{"description":"Get all branches from a git repository with default branch detection","operationId":"listGitRepositoryBranches","parameters":[{"description":"Repository ID","in":"path","name":"id","required":true,"schema":{"description":"Repository ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseBranchesResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List repository branches","tags":["Customize"]}},"/customize/git-repositories/{id}/files":{"get":{"description":"Browse files and directories in a git repository","operationId":"browseGitRepositoryFiles","parameters":[{"description":"Repository ID","in":"path","name":"id","required":true,"schema":{"description":"Repository ID","type":"string"}},{"description":"Branch to browse","explode":false,"in":"query","name":"branch","schema":{"description":"Branch to browse","type":"string"}},{"description":"Path within repository (optional)","explode":false,"in":"query","name":"path","schema":{"description":"Path within repository (optional)","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseBrowseResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Browse repository files","tags":["Customize"]}},"/customize/git-repositories/{id}/test":{"post":{"description":"Test connectivity and authentication to a git repository","operationId":"testGitRepository","parameters":[{"description":"Repository ID","in":"path","name":"id","required":true,"schema":{"description":"Repository ID","type":"string"}},{"description":"Branch to test (optional, uses repository default branch when omitted)","explode":false,"in":"query","name":"branch","schema":{"description":"Branch to test (optional, uses repository default branch when omitted)","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Test a git repository","tags":["Customize"]}},"/customize/search":{"post":{"description":"Search customization categories and options by query","operationId":"search-customize","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Search customization options","tags":["Customize"]}},"/dashboard/stream":{"get":{"description":"Stream dashboard snapshot updates for the local environment and all enabled remote environments as JSON lines","operationId":"stream-all-dashboards","parameters":[{"description":"Debug mode: force an empty action item list","explode":false,"in":"query","name":"debugAllGood","schema":{"default":false,"description":"Debug mode: force an empty action item list","type":"boolean"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Stream dashboard snapshots across all environments","tags":["Dashboard"]}},"/diagnostics":{"get":{"description":"Returns Go runtime, memory, garbage-collector, and WebSocket connection statistics.","operationId":"get-diagnostics","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemDiagnostics"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get runtime diagnostics","tags":["Diagnostics"]}},"/diagnostics/logs":{"get":{"description":"Returns the most recent buffered backend log entries (oldest first).","operationId":"get-diagnostics-logs","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/SystemLogEntry"},"type":["array","null"]}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get recent backend logs","tags":["Diagnostics"]}},"/edge-mtls/ca":{"get":{"description":"Download the Arcane-managed certificate authority used for generated edge mTLS client certificates","operationId":"downloadEdgeMTLSCA","responses":{"200":{"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Download Arcane-generated edge mTLS CA","tags":["Environments"]}},"/environments":{"get":{"description":"Get a paginated list of Docker environments","operationId":"listEnvironments","parameters":[{"description":"Search query for filtering by name or API URL","explode":false,"in":"query","name":"search","schema":{"description":"Search query for filtering by name or API URL","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction (asc or desc)","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction (asc or desc)","type":"string"}},{"description":"Start index for pagination","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index for pagination","format":"int64","type":"integer"}},{"description":"Items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Items per page","format":"int64","type":"integer"}},{"description":"Filter by environment type (comma-separated: http,edge,websocket,grpc,polling)","explode":false,"in":"query","name":"type","schema":{"description":"Filter by environment type (comma-separated: http,edge,websocket,grpc,polling)","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvironmentPaginatedResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List environments","tags":["Environments"]},"post":{"description":"Create a new Docker environment","operationId":"createEnvironment","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvironmentCreate"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseEnvironmentWithApiKey"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create an environment","tags":["Environments"]}},"/environments/pair":{"post":{"description":"Agent sends API key to complete environment pairing","operationId":"pairEnvironment","parameters":[{"description":"API key for environment pairing","in":"header","name":"X-API-Key","schema":{"description":"API key for environment pairing","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[],"summary":"Pair agent with manager","tags":["Environments"]}},"/environments/{id}":{"delete":{"description":"Delete a Arcane environment","operationId":"deleteEnvironment","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete an environment","tags":["Environments"]},"get":{"description":"Get a Docker environment by ID","operationId":"getEnvironment","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseEnvironment"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get an environment","tags":["Environments"]},"put":{"description":"Update a Docker environment","operationId":"updateEnvironment","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvironmentUpdate"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseEnvironment"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update an environment","tags":["Environments"]}},"/environments/{id}/activities":{"get":{"description":"Get current and recent background activities for an environment","operationId":"list-activities","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction","explode":false,"in":"query","name":"order","schema":{"default":"desc","description":"Sort direction","type":"string"}},{"description":"Start index","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index","format":"int64","type":"integer"}},{"description":"Limit","explode":false,"in":"query","name":"limit","schema":{"default":50,"description":"Limit","format":"int64","type":"integer"}},{"description":"Filter by activity status","explode":false,"in":"query","name":"status","schema":{"description":"Filter by activity status","type":"string"}},{"description":"Filter by activity type","explode":false,"in":"query","name":"type","schema":{"description":"Filter by activity type","type":"string"}},{"description":"Filter by resource type","explode":false,"in":"query","name":"resourceType","schema":{"description":"Filter by resource type","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BasePaginatedActivity"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List background activities","tags":["Activities"]}},"/environments/{id}/activities/history":{"delete":{"description":"Delete completed background activity history for an environment","operationId":"clear-activity-history","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseClearHistoryResult"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Clear background activity history","tags":["Activities"]}},"/environments/{id}/activities/{activityId}":{"get":{"description":"Get a background activity with its recent output messages","operationId":"get-activity","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Activity ID","in":"path","name":"activityId","required":true,"schema":{"description":"Activity ID","type":"string"}},{"description":"Maximum messages to return","explode":false,"in":"query","name":"limit","schema":{"default":500,"description":"Maximum messages to return","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseDetail"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get background activity","tags":["Activities"]}},"/environments/{id}/activities/{activityId}/cancel":{"post":{"description":"Request cancellation of a running or queued background activity","operationId":"cancel-activity","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Activity ID","in":"path","name":"activityId","required":true,"schema":{"description":"Activity ID","type":"string"}},{"description":"Display name to attribute the cancellation to (used when proxying to a remote environment)","explode":false,"in":"query","name":"requestedBy","schema":{"description":"Display name to attribute the cancellation to (used when proxying to a remote environment)","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseActivity"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Cancel a background activity","tags":["Activities"]}},"/environments/{id}/agent/pair":{"post":{"description":"Generate or rotate the local agent pairing token","operationId":"pairAgent","parameters":[{"description":"Environment ID (must be 0 for local)","in":"path","name":"id","required":true,"schema":{"description":"Environment ID (must be 0 for local)","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvironmentAgentPairRequest"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseAgentPairResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Pair with local agent","tags":["Environments"]}},"/environments/{id}/builds/browse":{"delete":{"description":"Delete a file or directory under the builds workspace root","operationId":"builds-browse-delete","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"File or directory path to delete","explode":false,"in":"query","name":"path","schema":{"description":"File or directory path to delete","type":"string"}}],"responses":{"204":{"description":"No Content","headers":{"Data":{"schema":{"$ref":"#/components/schemas/BaseMessageResponse","description":"Response data"}},"Success":{"schema":{"description":"Whether the request was successful","type":"boolean"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete build workspace file","tags":["Builds"]},"get":{"description":"List files and directories under the builds workspace root","operationId":"builds-browse","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Directory path to browse","explode":false,"in":"query","name":"path","schema":{"default":"/","description":"Directory path to browse","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseListFileEntry"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Browse build workspace files","tags":["Builds"]}},"/environments/{id}/builds/browse/content":{"get":{"description":"Read file content under the builds workspace root","operationId":"builds-browse-content","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"File path","explode":false,"in":"query","name":"path","schema":{"description":"File path","type":"string"}},{"description":"Maximum bytes to read (default 1MB)","explode":false,"in":"query","name":"maxBytes","schema":{"default":1048576,"description":"Maximum bytes to read (default 1MB)","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseBuildFileContentResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get build workspace file content","tags":["Builds"]}},"/environments/{id}/builds/browse/download":{"get":{"description":"Download a file from the builds workspace root","operationId":"builds-browse-download","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"File path","explode":false,"in":"query","name":"path","schema":{"description":"File path","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"OK","headers":{"Content-Disposition":{"schema":{"type":"string"}},"Content-Length":{"schema":{"format":"int64","type":"integer"}},"Content-Type":{"schema":{"type":"string"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Download build workspace file","tags":["Builds"]}},"/environments/{id}/builds/browse/mkdir":{"post":{"description":"Create a directory under the builds workspace root","operationId":"builds-browse-mkdir","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Directory path to create","explode":false,"in":"query","name":"path","schema":{"description":"Directory path to create","type":"string"}}],"responses":{"204":{"description":"No Content","headers":{"Data":{"schema":{"$ref":"#/components/schemas/BaseMessageResponse","description":"Response data"}},"Success":{"schema":{"description":"Whether the request was successful","type":"boolean"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create build workspace directory","tags":["Builds"]}},"/environments/{id}/builds/browse/upload":{"post":{"description":"Upload a file into the builds workspace root","operationId":"builds-browse-upload","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Destination path","explode":false,"in":"query","name":"path","schema":{"default":"/","description":"Destination path","type":"string"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"properties":{"file":{"contentMediaType":"application/octet-stream","description":"File to upload","format":"binary","type":"string"}},"required":["file"],"type":"object"}}},"required":true},"responses":{"204":{"description":"No Content","headers":{"Data":{"schema":{"$ref":"#/components/schemas/BaseMessageResponse","description":"Response data"}},"Success":{"schema":{"description":"Whether the request was successful","type":"boolean"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Upload build workspace file","tags":["Builds"]}},"/environments/{id}/containers":{"get":{"description":"Paginated list of containers","operationId":"list-containers","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction","type":"string"}},{"description":"Start index","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index","format":"int64","type":"integer"}},{"description":"Limit","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Limit","format":"int64","type":"integer"}},{"description":"Optional grouping mode (for example: project)","explode":false,"in":"query","name":"groupBy","schema":{"description":"Optional grouping mode (for example: project)","type":"string"}},{"description":"Include internal containers","explode":false,"in":"query","name":"includeInternal","schema":{"default":false,"description":"Include internal containers","type":"boolean"}},{"description":"Filter by update status (has_update, up_to_date, error, unknown)","explode":false,"in":"query","name":"updates","schema":{"description":"Filter by update status (has_update, up_to_date, error, unknown)","type":"string"}},{"description":"Filter standalone containers only (true/false)","explode":false,"in":"query","name":"standalone","schema":{"description":"Filter standalone containers only (true/false)","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContainerPaginatedResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List containers","tags":["Containers"]},"post":{"operationId":"create-container","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContainerCreate"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContainerCreatedResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create container","tags":["Containers"]}},"/environments/{id}/containers/counts":{"get":{"operationId":"container-status-counts","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Include internal containers","explode":false,"in":"query","name":"includeInternal","schema":{"default":false,"description":"Include internal containers","type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContainerStatusCountsResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Container status counts","tags":["Containers"]}},"/environments/{id}/containers/{containerId}":{"delete":{"operationId":"delete-container","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Container ID","in":"path","name":"containerId","required":true,"schema":{"description":"Container ID","type":"string"}},{"description":"Force delete running container","explode":false,"in":"query","name":"force","schema":{"default":false,"description":"Force delete running container","type":"boolean"}},{"description":"Remove associated volumes","explode":false,"in":"query","name":"volumes","schema":{"default":false,"description":"Remove associated volumes","type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContainerActionResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete container","tags":["Containers"]},"get":{"operationId":"get-container","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Container ID","in":"path","name":"containerId","required":true,"schema":{"description":"Container ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContainerDetailsResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get container","tags":["Containers"]}},"/environments/{id}/containers/{containerId}/auto-update":{"put":{"description":"Enable or disable auto-update for a specific container","operationId":"set-container-auto-update","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Container ID","in":"path","name":"containerId","required":true,"schema":{"description":"Container ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetAutoUpdateInputBody"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContainerActionResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Set container auto-update","tags":["Containers","Updater"]}},"/environments/{id}/containers/{containerId}/commit":{"post":{"description":"Create an image from a container","operationId":"commit-container","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Container ID","in":"path","name":"containerId","required":true,"schema":{"description":"Container ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContainerCommitRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseCommitResult"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Commit container","tags":["Containers","Images"]}},"/environments/{id}/containers/{containerId}/kill":{"post":{"description":"Send a signal to the container's main process (default SIGKILL)","operationId":"kill-container","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Container ID","in":"path","name":"containerId","required":true,"schema":{"description":"Container ID","type":"string"}},{"description":"Signal to send (for example SIGTERM, SIGKILL). Defaults to SIGKILL.","explode":false,"in":"query","name":"signal","schema":{"description":"Signal to send (for example SIGTERM, SIGKILL). Defaults to SIGKILL.","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContainerActionResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Kill container","tags":["Containers"]}},"/environments/{id}/containers/{containerId}/pause":{"post":{"operationId":"pause-container","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Container ID","in":"path","name":"containerId","required":true,"schema":{"description":"Container ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContainerActionResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Pause container","tags":["Containers"]}},"/environments/{id}/containers/{containerId}/redeploy":{"post":{"description":"Pull latest image and recreate container","operationId":"redeploy-container","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Container ID","in":"path","name":"containerId","required":true,"schema":{"description":"Container ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContainerDetailsResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Redeploy container","tags":["Containers"]}},"/environments/{id}/containers/{containerId}/restart":{"post":{"operationId":"restart-container","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Container ID","in":"path","name":"containerId","required":true,"schema":{"description":"Container ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContainerActionResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Restart container","tags":["Containers"]}},"/environments/{id}/containers/{containerId}/start":{"post":{"operationId":"start-container","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Container ID","in":"path","name":"containerId","required":true,"schema":{"description":"Container ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContainerActionResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Start container","tags":["Containers"]}},"/environments/{id}/containers/{containerId}/stop":{"post":{"operationId":"stop-container","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Container ID","in":"path","name":"containerId","required":true,"schema":{"description":"Container ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContainerActionResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Stop container","tags":["Containers"]}},"/environments/{id}/containers/{containerId}/unpause":{"post":{"operationId":"unpause-container","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Container ID","in":"path","name":"containerId","required":true,"schema":{"description":"Container ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContainerActionResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Unpause container","tags":["Containers"]}},"/environments/{id}/containers/{containerId}/update":{"post":{"description":"Pull the latest image and apply the appropriate update strategy for a specific container","operationId":"update-container","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Container ID to update","in":"path","name":"containerId","required":true,"schema":{"description":"Container ID to update","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseResult"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update a single container","tags":["Updater","Containers"]}},"/environments/{id}/dashboard":{"get":{"description":"Returns the dashboard first-paint snapshot in a single response","operationId":"get-dashboard","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Debug mode: force an empty action item list","explode":false,"in":"query","name":"debugAllGood","schema":{"default":false,"description":"Debug mode: force an empty action item list","type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseSnapshot"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get dashboard snapshot","tags":["Dashboard"]}},"/environments/{id}/deployment":{"get":{"description":"Get Docker run and compose snippets for environment deployment","operationId":"getDeploymentSnippets","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseDeploymentSnippet"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get deployment snippets","tags":["Environments"]}},"/environments/{id}/deployment/mtls/bundle":{"get":{"description":"Download the generated mTLS client certificate bundle for an edge environment","operationId":"downloadEnvironmentMTLSBundle","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Download environment mTLS bundle","tags":["Environments"]}},"/environments/{id}/deployment/mtls/{fileName}":{"get":{"description":"Download an individual generated mTLS client certificate asset for an edge environment","operationId":"downloadEnvironmentMTLSFile","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"mTLS asset filename","in":"path","name":"fileName","required":true,"schema":{"description":"mTLS asset filename","type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Download environment mTLS asset","tags":["Environments"]}},"/environments/{id}/gitops-syncs":{"get":{"description":"Get a paginated list of GitOps syncs for an environment","operationId":"listGitOpsSyncs","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction","type":"string"}},{"description":"Start index","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index","format":"int64","type":"integer"}},{"description":"Items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Items per page","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GitOpsSyncPaginatedResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List GitOps syncs","tags":["GitOps Syncs"]},"post":{"description":"Create a new GitOps sync configuration for an environment","operationId":"createGitOpsSync","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GitopsCreateSyncRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseGitOpsSync"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a GitOps sync","tags":["GitOps Syncs"]}},"/environments/{id}/gitops-syncs/import":{"post":{"description":"Import multiple GitOps sync configurations from JSON","operationId":"importGitOpsSyncs","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/GitopsImportGitOpsSyncRequest"},"type":["array","null"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseImportGitOpsSyncResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Import GitOps syncs","tags":["GitOps Syncs"]}},"/environments/{id}/gitops-syncs/{syncId}":{"delete":{"description":"Delete a GitOps sync configuration by ID","operationId":"deleteGitOpsSync","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Sync ID","in":"path","name":"syncId","required":true,"schema":{"description":"Sync ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete a GitOps sync","tags":["GitOps Syncs"]},"get":{"description":"Get a GitOps sync by ID","operationId":"getGitOpsSync","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Sync ID","in":"path","name":"syncId","required":true,"schema":{"description":"Sync ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseGitOpsSync"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get a GitOps sync","tags":["GitOps Syncs"]},"put":{"description":"Update an existing GitOps sync configuration","operationId":"updateGitOpsSync","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Sync ID","in":"path","name":"syncId","required":true,"schema":{"description":"Sync ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GitopsUpdateSyncRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseGitOpsSync"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update a GitOps sync","tags":["GitOps Syncs"]}},"/environments/{id}/gitops-syncs/{syncId}/files":{"get":{"description":"Browse files in the synced repository","operationId":"browseGitOpsSyncFiles","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Sync ID","in":"path","name":"syncId","required":true,"schema":{"description":"Sync ID","type":"string"}},{"description":"Path to browse (optional)","explode":false,"in":"query","name":"path","schema":{"description":"Path to browse (optional)","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseBrowseResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Browse GitOps sync files","tags":["GitOps Syncs"]}},"/environments/{id}/gitops-syncs/{syncId}/status":{"get":{"description":"Get the current status of a GitOps sync","operationId":"getGitOpsSyncStatus","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Sync ID","in":"path","name":"syncId","required":true,"schema":{"description":"Sync ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseSyncStatus"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get GitOps sync status","tags":["GitOps Syncs"]}},"/environments/{id}/gitops-syncs/{syncId}/sync":{"post":{"description":"Manually trigger a sync operation","operationId":"performGitOpsSync","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Sync ID","in":"path","name":"syncId","required":true,"schema":{"description":"Sync ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseSyncResult"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Perform a GitOps sync","tags":["GitOps Syncs"]}},"/environments/{id}/heartbeat":{"post":{"description":"Update the heartbeat timestamp for an environment","operationId":"updateHeartbeat","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update environment heartbeat","tags":["Environments"]}},"/environments/{id}/image-updates/by-refs":{"get":{"operationId":"get-update-info-by-refs","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Comma-separated image references","explode":false,"in":"query","name":"imageRefs","schema":{"description":"Comma-separated image references","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMapStringUpdateInfo"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get persisted update info for image references","tags":["Image Updates"]}},"/environments/{id}/image-updates/check":{"get":{"operationId":"check-image-update","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Image reference","explode":false,"in":"query","name":"imageRef","schema":{"description":"Image reference","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Check image update by reference","tags":["Image Updates"]}},"/environments/{id}/image-updates/check-all":{"post":{"operationId":"check-all-images","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageupdateCheckAllImagesRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseBatchResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Check all images","tags":["Image Updates"]}},"/environments/{id}/image-updates/check-batch":{"post":{"operationId":"check-multiple-images","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageupdateBatchImageUpdateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseBatchResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Check multiple images","tags":["Image Updates"]}},"/environments/{id}/image-updates/check/{imageId}":{"get":{"operationId":"check-image-update-by-id","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Image ID","in":"path","name":"imageId","required":true,"schema":{"description":"Image ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Check image update by ID","tags":["Image Updates"]},"post":{"operationId":"check-image-update-by-id-post","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Image ID","in":"path","name":"imageId","required":true,"schema":{"description":"Image ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Check image update by ID (POST)","tags":["Image Updates"]}},"/environments/{id}/image-updates/summary":{"get":{"operationId":"get-update-summary","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get update summary","tags":["Image Updates"]}},"/environments/{id}/images":{"get":{"description":"Get a paginated list of Docker images","operationId":"list-images","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction (asc or desc)","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction (asc or desc)","type":"string"}},{"description":"Start index for pagination","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index for pagination","format":"int64","type":"integer"}},{"description":"Number of items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Number of items per page","format":"int64","type":"integer"}},{"description":"Filter by in-use status (true/false)","explode":false,"in":"query","name":"inUse","schema":{"description":"Filter by in-use status (true/false)","type":"string"}},{"description":"Filter by update availability (true/false)","explode":false,"in":"query","name":"updates","schema":{"description":"Filter by update availability (true/false)","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImagePaginatedResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List images","tags":["Images"]}},"/environments/{id}/images/build":{"post":{"description":"Build a Docker image using BuildKit with streaming progress output","operationId":"build-image","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DockerTypesBuildRequest"}}},"required":true},"responses":{"200":{"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Build an image","tags":["Images"]}},"/environments/{id}/images/builds":{"get":{"description":"Get a paginated list of image build history for an environment","operationId":"list-image-builds","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction (asc or desc)","explode":false,"in":"query","name":"order","schema":{"default":"desc","description":"Sort direction (asc or desc)","type":"string"}},{"description":"Start index for pagination","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index for pagination","format":"int64","type":"integer"}},{"description":"Number of items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Number of items per page","format":"int64","type":"integer"}},{"description":"Filter by status","explode":false,"in":"query","name":"status","schema":{"description":"Filter by status","type":"string"}},{"description":"Filter by provider","explode":false,"in":"query","name":"provider","schema":{"description":"Filter by provider","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageBuildPaginatedResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List image builds","tags":["Images"]}},"/environments/{id}/images/builds/{buildId}":{"get":{"description":"Get a single image build history entry with output","operationId":"get-image-build","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Build ID","in":"path","name":"buildId","required":true,"schema":{"description":"Build ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseBuildRecord"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get image build","tags":["Images"]}},"/environments/{id}/images/counts":{"get":{"description":"Get counts of images in use, unused, total, and total size","operationId":"get-image-usage-counts","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageUsageCountsResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get image usage counts","tags":["Images"]}},"/environments/{id}/images/prune":{"post":{"description":"Remove unused Docker images","operationId":"prune-images","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Only remove dangling images","explode":false,"in":"query","name":"dangling","schema":{"description":"Only remove dangling images","type":"boolean"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PruneImagesInputBody"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponsePruneReport"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Prune unused images","tags":["Images"]}},"/environments/{id}/images/pull":{"post":{"description":"Pull a Docker image from a registry with streaming progress output","operationId":"pull-image","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImagePullOptions"}}},"required":true},"responses":{"200":{"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Pull an image","tags":["Images"]}},"/environments/{id}/images/search":{"get":{"description":"Search Docker Hub images","operationId":"search-images","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Search term","explode":false,"in":"query","name":"term","schema":{"description":"Search term","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseListSearchResult"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Search images","tags":["Images"]}},"/environments/{id}/images/upload":{"post":{"description":"Upload a Docker image from a tar archive","operationId":"upload-image","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"properties":{"file":{"contentMediaType":"application/octet-stream","description":"Docker image tar archive","format":"binary","type":"string"}},"required":["file"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseLoadResult"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Upload an image","tags":["Images"]}},"/environments/{id}/images/vulnerabilities/summaries":{"post":{"description":"Retrieves scan summaries for a list of images (batch)","operationId":"get-image-vulnerability-summaries","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VulnerabilityScanSummariesRequest","description":"Batch scan summary request"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseScanSummariesResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get vulnerability scan summaries","tags":["Vulnerabilities"]}},"/environments/{id}/images/{imageId}":{"delete":{"description":"Remove a Docker image by ID","operationId":"remove-image","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Image ID","in":"path","name":"imageId","required":true,"schema":{"description":"Image ID","type":"string"}},{"description":"Force removal","explode":false,"in":"query","name":"force","schema":{"description":"Force removal","type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Remove an image","tags":["Images"]},"get":{"description":"Get a Docker image by its ID","operationId":"get-image","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Image ID","in":"path","name":"imageId","required":true,"schema":{"description":"Image ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseDetailSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get image by ID","tags":["Images"]}},"/environments/{id}/images/{imageId}/vulnerabilities":{"get":{"description":"Retrieves the most recent vulnerability scan result for an image","operationId":"get-image-vulnerabilities","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Image ID","in":"path","name":"imageId","required":true,"schema":{"description":"Image ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseScanResult"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get vulnerability scan result","tags":["Vulnerabilities"]}},"/environments/{id}/images/{imageId}/vulnerabilities/list":{"get":{"description":"Retrieves paginated vulnerabilities for an image","operationId":"list-image-vulnerabilities","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Image ID","in":"path","name":"imageId","required":true,"schema":{"description":"Image ID","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Sort field","explode":false,"in":"query","name":"sort","schema":{"description":"Sort field","type":"string"}},{"description":"Sort order","explode":false,"in":"query","name":"order","schema":{"description":"Sort order","type":"string"}},{"description":"Start offset","explode":false,"in":"query","name":"start","schema":{"description":"Start offset","format":"int64","type":"integer"}},{"description":"Limit","explode":false,"in":"query","name":"limit","schema":{"description":"Limit","format":"int64","type":"integer"}},{"description":"Comma-separated severity filter","explode":false,"in":"query","name":"severity","schema":{"description":"Comma-separated severity filter","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BasePaginatedVulnerability"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List image vulnerabilities","tags":["Vulnerabilities"]}},"/environments/{id}/images/{imageId}/vulnerabilities/scan":{"post":{"description":"Initiates a vulnerability scan for the specified image using Trivy","operationId":"scan-image-vulnerabilities","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Image ID to scan","in":"path","name":"imageId","required":true,"schema":{"description":"Image ID to scan","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseScanResult"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Scan image for vulnerabilities","tags":["Vulnerabilities"]}},"/environments/{id}/images/{imageId}/vulnerabilities/summary":{"get":{"description":"Retrieves just the summary of vulnerabilities for an image (for list views)","operationId":"get-image-vulnerability-summary","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Image ID","in":"path","name":"imageId","required":true,"schema":{"description":"Image ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseScanSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get vulnerability scan summary","tags":["Vulnerabilities"]}},"/environments/{id}/images/{name}/attestations":{"get":{"description":"Get in-toto attestation statements attached to a Docker image","operationId":"get-image-attestations","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Image ID or image reference","in":"path","name":"name","required":true,"schema":{"description":"Image ID or image reference","type":"string"}},{"description":"OCI platform selector, for example linux/amd64","explode":false,"in":"query","name":"platform","schema":{"description":"OCI platform selector, for example linux/amd64","type":"string"}},{"description":"Exact in-toto predicate type URI to include","explode":false,"in":"query","name":"predicateType","schema":{"description":"Exact in-toto predicate type URI to include","type":"string"}},{"description":"Include verbatim statement JSON bodies","explode":false,"in":"query","name":"statement","schema":{"default":false,"description":"Include verbatim statement JSON bodies","type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseAttestationList"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get image attestations","tags":["Images"]}},"/environments/{id}/images/{name}/export":{"get":{"description":"Download a Docker image as a tar archive","operationId":"export-image","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Image ID or image reference","in":"path","name":"name","required":true,"schema":{"description":"Image ID or image reference","type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Export image","tags":["Images"]}},"/environments/{id}/images/{name}/history":{"get":{"description":"Get Docker image layer history","operationId":"get-image-history","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Image ID or image reference","in":"path","name":"name","required":true,"schema":{"description":"Image ID or image reference","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseListHistoryItem"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get image history","tags":["Images"]}},"/environments/{id}/images/{name}/tag":{"post":{"description":"Add a repository tag to an image","operationId":"tag-image","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Image ID or image reference","in":"path","name":"name","required":true,"schema":{"description":"Image ID or image reference","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageTagRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Tag image","tags":["Images"]}},"/environments/{id}/job-schedules":{"get":{"description":"Get configured cron schedules for background jobs","operationId":"get-job-schedules","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobscheduleConfig"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get job schedules","tags":["JobSchedules"]},"put":{"description":"Update background job cron schedules and reschedule running jobs","operationId":"update-job-schedules","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobscheduleUpdate","description":"Job schedule update data"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseConfig"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update job schedules","tags":["JobSchedules"]}},"/environments/{id}/jobs":{"get":{"description":"Get status, schedule, and metadata for all background jobs","operationId":"list-jobs","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobscheduleJobListResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List all background jobs","tags":["JobSchedules"]}},"/environments/{id}/jobs/{jobId}/run":{"post":{"description":"Manually trigger a background job to run immediately","operationId":"run-job","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Job ID to run","in":"path","name":"jobId","required":true,"schema":{"description":"Job ID to run","minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobscheduleJobRunResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Run a job now","tags":["JobSchedules"]}},"/environments/{id}/networks":{"get":{"operationId":"list-networks","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction (asc or desc)","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction (asc or desc)","type":"string"}},{"description":"Start index for pagination","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index for pagination","format":"int64","type":"integer"}},{"description":"Number of items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Number of items per page","format":"int64","type":"integer"}},{"description":"Filter by in-use status (true/false)","explode":false,"in":"query","name":"inUse","schema":{"description":"Filter by in-use status (true/false)","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkPaginatedResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List networks","tags":["Networks"]},"post":{"operationId":"create-network","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkCreateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkCreatedApiResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create network","tags":["Networks"]}},"/environments/{id}/networks/counts":{"get":{"operationId":"network-counts","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkCountsApiResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Network counts","tags":["Networks"]}},"/environments/{id}/networks/prune":{"post":{"operationId":"prune-networks","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkPruneResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Prune networks","tags":["Networks"]}},"/environments/{id}/networks/topology":{"get":{"operationId":"get-network-topology","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkTopologyApiResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get network topology","tags":["Networks"]}},"/environments/{id}/networks/{networkId}":{"delete":{"operationId":"delete-network","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Network ID","in":"path","name":"networkId","required":true,"schema":{"description":"Network ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkMessageApiResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete network","tags":["Networks"]},"get":{"operationId":"get-network","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Network ID","in":"path","name":"networkId","required":true,"schema":{"description":"Network ID","type":"string"}},{"explode":false,"in":"query","name":"sort","schema":{"default":"name","type":"string"}},{"explode":false,"in":"query","name":"order","schema":{"default":"asc","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkInspectApiResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get network","tags":["Networks"]}},"/environments/{id}/notifications/settings":{"get":{"operationId":"get-all-notification-settings","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/NotificationResponse"},"type":["array","null"]}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get all notification settings","tags":["Notifications"]},"post":{"operationId":"create-or-update-notification-settings","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationUpdate"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create or update notification settings","tags":["Notifications"]}},"/environments/{id}/notifications/settings/{provider}":{"delete":{"operationId":"delete-notification-settings","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Provider","in":"path","name":"provider","required":true,"schema":{"description":"Provider","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete notification settings","tags":["Notifications"]},"get":{"operationId":"get-notification-settings","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Provider","in":"path","name":"provider","required":true,"schema":{"description":"Provider","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get notification settings by provider","tags":["Notifications"]}},"/environments/{id}/notifications/test/{provider}":{"post":{"operationId":"test-notification","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Provider","in":"path","name":"provider","required":true,"schema":{"description":"Provider","type":"string"}},{"explode":false,"in":"query","name":"type","schema":{"default":"simple","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseTestResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Test notification","tags":["Notifications"]}},"/environments/{id}/ports":{"get":{"operationId":"list-ports","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction (asc or desc)","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction (asc or desc)","type":"string"}},{"description":"Start index for pagination","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index for pagination","format":"int64","type":"integer"}},{"description":"Number of items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Number of items per page","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortPaginatedResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List port mappings","tags":["Ports"]}},"/environments/{id}/projects":{"get":{"description":"Get a paginated list of Docker Compose projects","operationId":"list-projects","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction (asc or desc)","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction (asc or desc)","type":"string"}},{"description":"Start index for pagination","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index for pagination","format":"int64","type":"integer"}},{"description":"Number of items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Number of items per page","format":"int64","type":"integer"}},{"description":"Filter by status (comma-separated: running,stopped,partially running)","explode":false,"in":"query","name":"status","schema":{"description":"Filter by status (comma-separated: running,stopped,partially running)","type":"string"}},{"description":"Filter by update status (has_update, up_to_date, error, unknown)","explode":false,"in":"query","name":"updates","schema":{"description":"Filter by update status (has_update, up_to_date, error, unknown)","type":"string"}},{"description":"Archived filter: 'true' (only archived), 'all' (include archived). Default excludes archived.","explode":false,"in":"query","name":"archived","schema":{"description":"Archived filter: 'true' (only archived), 'all' (include archived). Default excludes archived.","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectPaginatedResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List projects","tags":["Projects"]},"post":{"description":"Create a new Docker Compose project","operationId":"create-project","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectCreateProject"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseCreateReponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a project","tags":["Projects"]}},"/environments/{id}/projects/counts":{"get":{"description":"Get counts of running, stopped, and total projects","operationId":"get-project-status-counts","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseStatusCounts"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get project status counts","tags":["Projects"]}},"/environments/{id}/projects/{projectId}":{"get":{"description":"Get a Docker Compose project by ID","operationId":"get-project","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Project ID","in":"path","name":"projectId","required":true,"schema":{"description":"Project ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseDetails"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get a project","tags":["Projects"]},"put":{"description":"Update a Docker Compose project configuration","operationId":"update-project","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Project ID","in":"path","name":"projectId","required":true,"schema":{"description":"Project ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectUpdateProject"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseDetails"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update a project","tags":["Projects"]}},"/environments/{id}/projects/{projectId}/archive":{"post":{"description":"Archive a stopped Docker Compose project","operationId":"archive-project","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Project ID","in":"path","name":"projectId","required":true,"schema":{"description":"Project ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Archive a project","tags":["Projects"]}},"/environments/{id}/projects/{projectId}/build":{"post":{"description":"Build Docker Compose services with build directives using BuildKit","operationId":"build-project-images","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Project ID","in":"path","name":"projectId","required":true,"schema":{"description":"Project ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildProjectInputBody"}}}},"responses":{"200":{"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Build project images","tags":["Projects"]}},"/environments/{id}/projects/{projectId}/compose":{"get":{"description":"Get compose content, includes, and service configs for a project","operationId":"get-project-compose","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Project ID","in":"path","name":"projectId","required":true,"schema":{"description":"Project ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseDetails"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get project compose details","tags":["Projects"]}},"/environments/{id}/projects/{projectId}/destroy":{"delete":{"description":"Destroy a Docker Compose project and optionally remove files/volumes","operationId":"destroy-project","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Project ID","in":"path","name":"projectId","required":true,"schema":{"description":"Project ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectDestroy"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Destroy a project","tags":["Projects"]}},"/environments/{id}/projects/{projectId}/down":{"post":{"description":"Bring down a Docker Compose project (docker-compose down)","operationId":"down-project","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Project ID","in":"path","name":"projectId","required":true,"schema":{"description":"Project ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Bring down a project","tags":["Projects"]}},"/environments/{id}/projects/{projectId}/file":{"get":{"description":"Get the contents of a single project-related file by relative path","operationId":"get-project-file","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Project ID","in":"path","name":"projectId","required":true,"schema":{"description":"Project ID","type":"string"}},{"description":"Path to the file relative to the project","explode":false,"in":"query","name":"relativePath","schema":{"description":"Path to the file relative to the project","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseIncludeFile"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get a project file","tags":["Projects"]}},"/environments/{id}/projects/{projectId}/files":{"get":{"description":"Get directory files for a project","operationId":"get-project-files","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Project ID","in":"path","name":"projectId","required":true,"schema":{"description":"Project ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseDetails"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get project files","tags":["Projects"]}},"/environments/{id}/projects/{projectId}/includes":{"put":{"description":"Update an include file within a Docker Compose project","operationId":"update-project-include","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Project ID","in":"path","name":"projectId","required":true,"schema":{"description":"Project ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectUpdateIncludeFile"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseDetails"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update project include file","tags":["Projects"]}},"/environments/{id}/projects/{projectId}/pull":{"post":{"description":"Pull all images for a Docker Compose project with streaming progress output","operationId":"pull-project-images","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Project ID","in":"path","name":"projectId","required":true,"schema":{"description":"Project ID","type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Pull project images","tags":["Projects"]}},"/environments/{id}/projects/{projectId}/redeploy":{"post":{"description":"Redeploy a Docker Compose project (down + up)","operationId":"redeploy-project","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Project ID","in":"path","name":"projectId","required":true,"schema":{"description":"Project ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectDeployOptions"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Redeploy a project","tags":["Projects"]}},"/environments/{id}/projects/{projectId}/restart":{"post":{"description":"Restart all containers in a Docker Compose project","operationId":"restart-project","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Project ID","in":"path","name":"projectId","required":true,"schema":{"description":"Project ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Restart a project","tags":["Projects"]}},"/environments/{id}/projects/{projectId}/runtime":{"get":{"description":"Get runtime service state for a project","operationId":"get-project-runtime","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Project ID","in":"path","name":"projectId","required":true,"schema":{"description":"Project ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseDetails"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get project runtime","tags":["Projects"]}},"/environments/{id}/projects/{projectId}/unarchive":{"post":{"description":"Unarchive a Docker Compose project","operationId":"unarchive-project","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Project ID","in":"path","name":"projectId","required":true,"schema":{"description":"Project ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Unarchive a project","tags":["Projects"]}},"/environments/{id}/projects/{projectId}/up":{"post":{"description":"Deploy a Docker Compose project (docker-compose up)","operationId":"deploy-project","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Project ID","in":"path","name":"projectId","required":true,"schema":{"description":"Project ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectDeployOptions"}}}},"responses":{"200":{"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Deploy a project","tags":["Projects"]}},"/environments/{id}/projects/{projectId}/update-services":{"post":{"description":"Pull latest images and recreate the given services (all services when none are specified)","operationId":"update-project-services","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Project ID","in":"path","name":"projectId","required":true,"schema":{"description":"Project ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProjectServicesInputBody"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update project services","tags":["Projects"]}},"/environments/{id}/projects/{projectId}/updates":{"get":{"description":"Get image update summary for a project","operationId":"get-project-updates","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Project ID","in":"path","name":"projectId","required":true,"schema":{"description":"Project ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseDetails"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get project updates","tags":["Projects"]}},"/environments/{id}/settings":{"get":{"description":"Get all settings for an environment","operationId":"get-settings","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/SettingsPublicSetting"},"type":["array","null"]}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get settings","tags":["Settings"]},"put":{"description":"Update settings for an environment","operationId":"update-settings","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SettingsUpdate","description":"Settings update data"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseListSettingDto"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update settings","tags":["Settings"]}},"/environments/{id}/settings/public":{"get":{"description":"Get all public settings for an environment","operationId":"get-public-settings","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/SettingsPublicSetting"},"type":["array","null"]}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[],"summary":"Get public settings","tags":["Settings"]}},"/environments/{id}/swarm/configs":{"get":{"operationId":"list-swarm-configs","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseListConfigSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List swarm configs","tags":["Swarm"]},"post":{"operationId":"create-swarm-config","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmConfigCreateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseConfigSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create swarm config","tags":["Swarm"]}},"/environments/{id}/swarm/configs/{configId}":{"delete":{"operationId":"delete-swarm-config","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Config ID","in":"path","name":"configId","required":true,"schema":{"description":"Config ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete swarm config","tags":["Swarm"]},"get":{"operationId":"get-swarm-config","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Config ID","in":"path","name":"configId","required":true,"schema":{"description":"Config ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseConfigSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get swarm config","tags":["Swarm"]},"put":{"operationId":"update-swarm-config","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Config ID","in":"path","name":"configId","required":true,"schema":{"description":"Config ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmConfigUpdateRequest"}}},"required":true},"responses":{"204":{"description":"No Content"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update swarm config","tags":["Swarm"]}},"/environments/{id}/swarm/info":{"get":{"operationId":"get-swarm-info","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseSwarmInfo"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get swarm info","tags":["Swarm"]}},"/environments/{id}/swarm/init":{"post":{"operationId":"init-swarm","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmSwarmInitRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseSwarmInitResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Initialize swarm","tags":["Swarm"]}},"/environments/{id}/swarm/join":{"post":{"operationId":"join-swarm","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmSwarmJoinRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Join swarm","tags":["Swarm"]}},"/environments/{id}/swarm/join-tokens":{"get":{"operationId":"get-swarm-join-tokens","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseSwarmJoinTokensResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get swarm join tokens","tags":["Swarm"]}},"/environments/{id}/swarm/join-tokens/rotate":{"post":{"operationId":"rotate-swarm-join-tokens","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmSwarmRotateJoinTokensRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Rotate swarm join tokens","tags":["Swarm"]}},"/environments/{id}/swarm/leave":{"post":{"operationId":"leave-swarm","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmSwarmLeaveRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Leave swarm","tags":["Swarm"]}},"/environments/{id}/swarm/nodes":{"get":{"operationId":"list-swarm-nodes","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction (asc or desc)","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction (asc or desc)","type":"string"}},{"description":"Start index for pagination","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index for pagination","format":"int64","type":"integer"}},{"description":"Number of items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Number of items per page","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmPaginatedResponseNodeSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List swarm nodes","tags":["Swarm"]}},"/environments/{id}/swarm/nodes/{nodeId}":{"delete":{"operationId":"delete-swarm-node","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Node ID","in":"path","name":"nodeId","required":true,"schema":{"description":"Node ID","type":"string"}},{"description":"Force node removal","explode":false,"in":"query","name":"force","schema":{"default":false,"description":"Force node removal","type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete swarm node","tags":["Swarm"]},"get":{"operationId":"get-swarm-node","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Node ID","in":"path","name":"nodeId","required":true,"schema":{"description":"Node ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseNodeSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get swarm node","tags":["Swarm"]},"patch":{"operationId":"update-swarm-node","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Node ID","in":"path","name":"nodeId","required":true,"schema":{"description":"Node ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmNodeUpdateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update swarm node","tags":["Swarm"]}},"/environments/{id}/swarm/nodes/{nodeId}/agent/deployment":{"post":{"operationId":"get-swarm-node-agent-deployment","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Node ID","in":"path","name":"nodeId","required":true,"schema":{"description":"Node ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetSwarmNodeAgentDeploymentInputBody"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseSwarmNodeAgentDeployment"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get swarm node agent deployment snippets","tags":["Swarm"]}},"/environments/{id}/swarm/nodes/{nodeId}/demote":{"post":{"operationId":"demote-swarm-node","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Node ID","in":"path","name":"nodeId","required":true,"schema":{"description":"Node ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Demote swarm node","tags":["Swarm"]}},"/environments/{id}/swarm/nodes/{nodeId}/promote":{"post":{"operationId":"promote-swarm-node","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Node ID","in":"path","name":"nodeId","required":true,"schema":{"description":"Node ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Promote swarm node","tags":["Swarm"]}},"/environments/{id}/swarm/nodes/{nodeId}/tasks":{"get":{"operationId":"list-swarm-node-tasks","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Node ID","in":"path","name":"nodeId","required":true,"schema":{"description":"Node ID","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction (asc or desc)","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction (asc or desc)","type":"string"}},{"description":"Start index for pagination","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index for pagination","format":"int64","type":"integer"}},{"description":"Number of items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Number of items per page","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmPaginatedResponseTaskSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List tasks for a swarm node","tags":["Swarm"]}},"/environments/{id}/swarm/secrets":{"get":{"operationId":"list-swarm-secrets","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseListSecretSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List swarm secrets","tags":["Swarm"]},"post":{"operationId":"create-swarm-secret","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmSecretCreateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseSecretSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create swarm secret","tags":["Swarm"]}},"/environments/{id}/swarm/secrets/{secretId}":{"delete":{"operationId":"delete-swarm-secret","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Secret ID","in":"path","name":"secretId","required":true,"schema":{"description":"Secret ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete swarm secret","tags":["Swarm"]},"get":{"operationId":"get-swarm-secret","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Secret ID","in":"path","name":"secretId","required":true,"schema":{"description":"Secret ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseSecretSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get swarm secret","tags":["Swarm"]},"put":{"operationId":"update-swarm-secret","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Secret ID","in":"path","name":"secretId","required":true,"schema":{"description":"Secret ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmSecretUpdateRequest"}}},"required":true},"responses":{"204":{"description":"No Content"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update swarm secret","tags":["Swarm"]}},"/environments/{id}/swarm/services":{"get":{"operationId":"list-swarm-services","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction (asc or desc)","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction (asc or desc)","type":"string"}},{"description":"Start index for pagination","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index for pagination","format":"int64","type":"integer"}},{"description":"Number of items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Number of items per page","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmPaginatedResponseServiceSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List swarm services","tags":["Swarm"]},"post":{"operationId":"create-swarm-service","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmServiceCreateRequest","description":"Service creation request"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseServiceCreateResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create swarm service","tags":["Swarm"]}},"/environments/{id}/swarm/services/{serviceId}":{"delete":{"operationId":"delete-swarm-service","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Service ID","in":"path","name":"serviceId","required":true,"schema":{"description":"Service ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete swarm service","tags":["Swarm"]},"get":{"operationId":"get-swarm-service","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Service ID","in":"path","name":"serviceId","required":true,"schema":{"description":"Service ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseServiceInspect"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get swarm service","tags":["Swarm"]},"put":{"operationId":"update-swarm-service","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Service ID","in":"path","name":"serviceId","required":true,"schema":{"description":"Service ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmServiceUpdateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseServiceUpdateResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update swarm service","tags":["Swarm"]}},"/environments/{id}/swarm/services/{serviceId}/rollback":{"post":{"operationId":"rollback-swarm-service","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Service ID","in":"path","name":"serviceId","required":true,"schema":{"description":"Service ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseServiceUpdateResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Rollback a swarm service","tags":["Swarm"]}},"/environments/{id}/swarm/services/{serviceId}/scale":{"post":{"operationId":"scale-swarm-service","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Service ID","in":"path","name":"serviceId","required":true,"schema":{"description":"Service ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmServiceScaleRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseServiceUpdateResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Scale a swarm service","tags":["Swarm"]}},"/environments/{id}/swarm/services/{serviceId}/tasks":{"get":{"operationId":"list-swarm-service-tasks","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Service ID","in":"path","name":"serviceId","required":true,"schema":{"description":"Service ID","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction (asc or desc)","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction (asc or desc)","type":"string"}},{"description":"Start index for pagination","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index for pagination","format":"int64","type":"integer"}},{"description":"Number of items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Number of items per page","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmPaginatedResponseTaskSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List tasks for a swarm service","tags":["Swarm"]}},"/environments/{id}/swarm/spec":{"put":{"operationId":"update-swarm-spec","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmSwarmUpdateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update swarm spec","tags":["Swarm"]}},"/environments/{id}/swarm/stacks":{"get":{"operationId":"list-swarm-stacks","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction (asc or desc)","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction (asc or desc)","type":"string"}},{"description":"Start index for pagination","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index for pagination","format":"int64","type":"integer"}},{"description":"Number of items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Number of items per page","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmPaginatedResponseStackSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List swarm stacks","tags":["Swarm"]},"post":{"operationId":"deploy-swarm-stack","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmStackDeployRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseStackDeployResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Deploy swarm stack","tags":["Swarm"]}},"/environments/{id}/swarm/stacks/config/render":{"post":{"operationId":"render-swarm-stack-config","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmStackRenderConfigRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseStackRenderConfigResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Render/validate swarm stack config","tags":["Swarm"]}},"/environments/{id}/swarm/stacks/{name}":{"delete":{"operationId":"delete-swarm-stack","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Stack name","in":"path","name":"name","required":true,"schema":{"description":"Stack name","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete swarm stack","tags":["Swarm"]},"get":{"operationId":"get-swarm-stack","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Stack name","in":"path","name":"name","required":true,"schema":{"description":"Stack name","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseStackInspect"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get swarm stack","tags":["Swarm"]}},"/environments/{id}/swarm/stacks/{name}/services":{"get":{"operationId":"list-swarm-stack-services","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Stack name","in":"path","name":"name","required":true,"schema":{"description":"Stack name","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction (asc or desc)","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction (asc or desc)","type":"string"}},{"description":"Start index for pagination","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index for pagination","format":"int64","type":"integer"}},{"description":"Number of items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Number of items per page","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmPaginatedResponseServiceSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List swarm stack services","tags":["Swarm"]}},"/environments/{id}/swarm/stacks/{name}/source":{"get":{"operationId":"get-swarm-stack-source","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Stack name","in":"path","name":"name","required":true,"schema":{"description":"Stack name","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseStackSource"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get swarm stack source","tags":["Swarm"]},"put":{"operationId":"update-swarm-stack-source","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Stack name","in":"path","name":"name","required":true,"schema":{"description":"Stack name","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmStackSourceUpdateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseStackSource"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update swarm stack source","tags":["Swarm"]}},"/environments/{id}/swarm/stacks/{name}/tasks":{"get":{"operationId":"list-swarm-stack-tasks","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Stack name","in":"path","name":"name","required":true,"schema":{"description":"Stack name","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction (asc or desc)","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction (asc or desc)","type":"string"}},{"description":"Start index for pagination","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index for pagination","format":"int64","type":"integer"}},{"description":"Number of items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Number of items per page","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmPaginatedResponseTaskSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List swarm stack tasks","tags":["Swarm"]}},"/environments/{id}/swarm/status":{"get":{"operationId":"get-swarm-status","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseRuntimeStatus"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get swarm status","tags":["Swarm"]}},"/environments/{id}/swarm/tasks":{"get":{"operationId":"list-swarm-tasks","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction (asc or desc)","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction (asc or desc)","type":"string"}},{"description":"Start index for pagination","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index for pagination","format":"int64","type":"integer"}},{"description":"Number of items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Number of items per page","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmPaginatedResponseTaskSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List swarm tasks","tags":["Swarm"]}},"/environments/{id}/swarm/unlock":{"post":{"operationId":"unlock-swarm","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwarmSwarmUnlockRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Unlock swarm","tags":["Swarm"]}},"/environments/{id}/swarm/unlock-key":{"get":{"operationId":"get-swarm-unlock-key","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseSwarmUnlockKeyResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get swarm unlock key","tags":["Swarm"]}},"/environments/{id}/sync":{"post":{"description":"Sync container registries and git repositories to a remote environment","operationId":"syncEnvironment","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Sync environment","tags":["Environments"]}},"/environments/{id}/system/containers/start-all":{"post":{"description":"Start all Docker containers","operationId":"start-all-containers","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseActionResult"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Start all containers","tags":["System"]}},"/environments/{id}/system/containers/start-stopped":{"post":{"description":"Start all stopped Docker containers","operationId":"start-all-stopped-containers","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseActionResult"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Start all stopped containers","tags":["System"]}},"/environments/{id}/system/containers/stop-all":{"post":{"description":"Stop all running Docker containers","operationId":"stop-all-containers","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseActionResult"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Stop all containers","tags":["System"]}},"/environments/{id}/system/convert":{"post":{"description":"Convert a docker run command to docker-compose format","operationId":"convert-docker-run","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemConvertDockerRunRequest","description":"Docker run command"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemConvertDockerRunResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Convert docker run command","tags":["System"]}},"/environments/{id}/system/docker/info":{"get":{"description":"Get Docker daemon version and system information","operationId":"get-docker-info","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DockerinfoInfo"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get Docker info","tags":["System"]}},"/environments/{id}/system/health":{"head":{"description":"Check if the Docker daemon is responsive","operationId":"system-health","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Check system health","tags":["System"]}},"/environments/{id}/system/prune":{"post":{"description":"Remove unused Docker resources (containers, images, volumes, networks)","operationId":"prune-all","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemPruneAllRequest","description":"Prune options"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponsePruneAllResult"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Prune Docker resources","tags":["System"]}},"/environments/{id}/system/upgrade":{"post":{"description":"Trigger a system upgrade","operationId":"trigger-upgrade","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"Accepted"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Trigger system upgrade","tags":["System"]}},"/environments/{id}/system/upgrade/all":{"post":{"description":"Upgrade every Arcane environment, starting with the manager","operationId":"trigger-update-all","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseEnvironmentUpdateJob"}}},"description":"Accepted"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update all environments","tags":["System"]}},"/environments/{id}/system/upgrade/all/status":{"get":{"description":"Get the status of the latest update-all-environments job","operationId":"update-all-status","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseEnvironmentUpdateJob"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get update-all status","tags":["System"]}},"/environments/{id}/system/upgrade/check":{"get":{"description":"Check if a system upgrade is available","operationId":"check-upgrade","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpgradeCheckResultData"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Check for system upgrade","tags":["System"]}},"/environments/{id}/templates/variables":{"get":{"description":"Get global template variables for an environment","operationId":"getGlobalVariables","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseListVariable"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get global variables","tags":["Templates"]},"put":{"description":"Update global template variables for an environment","operationId":"updateGlobalVariables","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvSummary"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update global variables","tags":["Templates"]}},"/environments/{id}/test":{"post":{"description":"Test connectivity to a Arcane environment","operationId":"testConnection","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvironmentTestConnectionRequest"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseTest"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Test environment connection","tags":["Environments"]}},"/environments/{id}/updater/history":{"get":{"description":"Get the history of update operations","operationId":"get-updater-history","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Number of history entries to return","explode":false,"in":"query","name":"limit","schema":{"default":50,"description":"Number of history entries to return","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseListAutoUpdateRecord"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get updater history","tags":["Updater"]}},"/environments/{id}/updater/run":{"post":{"description":"Apply pending container updates","operationId":"run-updater","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdaterOptions","description":"Updater run options"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseResult"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Run updater","tags":["Updater"]}},"/environments/{id}/updater/status":{"get":{"description":"Get the current status of the updater","operationId":"get-updater-status","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseStatus"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get updater status","tags":["Updater"]}},"/environments/{id}/version":{"get":{"description":"Get the version of a remote environment","operationId":"getEnvironmentVersion","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseInfo"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get environment version","tags":["Environments"]}},"/environments/{id}/volumes":{"get":{"description":"Get a paginated list of Docker volumes","operationId":"list-volumes","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction (asc or desc)","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction (asc or desc)","type":"string"}},{"description":"Start index for pagination","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index for pagination","format":"int64","type":"integer"}},{"description":"Number of items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Number of items per page","format":"int64","type":"integer"}},{"description":"Filter by in-use status (true/false)","explode":false,"in":"query","name":"inUse","schema":{"description":"Filter by in-use status (true/false)","type":"string"}},{"description":"Include internal volumes","explode":false,"in":"query","name":"includeInternal","schema":{"default":false,"description":"Include internal volumes","type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VolumePaginatedResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List volumes","tags":["Volumes"]},"post":{"description":"Create a new Docker volume","operationId":"create-volume","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VolumeCreate","description":"Volume creation data"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseVolume"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a volume","tags":["Volumes"]}},"/environments/{id}/volumes/backups/{backupId}":{"delete":{"operationId":"delete-volume-backup","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Backup ID","in":"path","name":"backupId","required":true,"schema":{"description":"Backup ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete volume backup","tags":["Volume Backup"]}},"/environments/{id}/volumes/backups/{backupId}/download":{"get":{"operationId":"download-volume-backup","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Backup ID","in":"path","name":"backupId","required":true,"schema":{"description":"Backup ID","type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Download volume backup","tags":["Volume Backup"]}},"/environments/{id}/volumes/backups/{backupId}/files":{"get":{"operationId":"list-backup-files","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Backup ID","in":"path","name":"backupId","required":true,"schema":{"description":"Backup ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseListString"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List files in a volume backup","tags":["Volume Backup"]}},"/environments/{id}/volumes/backups/{backupId}/has-path":{"get":{"operationId":"backup-has-path","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Backup ID","in":"path","name":"backupId","required":true,"schema":{"description":"Backup ID","type":"string"}},{"description":"Path to check","explode":false,"in":"query","name":"path","schema":{"description":"Path to check","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseBackupHasPathResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Check if backup contains path","tags":["Volume Backup"]}},"/environments/{id}/volumes/counts":{"get":{"description":"Get counts of volumes in use, unused, and total","operationId":"get-volume-usage-counts","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Include internal volumes","explode":false,"in":"query","name":"includeInternal","schema":{"default":false,"description":"Include internal volumes","type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseVolumeUsageCountsData"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get volume usage counts","tags":["Volumes"]}},"/environments/{id}/volumes/prune":{"post":{"description":"Remove all unused Docker volumes","operationId":"prune-volumes","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseVolumePruneReportData"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Prune unused volumes","tags":["Volumes"]}},"/environments/{id}/volumes/sizes":{"get":{"description":"Get disk usage sizes for all volumes (slow operation)","operationId":"get-volume-sizes","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseListVolumeSizeInfo"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get volume sizes","tags":["Volumes"]}},"/environments/{id}/volumes/{volumeName}":{"delete":{"description":"Remove a Docker volume by name","operationId":"remove-volume","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Volume name","in":"path","name":"volumeName","required":true,"schema":{"description":"Volume name","type":"string"}},{"description":"Force removal","explode":false,"in":"query","name":"force","schema":{"description":"Force removal","type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Remove a volume","tags":["Volumes"]},"get":{"description":"Get a Docker volume by its name","operationId":"get-volume","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Volume name","in":"path","name":"volumeName","required":true,"schema":{"description":"Volume name","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseVolume"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get volume by name","tags":["Volumes"]}},"/environments/{id}/volumes/{volumeName}/backups":{"get":{"operationId":"list-volume-backups","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Volume name","in":"path","name":"volumeName","required":true,"schema":{"description":"Volume name","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction","type":"string"}},{"description":"Start index","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index","format":"int64","type":"integer"}},{"description":"Limit","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Limit","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VolumeBackupPaginatedResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List volume backups","tags":["Volume Backup"]},"post":{"operationId":"create-volume-backup","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Volume name","in":"path","name":"volumeName","required":true,"schema":{"description":"Volume name","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseVolumeBackup"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create volume backup","tags":["Volume Backup"]}},"/environments/{id}/volumes/{volumeName}/backups/upload":{"post":{"operationId":"upload-volume-backup","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Volume name","in":"path","name":"volumeName","required":true,"schema":{"description":"Volume name","type":"string"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"properties":{"file":{"contentMediaType":"application/octet-stream","description":"Backup archive (tar.gz)","format":"binary","type":"string"}},"required":["file"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Upload and restore volume backup","tags":["Volume Backup"]}},"/environments/{id}/volumes/{volumeName}/backups/{backupId}/restore":{"post":{"operationId":"restore-volume-backup","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Volume name","in":"path","name":"volumeName","required":true,"schema":{"description":"Volume name","type":"string"}},{"description":"Backup ID","in":"path","name":"backupId","required":true,"schema":{"description":"Backup ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Restore volume backup","tags":["Volume Backup"]}},"/environments/{id}/volumes/{volumeName}/backups/{backupId}/restore-files":{"post":{"operationId":"restore-volume-backup-files","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Volume name","in":"path","name":"volumeName","required":true,"schema":{"description":"Volume name","type":"string"}},{"description":"Backup ID","in":"path","name":"backupId","required":true,"schema":{"description":"Backup ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestoreBackupFilesInputBody"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Restore specific files from a volume backup","tags":["Volume Backup"]}},"/environments/{id}/volumes/{volumeName}/browse":{"delete":{"operationId":"delete-volume-file","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Volume name","in":"path","name":"volumeName","required":true,"schema":{"description":"Volume name","type":"string"}},{"description":"File or directory path to delete","explode":false,"in":"query","name":"path","schema":{"description":"File or directory path to delete","type":"string"}}],"responses":{"204":{"description":"No Content","headers":{"Data":{"schema":{"$ref":"#/components/schemas/BaseMessageResponse","description":"Response data"}},"Success":{"schema":{"description":"Whether the request was successful","type":"boolean"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete file or directory in volume","tags":["Volume Browser"]},"get":{"operationId":"browse-volume-directory","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Volume name","in":"path","name":"volumeName","required":true,"schema":{"description":"Volume name","type":"string"}},{"description":"Directory path to browse","explode":false,"in":"query","name":"path","schema":{"default":"/","description":"Directory path to browse","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseListFileEntry"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List volume directory","tags":["Volume Browser"]}},"/environments/{id}/volumes/{volumeName}/browse/content":{"get":{"operationId":"get-volume-file-content","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Volume name","in":"path","name":"volumeName","required":true,"schema":{"description":"Volume name","type":"string"}},{"description":"File path","explode":false,"in":"query","name":"path","schema":{"description":"File path","type":"string"}},{"description":"Maximum bytes to read (default 1MB)","explode":false,"in":"query","name":"maxBytes","schema":{"default":1048576,"description":"Maximum bytes to read (default 1MB)","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseFileContentResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get file content preview","tags":["Volume Browser"]}},"/environments/{id}/volumes/{volumeName}/browse/download":{"get":{"operationId":"download-volume-file","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Volume name","in":"path","name":"volumeName","required":true,"schema":{"description":"Volume name","type":"string"}},{"description":"File path","explode":false,"in":"query","name":"path","schema":{"description":"File path","type":"string"}}],"responses":{"200":{"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Download file from volume","tags":["Volume Browser"]}},"/environments/{id}/volumes/{volumeName}/browse/mkdir":{"post":{"operationId":"create-volume-directory","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Volume name","in":"path","name":"volumeName","required":true,"schema":{"description":"Volume name","type":"string"}},{"description":"Directory path to create","explode":false,"in":"query","name":"path","schema":{"description":"Directory path to create","type":"string"}}],"responses":{"204":{"description":"No Content","headers":{"Data":{"schema":{"$ref":"#/components/schemas/BaseMessageResponse","description":"Response data"}},"Success":{"schema":{"description":"Whether the request was successful","type":"boolean"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create directory in volume","tags":["Volume Browser"]}},"/environments/{id}/volumes/{volumeName}/browse/upload":{"post":{"operationId":"upload-volume-file","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Volume name","in":"path","name":"volumeName","required":true,"schema":{"description":"Volume name","type":"string"}},{"description":"Destination path","explode":false,"in":"query","name":"path","schema":{"default":"/","description":"Destination path","type":"string"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"properties":{"file":{"contentMediaType":"application/octet-stream","description":"File to upload","format":"binary","type":"string"}},"required":["file"],"type":"object"}}},"required":true},"responses":{"204":{"description":"No Content","headers":{"Data":{"schema":{"$ref":"#/components/schemas/BaseMessageResponse","description":"Response data"}},"Success":{"schema":{"description":"Whether the request was successful","type":"boolean"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Upload file to volume","tags":["Volume Browser"]}},"/environments/{id}/volumes/{volumeName}/usage":{"get":{"description":"Get containers using a specific volume","operationId":"get-volume-usage","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Volume name","in":"path","name":"volumeName","required":true,"schema":{"description":"Volume name","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseVolumeUsageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get volume usage","tags":["Volumes"]}},"/environments/{id}/vulnerabilities/all":{"get":{"description":"Retrieves paginated vulnerabilities across all scanned images in the environment","operationId":"list-environment-vulnerabilities","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Sort field","explode":false,"in":"query","name":"sort","schema":{"description":"Sort field","type":"string"}},{"description":"Sort order","explode":false,"in":"query","name":"order","schema":{"description":"Sort order","type":"string"}},{"description":"Start offset","explode":false,"in":"query","name":"start","schema":{"description":"Start offset","format":"int64","type":"integer"}},{"description":"Limit","explode":false,"in":"query","name":"limit","schema":{"description":"Limit","format":"int64","type":"integer"}},{"description":"Comma-separated severity filter","explode":false,"in":"query","name":"severity","schema":{"description":"Comma-separated severity filter","type":"string"}},{"description":"Filter by image/repo name (substring)","explode":false,"in":"query","name":"imageName","schema":{"description":"Filter by image/repo name (substring)","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BasePaginatedVulnerabilityWithImage"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List environment vulnerabilities","tags":["Vulnerabilities"]}},"/environments/{id}/vulnerabilities/ignore":{"post":{"description":"Creates an ignore record for a specific vulnerability","operationId":"ignore-vulnerability","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VulnerabilityIgnorePayload"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseIgnoredVulnerability"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Ignore a vulnerability","tags":["Vulnerabilities"]}},"/environments/{id}/vulnerabilities/ignore/{ignoreId}":{"delete":{"description":"Removes an ignore record for a vulnerability","operationId":"unignore-vulnerability","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Ignore record ID","in":"path","name":"ignoreId","required":true,"schema":{"description":"Ignore record ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseStruct {}"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Unignore a vulnerability","tags":["Vulnerabilities"]}},"/environments/{id}/vulnerabilities/ignored":{"get":{"description":"Retrieves a list of all ignored vulnerabilities for the environment","operationId":"list-ignored-vulnerabilities","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Sort field","explode":false,"in":"query","name":"sort","schema":{"description":"Sort field","type":"string"}},{"description":"Sort order","explode":false,"in":"query","name":"order","schema":{"description":"Sort order","type":"string"}},{"description":"Start offset","explode":false,"in":"query","name":"start","schema":{"description":"Start offset","format":"int64","type":"integer"}},{"description":"Limit","explode":false,"in":"query","name":"limit","schema":{"description":"Limit","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BasePaginatedIgnoredVulnerability"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List ignored vulnerabilities","tags":["Vulnerabilities"]}},"/environments/{id}/vulnerabilities/image-options":{"get":{"description":"Retrieves available image filter options for environment vulnerabilities","operationId":"list-environment-vulnerability-image-options","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Comma-separated severity filter","explode":false,"in":"query","name":"severity","schema":{"description":"Comma-separated severity filter","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseListString"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List vulnerability image options","tags":["Vulnerabilities"]}},"/environments/{id}/vulnerabilities/scanner-status":{"get":{"description":"Check if the vulnerability scanner (Trivy) is available and get its version","operationId":"get-vulnerability-scanner-status","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseScannerStatus"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get vulnerability scanner status","tags":["Vulnerabilities"]}},"/environments/{id}/vulnerabilities/summary":{"get":{"description":"Retrieves aggregated vulnerability counts across all images in the environment","operationId":"get-environment-vulnerability-summary","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseEnvironmentVulnerabilitySummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get environment vulnerability summary","tags":["Vulnerabilities"]}},"/environments/{id}/webhooks":{"get":{"description":"List all webhooks configured for this environment","operationId":"list-webhooks","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseListSummary"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List webhooks","tags":["Webhooks"]},"post":{"description":"Create a webhook that triggers a container or stack update. The token is only returned once.","operationId":"create-webhook","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreateInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseCreated"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create webhook","tags":["Webhooks"]}},"/environments/{id}/webhooks/{webhookId}":{"delete":{"description":"Delete a webhook by ID","operationId":"delete-webhook","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Webhook ID","in":"path","name":"webhookId","required":true,"schema":{"description":"Webhook ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseInterface {}"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete webhook","tags":["Webhooks"]},"patch":{"description":"Update a webhook's enabled state","operationId":"update-webhook","parameters":[{"description":"Environment ID","in":"path","name":"id","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Webhook ID","in":"path","name":"webhookId","required":true,"schema":{"description":"Webhook ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookUpdateInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseInterface {}"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update webhook","tags":["Webhooks"]}},"/events":{"get":{"description":"Get a paginated list of system events","operationId":"listEvents","parameters":[{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction","type":"string"}},{"description":"Start index","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index","format":"int64","type":"integer"}},{"description":"Limit","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Limit","format":"int64","type":"integer"}},{"description":"Filter by severity","explode":false,"in":"query","name":"severity","schema":{"description":"Filter by severity","type":"string"}},{"description":"Filter by event type","explode":false,"in":"query","name":"type","schema":{"description":"Filter by event type","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventPaginatedResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List events","tags":["Events"]}},"/events/environment/{environmentId}":{"get":{"description":"Get a paginated list of events for a specific environment","operationId":"getEventsByEnvironment","parameters":[{"description":"Environment ID","in":"path","name":"environmentId","required":true,"schema":{"description":"Environment ID","type":"string"}},{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction","type":"string"}},{"description":"Start index","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index","format":"int64","type":"integer"}},{"description":"Limit","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Limit","format":"int64","type":"integer"}},{"description":"Filter by severity","explode":false,"in":"query","name":"severity","schema":{"description":"Filter by severity","type":"string"}},{"description":"Filter by event type","explode":false,"in":"query","name":"type","schema":{"description":"Filter by event type","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventPaginatedResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get events by environment","tags":["Events"]}},"/events/{eventId}":{"delete":{"description":"Delete a system event by ID","operationId":"deleteEvent","parameters":[{"description":"Event ID","in":"path","name":"eventId","required":true,"schema":{"description":"Event ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete an event","tags":["Events"]}},"/federated-credentials":{"get":{"description":"Get a paginated list of workload identity federation trust rules","operationId":"list-federated-credentials","parameters":[{"description":"Search query for filtering by name, issuer, or subject","explode":false,"in":"query","name":"search","schema":{"description":"Search query for filtering by name, issuer, or subject","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction (asc or desc)","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction (asc or desc)","type":"string"}},{"description":"Start index for pagination","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index for pagination","format":"int64","type":"integer"}},{"description":"Number of items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Number of items per page","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BasePaginatedFederatedCredential"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List federated credentials","tags":["Federated Credentials"]},"post":{"description":"Create a workload identity federation trust rule","operationId":"create-federated-credential","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FederatedCreateFederatedCredential"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseFederatedCredential"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a federated credential","tags":["Federated Credentials"]}},"/federated-credentials/{id}":{"delete":{"description":"Delete a workload identity federation trust rule and its service user","operationId":"delete-federated-credential","parameters":[{"description":"Federated credential ID","in":"path","name":"id","required":true,"schema":{"description":"Federated credential ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete a federated credential","tags":["Federated Credentials"]},"get":{"description":"Get details of a workload identity federation trust rule","operationId":"get-federated-credential","parameters":[{"description":"Federated credential ID","in":"path","name":"id","required":true,"schema":{"description":"Federated credential ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseFederatedCredential"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get a federated credential","tags":["Federated Credentials"]},"put":{"description":"Update a workload identity federation trust rule","operationId":"update-federated-credential","parameters":[{"description":"Federated credential ID","in":"path","name":"id","required":true,"schema":{"description":"Federated credential ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FederatedUpdateFederatedCredential"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseFederatedCredential"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update a federated credential","tags":["Federated Credentials"]}},"/git-repositories/sync":{"post":{"description":"Sync git repositories from a manager to this agent instance","operationId":"syncGitRepositories","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GitopsRepositorySyncRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Sync git repositories","tags":["Git Repositories"]}},"/health":{"get":{"description":"Check if the API is healthy","operationId":"health-check","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemHealthResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[],"summary":"Health check","tags":["Health"]},"head":{"description":"Check if the API is healthy (HEAD request)","operationId":"health-check-head","responses":{"200":{"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[],"summary":"Health check (HEAD)","tags":["Health"]}},"/notifications/dispatch":{"post":{"operationId":"dispatch-notification","parameters":[{"description":"Remote environment access token","in":"header","name":"X-API-Key","schema":{"description":"Remote environment access token","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationDispatchRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseDispatchResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"ApiKeyAuth":[]}],"summary":"Dispatch notification from remote agent to manager","tags":["Notifications"]}},"/oidc/callback":{"post":{"description":"Process the OIDC callback and complete authentication","operationId":"handle-oidc-callback","parameters":[{"in":"header","name":"Origin","schema":{"type":"string"}},{"in":"header","name":"X-Forwarded-Host","schema":{"type":"string"}},{"in":"header","name":"X-Forwarded-Proto","schema":{"type":"string"}},{"in":"header","name":"Host","schema":{"type":"string"}},{"in":"header","name":"User-Agent","schema":{"type":"string"}},{"description":"OIDC state cookie from auth URL request","in":"cookie","name":"oidc_state","schema":{"description":"OIDC state cookie from auth URL request","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthOidcCallbackRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthOidcCallbackResponse"}}},"description":"OK","headers":{"Set-Cookie":{"schema":{"description":"Session and clear state cookies","type":"string"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[],"summary":"Handle OIDC callback","tags":["OIDC"]}},"/oidc/config":{"get":{"description":"Get the OIDC client configuration","operationId":"get-oidc-config","parameters":[{"in":"header","name":"Origin","schema":{"type":"string"}},{"in":"header","name":"X-Forwarded-Host","schema":{"type":"string"}},{"in":"header","name":"X-Forwarded-Proto","schema":{"type":"string"}},{"in":"header","name":"Host","schema":{"type":"string"}},{"in":"header","name":"User-Agent","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthOidcConfigResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[],"summary":"Get OIDC config","tags":["OIDC"]}},"/oidc/device/code":{"post":{"description":"Start the device authorization flow for CLI authentication","operationId":"initiate-oidc-device-auth","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthOidcDeviceAuthResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[],"summary":"Initiate OIDC device authorization","tags":["OIDC"]}},"/oidc/device/token":{"post":{"description":"Exchange a device code for authentication tokens","operationId":"exchange-oidc-device-token","parameters":[{"in":"header","name":"User-Agent","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthOidcDeviceTokenRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthOidcDeviceTokenResponse"}}},"description":"OK","headers":{"Set-Cookie":{"schema":{"description":"Session token cookie","type":"string"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[],"summary":"Exchange device code for tokens","tags":["OIDC"]}},"/oidc/role-mappings":{"get":{"description":"Returns every mapping. On each OIDC login the user's group claim is matched against ClaimValue and matching rows become source='oidc' role assignments.","operationId":"list-oidc-role-mappings","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListOidcRoleMappingsOutputBody"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List OIDC group → role mappings","tags":["OIDC"]},"post":{"operationId":"create-oidc-role-mapping","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleCreateOidcRoleMapping"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOidcRoleMappingOutputBody"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create an OIDC role mapping","tags":["OIDC"]}},"/oidc/role-mappings/{id}":{"delete":{"operationId":"delete-oidc-role-mapping","parameters":[{"description":"Mapping ID","in":"path","name":"id","required":true,"schema":{"description":"Mapping ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteOidcRoleMappingOutputBody"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete an OIDC role mapping","tags":["OIDC"]},"put":{"operationId":"update-oidc-role-mapping","parameters":[{"description":"Mapping ID","in":"path","name":"id","required":true,"schema":{"description":"Mapping ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleUpdateOidcRoleMapping"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateOidcRoleMappingOutputBody"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update an OIDC role mapping","tags":["OIDC"]}},"/oidc/status":{"get":{"description":"Get the current OIDC configuration status","operationId":"get-oidc-status","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthOidcStatusInfo"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[],"summary":"Get OIDC status","tags":["OIDC"]}},"/oidc/url":{"post":{"description":"Generate an OIDC authorization URL for login","operationId":"get-oidc-auth-url","parameters":[{"in":"header","name":"Origin","schema":{"type":"string"}},{"in":"header","name":"X-Forwarded-Host","schema":{"type":"string"}},{"in":"header","name":"X-Forwarded-Proto","schema":{"type":"string"}},{"in":"header","name":"Host","schema":{"type":"string"}},{"in":"header","name":"User-Agent","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthOidcAuthUrlRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthOidcAuthUrlResponse"}}},"description":"OK","headers":{"Set-Cookie":{"schema":{"description":"OIDC state cookie","type":"string"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[],"summary":"Get OIDC auth URL","tags":["OIDC"]}},"/roles":{"get":{"description":"Get a paginated list of roles (built-in + custom)","operationId":"list-roles","parameters":[{"description":"Search by role name or description","explode":false,"in":"query","name":"search","schema":{"description":"Search by role name or description","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction (asc or desc)","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction (asc or desc)","type":"string"}},{"description":"Start index for pagination","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index for pagination","format":"int64","type":"integer"}},{"description":"Items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Items per page","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RolePaginatedResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List roles","tags":["Roles"]},"post":{"description":"Built-in roles cannot be created via this endpoint; only custom roles are accepted. Reserved for global admins.","operationId":"create-role","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleCreateRole"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseRole"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a custom role","tags":["Roles"]}},"/roles/available-permissions":{"get":{"description":"Returns every permission the server recognizes, grouped by resource. Used by permission-picking UIs.","operationId":"get-permissions-manifest","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponsePermissionsManifest"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get the permission manifest","tags":["Roles"]}},"/roles/{id}":{"delete":{"description":"Built-in roles are protected; deleting cascades all user assignments. Reserved for global admins.","operationId":"delete-role","parameters":[{"description":"Role ID","in":"path","name":"id","required":true,"schema":{"description":"Role ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete a custom role","tags":["Roles"]},"get":{"operationId":"get-role","parameters":[{"description":"Role ID","in":"path","name":"id","required":true,"schema":{"description":"Role ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseRole"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get a role","tags":["Roles"]},"put":{"description":"Built-in roles are read-only and return 403 on update. Reserved for global admins.","operationId":"update-role","parameters":[{"description":"Role ID","in":"path","name":"id","required":true,"schema":{"description":"Role ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleUpdateRole"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseRole"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update a custom role","tags":["Roles"]}},"/settings/categories":{"get":{"description":"Get all available settings categories with metadata","operationId":"get-settings-categories","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CategoryCategory"},"type":["array","null"]}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get settings categories","tags":["Settings"]}},"/settings/search":{"post":{"description":"Search settings categories and individual settings by query","operationId":"search-settings","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchRequest","description":"Search query"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Search settings","tags":["Settings"]}},"/swarm/node-identity":{"get":{"operationId":"get-swarm-node-identity","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseSwarmNodeIdentity"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get local swarm node identity","tags":["Swarm"]}},"/templates":{"get":{"description":"Get a paginated list of compose templates","operationId":"listTemplatesPaginated","parameters":[{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction","type":"string"}},{"description":"Start index","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index","format":"int64","type":"integer"}},{"description":"Items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Items per page","format":"int64","type":"integer"}},{"description":"Filter by template type (comma-separated: false,true)","explode":false,"in":"query","name":"type","schema":{"description":"Filter by template type (comma-separated: false,true)","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplatePaginatedResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"summary":"List templates (paginated)","tags":["Templates"]},"post":{"description":"Create a new compose template","operationId":"createTemplate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateCreateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseTemplate"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a template","tags":["Templates"]}},"/templates/all":{"get":{"description":"Get all compose templates without pagination","operationId":"getAllTemplates","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseListTemplate"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"summary":"List all templates","tags":["Templates"]}},"/templates/default":{"get":{"description":"Get the default compose and env templates","operationId":"getDefaultTemplates","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseDefaultTemplatesResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get default templates","tags":["Templates"]},"post":{"description":"Save the default compose and env templates","operationId":"saveDefaultTemplates","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateSaveDefaultTemplatesRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Save default templates","tags":["Templates"]}},"/templates/fetch":{"get":{"description":"Fetch templates from a remote registry URL","operationId":"fetchTemplateRegistry","parameters":[{"description":"Registry URL","explode":false,"in":"query","name":"url","required":true,"schema":{"description":"Registry URL","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseRemoteRegistry"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Fetch remote registry","tags":["Templates"]}},"/templates/registries":{"get":{"description":"Get all template registries","operationId":"getTemplateRegistries","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseListTemplateRegistry"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List template registries","tags":["Templates"]},"post":{"description":"Create a new template registry","operationId":"createTemplateRegistry","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateCreateRegistryRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseTemplateRegistry"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a template registry","tags":["Templates"]}},"/templates/registries/{id}":{"delete":{"description":"Delete a template registry","operationId":"deleteTemplateRegistry","parameters":[{"description":"Registry ID","in":"path","name":"id","required":true,"schema":{"description":"Registry ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete a template registry","tags":["Templates"]},"put":{"description":"Update an existing template registry","operationId":"updateTemplateRegistry","parameters":[{"description":"Registry ID","in":"path","name":"id","required":true,"schema":{"description":"Registry ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateUpdateRegistryRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update a template registry","tags":["Templates"]}},"/templates/{id}":{"delete":{"description":"Delete a compose template","operationId":"deleteTemplate","parameters":[{"description":"Template ID","in":"path","name":"id","required":true,"schema":{"description":"Template ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete a template","tags":["Templates"]},"get":{"description":"Get a compose template by ID","operationId":"getTemplate","parameters":[{"description":"Template ID","in":"path","name":"id","required":true,"schema":{"description":"Template ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseTemplate"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"summary":"Get a template","tags":["Templates"]},"put":{"description":"Update an existing compose template","operationId":"updateTemplate","parameters":[{"description":"Template ID","in":"path","name":"id","required":true,"schema":{"description":"Template ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateUpdateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseTemplate"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update a template","tags":["Templates"]}},"/templates/{id}/content":{"get":{"description":"Get the compose content for a template with parsed data","operationId":"getTemplateContent","parameters":[{"description":"Template ID","in":"path","name":"id","required":true,"schema":{"description":"Template ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseTemplateContent"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"summary":"Get template content","tags":["Templates"]}},"/templates/{id}/download":{"post":{"description":"Download a remote template to local storage","operationId":"downloadTemplate","parameters":[{"description":"Template ID","in":"path","name":"id","required":true,"schema":{"description":"Template ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseTemplate"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Download a template","tags":["Templates"]}},"/users":{"get":{"description":"Get a paginated list of all users","operationId":"listUsers","parameters":[{"description":"Search query","explode":false,"in":"query","name":"search","schema":{"description":"Search query","type":"string"}},{"description":"Column to sort by","explode":false,"in":"query","name":"sort","schema":{"description":"Column to sort by","type":"string"}},{"description":"Sort direction","explode":false,"in":"query","name":"order","schema":{"default":"asc","description":"Sort direction","type":"string"}},{"description":"Start index","explode":false,"in":"query","name":"start","schema":{"default":0,"description":"Start index","format":"int64","type":"integer"}},{"description":"Items per page","explode":false,"in":"query","name":"limit","schema":{"default":20,"description":"Items per page","format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPaginatedResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List users","tags":["Users"]},"post":{"description":"Create a new user account","operationId":"createUser","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreateUser"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseUser"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a user","tags":["Users"]}},"/users/{userId}":{"delete":{"description":"Delete a user by ID","operationId":"deleteUser","parameters":[{"description":"User ID","in":"path","name":"userId","required":true,"schema":{"description":"User ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseMessageResponse"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete a user","tags":["Users"]},"get":{"description":"Get a user by ID","operationId":"getUser","parameters":[{"description":"User ID","in":"path","name":"userId","required":true,"schema":{"description":"User ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseUser"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get a user","tags":["Users"]},"put":{"description":"Update an existing user's information","operationId":"updateUser","parameters":[{"description":"User ID","in":"path","name":"userId","required":true,"schema":{"description":"User ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdateUser"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseUser"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Update a user","tags":["Users"]}},"/users/{userId}/avatar":{"get":{"description":"Get the custom profile picture for a user","operationId":"getUserAvatar","parameters":[{"description":"User ID","in":"path","name":"userId","required":true,"schema":{"description":"User ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"contentEncoding":"base64","type":"string"}}},"description":"OK","headers":{"Cache-Control":{"schema":{"type":"string"}},"Content-Type":{"schema":{"type":"string"}},"X-Content-Type-Options":{"schema":{"type":"string"}}}},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[],"summary":"Get user avatar","tags":["Users"]}},"/users/{userId}/role-assignments":{"get":{"description":"Reserved for global admins.","operationId":"list-user-role-assignments","parameters":[{"description":"User ID","in":"path","name":"userId","required":true,"schema":{"description":"User ID","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseListRoleAssignment"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List a user's role assignments","tags":["Roles"]},"put":{"description":"Replaces every source='manual' assignment for the user. source='oidc' assignments are not touched. Reserved for global admins; enforces the last-admin guard.","operationId":"set-user-role-assignments","parameters":[{"description":"User ID","in":"path","name":"userId","required":true,"schema":{"description":"User ID","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleSetUserAssignments"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseApiResponseListRoleAssignment"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Replace a user's manual role assignments","tags":["Roles"]}},"/version":{"get":{"description":"Get application version information and check for updates","operationId":"getVersion","parameters":[{"description":"Current version to compare against","explode":false,"in":"query","name":"current","schema":{"description":"Current version to compare against","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionCheck"}}},"description":"OK"},"default":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Error"}},"security":[],"summary":"Get version information","tags":["Version"]}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"servers":[{"url":"https://arcane.randomsynergy.xyz:3552/api"}]}
\ No newline at end of file
diff --git a/_docs/arcane_api_docs.yaml b/_docs/arcane_api_docs.yaml
index 62ae35a..3aff199 100644
--- a/_docs/arcane_api_docs.yaml
+++ b/_docs/arcane_api_docs.yaml
@@ -1,29 +1,147 @@
components:
schemas:
+ ActivityActivity:
+ additionalProperties: false
+ properties:
+ createdAt:
+ format: date-time
+ type: string
+ durationMs:
+ format: int64
+ type: integer
+ endedAt:
+ format: date-time
+ type: string
+ environmentId:
+ type: string
+ error:
+ type: string
+ id:
+ type: string
+ latestMessage:
+ type: string
+ metadata:
+ additionalProperties: {}
+ type: object
+ progress:
+ format: int64
+ type: integer
+ resourceId:
+ type: string
+ resourceName:
+ type: string
+ resourceType:
+ type: string
+ sourceEnvironmentId:
+ type: string
+ sourceEnvironmentName:
+ type: string
+ startedAt:
+ format: date-time
+ type: string
+ startedBy:
+ $ref: "#/components/schemas/ActivityStartedBy"
+ status:
+ type: string
+ step:
+ type: string
+ type:
+ type: string
+ updatedAt:
+ format: date-time
+ type: string
+ required:
+ - id
+ - environmentId
+ - type
+ - status
+ - startedAt
+ - createdAt
+ type: object
+ ActivityClearHistoryResult:
+ additionalProperties: false
+ properties:
+ deleted:
+ format: int64
+ type: integer
+ required:
+ - deleted
+ type: object
+ ActivityDetail:
+ additionalProperties: false
+ properties:
+ activity:
+ $ref: "#/components/schemas/ActivityActivity"
+ messages:
+ items:
+ $ref: "#/components/schemas/ActivityMessage"
+ type:
+ - array
+ - "null"
+ required:
+ - activity
+ - messages
+ type: object
+ ActivityMessage:
+ additionalProperties: false
+ properties:
+ activityId:
+ type: string
+ createdAt:
+ format: date-time
+ type: string
+ id:
+ type: string
+ level:
+ type: string
+ message:
+ type: string
+ payload:
+ additionalProperties: {}
+ type: object
+ required:
+ - id
+ - activityId
+ - level
+ - message
+ - createdAt
+ type: object
+ ActivityStartedBy:
+ additionalProperties: false
+ properties:
+ displayName:
+ type: string
+ userId:
+ type: string
+ username:
+ type: string
+ required:
+ - username
+ type: object
ApiKeyPaginatedResponse:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/ApiKeyPaginatedResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/ApiKeyPaginatedResponse.json
format: uri
readOnly: true
type: string
data:
items:
- $ref: '#/components/schemas/ApikeyApiKey'
+ $ref: "#/components/schemas/ApikeyApiKey"
type:
- - array
- - 'null'
+ - array
+ - "null"
pagination:
- $ref: '#/components/schemas/BasePaginationResponse'
+ $ref: "#/components/schemas/BasePaginationResponse"
success:
type: boolean
required:
- - success
- - data
- - pagination
+ - success
+ - data
+ - pagination
type: object
ApiResponseStruct {}DataStruct:
additionalProperties: false
@@ -45,13 +163,18 @@ components:
id:
description: Unique identifier of the API key
type: string
+ isBootstrap:
+ description: Whether the API key is an auto-generated environment bootstrap key (locked from manual edit / delete)
+ type: boolean
isStatic:
- description: Whether the API key is environment-managed and protected from
- deletion
+ description: Whether the API key is environment-managed and protected from deletion
type: boolean
keyPrefix:
description: Prefix of the API key for identification
type: string
+ kind:
+ description: "Key kind: 'scoped' keys use their own permission grants, 'personal' keys inherit the owner's role permissions"
+ type: string
lastUsedAt:
description: Last time the API key was used
format: date-time
@@ -59,6 +182,13 @@ components:
name:
description: Name of the API key
type: string
+ permissions:
+ description: Permissions held by this key
+ items:
+ $ref: "#/components/schemas/ApikeyPermissionGrant"
+ type:
+ - array
+ - "null"
updatedAt:
description: Last update timestamp
format: date-time
@@ -67,12 +197,14 @@ components:
description: ID of the user who owns the API key
type: string
required:
- - id
- - name
- - keyPrefix
- - userId
- - isStatic
- - createdAt
+ - id
+ - name
+ - keyPrefix
+ - kind
+ - isStatic
+ - isBootstrap
+ - createdAt
+ - permissions
type: object
ApikeyApiKeyCreatedDto:
additionalProperties: false
@@ -91,9 +223,11 @@ components:
id:
description: Unique identifier of the API key
type: string
+ isBootstrap:
+ description: Whether the API key is an auto-generated environment bootstrap key (locked from manual edit / delete)
+ type: boolean
isStatic:
- description: Whether the API key is environment-managed and protected from
- deletion
+ description: Whether the API key is environment-managed and protected from deletion
type: boolean
key:
description: The full API key secret (only shown once)
@@ -101,6 +235,9 @@ components:
keyPrefix:
description: Prefix of the API key for identification
type: string
+ kind:
+ description: "Key kind: 'scoped' keys use their own permission grants, 'personal' keys inherit the owner's role permissions"
+ type: string
lastUsedAt:
description: Last time the API key was used
format: date-time
@@ -108,6 +245,13 @@ components:
name:
description: Name of the API key
type: string
+ permissions:
+ description: Permissions held by this key
+ items:
+ $ref: "#/components/schemas/ApikeyPermissionGrant"
+ type:
+ - array
+ - "null"
updatedAt:
description: Last update timestamp
format: date-time
@@ -116,13 +260,15 @@ components:
description: ID of the user who owns the API key
type: string
required:
- - key
- - id
- - name
- - keyPrefix
- - userId
- - isStatic
- - createdAt
+ - key
+ - id
+ - name
+ - keyPrefix
+ - kind
+ - isStatic
+ - isBootstrap
+ - createdAt
+ - permissions
type: object
ApikeyCreateApiKey:
additionalProperties: false
@@ -130,7 +276,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/ApikeyCreateApiKey.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/ApikeyCreateApiKey.json
format: uri
readOnly: true
type: string
@@ -145,12 +291,64 @@ components:
name:
description: Name of the API key
examples:
- - My API Key
+ - My API Key
maxLength: 255
minLength: 1
type: string
+ permissions:
+ description: Permissions granted to this key. Cannot exceed the creator's own permissions.
+ items:
+ $ref: "#/components/schemas/ApikeyPermissionGrant"
+ minItems: 1
+ type:
+ - array
+ - "null"
+ required:
+ - name
+ - permissions
+ type: object
+ ApikeyCreateUserApiKey:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/ApikeyCreateUserApiKey.json
+ format: uri
+ readOnly: true
+ type: string
+ description:
+ description: Optional description of the API key
+ maxLength: 1000
+ type: string
+ expiresAt:
+ description: Optional expiration date for the API key
+ format: date-time
+ type: string
+ name:
+ description: Name of the API key
+ examples:
+ - My API Key
+ maxLength: 255
+ minLength: 1
+ type: string
+ required:
+ - name
+ type: object
+ ApikeyPermissionGrant:
+ additionalProperties: false
+ properties:
+ environmentId:
+ description: Environment ID to scope the grant to; omit for a global grant
+ type: string
+ permission:
+ description: Permission string
+ examples:
+ - containers:list
+ minLength: 1
+ type: string
required:
- - name
+ - permission
type: object
ApikeyUpdateApiKey:
additionalProperties: false
@@ -158,7 +356,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/ApikeyUpdateApiKey.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/ApikeyUpdateApiKey.json
format: uri
readOnly: true
type: string
@@ -174,6 +372,13 @@ components:
description: New name for the API key
maxLength: 255
type: string
+ permissions:
+ description: Replace the key's permission grants. Omit to leave unchanged. Cannot exceed the updater's own permissions.
+ items:
+ $ref: "#/components/schemas/ApikeyPermissionGrant"
+ type:
+ - array
+ - "null"
type: object
AuthLogin:
additionalProperties: false
@@ -181,7 +386,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/AuthLogin.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/AuthLogin.json
format: uri
readOnly: true
type: string
@@ -192,13 +397,13 @@ components:
username:
description: Username of the user
examples:
- - admin
+ - admin
maxLength: 255
minLength: 1
type: string
required:
- - username
- - password
+ - username
+ - password
type: object
AuthLoginResponse:
additionalProperties: false
@@ -214,13 +419,13 @@ components:
description: JWT access token
type: string
user:
- $ref: '#/components/schemas/UserUser'
+ $ref: "#/components/schemas/UserUser"
description: Authenticated user information
required:
- - token
- - refreshToken
- - expiresAt
- - user
+ - token
+ - refreshToken
+ - expiresAt
+ - user
type: object
AuthOidcAuthUrlRequest:
additionalProperties: false
@@ -228,14 +433,16 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/AuthOidcAuthUrlRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/AuthOidcAuthUrlRequest.json
format: uri
readOnly: true
type: string
+ mobileRedirectUri:
+ type: string
redirectUri:
type: string
required:
- - redirectUri
+ - redirectUri
type: object
AuthOidcAuthUrlResponse:
additionalProperties: false
@@ -243,14 +450,14 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/AuthOidcAuthUrlResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/AuthOidcAuthUrlResponse.json
format: uri
readOnly: true
type: string
authUrl:
type: string
required:
- - authUrl
+ - authUrl
type: object
AuthOidcCallbackRequest:
additionalProperties: false
@@ -258,17 +465,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/AuthOidcCallbackRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/AuthOidcCallbackRequest.json
format: uri
readOnly: true
type: string
code:
type: string
+ mobileRedirectUri:
+ type: string
state:
type: string
required:
- - code
- - state
+ - code
+ - state
type: object
AuthOidcCallbackResponse:
additionalProperties: false
@@ -276,7 +485,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/AuthOidcCallbackResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/AuthOidcCallbackResponse.json
format: uri
readOnly: true
type: string
@@ -290,13 +499,13 @@ components:
token:
type: string
user:
- $ref: '#/components/schemas/UserUser'
+ $ref: "#/components/schemas/UserUser"
required:
- - success
- - token
- - refreshToken
- - expiresAt
- - user
+ - success
+ - token
+ - refreshToken
+ - expiresAt
+ - user
type: object
AuthOidcConfigResponse:
additionalProperties: false
@@ -304,7 +513,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/AuthOidcConfigResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/AuthOidcConfigResponse.json
format: uri
readOnly: true
type: string
@@ -325,13 +534,13 @@ components:
userinfoEndpoint:
type: string
required:
- - clientId
- - redirectUri
- - issuerUrl
- - authorizationEndpoint
- - tokenEndpoint
- - userinfoEndpoint
- - scopes
+ - clientId
+ - redirectUri
+ - issuerUrl
+ - authorizationEndpoint
+ - tokenEndpoint
+ - userinfoEndpoint
+ - scopes
type: object
AuthOidcDeviceAuthResponse:
additionalProperties: false
@@ -339,7 +548,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/AuthOidcDeviceAuthResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/AuthOidcDeviceAuthResponse.json
format: uri
readOnly: true
type: string
@@ -358,10 +567,10 @@ components:
verificationUriComplete:
type: string
required:
- - deviceCode
- - userCode
- - verificationUri
- - expiresIn
+ - deviceCode
+ - userCode
+ - verificationUri
+ - expiresIn
type: object
AuthOidcDeviceTokenRequest:
additionalProperties: false
@@ -369,14 +578,14 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/AuthOidcDeviceTokenRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/AuthOidcDeviceTokenRequest.json
format: uri
readOnly: true
type: string
deviceCode:
type: string
required:
- - deviceCode
+ - deviceCode
type: object
AuthOidcDeviceTokenResponse:
additionalProperties: false
@@ -384,7 +593,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/AuthOidcDeviceTokenResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/AuthOidcDeviceTokenResponse.json
format: uri
readOnly: true
type: string
@@ -398,13 +607,13 @@ components:
token:
type: string
user:
- $ref: '#/components/schemas/UserUser'
+ $ref: "#/components/schemas/UserUser"
required:
- - success
- - token
- - refreshToken
- - expiresAt
- - user
+ - success
+ - token
+ - refreshToken
+ - expiresAt
+ - user
type: object
AuthOidcStatusInfo:
additionalProperties: false
@@ -412,7 +621,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/AuthOidcStatusInfo.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/AuthOidcStatusInfo.json
format: uri
readOnly: true
type: string
@@ -427,9 +636,9 @@ components:
providerName:
type: string
required:
- - envForced
- - envConfigured
- - mergeAccounts
+ - envForced
+ - envConfigured
+ - mergeAccounts
type: object
AuthPasswordChange:
additionalProperties: false
@@ -437,7 +646,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/AuthPasswordChange.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/AuthPasswordChange.json
format: uri
readOnly: true
type: string
@@ -449,7 +658,7 @@ components:
minLength: 8
type: string
required:
- - newPassword
+ - newPassword
type: object
AuthRefresh:
additionalProperties: false
@@ -457,7 +666,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/AuthRefresh.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/AuthRefresh.json
format: uri
readOnly: true
type: string
@@ -466,7 +675,7 @@ components:
minLength: 1
type: string
required:
- - refreshToken
+ - refreshToken
type: object
AuthTokenRefreshResponse:
additionalProperties: false
@@ -482,9 +691,9 @@ components:
description: New JWT access token
type: string
required:
- - token
- - refreshToken
- - expiresAt
+ - token
+ - refreshToken
+ - expiresAt
type: object
AutoUpdateRecord:
additionalProperties: false
@@ -527,15 +736,15 @@ components:
format: date-time
type: string
required:
- - resourceId
- - resourceType
- - resourceName
- - status
- - startTime
- - updateAvailable
- - updateApplied
- - id
- - createdAt
+ - resourceId
+ - resourceType
+ - resourceName
+ - status
+ - startTime
+ - updateAvailable
+ - updateApplied
+ - id
+ - createdAt
type: object
BackupHasPathResponse:
additionalProperties: false
@@ -543,47 +752,47 @@ components:
exists:
type: boolean
required:
- - exists
+ - exists
type: object
- BaseApiResponseActionItems:
+ BaseApiResponseActionResult:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseActionItems.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseActionResult.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/DashboardActionItems'
+ $ref: "#/components/schemas/ContainerActionResult"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponseActionResult:
+ BaseApiResponseActivity:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseActionResult.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseActivity.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/ContainerActionResult'
+ $ref: "#/components/schemas/ActivityActivity"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseAgentPairResponse:
additionalProperties: false
@@ -591,19 +800,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseAgentPairResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseAgentPairResponse.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/EnvironmentAgentPairResponse'
+ $ref: "#/components/schemas/EnvironmentAgentPairResponse"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseApiKey:
additionalProperties: false
@@ -611,19 +820,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseApiKey.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseApiKey.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/ApikeyApiKey'
+ $ref: "#/components/schemas/ApikeyApiKey"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseApiKeyCreatedDto:
additionalProperties: false
@@ -631,19 +840,39 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseApiKeyCreatedDto.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseApiKeyCreatedDto.json
+ format: uri
+ readOnly: true
+ type: string
+ data:
+ $ref: "#/components/schemas/ApikeyApiKeyCreatedDto"
+ description: Response data
+ success:
+ description: Whether the request was successful
+ type: boolean
+ required:
+ - success
+ - data
+ type: object
+ BaseApiResponseAttestationList:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseAttestationList.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/ApikeyApiKeyCreatedDto'
+ $ref: "#/components/schemas/ImageAttestationList"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseBackupHasPathResponse:
additionalProperties: false
@@ -651,19 +880,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseBackupHasPathResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseBackupHasPathResponse.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/BackupHasPathResponse'
+ $ref: "#/components/schemas/BackupHasPathResponse"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseBatchResponse:
additionalProperties: false
@@ -671,21 +900,21 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseBatchResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseBatchResponse.json
format: uri
readOnly: true
type: string
data:
additionalProperties:
- $ref: '#/components/schemas/ImageupdateResponse'
+ $ref: "#/components/schemas/ImageupdateResponse"
description: Response data
type: object
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseBranchesResponse:
additionalProperties: false
@@ -693,19 +922,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseBranchesResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseBranchesResponse.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/GitopsBranchesResponse'
+ $ref: "#/components/schemas/GitopsBranchesResponse"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseBrowseResponse:
additionalProperties: false
@@ -713,19 +942,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseBrowseResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseBrowseResponse.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/GitopsBrowseResponse'
+ $ref: "#/components/schemas/GitopsBrowseResponse"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseBuildFileContentResponse:
additionalProperties: false
@@ -733,19 +962,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseBuildFileContentResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseBuildFileContentResponse.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/BuildFileContentResponse'
+ $ref: "#/components/schemas/BuildFileContentResponse"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseBuildRecord:
additionalProperties: false
@@ -753,803 +982,1080 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseBuildRecord.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseBuildRecord.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/ImageBuildRecord'
+ $ref: "#/components/schemas/ImageBuildRecord"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponseConfig:
+ BaseApiResponseClearHistoryResult:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseConfig.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseClearHistoryResult.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/JobscheduleConfig'
+ $ref: "#/components/schemas/ActivityClearHistoryResult"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponseConfigSummary:
+ BaseApiResponseCommitResult:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseConfigSummary.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseCommitResult.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/SwarmConfigSummary'
+ $ref: "#/components/schemas/ContainerCommitResult"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponseContainerRegistry:
+ BaseApiResponseConfig:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseContainerRegistry.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseConfig.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/ContainerregistryContainerRegistry'
+ $ref: "#/components/schemas/JobscheduleConfig"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponseCreateReponse:
+ BaseApiResponseConfigSummary:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseCreateReponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseConfigSummary.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/ProjectCreateReponse'
+ $ref: "#/components/schemas/SwarmConfigSummary"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponseCreated:
+ BaseApiResponseContainerRegistry:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseCreated.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseContainerRegistry.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/WebhookCreated'
+ $ref: "#/components/schemas/ContainerregistryContainerRegistry"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponseDefaultTemplatesResponse:
+ BaseApiResponseCreateReponse:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseDefaultTemplatesResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseCreateReponse.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/TemplateDefaultTemplatesResponse'
+ $ref: "#/components/schemas/ProjectCreateReponse"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponseDeploymentSnippet:
+ BaseApiResponseCreated:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseDeploymentSnippet.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseCreated.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/DeploymentSnippet'
+ $ref: "#/components/schemas/WebhookCreated"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponseDetailSummary:
+ BaseApiResponseDefaultTemplatesResponse:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseDetailSummary.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseDefaultTemplatesResponse.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/ImageDetailSummary'
+ $ref: "#/components/schemas/TemplateDefaultTemplatesResponse"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponseDetails:
+ BaseApiResponseDeploymentSnippet:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseDetails.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseDeploymentSnippet.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/ProjectDetails'
+ $ref: "#/components/schemas/DeploymentSnippet"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponseEnvironment:
+ BaseApiResponseDetail:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseEnvironment.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseDetail.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/EnvironmentEnvironment'
+ $ref: "#/components/schemas/ActivityDetail"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponseEnvironmentVulnerabilitySummary:
+ BaseApiResponseDetailSummary:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseEnvironmentVulnerabilitySummary.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseDetailSummary.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/VulnerabilityEnvironmentVulnerabilitySummary'
+ $ref: "#/components/schemas/ImageDetailSummary"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponseEnvironmentWithApiKey:
+ BaseApiResponseDetails:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseEnvironmentWithApiKey.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseDetails.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/EnvironmentWithApiKey'
+ $ref: "#/components/schemas/ProjectDetails"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponseEvent:
+ BaseApiResponseDispatchResponse:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseEvent.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseDispatchResponse.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/EventEvent'
+ $ref: "#/components/schemas/NotificationDispatchResponse"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponseFileContentResponse:
+ BaseApiResponseEnvironment:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseFileContentResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseEnvironment.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/FileContentResponse'
+ $ref: "#/components/schemas/EnvironmentEnvironment"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponseGitOpsSync:
+ BaseApiResponseEnvironmentUpdateJob:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseGitOpsSync.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseEnvironmentUpdateJob.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/GitopsGitOpsSync'
+ $ref: "#/components/schemas/EnvironmentUpdateJob"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponseGitRepository:
+ BaseApiResponseEnvironmentVulnerabilitySummary:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseGitRepository.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseEnvironmentVulnerabilitySummary.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/GitopsGitRepository'
+ $ref: "#/components/schemas/VulnerabilityEnvironmentVulnerabilitySummary"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponseIgnoredVulnerability:
+ BaseApiResponseEnvironmentWithApiKey:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseIgnoredVulnerability.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseEnvironmentWithApiKey.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/VulnerabilityIgnoredVulnerability'
+ $ref: "#/components/schemas/EnvironmentWithApiKey"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponseImportGitOpsSyncResponse:
+ BaseApiResponseFederatedCredential:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseImportGitOpsSyncResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseFederatedCredential.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/GitopsImportGitOpsSyncResponse'
+ $ref: "#/components/schemas/FederatedFederatedCredential"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponseInfo:
+ BaseApiResponseFileContentResponse:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseInfo.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseFileContentResponse.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/VersionInfo'
+ $ref: "#/components/schemas/FileContentResponse"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponseInterface {}:
+ BaseApiResponseGitOpsSync:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseInterface
- {}.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseGitOpsSync.json
format: uri
readOnly: true
type: string
data:
+ $ref: "#/components/schemas/GitopsGitOpsSync"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponseListAutoUpdateRecord:
+ BaseApiResponseGitRepository:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListAutoUpdateRecord.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseGitRepository.json
format: uri
readOnly: true
type: string
data:
+ $ref: "#/components/schemas/GitopsGitRepository"
description: Response data
- items:
- $ref: '#/components/schemas/AutoUpdateRecord'
- type:
- - array
- - 'null'
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponseListConfigSummary:
+ BaseApiResponseIgnoredVulnerability:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListConfigSummary.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseIgnoredVulnerability.json
format: uri
readOnly: true
type: string
data:
+ $ref: "#/components/schemas/VulnerabilityIgnoredVulnerability"
description: Response data
- items:
- $ref: '#/components/schemas/SwarmConfigSummary'
- type:
- - array
- - 'null'
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponseListFileEntry:
+ BaseApiResponseImportGitOpsSyncResponse:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListFileEntry.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseImportGitOpsSyncResponse.json
format: uri
readOnly: true
type: string
data:
+ $ref: "#/components/schemas/GitopsImportGitOpsSyncResponse"
description: Response data
- items:
- $ref: '#/components/schemas/VolumeFileEntry'
- type:
- - array
- - 'null'
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponseListSecretSummary:
+ BaseApiResponseIncludeFile:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListSecretSummary.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseIncludeFile.json
format: uri
readOnly: true
type: string
data:
+ $ref: "#/components/schemas/ProjectIncludeFile"
description: Response data
- items:
- $ref: '#/components/schemas/SwarmSecretSummary'
- type:
- - array
- - 'null'
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponseListSettingDto:
+ BaseApiResponseInfo:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListSettingDto.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseInfo.json
format: uri
readOnly: true
type: string
data:
+ $ref: "#/components/schemas/VersionInfo"
description: Response data
- items:
- $ref: '#/components/schemas/SettingsSettingDto'
- type:
- - array
- - 'null'
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponseListString:
+ BaseApiResponseInterface {}:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListString.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseInterface {}.json
format: uri
readOnly: true
type: string
data:
description: Response data
- items:
- type: string
- type:
- - array
- - 'null'
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponseListSummary:
+ BaseApiResponseListApiKey:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListSummary.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListApiKey.json
format: uri
readOnly: true
type: string
data:
description: Response data
items:
- $ref: '#/components/schemas/WebhookSummary'
+ $ref: "#/components/schemas/ApikeyApiKey"
type:
- - array
- - 'null'
+ - array
+ - "null"
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponseListTemplate:
+ BaseApiResponseListAutoUpdateRecord:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListTemplate.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListAutoUpdateRecord.json
format: uri
readOnly: true
type: string
data:
description: Response data
items:
- $ref: '#/components/schemas/TemplateTemplate'
+ $ref: "#/components/schemas/AutoUpdateRecord"
type:
- - array
- - 'null'
+ - array
+ - "null"
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponseListTemplateRegistry:
+ BaseApiResponseListConfigSummary:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListTemplateRegistry.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListConfigSummary.json
format: uri
readOnly: true
type: string
data:
description: Response data
items:
- $ref: '#/components/schemas/TemplateTemplateRegistry'
+ $ref: "#/components/schemas/SwarmConfigSummary"
type:
- - array
- - 'null'
+ - array
+ - "null"
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponseListVariable:
+ BaseApiResponseListFileEntry:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListVariable.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListFileEntry.json
format: uri
readOnly: true
type: string
data:
description: Response data
items:
- $ref: '#/components/schemas/EnvVariable'
+ $ref: "#/components/schemas/VolumeFileEntry"
type:
- - array
- - 'null'
+ - array
+ - "null"
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponseListVolumeSizeInfo:
+ BaseApiResponseListHistoryItem:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListVolumeSizeInfo.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListHistoryItem.json
format: uri
readOnly: true
type: string
data:
description: Response data
items:
- $ref: '#/components/schemas/VolumeSizeInfo'
+ $ref: "#/components/schemas/ImageHistoryItem"
type:
- - array
- - 'null'
+ - array
+ - "null"
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponseLoadResult:
+ BaseApiResponseListRoleAssignment:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseLoadResult.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListRoleAssignment.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/ImageLoadResult'
description: Response data
+ items:
+ $ref: "#/components/schemas/RoleRoleAssignment"
+ type:
+ - array
+ - "null"
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponseLoginResponse:
+ BaseApiResponseListSearchResult:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseLoginResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListSearchResult.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/AuthLoginResponse'
description: Response data
+ items:
+ $ref: "#/components/schemas/ImageSearchResult"
+ type:
+ - array
+ - "null"
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponseMessageResponse:
+ BaseApiResponseListSecretSummary:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseMessageResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListSecretSummary.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/BaseMessageResponse'
description: Response data
+ items:
+ $ref: "#/components/schemas/SwarmSecretSummary"
+ type:
+ - array
+ - "null"
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponseNodeSummary:
+ BaseApiResponseListSettingDto:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseNodeSummary.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListSettingDto.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/SwarmNodeSummary'
description: Response data
+ items:
+ $ref: "#/components/schemas/SettingsSettingDto"
+ type:
+ - array
+ - "null"
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponsePruneAllResult:
+ BaseApiResponseListString:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponsePruneAllResult.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListString.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/SystemPruneAllResult'
description: Response data
+ items:
+ type: string
+ type:
+ - array
+ - "null"
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
- BaseApiResponsePruneReport:
+ BaseApiResponseListSummary:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponsePruneReport.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListSummary.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/ImagePruneReport'
description: Response data
+ items:
+ $ref: "#/components/schemas/WebhookSummary"
+ type:
+ - array
+ - "null"
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
+ type: object
+ BaseApiResponseListTemplate:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListTemplate.json
+ format: uri
+ readOnly: true
+ type: string
+ data:
+ description: Response data
+ items:
+ $ref: "#/components/schemas/TemplateTemplate"
+ type:
+ - array
+ - "null"
+ success:
+ description: Whether the request was successful
+ type: boolean
+ required:
+ - success
+ - data
+ type: object
+ BaseApiResponseListTemplateRegistry:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListTemplateRegistry.json
+ format: uri
+ readOnly: true
+ type: string
+ data:
+ description: Response data
+ items:
+ $ref: "#/components/schemas/TemplateTemplateRegistry"
+ type:
+ - array
+ - "null"
+ success:
+ description: Whether the request was successful
+ type: boolean
+ required:
+ - success
+ - data
+ type: object
+ BaseApiResponseListVariable:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListVariable.json
+ format: uri
+ readOnly: true
+ type: string
+ data:
+ description: Response data
+ items:
+ $ref: "#/components/schemas/EnvVariable"
+ type:
+ - array
+ - "null"
+ success:
+ description: Whether the request was successful
+ type: boolean
+ required:
+ - success
+ - data
+ type: object
+ BaseApiResponseListVolumeSizeInfo:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListVolumeSizeInfo.json
+ format: uri
+ readOnly: true
+ type: string
+ data:
+ description: Response data
+ items:
+ $ref: "#/components/schemas/VolumeSizeInfo"
+ type:
+ - array
+ - "null"
+ success:
+ description: Whether the request was successful
+ type: boolean
+ required:
+ - success
+ - data
+ type: object
+ BaseApiResponseLoadResult:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseLoadResult.json
+ format: uri
+ readOnly: true
+ type: string
+ data:
+ $ref: "#/components/schemas/ImageLoadResult"
+ description: Response data
+ success:
+ description: Whether the request was successful
+ type: boolean
+ required:
+ - success
+ - data
+ type: object
+ BaseApiResponseLoginResponse:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseLoginResponse.json
+ format: uri
+ readOnly: true
+ type: string
+ data:
+ $ref: "#/components/schemas/AuthLoginResponse"
+ description: Response data
+ success:
+ description: Whether the request was successful
+ type: boolean
+ required:
+ - success
+ - data
+ type: object
+ BaseApiResponseMapStringUpdateInfo:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseMapStringUpdateInfo.json
+ format: uri
+ readOnly: true
+ type: string
+ data:
+ additionalProperties:
+ $ref: "#/components/schemas/ImageUpdateInfo"
+ description: Response data
+ type: object
+ success:
+ description: Whether the request was successful
+ type: boolean
+ required:
+ - success
+ - data
+ type: object
+ BaseApiResponseMessageResponse:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseMessageResponse.json
+ format: uri
+ readOnly: true
+ type: string
+ data:
+ $ref: "#/components/schemas/BaseMessageResponse"
+ description: Response data
+ success:
+ description: Whether the request was successful
+ type: boolean
+ required:
+ - success
+ - data
+ type: object
+ BaseApiResponseNodeSummary:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseNodeSummary.json
+ format: uri
+ readOnly: true
+ type: string
+ data:
+ $ref: "#/components/schemas/SwarmNodeSummary"
+ description: Response data
+ success:
+ description: Whether the request was successful
+ type: boolean
+ required:
+ - success
+ - data
+ type: object
+ BaseApiResponsePermissionsManifest:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponsePermissionsManifest.json
+ format: uri
+ readOnly: true
+ type: string
+ data:
+ $ref: "#/components/schemas/RolePermissionsManifest"
+ description: Response data
+ success:
+ description: Whether the request was successful
+ type: boolean
+ required:
+ - success
+ - data
+ type: object
+ BaseApiResponsePruneAllResult:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponsePruneAllResult.json
+ format: uri
+ readOnly: true
+ type: string
+ data:
+ $ref: "#/components/schemas/SystemPruneAllResult"
+ description: Response data
+ success:
+ description: Whether the request was successful
+ type: boolean
+ required:
+ - success
+ - data
+ type: object
+ BaseApiResponsePruneReport:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponsePruneReport.json
+ format: uri
+ readOnly: true
+ type: string
+ data:
+ $ref: "#/components/schemas/ImagePruneReport"
+ description: Response data
+ success:
+ description: Whether the request was successful
+ type: boolean
+ required:
+ - success
+ - data
+ type: object
+ BaseApiResponsePullUsageResponse:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponsePullUsageResponse.json
+ format: uri
+ readOnly: true
+ type: string
+ data:
+ $ref: "#/components/schemas/ContainerregistryPullUsageResponse"
+ description: Response data
+ success:
+ description: Whether the request was successful
+ type: boolean
+ required:
+ - success
+ - data
type: object
BaseApiResponseRemoteRegistry:
additionalProperties: false
@@ -1557,19 +2063,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseRemoteRegistry.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseRemoteRegistry.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/TemplateRemoteRegistry'
+ $ref: "#/components/schemas/TemplateRemoteRegistry"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseResponse:
additionalProperties: false
@@ -1577,19 +2083,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseResponse.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/ImageupdateResponse'
+ $ref: "#/components/schemas/ImageupdateResponse"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseResult:
additionalProperties: false
@@ -1597,19 +2103,39 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseResult.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseResult.json
+ format: uri
+ readOnly: true
+ type: string
+ data:
+ $ref: "#/components/schemas/UpdaterResult"
+ description: Response data
+ success:
+ description: Whether the request was successful
+ type: boolean
+ required:
+ - success
+ - data
+ type: object
+ BaseApiResponseRole:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseRole.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/UpdaterResult'
+ $ref: "#/components/schemas/RoleRole"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseRuntimeStatus:
additionalProperties: false
@@ -1617,19 +2143,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseRuntimeStatus.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseRuntimeStatus.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/SwarmRuntimeStatus'
+ $ref: "#/components/schemas/SwarmRuntimeStatus"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseScanResult:
additionalProperties: false
@@ -1637,19 +2163,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseScanResult.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseScanResult.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/VulnerabilityScanResult'
+ $ref: "#/components/schemas/VulnerabilityScanResult"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseScanSummariesResponse:
additionalProperties: false
@@ -1657,19 +2183,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseScanSummariesResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseScanSummariesResponse.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/VulnerabilityScanSummariesResponse'
+ $ref: "#/components/schemas/VulnerabilityScanSummariesResponse"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseScanSummary:
additionalProperties: false
@@ -1677,19 +2203,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseScanSummary.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseScanSummary.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/VulnerabilityScanSummary'
+ $ref: "#/components/schemas/VulnerabilityScanSummary"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseScannerStatus:
additionalProperties: false
@@ -1697,19 +2223,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseScannerStatus.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseScannerStatus.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/ScannerStatus'
+ $ref: "#/components/schemas/ScannerStatus"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseSecretSummary:
additionalProperties: false
@@ -1717,19 +2243,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSecretSummary.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSecretSummary.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/SwarmSecretSummary'
+ $ref: "#/components/schemas/SwarmSecretSummary"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseServiceCreateResponse:
additionalProperties: false
@@ -1737,19 +2263,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseServiceCreateResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseServiceCreateResponse.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/SwarmServiceCreateResponse'
+ $ref: "#/components/schemas/SwarmServiceCreateResponse"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseServiceInspect:
additionalProperties: false
@@ -1757,19 +2283,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseServiceInspect.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseServiceInspect.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/SwarmServiceInspect'
+ $ref: "#/components/schemas/SwarmServiceInspect"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseServiceUpdateResponse:
additionalProperties: false
@@ -1777,19 +2303,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseServiceUpdateResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseServiceUpdateResponse.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/SwarmServiceUpdateResponse'
+ $ref: "#/components/schemas/SwarmServiceUpdateResponse"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseSnapshot:
additionalProperties: false
@@ -1797,19 +2323,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSnapshot.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSnapshot.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/DashboardSnapshot'
+ $ref: "#/components/schemas/DashboardSnapshot"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseStackDeployResponse:
additionalProperties: false
@@ -1817,19 +2343,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseStackDeployResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseStackDeployResponse.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/SwarmStackDeployResponse'
+ $ref: "#/components/schemas/SwarmStackDeployResponse"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseStackInspect:
additionalProperties: false
@@ -1837,19 +2363,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseStackInspect.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseStackInspect.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/SwarmStackInspect'
+ $ref: "#/components/schemas/SwarmStackInspect"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseStackRenderConfigResponse:
additionalProperties: false
@@ -1857,19 +2383,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseStackRenderConfigResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseStackRenderConfigResponse.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/SwarmStackRenderConfigResponse'
+ $ref: "#/components/schemas/SwarmStackRenderConfigResponse"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseStackSource:
additionalProperties: false
@@ -1877,19 +2403,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseStackSource.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseStackSource.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/SwarmStackSource'
+ $ref: "#/components/schemas/SwarmStackSource"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseStatus:
additionalProperties: false
@@ -1897,19 +2423,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseStatus.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseStatus.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/UpdaterStatus'
+ $ref: "#/components/schemas/UpdaterStatus"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseStatusCounts:
additionalProperties: false
@@ -1917,19 +2443,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseStatusCounts.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseStatusCounts.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/ProjectStatusCounts'
+ $ref: "#/components/schemas/ProjectStatusCounts"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseStruct {}:
additionalProperties: false
@@ -1937,20 +2463,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseStruct
- {}.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseStruct {}.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/ApiResponseStruct {}DataStruct'
+ $ref: "#/components/schemas/ApiResponseStruct {}DataStruct"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseSummary:
additionalProperties: false
@@ -1958,19 +2483,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSummary.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSummary.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/ImageupdateSummary'
+ $ref: "#/components/schemas/ImageupdateSummary"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseSwarmInfo:
additionalProperties: false
@@ -1978,19 +2503,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSwarmInfo.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSwarmInfo.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/SwarmSwarmInfo'
+ $ref: "#/components/schemas/SwarmSwarmInfo"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseSwarmInitResponse:
additionalProperties: false
@@ -1998,19 +2523,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSwarmInitResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSwarmInitResponse.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/SwarmSwarmInitResponse'
+ $ref: "#/components/schemas/SwarmSwarmInitResponse"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseSwarmJoinTokensResponse:
additionalProperties: false
@@ -2018,19 +2543,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSwarmJoinTokensResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSwarmJoinTokensResponse.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/SwarmSwarmJoinTokensResponse'
+ $ref: "#/components/schemas/SwarmSwarmJoinTokensResponse"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseSwarmNodeAgentDeployment:
additionalProperties: false
@@ -2038,19 +2563,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSwarmNodeAgentDeployment.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSwarmNodeAgentDeployment.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/SwarmNodeAgentDeployment'
+ $ref: "#/components/schemas/SwarmNodeAgentDeployment"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseSwarmNodeIdentity:
additionalProperties: false
@@ -2058,19 +2583,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSwarmNodeIdentity.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSwarmNodeIdentity.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/SwarmNodeIdentity'
+ $ref: "#/components/schemas/SwarmNodeIdentity"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseSwarmUnlockKeyResponse:
additionalProperties: false
@@ -2078,19 +2603,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSwarmUnlockKeyResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSwarmUnlockKeyResponse.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/SwarmSwarmUnlockKeyResponse'
+ $ref: "#/components/schemas/SwarmSwarmUnlockKeyResponse"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseSyncResult:
additionalProperties: false
@@ -2098,19 +2623,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSyncResult.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSyncResult.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/GitopsSyncResult'
+ $ref: "#/components/schemas/GitopsSyncResult"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseSyncStatus:
additionalProperties: false
@@ -2118,19 +2643,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSyncStatus.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseSyncStatus.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/GitopsSyncStatus'
+ $ref: "#/components/schemas/GitopsSyncStatus"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseTemplate:
additionalProperties: false
@@ -2138,19 +2663,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseTemplate.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseTemplate.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/TemplateTemplate'
+ $ref: "#/components/schemas/TemplateTemplate"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseTemplateContent:
additionalProperties: false
@@ -2158,19 +2683,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseTemplateContent.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseTemplateContent.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/TemplateTemplateContent'
+ $ref: "#/components/schemas/TemplateTemplateContent"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseTemplateRegistry:
additionalProperties: false
@@ -2178,19 +2703,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseTemplateRegistry.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseTemplateRegistry.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/TemplateTemplateRegistry'
+ $ref: "#/components/schemas/TemplateTemplateRegistry"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseTest:
additionalProperties: false
@@ -2198,19 +2723,39 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseTest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseTest.json
+ format: uri
+ readOnly: true
+ type: string
+ data:
+ $ref: "#/components/schemas/EnvironmentTest"
+ description: Response data
+ success:
+ description: Whether the request was successful
+ type: boolean
+ required:
+ - success
+ - data
+ type: object
+ BaseApiResponseTestResponse:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseTestResponse.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/EnvironmentTest'
+ $ref: "#/components/schemas/NotificationTestResponse"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseTokenRefreshResponse:
additionalProperties: false
@@ -2218,19 +2763,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseTokenRefreshResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseTokenRefreshResponse.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/AuthTokenRefreshResponse'
+ $ref: "#/components/schemas/AuthTokenRefreshResponse"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseUser:
additionalProperties: false
@@ -2238,19 +2783,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseUser.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseUser.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/UserUser'
+ $ref: "#/components/schemas/UserUser"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseVolume:
additionalProperties: false
@@ -2258,19 +2803,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseVolume.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseVolume.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/VolumeVolume'
+ $ref: "#/components/schemas/VolumeVolume"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseVolumeBackup:
additionalProperties: false
@@ -2278,19 +2823,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseVolumeBackup.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseVolumeBackup.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/VolumeBackup'
+ $ref: "#/components/schemas/VolumeBackup"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseVolumePruneReportData:
additionalProperties: false
@@ -2298,19 +2843,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseVolumePruneReportData.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseVolumePruneReportData.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/VolumePruneReportData'
+ $ref: "#/components/schemas/VolumePruneReportData"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseVolumeUsageCountsData:
additionalProperties: false
@@ -2318,19 +2863,19 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseVolumeUsageCountsData.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseVolumeUsageCountsData.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/VolumeUsageCountsData'
+ $ref: "#/components/schemas/VolumeUsageCountsData"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseApiResponseVolumeUsageResponse:
additionalProperties: false
@@ -2338,112 +2883,171 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseVolumeUsageResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseVolumeUsageResponse.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/VolumeUsageResponse'
+ $ref: "#/components/schemas/VolumeUsageResponse"
description: Response data
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
BaseMessageResponse:
additionalProperties: false
properties:
+ activityId:
+ description: Background activity ID tracking this action
+ type: string
message:
description: Response message
type: string
required:
- - message
+ - message
type: object
- BasePaginatedIgnoredVulnerability:
+ BasePaginatedActivity:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BasePaginatedIgnoredVulnerability.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BasePaginatedActivity.json
format: uri
readOnly: true
type: string
data:
description: Array of items for the current page
items:
- $ref: '#/components/schemas/VulnerabilityIgnoredVulnerability'
+ $ref: "#/components/schemas/ActivityActivity"
type:
- - array
- - 'null'
+ - array
+ - "null"
pagination:
- $ref: '#/components/schemas/BasePaginationResponse'
+ $ref: "#/components/schemas/BasePaginationResponse"
description: Pagination metadata
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
- - pagination
+ - success
+ - data
+ - pagination
type: object
- BasePaginatedVulnerability:
+ BasePaginatedFederatedCredential:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BasePaginatedVulnerability.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BasePaginatedFederatedCredential.json
format: uri
readOnly: true
type: string
data:
description: Array of items for the current page
items:
- $ref: '#/components/schemas/VulnerabilityVulnerability'
+ $ref: "#/components/schemas/FederatedFederatedCredential"
type:
- - array
- - 'null'
+ - array
+ - "null"
pagination:
- $ref: '#/components/schemas/BasePaginationResponse'
+ $ref: "#/components/schemas/BasePaginationResponse"
description: Pagination metadata
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
- - pagination
+ - success
+ - data
+ - pagination
type: object
- BasePaginatedVulnerabilityWithImage:
+ BasePaginatedIgnoredVulnerability:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BasePaginatedVulnerabilityWithImage.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BasePaginatedIgnoredVulnerability.json
format: uri
readOnly: true
type: string
data:
description: Array of items for the current page
items:
- $ref: '#/components/schemas/VulnerabilityVulnerabilityWithImage'
+ $ref: "#/components/schemas/VulnerabilityIgnoredVulnerability"
type:
- - array
- - 'null'
+ - array
+ - "null"
+ pagination:
+ $ref: "#/components/schemas/BasePaginationResponse"
+ description: Pagination metadata
+ success:
+ description: Whether the request was successful
+ type: boolean
+ required:
+ - success
+ - data
+ - pagination
+ type: object
+ BasePaginatedVulnerability:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BasePaginatedVulnerability.json
+ format: uri
+ readOnly: true
+ type: string
+ data:
+ description: Array of items for the current page
+ items:
+ $ref: "#/components/schemas/VulnerabilityVulnerability"
+ type:
+ - array
+ - "null"
+ pagination:
+ $ref: "#/components/schemas/BasePaginationResponse"
+ description: Pagination metadata
+ success:
+ description: Whether the request was successful
+ type: boolean
+ required:
+ - success
+ - data
+ - pagination
+ type: object
+ BasePaginatedVulnerabilityWithImage:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BasePaginatedVulnerabilityWithImage.json
+ format: uri
+ readOnly: true
+ type: string
+ data:
+ description: Array of items for the current page
+ items:
+ $ref: "#/components/schemas/VulnerabilityVulnerabilityWithImage"
+ type:
+ - array
+ - "null"
pagination:
- $ref: '#/components/schemas/BasePaginationResponse'
+ $ref: "#/components/schemas/BasePaginationResponse"
description: Pagination metadata
success:
description: Whether the request was successful
type: boolean
required:
- - success
- - data
- - pagination
+ - success
+ - data
+ - pagination
type: object
BasePaginationResponse:
additionalProperties: false
@@ -2469,48 +3073,48 @@ components:
format: int64
type: integer
required:
- - totalPages
- - totalItems
- - currentPage
- - itemsPerPage
+ - totalPages
+ - totalItems
+ - currentPage
+ - itemsPerPage
type: object
BlkioConfig:
additionalProperties: false
properties:
device_read_bps:
items:
- $ref: '#/components/schemas/DockerTypesThrottleDevice'
+ $ref: "#/components/schemas/DockerTypesThrottleDevice"
type:
- - array
- - 'null'
+ - array
+ - "null"
device_read_iops:
items:
- $ref: '#/components/schemas/DockerTypesThrottleDevice'
+ $ref: "#/components/schemas/DockerTypesThrottleDevice"
type:
- - array
- - 'null'
+ - array
+ - "null"
device_write_bps:
items:
- $ref: '#/components/schemas/DockerTypesThrottleDevice'
+ $ref: "#/components/schemas/DockerTypesThrottleDevice"
type:
- - array
- - 'null'
+ - array
+ - "null"
device_write_iops:
items:
- $ref: '#/components/schemas/DockerTypesThrottleDevice'
+ $ref: "#/components/schemas/DockerTypesThrottleDevice"
type:
- - array
- - 'null'
+ - array
+ - "null"
weight:
format: int32
minimum: 0
type: integer
weight_device:
items:
- $ref: '#/components/schemas/DockerTypesWeightDevice'
+ $ref: "#/components/schemas/DockerTypesWeightDevice"
type:
- - array
- - 'null'
+ - array
+ - "null"
type: object
BuildConfig:
additionalProperties: false
@@ -2522,21 +3126,21 @@ components:
args:
additionalProperties:
type:
- - string
- - 'null'
+ - string
+ - "null"
type: object
cache_from:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
cache_to:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
context:
type: string
dockerfile:
@@ -2547,15 +3151,15 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
extra_hosts:
additionalProperties:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
type: object
isolation:
type: string
@@ -2571,14 +3175,14 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
platforms:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
privileged:
type: boolean
provenance:
@@ -2589,30 +3193,30 @@ components:
type: string
secrets:
items:
- $ref: '#/components/schemas/DockerTypesServiceSecretConfig'
+ $ref: "#/components/schemas/DockerTypesServiceSecretConfig"
type:
- - array
- - 'null'
+ - array
+ - "null"
shm_size:
format: int64
type: integer
ssh:
items:
- $ref: '#/components/schemas/DockerTypesSSHKey'
+ $ref: "#/components/schemas/DockerTypesSSHKey"
type:
- - array
- - 'null'
+ - array
+ - "null"
tags:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
target:
type: string
ulimits:
additionalProperties:
- $ref: '#/components/schemas/UlimitsConfig'
+ $ref: "#/components/schemas/UlimitsConfig"
type: object
type: object
BuildFileContentResponse:
@@ -2624,8 +3228,8 @@ components:
mimeType:
type: string
required:
- - content
- - mimeType
+ - content
+ - mimeType
type: object
BuildProjectInputBody:
additionalProperties: false
@@ -2633,7 +3237,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/BuildProjectInputBody.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/BuildProjectInputBody.json
format: uri
readOnly: true
type: string
@@ -2651,8 +3255,8 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
type: object
CategoryCategory:
additionalProperties: false
@@ -2667,35 +3271,35 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
matchingSettings:
items:
- $ref: '#/components/schemas/MetaMetadata'
+ $ref: "#/components/schemas/MetaMetadata"
type:
- - array
- - 'null'
+ - array
+ - "null"
relevanceScore:
format: int64
type: integer
settings:
items:
- $ref: '#/components/schemas/MetaMetadata'
+ $ref: "#/components/schemas/MetaMetadata"
type:
- - array
- - 'null'
+ - array
+ - "null"
title:
type: string
url:
type: string
required:
- - id
- - title
- - description
- - icon
- - url
- - keywords
- - settings
+ - id
+ - title
+ - description
+ - icon
+ - url
+ - keywords
+ - settings
type: object
ContainerActionResponse:
additionalProperties: false
@@ -2703,49 +3307,92 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/ContainerActionResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/ContainerActionResponse.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/BaseMessageResponse'
+ $ref: "#/components/schemas/BaseMessageResponse"
success:
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
ContainerActionResult:
additionalProperties: false
properties:
+ activityId:
+ type: string
errors:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
failed:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
started:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
stopped:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
success:
type: boolean
required:
- - success
+ - success
+ type: object
+ ContainerCommitRequest:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/ContainerCommitRequest.json
+ format: uri
+ readOnly: true
+ type: string
+ author:
+ description: Commit author
+ type: string
+ changes:
+ description: Dockerfile changes to apply
+ items:
+ type: string
+ type:
+ - array
+ - "null"
+ comment:
+ description: Commit comment
+ type: string
+ noPause:
+ description: Do not pause the container during commit
+ type: boolean
+ repository:
+ description: Target image repository
+ type: string
+ tag:
+ description: Target image tag
+ type: string
+ type: object
+ ContainerCommitResult:
+ additionalProperties: false
+ properties:
+ id:
+ type: string
+ required:
+ - id
type: object
ContainerComposeInfo:
additionalProperties: false
@@ -2759,8 +3406,8 @@ components:
workingDir:
type: string
required:
- - projectName
- - serviceName
+ - projectName
+ - serviceName
type: object
ContainerConfig:
additionalProperties: false
@@ -2769,20 +3416,22 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
entrypoint:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
env:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
+ healthcheck:
+ $ref: "#/components/schemas/ContainerHealthcheck"
user:
type: string
workingDir:
@@ -2794,7 +3443,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/ContainerCreate.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/ContainerCreate.json
format: uri
readOnly: true
type: string
@@ -2810,49 +3459,49 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
command:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
cpus:
format: double
type: number
credentials:
items:
- $ref: '#/components/schemas/ContainerregistryCredential'
+ $ref: "#/components/schemas/ContainerregistryCredential"
type:
- - array
- - 'null'
+ - array
+ - "null"
domainname:
type: string
entrypoint:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
env:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
environment:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
exposedPorts:
additionalProperties:
- $ref: '#/components/schemas/Value'
+ $ref: "#/components/schemas/Value"
type: object
hostConfig:
- $ref: '#/components/schemas/ContainerHostConfigCreate'
+ $ref: "#/components/schemas/ContainerHostConfigCreate"
hostname:
type: string
image:
@@ -2869,13 +3518,13 @@ components:
networkDisabled:
type: boolean
networkingConfig:
- $ref: '#/components/schemas/ContainerNetworkingConfigCreate'
+ $ref: "#/components/schemas/ContainerNetworkingConfigCreate"
networks:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
openStdin:
type: boolean
ports:
@@ -2896,13 +3545,13 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
workingDir:
type: string
required:
- - name
- - image
+ - name
+ - image
type: object
ContainerCreated:
additionalProperties: false
@@ -2918,11 +3567,11 @@ components:
status:
type: string
required:
- - id
- - name
- - image
- - status
- - created
+ - id
+ - name
+ - image
+ - status
+ - created
type: object
ContainerCreatedResponse:
additionalProperties: false
@@ -2930,29 +3579,35 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/ContainerCreatedResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/ContainerCreatedResponse.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/ContainerCreated'
+ $ref: "#/components/schemas/ContainerCreated"
success:
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
ContainerDetails:
additionalProperties: false
properties:
+ activityId:
+ type: string
composeInfo:
- $ref: '#/components/schemas/ContainerComposeInfo'
+ $ref: "#/components/schemas/ContainerComposeInfo"
config:
- $ref: '#/components/schemas/ContainerConfig'
+ $ref: "#/components/schemas/ContainerConfig"
created:
type: string
hostConfig:
- $ref: '#/components/schemas/ContainerHostConfig'
+ $ref: "#/components/schemas/ContainerHostConfig"
+ iconDarkUrl:
+ type: string
+ iconLightUrl:
+ type: string
id:
type: string
image:
@@ -2965,34 +3620,36 @@ components:
type: object
mounts:
items:
- $ref: '#/components/schemas/ContainerMount'
+ $ref: "#/components/schemas/ContainerMount"
type:
- - array
- - 'null'
+ - array
+ - "null"
name:
type: string
networkSettings:
- $ref: '#/components/schemas/ContainerNetworkSettings'
+ $ref: "#/components/schemas/ContainerNetworkSettings"
ports:
items:
- $ref: '#/components/schemas/ContainerPort'
+ $ref: "#/components/schemas/ContainerPort"
type:
- - array
- - 'null'
+ - array
+ - "null"
+ redeployDisabled:
+ type: boolean
state:
- $ref: '#/components/schemas/ContainerState'
- required:
- - id
- - name
- - image
- - imageId
- - created
- - state
- - config
- - hostConfig
- - networkSettings
- - ports
- - mounts
+ $ref: "#/components/schemas/ContainerState"
+ required:
+ - id
+ - name
+ - image
+ - imageId
+ - created
+ - state
+ - config
+ - hostConfig
+ - networkSettings
+ - ports
+ - mounts
type: object
ContainerDetailsResponse:
additionalProperties: false
@@ -3000,17 +3657,17 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/ContainerDetailsResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/ContainerDetailsResponse.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/ContainerDetails'
+ $ref: "#/components/schemas/ContainerDetails"
success:
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
ContainerEndpointSettingsCreate:
additionalProperties: false
@@ -3019,8 +3676,66 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
+ type: object
+ ContainerHealth:
+ additionalProperties: false
+ properties:
+ failingStreak:
+ format: int64
+ type: integer
+ log:
+ items:
+ $ref: "#/components/schemas/ContainerHealthLogEntry"
+ type:
+ - array
+ - "null"
+ status:
+ type: string
+ required:
+ - status
+ - failingStreak
+ type: object
+ ContainerHealthLogEntry:
+ additionalProperties: false
+ properties:
+ end:
+ type: string
+ exitCode:
+ format: int64
+ type: integer
+ output:
+ type: string
+ start:
+ type: string
+ required:
+ - exitCode
+ type: object
+ ContainerHealthcheck:
+ additionalProperties: false
+ properties:
+ interval:
+ format: int64
+ type: integer
+ retries:
+ format: int64
+ type: integer
+ startInterval:
+ format: int64
+ type: integer
+ startPeriod:
+ format: int64
+ type: integer
+ test:
+ items:
+ type: string
+ type:
+ - array
+ - "null"
+ timeout:
+ format: int64
+ type: integer
type: object
ContainerHostConfig:
additionalProperties: false
@@ -3049,8 +3764,8 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
cpuShares:
format: int64
type: integer
@@ -3068,10 +3783,10 @@ components:
portBindings:
additionalProperties:
items:
- $ref: '#/components/schemas/ContainerPortBindingCreate'
+ $ref: "#/components/schemas/ContainerPortBindingCreate"
type:
- - array
- - 'null'
+ - array
+ - "null"
type: object
privileged:
type: boolean
@@ -3080,7 +3795,7 @@ components:
readonlyRootfs:
type: boolean
restartPolicy:
- $ref: '#/components/schemas/ContainerRestartPolicyCreate'
+ $ref: "#/components/schemas/ContainerRestartPolicyCreate"
type: object
ContainerMount:
additionalProperties: false
@@ -3102,8 +3817,8 @@ components:
type:
type: string
required:
- - type
- - destination
+ - type
+ - destination
type: object
ContainerNetworkEndpoint:
additionalProperties: false
@@ -3112,14 +3827,14 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
dnsNames:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
driverOpts:
additionalProperties:
type: string
@@ -3148,8 +3863,8 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
macAddress:
type: string
networkId:
@@ -3160,17 +3875,17 @@ components:
properties:
networks:
additionalProperties:
- $ref: '#/components/schemas/ContainerNetworkEndpoint'
+ $ref: "#/components/schemas/ContainerNetworkEndpoint"
type: object
required:
- - networks
+ - networks
type: object
ContainerNetworkingConfigCreate:
additionalProperties: false
properties:
endpointsConfig:
additionalProperties:
- $ref: '#/components/schemas/ContainerEndpointSettingsCreate'
+ $ref: "#/components/schemas/ContainerEndpointSettingsCreate"
type: object
type: object
ContainerPaginatedResponse:
@@ -3179,33 +3894,33 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/ContainerPaginatedResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/ContainerPaginatedResponse.json
format: uri
readOnly: true
type: string
counts:
- $ref: '#/components/schemas/ContainerStatusCounts'
+ $ref: "#/components/schemas/ContainerStatusCounts"
data:
items:
- $ref: '#/components/schemas/ContainerSummary'
+ $ref: "#/components/schemas/ContainerSummary"
type:
- - array
- - 'null'
+ - array
+ - "null"
groups:
items:
- $ref: '#/components/schemas/ContainerSummaryGroup'
+ $ref: "#/components/schemas/ContainerSummaryGroup"
type:
- - array
- - 'null'
+ - array
+ - "null"
pagination:
- $ref: '#/components/schemas/BasePaginationResponse'
+ $ref: "#/components/schemas/BasePaginationResponse"
success:
type: boolean
required:
- - success
- - data
- - counts
- - pagination
+ - success
+ - data
+ - counts
+ - pagination
type: object
ContainerPort:
additionalProperties: false
@@ -3221,8 +3936,8 @@ components:
type:
type: string
required:
- - privatePort
- - type
+ - privatePort
+ - type
type: object
ContainerPortBindingCreate:
additionalProperties: false
@@ -3238,24 +3953,24 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/ContainerRegistryPaginatedResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/ContainerRegistryPaginatedResponse.json
format: uri
readOnly: true
type: string
data:
items:
- $ref: '#/components/schemas/ContainerregistryContainerRegistry'
+ $ref: "#/components/schemas/ContainerregistryContainerRegistry"
type:
- - array
- - 'null'
+ - array
+ - "null"
pagination:
- $ref: '#/components/schemas/BasePaginationResponse'
+ $ref: "#/components/schemas/BasePaginationResponse"
success:
type: boolean
required:
- - success
- - data
- - pagination
+ - success
+ - data
+ - pagination
type: object
ContainerRestartPolicyCreate:
additionalProperties: false
@@ -3274,6 +3989,8 @@ components:
type: integer
finishedAt:
type: string
+ health:
+ $ref: "#/components/schemas/ContainerHealth"
running:
type: boolean
startedAt:
@@ -3281,8 +3998,8 @@ components:
status:
type: string
required:
- - status
- - running
+ - status
+ - running
type: object
ContainerStatusCounts:
additionalProperties: false
@@ -3297,9 +4014,9 @@ components:
format: int64
type: integer
required:
- - runningContainers
- - stoppedContainers
- - totalContainers
+ - runningContainers
+ - stoppedContainers
+ - totalContainers
type: object
ContainerStatusCountsResponse:
additionalProperties: false
@@ -3307,17 +4024,17 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/ContainerStatusCountsResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/ContainerStatusCountsResponse.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/ContainerStatusCounts'
+ $ref: "#/components/schemas/ContainerStatusCounts"
success:
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
ContainerSummary:
additionalProperties: false
@@ -3328,7 +4045,11 @@ components:
format: int64
type: integer
hostConfig:
- $ref: '#/components/schemas/ContainerHostConfig'
+ $ref: "#/components/schemas/ContainerHostConfig"
+ iconDarkUrl:
+ type: string
+ iconLightUrl:
+ type: string
id:
type: string
image:
@@ -3341,44 +4062,46 @@ components:
type: object
mounts:
items:
- $ref: '#/components/schemas/ContainerMount'
+ $ref: "#/components/schemas/ContainerMount"
type:
- - array
- - 'null'
+ - array
+ - "null"
names:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
networkSettings:
- $ref: '#/components/schemas/ContainerNetworkSettings'
+ $ref: "#/components/schemas/ContainerNetworkSettings"
ports:
items:
- $ref: '#/components/schemas/ContainerPort'
+ $ref: "#/components/schemas/ContainerPort"
type:
- - array
- - 'null'
+ - array
+ - "null"
+ redeployDisabled:
+ type: boolean
state:
type: string
status:
type: string
updateInfo:
- $ref: '#/components/schemas/ImageUpdateInfo'
- required:
- - id
- - names
- - image
- - imageId
- - command
- - created
- - ports
- - labels
- - state
- - status
- - hostConfig
- - networkSettings
- - mounts
+ $ref: "#/components/schemas/ImageUpdateInfo"
+ required:
+ - id
+ - names
+ - image
+ - imageId
+ - command
+ - created
+ - ports
+ - labels
+ - state
+ - status
+ - hostConfig
+ - networkSettings
+ - mounts
type: object
ContainerSummaryGroup:
additionalProperties: false
@@ -3387,13 +4110,13 @@ components:
type: string
items:
items:
- $ref: '#/components/schemas/ContainerSummary'
+ $ref: "#/components/schemas/ContainerSummary"
type:
- - array
- - 'null'
+ - array
+ - "null"
required:
- - groupName
- - items
+ - groupName
+ - items
type: object
ContainerregistryContainerRegistry:
additionalProperties: false
@@ -3423,14 +4146,14 @@ components:
username:
type: string
required:
- - id
- - url
- - username
- - insecure
- - enabled
- - registryType
- - createdAt
- - updatedAt
+ - id
+ - url
+ - username
+ - insecure
+ - enabled
+ - registryType
+ - createdAt
+ - updatedAt
type: object
ContainerregistryCredential:
additionalProperties: false
@@ -3444,10 +4167,70 @@ components:
username:
type: string
required:
- - url
- - username
- - token
- - enabled
+ - url
+ - username
+ - token
+ - enabled
+ type: object
+ ContainerregistryPullUsage:
+ additionalProperties: false
+ properties:
+ authMethod:
+ type: string
+ authUsername:
+ type: string
+ checkedAt:
+ format: date-time
+ type: string
+ displayName:
+ type: string
+ error:
+ type: string
+ limit:
+ format: int64
+ type: integer
+ observedPulls:
+ format: int64
+ type: integer
+ provider:
+ type: string
+ registry:
+ type: string
+ registryId:
+ type: string
+ remaining:
+ format: int64
+ type: integer
+ repository:
+ type: string
+ source:
+ type: string
+ used:
+ format: int64
+ type: integer
+ windowSeconds:
+ format: int64
+ type: integer
+ required:
+ - registryId
+ - provider
+ - registry
+ - displayName
+ - observedPulls
+ - authMethod
+ - checkedAt
+ type: object
+ ContainerregistryPullUsageResponse:
+ additionalProperties: false
+ properties:
+ registries:
+ items:
+ $ref: "#/components/schemas/ContainerregistryPullUsage"
+ type:
+ - array
+ - "null"
+ required:
+ - registries
type: object
ContainerregistrySync:
additionalProperties: false
@@ -3481,15 +4264,15 @@ components:
username:
type: string
required:
- - id
- - url
- - username
- - token
- - insecure
- - enabled
- - registryType
- - createdAt
- - updatedAt
+ - id
+ - url
+ - username
+ - token
+ - insecure
+ - enabled
+ - registryType
+ - createdAt
+ - updatedAt
type: object
ContainerregistrySyncRequest:
additionalProperties: false
@@ -3497,18 +4280,18 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/ContainerregistrySyncRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/ContainerregistrySyncRequest.json
format: uri
readOnly: true
type: string
registries:
items:
- $ref: '#/components/schemas/ContainerregistrySync'
+ $ref: "#/components/schemas/ContainerregistrySync"
type:
- - array
- - 'null'
+ - array
+ - "null"
required:
- - registries
+ - registries
type: object
CreateContainerRegistryRequest:
additionalProperties: false
@@ -3516,7 +4299,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/CreateContainerRegistryRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/CreateContainerRegistryRequest.json
format: uri
readOnly: true
type: string
@@ -3528,16 +4311,16 @@ components:
type: string
description:
type:
- - string
- - 'null'
+ - string
+ - "null"
enabled:
type:
- - boolean
- - 'null'
+ - boolean
+ - "null"
insecure:
type:
- - boolean
- - 'null'
+ - boolean
+ - "null"
registryType:
type: string
token:
@@ -3547,16 +4330,16 @@ components:
username:
type: string
required:
- - url
- - username
- - token
- - description
- - insecure
- - enabled
- - registryType
- - awsAccessKeyId
- - awsSecretAccessKey
- - awsRegion
+ - url
+ - username
+ - token
+ - description
+ - insecure
+ - enabled
+ - registryType
+ - awsAccessKeyId
+ - awsSecretAccessKey
+ - awsRegion
type: object
CreateGitRepositoryRequest:
additionalProperties: false
@@ -3564,7 +4347,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/CreateGitRepositoryRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/CreateGitRepositoryRequest.json
format: uri
readOnly: true
type: string
@@ -3587,9 +4370,27 @@ components:
username:
type: string
required:
- - name
- - url
- - authType
+ - name
+ - url
+ - authType
+ type: object
+ CreateOidcRoleMappingOutputBody:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/CreateOidcRoleMappingOutputBody.json
+ format: uri
+ readOnly: true
+ type: string
+ data:
+ $ref: "#/components/schemas/RoleOidcRoleMapping"
+ success:
+ type: boolean
+ required:
+ - success
+ - data
type: object
CredentialSpecConfig:
additionalProperties: false
@@ -3612,82 +4413,97 @@ components:
severity:
type: string
required:
- - kind
- - count
- - severity
+ - kind
+ - count
+ - severity
type: object
DashboardActionItems:
additionalProperties: false
properties:
items:
items:
- $ref: '#/components/schemas/DashboardActionItem'
+ $ref: "#/components/schemas/DashboardActionItem"
type:
- - array
- - 'null'
+ - array
+ - "null"
required:
- - items
+ - items
type: object
DashboardSnapshot:
additionalProperties: false
properties:
actionItems:
- $ref: '#/components/schemas/DashboardActionItems'
+ $ref: "#/components/schemas/DashboardActionItems"
containers:
- $ref: '#/components/schemas/DashboardSnapshotContainers'
+ $ref: "#/components/schemas/DashboardSnapshotContainers"
imageUsageCounts:
- $ref: '#/components/schemas/ImageUsageCounts'
+ $ref: "#/components/schemas/ImageUsageCounts"
images:
- $ref: '#/components/schemas/DashboardSnapshotImages'
+ $ref: "#/components/schemas/DashboardSnapshotImages"
settings:
- $ref: '#/components/schemas/DashboardSnapshotSettings'
+ $ref: "#/components/schemas/DashboardSnapshotSettings"
+ versionInfo:
+ $ref: "#/components/schemas/VersionInfo"
required:
- - containers
- - images
- - imageUsageCounts
- - actionItems
- - settings
+ - containers
+ - images
+ - imageUsageCounts
+ - actionItems
+ - settings
type: object
DashboardSnapshotContainers:
additionalProperties: false
properties:
counts:
- $ref: '#/components/schemas/ContainerStatusCounts'
+ $ref: "#/components/schemas/ContainerStatusCounts"
data:
items:
- $ref: '#/components/schemas/ContainerSummary'
+ $ref: "#/components/schemas/ContainerSummary"
type:
- - array
- - 'null'
+ - array
+ - "null"
pagination:
- $ref: '#/components/schemas/BasePaginationResponse'
+ $ref: "#/components/schemas/BasePaginationResponse"
required:
- - data
- - counts
- - pagination
+ - data
+ - counts
+ - pagination
type: object
DashboardSnapshotImages:
additionalProperties: false
properties:
data:
items:
- $ref: '#/components/schemas/ImageSummary'
+ $ref: "#/components/schemas/ImageSummary"
type:
- - array
- - 'null'
+ - array
+ - "null"
pagination:
- $ref: '#/components/schemas/BasePaginationResponse'
+ $ref: "#/components/schemas/BasePaginationResponse"
required:
- - data
- - pagination
+ - data
+ - pagination
type: object
DashboardSnapshotSettings:
+ additionalProperties: false
+ type: object
+ DeleteOidcRoleMappingOutputBody:
additionalProperties: false
properties:
- dockerPruneMode:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/DeleteOidcRoleMappingOutputBody.json
+ format: uri
+ readOnly: true
+ type: string
+ message:
type: string
+ success:
+ type: boolean
required:
- - dockerPruneMode
+ - success
+ - message
type: object
DeployConfig:
additionalProperties: false
@@ -3701,18 +4517,18 @@ components:
mode:
type: string
placement:
- $ref: '#/components/schemas/DockerTypesPlacement'
+ $ref: "#/components/schemas/DockerTypesPlacement"
replicas:
format: int64
type: integer
resources:
- $ref: '#/components/schemas/DockerTypesResources'
+ $ref: "#/components/schemas/DockerTypesResources"
restart_policy:
- $ref: '#/components/schemas/RestartPolicy'
+ $ref: "#/components/schemas/RestartPolicy"
rollback_config:
- $ref: '#/components/schemas/UpdateConfig'
+ $ref: "#/components/schemas/UpdateConfig"
update_config:
- $ref: '#/components/schemas/UpdateConfig'
+ $ref: "#/components/schemas/UpdateConfig"
type: object
DeploymentSnippet:
additionalProperties: false
@@ -3723,34 +4539,88 @@ components:
dockerRun:
description: Docker run command snippet
type: string
+ mtls:
+ $ref: "#/components/schemas/DeploymentSnippetMTLS"
+ description: Optional Arcane-generated mTLS deployment assets for edge agents
required:
- - dockerRun
- - dockerCompose
+ - dockerRun
+ - dockerCompose
type: object
- DetailSummaryConfigStruct:
+ DeploymentSnippetFile:
additionalProperties: false
properties:
- argsEscaped:
+ containerPath:
+ description: Container mount path expected by the mTLS snippet
+ type: string
+ content:
+ description: PEM file contents. Omitted for sensitive files such as private keys; use downloadUrl instead.
+ type: string
+ downloadUrl:
+ description: Pairing-permission endpoint to download this file when content is withheld
+ type: string
+ name:
+ description: Suggested filename
+ type: string
+ permissions:
+ description: Suggested file mode
+ type: string
+ sensitive:
+ description: True when this file is sensitive and must be fetched via downloadUrl
+ type: boolean
+ required:
+ - name
+ - containerPath
+ - permissions
+ type: object
+ DeploymentSnippetMTLS:
+ additionalProperties: false
+ properties:
+ dockerCompose:
+ description: Docker compose snippet using Arcane-generated mTLS assets
+ type: string
+ dockerRun:
+ description: Docker run snippet using Arcane-generated mTLS assets
+ type: string
+ files:
+ description: Generated PEM files to place on the edge host
+ items:
+ $ref: "#/components/schemas/DeploymentSnippetFile"
+ type:
+ - array
+ - "null"
+ hostDirHint:
+ description: Suggested host directory containing the generated PEM files
+ type: string
+ required:
+ - dockerRun
+ - dockerCompose
+ - files
+ - hostDirHint
+ type: object
+ DetailSummaryConfigStruct:
+ additionalProperties: false
+ properties:
+ argsEscaped:
type: boolean
cmd:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
env:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
exposedPorts:
additionalProperties:
- $ref: '#/components/schemas/Value'
+ $ref: "#/components/schemas/Value"
type: object
volumes:
additionalProperties:
- $ref: '#/components/schemas/Value'
+ $ref: "#/components/schemas/Value"
type: object
workingDir:
type: string
@@ -3766,9 +4636,9 @@ components:
format: int64
type: integer
required:
- - mediaType
- - digest
- - size
+ - mediaType
+ - digest
+ - size
type: object
DetailSummaryGraphDriverStruct:
additionalProperties: false
@@ -3777,8 +4647,8 @@ components:
name:
type: string
required:
- - data
- - name
+ - data
+ - name
type: object
DetailSummaryMetadataStruct:
additionalProperties: false
@@ -3786,7 +4656,7 @@ components:
lastTagTime:
type: string
required:
- - lastTagTime
+ - lastTagTime
type: object
DetailSummaryRootFsStruct:
additionalProperties: false
@@ -3795,23 +4665,23 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
type:
type: string
required:
- - type
- - layers
+ - type
+ - layers
type: object
DevelopConfig:
additionalProperties: false
properties:
watch:
items:
- $ref: '#/components/schemas/DockerTypesTrigger'
+ $ref: "#/components/schemas/DockerTypesTrigger"
type:
- - array
- - 'null'
+ - array
+ - "null"
type: object
DiscreteGenericResource:
additionalProperties: false
@@ -3822,8 +4692,8 @@ components:
format: int64
type: integer
required:
- - kind
- - value
+ - kind
+ - value
type: object
DockerMountBindOptions:
additionalProperties: false
@@ -3862,13 +4732,13 @@ components:
additionalProperties: false
properties:
BindOptions:
- $ref: '#/components/schemas/DockerMountBindOptions'
+ $ref: "#/components/schemas/DockerMountBindOptions"
ClusterOptions:
- $ref: '#/components/schemas/DockerMountClusterOptions'
+ $ref: "#/components/schemas/DockerMountClusterOptions"
Consistency:
type: string
ImageOptions:
- $ref: '#/components/schemas/DockerMountImageOptions'
+ $ref: "#/components/schemas/DockerMountImageOptions"
ReadOnly:
type: boolean
Source:
@@ -3876,11 +4746,11 @@ components:
Target:
type: string
TmpfsOptions:
- $ref: '#/components/schemas/DockerMountTmpfsOptions'
+ $ref: "#/components/schemas/DockerMountTmpfsOptions"
Type:
type: string
VolumeOptions:
- $ref: '#/components/schemas/DockerMountVolumeOptions'
+ $ref: "#/components/schemas/DockerMountVolumeOptions"
type: object
DockerMountTmpfsOptions:
additionalProperties: false
@@ -3894,11 +4764,11 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
type:
- - array
- - 'null'
+ - array
+ - "null"
SizeBytes:
format: int64
type: integer
@@ -3907,7 +4777,7 @@ components:
additionalProperties: false
properties:
DriverConfig:
- $ref: '#/components/schemas/DockerMountDriver'
+ $ref: "#/components/schemas/DockerMountDriver"
Labels:
additionalProperties:
type: string
@@ -3923,7 +4793,7 @@ components:
Network:
type: string
required:
- - Network
+ - Network
type: object
DockerNetworkEndpointResource:
additionalProperties: false
@@ -3939,11 +4809,11 @@ components:
Name:
type: string
required:
- - Name
- - EndpointID
- - MacAddress
- - IPv4Address
- - IPv6Address
+ - Name
+ - EndpointID
+ - MacAddress
+ - IPv4Address
+ - IPv6Address
type: object
DockerNetworkPeerInfo:
additionalProperties: false
@@ -3954,8 +4824,8 @@ components:
Name:
type: string
required:
- - Name
- - IP
+ - Name
+ - IP
type: object
DockerNetworkServiceInfo:
additionalProperties: false
@@ -3967,22 +4837,22 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
Tasks:
items:
- $ref: '#/components/schemas/DockerNetworkTask'
+ $ref: "#/components/schemas/DockerNetworkTask"
type:
- - array
- - 'null'
+ - array
+ - "null"
VIP:
format: ip
type: string
required:
- - VIP
- - Ports
- - LocalLBIndex
- - Tasks
+ - VIP
+ - Ports
+ - LocalLBIndex
+ - Tasks
type: object
DockerNetworkTask:
additionalProperties: false
@@ -3999,10 +4869,10 @@ components:
Name:
type: string
required:
- - Name
- - EndpointID
- - EndpointIP
- - Info
+ - Name
+ - EndpointID
+ - EndpointIP
+ - Info
type: object
DockerRegistryIndexInfo:
additionalProperties: false
@@ -4011,8 +4881,8 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
Name:
type: string
Official:
@@ -4020,34 +4890,34 @@ components:
Secure:
type: boolean
required:
- - Name
- - Mirrors
- - Secure
- - Official
+ - Name
+ - Mirrors
+ - Secure
+ - Official
type: object
DockerRegistryServiceConfig:
additionalProperties: false
properties:
IndexConfigs:
additionalProperties:
- $ref: '#/components/schemas/DockerRegistryIndexInfo'
+ $ref: "#/components/schemas/DockerRegistryIndexInfo"
type: object
InsecureRegistryCIDRs:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
Mirrors:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
required:
- - InsecureRegistryCIDRs
- - IndexConfigs
- - Mirrors
+ - InsecureRegistryCIDRs
+ - IndexConfigs
+ - Mirrors
type: object
DockerSwarmAppArmorOpts:
additionalProperties: false
@@ -4060,10 +4930,10 @@ components:
properties:
ExternalCAs:
items:
- $ref: '#/components/schemas/DockerSwarmExternalCA'
+ $ref: "#/components/schemas/DockerSwarmExternalCA"
type:
- - array
- - 'null'
+ - array
+ - "null"
ForceRotate:
format: int64
minimum: 0
@@ -4090,33 +4960,33 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
ID:
type: string
RootRotationInProgress:
type: boolean
Spec:
- $ref: '#/components/schemas/DockerSwarmSpec'
+ $ref: "#/components/schemas/DockerSwarmSpec"
SubnetSize:
format: int32
minimum: 0
type: integer
TLSInfo:
- $ref: '#/components/schemas/DockerSwarmTLSInfo'
+ $ref: "#/components/schemas/DockerSwarmTLSInfo"
UpdatedAt:
format: date-time
type: string
Version:
- $ref: '#/components/schemas/DockerSwarmVersion'
+ $ref: "#/components/schemas/DockerSwarmVersion"
required:
- - ID
- - Spec
- - TLSInfo
- - RootRotationInProgress
- - DefaultAddrPool
- - SubnetSize
- - DataPathPort
+ - ID
+ - Spec
+ - TLSInfo
+ - RootRotationInProgress
+ - DefaultAddrPool
+ - SubnetSize
+ - DataPathPort
type: object
DockerSwarmConfigReference:
additionalProperties: false
@@ -4126,12 +4996,12 @@ components:
ConfigName:
type: string
File:
- $ref: '#/components/schemas/DockerSwarmConfigReferenceFileTarget'
+ $ref: "#/components/schemas/DockerSwarmConfigReferenceFileTarget"
Runtime:
- $ref: '#/components/schemas/DockerSwarmConfigReferenceRuntimeTarget'
+ $ref: "#/components/schemas/DockerSwarmConfigReferenceRuntimeTarget"
required:
- - ConfigID
- - ConfigName
+ - ConfigID
+ - ConfigName
type: object
DockerSwarmConfigReferenceFileTarget:
additionalProperties: false
@@ -4147,10 +5017,10 @@ components:
UID:
type: string
required:
- - Name
- - UID
- - GID
- - Mode
+ - Name
+ - UID
+ - GID
+ - Mode
type: object
DockerSwarmConfigReferenceRuntimeTarget:
additionalProperties: false
@@ -4168,9 +5038,9 @@ components:
Name:
type: string
Templating:
- $ref: '#/components/schemas/DockerSwarmDriver'
+ $ref: "#/components/schemas/DockerSwarmDriver"
required:
- - Labels
+ - Labels
type: object
DockerSwarmContainerSpec:
additionalProperties: false
@@ -4179,58 +5049,58 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
CapabilityAdd:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
CapabilityDrop:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
Command:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
Configs:
items:
- $ref: '#/components/schemas/DockerSwarmConfigReference'
+ $ref: "#/components/schemas/DockerSwarmConfigReference"
type:
- - array
- - 'null'
+ - array
+ - "null"
DNSConfig:
- $ref: '#/components/schemas/DockerSwarmDNSConfig'
+ $ref: "#/components/schemas/DockerSwarmDNSConfig"
Dir:
type: string
Env:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
Groups:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
Healthcheck:
- $ref: '#/components/schemas/HealthcheckConfig'
+ $ref: "#/components/schemas/HealthcheckConfig"
Hostname:
type: string
Hosts:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
Image:
type: string
Init:
@@ -4243,25 +5113,25 @@ components:
type: object
Mounts:
items:
- $ref: '#/components/schemas/DockerMountMount'
+ $ref: "#/components/schemas/DockerMountMount"
type:
- - array
- - 'null'
+ - array
+ - "null"
OomScoreAdj:
format: int64
type: integer
OpenStdin:
type: boolean
Privileges:
- $ref: '#/components/schemas/DockerSwarmPrivileges'
+ $ref: "#/components/schemas/DockerSwarmPrivileges"
ReadOnly:
type: boolean
Secrets:
items:
- $ref: '#/components/schemas/DockerSwarmSecretReference'
+ $ref: "#/components/schemas/DockerSwarmSecretReference"
type:
- - array
- - 'null'
+ - array
+ - "null"
StopGracePeriod:
format: int64
type: integer
@@ -4275,10 +5145,10 @@ components:
type: boolean
Ulimits:
items:
- $ref: '#/components/schemas/Ulimit'
+ $ref: "#/components/schemas/Ulimit"
type:
- - array
- - 'null'
+ - array
+ - "null"
User:
type: string
type: object
@@ -4292,9 +5162,9 @@ components:
Registry:
type: string
required:
- - Config
- - File
- - Registry
+ - Config
+ - File
+ - Registry
type: object
DockerSwarmDNSConfig:
additionalProperties: false
@@ -4304,20 +5174,20 @@ components:
format: ip
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
Options:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
Search:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
type: object
DockerSwarmDiscreteGenericResource:
additionalProperties: false
@@ -4351,25 +5221,25 @@ components:
AutoLockManagers:
type: boolean
required:
- - AutoLockManagers
+ - AutoLockManagers
type: object
DockerSwarmEndpoint:
additionalProperties: false
properties:
Ports:
items:
- $ref: '#/components/schemas/DockerSwarmPortConfig'
+ $ref: "#/components/schemas/DockerSwarmPortConfig"
type:
- - array
- - 'null'
+ - array
+ - "null"
Spec:
- $ref: '#/components/schemas/DockerSwarmEndpointSpec'
+ $ref: "#/components/schemas/DockerSwarmEndpointSpec"
VirtualIPs:
items:
- $ref: '#/components/schemas/DockerSwarmEndpointVirtualIP'
+ $ref: "#/components/schemas/DockerSwarmEndpointVirtualIP"
type:
- - array
- - 'null'
+ - array
+ - "null"
type: object
DockerSwarmEndpointSpec:
additionalProperties: false
@@ -4378,10 +5248,10 @@ components:
type: string
Ports:
items:
- $ref: '#/components/schemas/DockerSwarmPortConfig'
+ $ref: "#/components/schemas/DockerSwarmPortConfig"
type:
- - array
- - 'null'
+ - array
+ - "null"
type: object
DockerSwarmEndpointVirtualIP:
additionalProperties: false
@@ -4405,17 +5275,17 @@ components:
URL:
type: string
required:
- - Protocol
- - URL
- - CACert
+ - Protocol
+ - URL
+ - CACert
type: object
DockerSwarmGenericResource:
additionalProperties: false
properties:
DiscreteResourceSpec:
- $ref: '#/components/schemas/DockerSwarmDiscreteGenericResource'
+ $ref: "#/components/schemas/DockerSwarmDiscreteGenericResource"
NamedResourceSpec:
- $ref: '#/components/schemas/DockerSwarmNamedGenericResource'
+ $ref: "#/components/schemas/DockerSwarmNamedGenericResource"
type: object
DockerSwarmGlobalJob:
additionalProperties: false
@@ -4427,7 +5297,7 @@ components:
additionalProperties: false
properties:
Cluster:
- $ref: '#/components/schemas/DockerSwarmClusterInfo'
+ $ref: "#/components/schemas/DockerSwarmClusterInfo"
ControlAvailable:
type: boolean
Error:
@@ -4446,23 +5316,23 @@ components:
type: integer
RemoteManagers:
items:
- $ref: '#/components/schemas/DockerSwarmPeer'
+ $ref: "#/components/schemas/DockerSwarmPeer"
type:
- - array
- - 'null'
+ - array
+ - "null"
Warnings:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
required:
- - NodeID
- - NodeAddr
- - LocalNodeState
- - ControlAvailable
- - Error
- - RemoteManagers
+ - NodeID
+ - NodeAddr
+ - LocalNodeState
+ - ControlAvailable
+ - Error
+ - RemoteManagers
type: object
DockerSwarmLimit:
additionalProperties: false
@@ -4492,8 +5362,8 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
DriverOpts:
additionalProperties:
type: string
@@ -4507,7 +5377,7 @@ components:
ContainerID:
type: string
required:
- - ContainerID
+ - ContainerID
type: object
DockerSwarmOrchestrationConfig:
additionalProperties: false
@@ -4524,8 +5394,8 @@ components:
NodeID:
type: string
required:
- - NodeID
- - Addr
+ - NodeID
+ - Addr
type: object
DockerSwarmPlacement:
additionalProperties: false
@@ -4534,32 +5404,32 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
MaxReplicas:
format: int64
minimum: 0
type: integer
Platforms:
items:
- $ref: '#/components/schemas/DockerSwarmPlatform'
+ $ref: "#/components/schemas/DockerSwarmPlatform"
type:
- - array
- - 'null'
+ - array
+ - "null"
Preferences:
items:
- $ref: '#/components/schemas/DockerSwarmPlacementPreference'
+ $ref: "#/components/schemas/DockerSwarmPlacementPreference"
type:
- - array
- - 'null'
+ - array
+ - "null"
type: object
DockerSwarmPlacementPreference:
additionalProperties: false
properties:
Spread:
- $ref: '#/components/schemas/DockerSwarmSpreadOver'
+ $ref: "#/components/schemas/DockerSwarmSpreadOver"
required:
- - Spread
+ - Spread
type: object
DockerSwarmPlatform:
additionalProperties: false
@@ -4591,19 +5461,19 @@ components:
additionalProperties: false
properties:
AppArmor:
- $ref: '#/components/schemas/DockerSwarmAppArmorOpts'
+ $ref: "#/components/schemas/DockerSwarmAppArmorOpts"
CredentialSpec:
- $ref: '#/components/schemas/DockerSwarmCredentialSpec'
+ $ref: "#/components/schemas/DockerSwarmCredentialSpec"
NoNewPrivileges:
type: boolean
SELinuxContext:
- $ref: '#/components/schemas/DockerSwarmSELinuxContext'
+ $ref: "#/components/schemas/DockerSwarmSELinuxContext"
Seccomp:
- $ref: '#/components/schemas/DockerSwarmSeccompOpts'
+ $ref: "#/components/schemas/DockerSwarmSeccompOpts"
required:
- - CredentialSpec
- - SELinuxContext
- - NoNewPrivileges
+ - CredentialSpec
+ - SELinuxContext
+ - NoNewPrivileges
type: object
DockerSwarmRaftConfig:
additionalProperties: false
@@ -4627,8 +5497,8 @@ components:
minimum: 0
type: integer
required:
- - ElectionTick
- - HeartbeatTick
+ - ElectionTick
+ - HeartbeatTick
type: object
DockerSwarmReplicatedJob:
additionalProperties: false
@@ -4654,29 +5524,29 @@ components:
additionalProperties: false
properties:
Limits:
- $ref: '#/components/schemas/DockerSwarmLimit'
+ $ref: "#/components/schemas/DockerSwarmLimit"
MemorySwappiness:
format: int64
type:
- - integer
- - 'null'
+ - integer
+ - "null"
Reservations:
- $ref: '#/components/schemas/DockerSwarmResources'
+ $ref: "#/components/schemas/DockerSwarmResources"
SwapBytes:
format: int64
type:
- - integer
- - 'null'
+ - integer
+ - "null"
type: object
DockerSwarmResources:
additionalProperties: false
properties:
GenericResources:
items:
- $ref: '#/components/schemas/DockerSwarmGenericResource'
+ $ref: "#/components/schemas/DockerSwarmGenericResource"
type:
- - array
- - 'null'
+ - array
+ - "null"
MemoryBytes:
format: int64
type: integer
@@ -4711,8 +5581,8 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
type: object
DockerSwarmRuntimeSpec:
additionalProperties: false
@@ -4723,16 +5593,16 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
name:
type: string
privileges:
items:
- $ref: '#/components/schemas/DockerSwarmRuntimePrivilege'
+ $ref: "#/components/schemas/DockerSwarmRuntimePrivilege"
type:
- - array
- - 'null'
+ - array
+ - "null"
remote:
type: string
type: object
@@ -4750,11 +5620,11 @@ components:
User:
type: string
required:
- - Disable
- - User
- - Role
- - Type
- - Level
+ - Disable
+ - User
+ - Role
+ - Type
+ - Level
type: object
DockerSwarmSeccompOpts:
additionalProperties: false
@@ -4769,15 +5639,15 @@ components:
additionalProperties: false
properties:
File:
- $ref: '#/components/schemas/DockerSwarmSecretReferenceFileTarget'
+ $ref: "#/components/schemas/DockerSwarmSecretReferenceFileTarget"
SecretID:
type: string
SecretName:
type: string
required:
- - File
- - SecretID
- - SecretName
+ - File
+ - SecretID
+ - SecretName
type: object
DockerSwarmSecretReferenceFileTarget:
additionalProperties: false
@@ -4793,10 +5663,10 @@ components:
UID:
type: string
required:
- - Name
- - UID
- - GID
- - Mode
+ - Name
+ - UID
+ - GID
+ - Mode
type: object
DockerSwarmSecretSpec:
additionalProperties: false
@@ -4805,7 +5675,7 @@ components:
contentEncoding: base64
type: string
Driver:
- $ref: '#/components/schemas/DockerSwarmDriver'
+ $ref: "#/components/schemas/DockerSwarmDriver"
Labels:
additionalProperties:
type: string
@@ -4813,53 +5683,53 @@ components:
Name:
type: string
Templating:
- $ref: '#/components/schemas/DockerSwarmDriver'
+ $ref: "#/components/schemas/DockerSwarmDriver"
required:
- - Labels
+ - Labels
type: object
DockerSwarmServiceMode:
additionalProperties: false
properties:
Global:
- $ref: '#/components/schemas/DockerSwarmGlobalService'
+ $ref: "#/components/schemas/DockerSwarmGlobalService"
GlobalJob:
- $ref: '#/components/schemas/DockerSwarmGlobalJob'
+ $ref: "#/components/schemas/DockerSwarmGlobalJob"
Replicated:
- $ref: '#/components/schemas/DockerSwarmReplicatedService'
+ $ref: "#/components/schemas/DockerSwarmReplicatedService"
ReplicatedJob:
- $ref: '#/components/schemas/DockerSwarmReplicatedJob'
+ $ref: "#/components/schemas/DockerSwarmReplicatedJob"
type: object
DockerSwarmServiceSpec:
additionalProperties: false
properties:
EndpointSpec:
- $ref: '#/components/schemas/DockerSwarmEndpointSpec'
+ $ref: "#/components/schemas/DockerSwarmEndpointSpec"
Labels:
additionalProperties:
type: string
type: object
Mode:
- $ref: '#/components/schemas/DockerSwarmServiceMode'
+ $ref: "#/components/schemas/DockerSwarmServiceMode"
Name:
type: string
RollbackConfig:
- $ref: '#/components/schemas/DockerSwarmUpdateConfig'
+ $ref: "#/components/schemas/DockerSwarmUpdateConfig"
TaskTemplate:
- $ref: '#/components/schemas/DockerSwarmTaskSpec'
+ $ref: "#/components/schemas/DockerSwarmTaskSpec"
UpdateConfig:
- $ref: '#/components/schemas/DockerSwarmUpdateConfig'
+ $ref: "#/components/schemas/DockerSwarmUpdateConfig"
required:
- - Labels
+ - Labels
type: object
DockerSwarmSpec:
additionalProperties: false
properties:
CAConfig:
- $ref: '#/components/schemas/DockerSwarmCAConfig'
+ $ref: "#/components/schemas/DockerSwarmCAConfig"
Dispatcher:
- $ref: '#/components/schemas/DockerSwarmDispatcherConfig'
+ $ref: "#/components/schemas/DockerSwarmDispatcherConfig"
EncryptionConfig:
- $ref: '#/components/schemas/DockerSwarmEncryptionConfig'
+ $ref: "#/components/schemas/DockerSwarmEncryptionConfig"
Labels:
additionalProperties:
type: string
@@ -4867,13 +5737,13 @@ components:
Name:
type: string
Orchestration:
- $ref: '#/components/schemas/DockerSwarmOrchestrationConfig'
+ $ref: "#/components/schemas/DockerSwarmOrchestrationConfig"
Raft:
- $ref: '#/components/schemas/DockerSwarmRaftConfig'
+ $ref: "#/components/schemas/DockerSwarmRaftConfig"
TaskDefaults:
- $ref: '#/components/schemas/DockerSwarmTaskDefaults'
+ $ref: "#/components/schemas/DockerSwarmTaskDefaults"
required:
- - Labels
+ - Labels
type: object
DockerSwarmSpreadOver:
additionalProperties: false
@@ -4881,7 +5751,7 @@ components:
SpreadDescriptor:
type: string
required:
- - SpreadDescriptor
+ - SpreadDescriptor
type: object
DockerSwarmTLSInfo:
additionalProperties: false
@@ -4899,39 +5769,39 @@ components:
additionalProperties: false
properties:
LogDriver:
- $ref: '#/components/schemas/DockerSwarmDriver'
+ $ref: "#/components/schemas/DockerSwarmDriver"
type: object
DockerSwarmTaskSpec:
additionalProperties: false
properties:
ContainerSpec:
- $ref: '#/components/schemas/DockerSwarmContainerSpec'
+ $ref: "#/components/schemas/DockerSwarmContainerSpec"
ForceUpdate:
format: int64
minimum: 0
type: integer
LogDriver:
- $ref: '#/components/schemas/DockerSwarmDriver'
+ $ref: "#/components/schemas/DockerSwarmDriver"
NetworkAttachmentSpec:
- $ref: '#/components/schemas/DockerSwarmNetworkAttachmentSpec'
+ $ref: "#/components/schemas/DockerSwarmNetworkAttachmentSpec"
Networks:
items:
- $ref: '#/components/schemas/DockerSwarmNetworkAttachmentConfig'
+ $ref: "#/components/schemas/DockerSwarmNetworkAttachmentConfig"
type:
- - array
- - 'null'
+ - array
+ - "null"
Placement:
- $ref: '#/components/schemas/DockerSwarmPlacement'
+ $ref: "#/components/schemas/DockerSwarmPlacement"
PluginSpec:
- $ref: '#/components/schemas/DockerSwarmRuntimeSpec'
+ $ref: "#/components/schemas/DockerSwarmRuntimeSpec"
Resources:
- $ref: '#/components/schemas/DockerSwarmResourceRequirements'
+ $ref: "#/components/schemas/DockerSwarmResourceRequirements"
RestartPolicy:
- $ref: '#/components/schemas/DockerSwarmRestartPolicy'
+ $ref: "#/components/schemas/DockerSwarmRestartPolicy"
Runtime:
type: string
required:
- - ForceUpdate
+ - ForceUpdate
type: object
DockerSwarmUpdateConfig:
additionalProperties: false
@@ -4954,9 +5824,9 @@ components:
minimum: 0
type: integer
required:
- - Parallelism
- - MaxFailureRatio
- - Order
+ - Parallelism
+ - MaxFailureRatio
+ - Order
type: object
DockerSwarmUpdateStatus:
additionalProperties: false
@@ -4986,7 +5856,7 @@ components:
ID:
type: string
required:
- - ID
+ - ID
type: object
DockerSystemContainerdInfo:
additionalProperties: false
@@ -4994,9 +5864,9 @@ components:
Address:
type: string
Namespaces:
- $ref: '#/components/schemas/DockerSystemContainerdNamespaces'
+ $ref: "#/components/schemas/DockerSystemContainerdNamespaces"
required:
- - Namespaces
+ - Namespaces
type: object
DockerSystemContainerdNamespaces:
additionalProperties: false
@@ -5006,8 +5876,8 @@ components:
Plugins:
type: string
required:
- - Containers
- - Plugins
+ - Containers
+ - Plugins
type: object
DockerSystemDeviceInfo:
additionalProperties: false
@@ -5017,8 +5887,8 @@ components:
Source:
type: string
required:
- - Source
- - ID
+ - Source
+ - ID
type: object
DockerSystemFirewallInfo:
additionalProperties: false
@@ -5032,13 +5902,13 @@ components:
maxItems: 2
minItems: 2
type:
- - array
- - 'null'
+ - array
+ - "null"
type:
- - array
- - 'null'
+ - array
+ - "null"
required:
- - Driver
+ - Driver
type: object
DockerSystemNRIInfo:
additionalProperties: false
@@ -5050,11 +5920,11 @@ components:
maxItems: 2
minItems: 2
type:
- - array
- - 'null'
+ - array
+ - "null"
type:
- - array
- - 'null'
+ - array
+ - "null"
type: object
DockerSystemNetworkAddressPool:
additionalProperties: false
@@ -5065,8 +5935,8 @@ components:
format: int64
type: integer
required:
- - Base
- - Size
+ - Base
+ - Size
type: object
DockerSystemPluginsInfo:
additionalProperties: false
@@ -5075,31 +5945,31 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
Log:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
Network:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
Volume:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
required:
- - Volume
- - Network
- - Authorization
- - Log
+ - Volume
+ - Network
+ - Authorization
+ - Log
type: object
DockerSystemRuntimeWithStatus:
additionalProperties: false
@@ -5113,8 +5983,8 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
runtimeType:
type: string
status:
@@ -5122,6 +5992,117 @@ components:
type: string
type: object
type: object
+ DockerTypesBuildRequest:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/DockerTypesBuildRequest.json
+ format: uri
+ readOnly: true
+ type: string
+ buildArgs:
+ additionalProperties:
+ type: string
+ description: Build arguments
+ type: object
+ cacheFrom:
+ description: Build cache sources
+ items:
+ type: string
+ type:
+ - array
+ - "null"
+ cacheTo:
+ description: Build cache targets
+ items:
+ type: string
+ type:
+ - array
+ - "null"
+ contextDir:
+ description: Build context directory or Git URL
+ minLength: 1
+ type: string
+ dockerfile:
+ description: Dockerfile path
+ type: string
+ dockerfileInline:
+ description: Inline Dockerfile content
+ type: string
+ entitlements:
+ description: Build entitlements
+ items:
+ type: string
+ type:
+ - array
+ - "null"
+ extraHosts:
+ description: Build extra host mappings
+ items:
+ type: string
+ type:
+ - array
+ - "null"
+ isolation:
+ description: Build isolation mode
+ type: string
+ labels:
+ additionalProperties:
+ type: string
+ description: Build labels
+ type: object
+ load:
+ description: Load image into local Docker
+ type: boolean
+ network:
+ description: Build network mode
+ type: string
+ noCache:
+ description: Disable build cache
+ type: boolean
+ platforms:
+ description: Target platforms
+ items:
+ type: string
+ type:
+ - array
+ - "null"
+ privileged:
+ description: Enable privileged build
+ type: boolean
+ provider:
+ description: Build provider override
+ type: string
+ pull:
+ description: Always pull referenced base images
+ type: boolean
+ push:
+ description: Push image
+ type: boolean
+ shmSize:
+ description: Build shared memory size in bytes
+ format: int64
+ type: integer
+ tags:
+ description: Image tags
+ items:
+ type: string
+ type:
+ - array
+ - "null"
+ target:
+ description: Target stage
+ type: string
+ ulimits:
+ additionalProperties:
+ type: string
+ description: Build ulimits
+ type: object
+ required:
+ - contextDir
+ type: object
DockerTypesDeviceMapping:
additionalProperties: false
properties:
@@ -5139,8 +6120,8 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
count:
format: int64
type: integer
@@ -5148,8 +6129,8 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
driver:
type: string
options:
@@ -5171,7 +6152,7 @@ components:
additionalProperties: false
properties:
discrete_resource_spec:
- $ref: '#/components/schemas/DiscreteGenericResource'
+ $ref: "#/components/schemas/DiscreteGenericResource"
type: object
DockerTypesPlacement:
additionalProperties: false
@@ -5180,18 +6161,18 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
max_replicas_per_node:
format: int64
minimum: 0
type: integer
preferences:
items:
- $ref: '#/components/schemas/DockerTypesPlacementPreferences'
+ $ref: "#/components/schemas/DockerTypesPlacementPreferences"
type:
- - array
- - 'null'
+ - array
+ - "null"
type: object
DockerTypesPlacementPreferences:
additionalProperties: false
@@ -5203,9 +6184,9 @@ components:
additionalProperties: false
properties:
limits:
- $ref: '#/components/schemas/Resource'
+ $ref: "#/components/schemas/Resource"
reservations:
- $ref: '#/components/schemas/Resource'
+ $ref: "#/components/schemas/Resource"
type: object
DockerTypesSSHKey:
additionalProperties: false
@@ -5225,21 +6206,21 @@ components:
attach:
type: boolean
blkio_config:
- $ref: '#/components/schemas/BlkioConfig'
+ $ref: "#/components/schemas/BlkioConfig"
build:
- $ref: '#/components/schemas/BuildConfig'
+ $ref: "#/components/schemas/BuildConfig"
cap_add:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
cap_drop:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
cgroup:
type: string
cgroup_parent:
@@ -5248,14 +6229,14 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
configs:
items:
- $ref: '#/components/schemas/DockerTypesServiceConfigObjConfig'
+ $ref: "#/components/schemas/DockerTypesServiceConfigObjConfig"
type:
- - array
- - 'null'
+ - array
+ - "null"
container_name:
type: string
cpu_count:
@@ -5285,45 +6266,45 @@ components:
cpuset:
type: string
credential_spec:
- $ref: '#/components/schemas/CredentialSpecConfig'
+ $ref: "#/components/schemas/CredentialSpecConfig"
depends_on:
additionalProperties:
- $ref: '#/components/schemas/DockerTypesServiceDependency'
+ $ref: "#/components/schemas/DockerTypesServiceDependency"
type: object
deploy:
- $ref: '#/components/schemas/DeployConfig'
+ $ref: "#/components/schemas/DeployConfig"
develop:
- $ref: '#/components/schemas/DevelopConfig'
+ $ref: "#/components/schemas/DevelopConfig"
device_cgroup_rules:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
devices:
items:
- $ref: '#/components/schemas/DockerTypesDeviceMapping'
+ $ref: "#/components/schemas/DockerTypesDeviceMapping"
type:
- - array
- - 'null'
+ - array
+ - "null"
dns:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
dns_opt:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
dns_search:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
dockerfile:
type: string
domainname:
@@ -5332,56 +6313,56 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
env_file:
items:
- $ref: '#/components/schemas/DockerTypesEnvFile'
+ $ref: "#/components/schemas/DockerTypesEnvFile"
type:
- - array
- - 'null'
+ - array
+ - "null"
environment:
additionalProperties:
type:
- - string
- - 'null'
+ - string
+ - "null"
type: object
expose:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
extends:
- $ref: '#/components/schemas/ExtendsConfig'
+ $ref: "#/components/schemas/ExtendsConfig"
external_links:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
extra_hosts:
additionalProperties:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
type: object
gpus:
items:
- $ref: '#/components/schemas/DockerTypesDeviceRequest'
+ $ref: "#/components/schemas/DockerTypesDeviceRequest"
type:
- - array
- - 'null'
+ - array
+ - "null"
group_add:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
healthcheck:
- $ref: '#/components/schemas/HealthCheckConfig'
+ $ref: "#/components/schemas/HealthCheckConfig"
hostname:
type: string
image:
@@ -5396,8 +6377,8 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
labels:
additionalProperties:
type: string
@@ -5406,8 +6387,8 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
log_driver:
type: string
log_opt:
@@ -5415,7 +6396,7 @@ components:
type: string
type: object
logging:
- $ref: '#/components/schemas/LoggingConfig'
+ $ref: "#/components/schemas/LoggingConfig"
mac_address:
type: string
mem_limit:
@@ -5432,7 +6413,7 @@ components:
type: integer
models:
additionalProperties:
- $ref: '#/components/schemas/ServiceModelConfig'
+ $ref: "#/components/schemas/ServiceModelConfig"
type: object
net:
type: string
@@ -5440,7 +6421,7 @@ components:
type: string
networks:
additionalProperties:
- $ref: '#/components/schemas/ServiceNetworkConfig'
+ $ref: "#/components/schemas/ServiceNetworkConfig"
type: object
oom_kill_disable:
type: boolean
@@ -5456,32 +6437,38 @@ components:
type: string
ports:
items:
- $ref: '#/components/schemas/DockerTypesServicePortConfig'
+ $ref: "#/components/schemas/DockerTypesServicePortConfig"
type:
- - array
- - 'null'
+ - array
+ - "null"
post_start:
items:
- $ref: '#/components/schemas/DockerTypesServiceHook'
+ $ref: "#/components/schemas/DockerTypesServiceHook"
type:
- - array
- - 'null'
+ - array
+ - "null"
+ pre_start:
+ items:
+ $ref: "#/components/schemas/DockerTypesServiceHook"
+ type:
+ - array
+ - "null"
pre_stop:
items:
- $ref: '#/components/schemas/DockerTypesServiceHook'
+ $ref: "#/components/schemas/DockerTypesServiceHook"
type:
- - array
- - 'null'
+ - array
+ - "null"
privileged:
type: boolean
profiles:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
provider:
- $ref: '#/components/schemas/ServiceProviderConfig'
+ $ref: "#/components/schemas/ServiceProviderConfig"
pull_policy:
type: string
read_only:
@@ -5495,16 +6482,16 @@ components:
type: integer
secrets:
items:
- $ref: '#/components/schemas/DockerTypesServiceSecretConfig'
+ $ref: "#/components/schemas/DockerTypesServiceSecretConfig"
type:
- - array
- - 'null'
+ - array
+ - "null"
security_opt:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
shm_size:
format: int64
type: integer
@@ -5527,13 +6514,13 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
tty:
type: boolean
ulimits:
additionalProperties:
- $ref: '#/components/schemas/UlimitsConfig'
+ $ref: "#/components/schemas/UlimitsConfig"
type: object
use_api_socket:
type: boolean
@@ -5547,21 +6534,21 @@ components:
type: string
volumes:
items:
- $ref: '#/components/schemas/DockerTypesServiceVolumeConfig'
+ $ref: "#/components/schemas/DockerTypesServiceVolumeConfig"
type:
- - array
- - 'null'
+ - array
+ - "null"
volumes_from:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
working_dir:
type: string
required:
- - command
- - entrypoint
+ - command
+ - entrypoint
type: object
DockerTypesServiceConfigObjConfig:
additionalProperties: false
@@ -5588,7 +6575,7 @@ components:
restart:
type: boolean
required:
- - required
+ - required
type: object
DockerTypesServiceHook:
additionalProperties: false
@@ -5597,14 +6584,18 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
environment:
additionalProperties:
type:
- - string
- - 'null'
+ - string
+ - "null"
type: object
+ image:
+ type: string
+ per_replica:
+ type: boolean
privileged:
type: boolean
user:
@@ -5612,7 +6603,7 @@ components:
working_dir:
type: string
required:
- - command
+ - command
type: object
DockerTypesServicePortConfig:
additionalProperties: false
@@ -5653,11 +6644,11 @@ components:
additionalProperties: false
properties:
bind:
- $ref: '#/components/schemas/ServiceVolumeBind'
+ $ref: "#/components/schemas/ServiceVolumeBind"
consistency:
type: string
image:
- $ref: '#/components/schemas/ServiceVolumeImage'
+ $ref: "#/components/schemas/ServiceVolumeImage"
read_only:
type: boolean
source:
@@ -5665,11 +6656,11 @@ components:
target:
type: string
tmpfs:
- $ref: '#/components/schemas/ServiceVolumeTmpfs'
+ $ref: "#/components/schemas/ServiceVolumeTmpfs"
type:
type: string
volume:
- $ref: '#/components/schemas/ServiceVolumeVolume'
+ $ref: "#/components/schemas/ServiceVolumeVolume"
type: object
DockerTypesThrottleDevice:
additionalProperties: false
@@ -5680,8 +6671,8 @@ components:
format: int64
type: integer
required:
- - Path
- - Rate
+ - Path
+ - Rate
type: object
DockerTypesTrigger:
additionalProperties: false
@@ -5689,19 +6680,19 @@ components:
action:
type: string
exec:
- $ref: '#/components/schemas/DockerTypesServiceHook'
+ $ref: "#/components/schemas/DockerTypesServiceHook"
ignore:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
include:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
initial_sync:
type: boolean
path:
@@ -5709,8 +6700,8 @@ components:
target:
type: string
required:
- - path
- - action
+ - path
+ - action
type: object
DockerTypesWeightDevice:
additionalProperties: false
@@ -5722,8 +6713,8 @@ components:
minimum: 0
type: integer
required:
- - Path
- - Weight
+ - Path
+ - Weight
type: object
DockerVolumeUsageData:
additionalProperties: false
@@ -5735,8 +6726,8 @@ components:
format: int64
type: integer
required:
- - RefCount
- - Size
+ - RefCount
+ - Size
type: object
DockerinfoInfo:
additionalProperties: false
@@ -5744,7 +6735,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/DockerinfoInfo.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/DockerinfoInfo.json
format: uri
readOnly: true
type: string
@@ -5754,8 +6745,8 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
CPUSet:
type: boolean
CPUShares:
@@ -5765,9 +6756,9 @@ components:
CgroupVersion:
type: string
Containerd:
- $ref: '#/components/schemas/DockerSystemContainerdInfo'
+ $ref: "#/components/schemas/DockerSystemContainerdInfo"
ContainerdCommit:
- $ref: '#/components/schemas/DockerSystemCommit'
+ $ref: "#/components/schemas/DockerSystemCommit"
Containers:
format: int64
type: integer
@@ -5788,18 +6779,18 @@ components:
type: boolean
DefaultAddressPools:
items:
- $ref: '#/components/schemas/DockerSystemNetworkAddressPool'
+ $ref: "#/components/schemas/DockerSystemNetworkAddressPool"
type:
- - array
- - 'null'
+ - array
+ - "null"
DefaultRuntime:
type: string
DiscoveredDevices:
items:
- $ref: '#/components/schemas/DockerSystemDeviceInfo'
+ $ref: "#/components/schemas/DockerSystemDeviceInfo"
type:
- - array
- - 'null'
+ - array
+ - "null"
DockerRootDir:
type: string
Driver:
@@ -5811,21 +6802,21 @@ components:
maxItems: 2
minItems: 2
type:
- - array
- - 'null'
+ - array
+ - "null"
type:
- - array
- - 'null'
+ - array
+ - "null"
ExperimentalBuild:
type: boolean
FirewallBackend:
- $ref: '#/components/schemas/DockerSystemFirewallInfo'
+ $ref: "#/components/schemas/DockerSystemFirewallInfo"
GenericResources:
items:
- $ref: '#/components/schemas/DockerSwarmGenericResource'
+ $ref: "#/components/schemas/DockerSwarmGenericResource"
type:
- - array
- - 'null'
+ - array
+ - "null"
HttpProxy:
type: string
HttpsProxy:
@@ -5842,7 +6833,7 @@ components:
InitBinary:
type: string
InitCommit:
- $ref: '#/components/schemas/DockerSystemCommit'
+ $ref: "#/components/schemas/DockerSystemCommit"
Isolation:
type: string
KernelVersion:
@@ -5851,8 +6842,8 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
LiveRestoreEnabled:
type: boolean
LoggingDriver:
@@ -5875,7 +6866,7 @@ components:
format: int64
type: integer
NRI:
- $ref: '#/components/schemas/DockerSystemNRIInfo'
+ $ref: "#/components/schemas/DockerSystemNRIInfo"
Name:
type: string
NoProxy:
@@ -5891,29 +6882,29 @@ components:
PidsLimit:
type: boolean
Plugins:
- $ref: '#/components/schemas/DockerSystemPluginsInfo'
+ $ref: "#/components/schemas/DockerSystemPluginsInfo"
ProductLicense:
type: string
RegistryConfig:
- $ref: '#/components/schemas/DockerRegistryServiceConfig'
+ $ref: "#/components/schemas/DockerRegistryServiceConfig"
RuncCommit:
- $ref: '#/components/schemas/DockerSystemCommit'
+ $ref: "#/components/schemas/DockerSystemCommit"
Runtimes:
additionalProperties:
- $ref: '#/components/schemas/DockerSystemRuntimeWithStatus'
+ $ref: "#/components/schemas/DockerSystemRuntimeWithStatus"
type: object
SecurityOptions:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
ServerVersion:
type: string
SwapLimit:
type: boolean
Swarm:
- $ref: '#/components/schemas/DockerSwarmInfo'
+ $ref: "#/components/schemas/DockerSwarmInfo"
SystemStatus:
items:
items:
@@ -5921,19 +6912,19 @@ components:
maxItems: 2
minItems: 2
type:
- - array
- - 'null'
+ - array
+ - "null"
type:
- - array
- - 'null'
+ - array
+ - "null"
SystemTime:
type: string
Warnings:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
apiVersion:
type: string
arch:
@@ -5949,68 +6940,68 @@ components:
success:
type: boolean
required:
- - success
- - apiVersion
- - gitCommit
- - goVersion
- - os
- - arch
- - buildTime
- - ID
- - Containers
- - ContainersRunning
- - ContainersPaused
- - ContainersStopped
- - Images
- - Driver
- - DriverStatus
- - Plugins
- - MemoryLimit
- - SwapLimit
- - CpuCfsPeriod
- - CpuCfsQuota
- - CPUShares
- - CPUSet
- - PidsLimit
- - IPv4Forwarding
- - Debug
- - NFd
- - OomKillDisable
- - NGoroutines
- - SystemTime
- - LoggingDriver
- - CgroupDriver
- - NEventsListener
- - KernelVersion
- - OperatingSystem
- - OSVersion
- - OSType
- - Architecture
- - IndexServerAddress
- - RegistryConfig
- - NCPU
- - MemTotal
- - GenericResources
- - DockerRootDir
- - HttpProxy
- - HttpsProxy
- - NoProxy
- - Name
- - Labels
- - ExperimentalBuild
- - ServerVersion
- - Runtimes
- - DefaultRuntime
- - Swarm
- - LiveRestoreEnabled
- - Isolation
- - InitBinary
- - ContainerdCommit
- - RuncCommit
- - InitCommit
- - SecurityOptions
- - CDISpecDirs
- - Warnings
+ - success
+ - apiVersion
+ - gitCommit
+ - goVersion
+ - os
+ - arch
+ - buildTime
+ - ID
+ - Containers
+ - ContainersRunning
+ - ContainersPaused
+ - ContainersStopped
+ - Images
+ - Driver
+ - DriverStatus
+ - Plugins
+ - MemoryLimit
+ - SwapLimit
+ - CpuCfsPeriod
+ - CpuCfsQuota
+ - CPUShares
+ - CPUSet
+ - PidsLimit
+ - IPv4Forwarding
+ - Debug
+ - NFd
+ - OomKillDisable
+ - NGoroutines
+ - SystemTime
+ - LoggingDriver
+ - CgroupDriver
+ - NEventsListener
+ - KernelVersion
+ - OperatingSystem
+ - OSVersion
+ - OSType
+ - Architecture
+ - IndexServerAddress
+ - RegistryConfig
+ - NCPU
+ - MemTotal
+ - GenericResources
+ - DockerRootDir
+ - HttpProxy
+ - HttpsProxy
+ - NoProxy
+ - Name
+ - Labels
+ - ExperimentalBuild
+ - ServerVersion
+ - Runtimes
+ - DefaultRuntime
+ - Swarm
+ - LiveRestoreEnabled
+ - Isolation
+ - InitBinary
+ - ContainerdCommit
+ - RuncCommit
+ - InitCommit
+ - SecurityOptions
+ - CDISpecDirs
+ - Warnings
type: object
EnvSummary:
additionalProperties: false
@@ -6018,18 +7009,18 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/EnvSummary.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/EnvSummary.json
format: uri
readOnly: true
type: string
variables:
items:
- $ref: '#/components/schemas/EnvVariable'
+ $ref: "#/components/schemas/EnvVariable"
type:
- - array
- - 'null'
+ - array
+ - "null"
required:
- - variables
+ - variables
type: object
EnvVariable:
additionalProperties: false
@@ -6039,8 +7030,8 @@ components:
value:
type: string
required:
- - key
- - value
+ - key
+ - value
type: object
EnvironmentAgentPairRequest:
additionalProperties: false
@@ -6048,7 +7039,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/EnvironmentAgentPairRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/EnvironmentAgentPairRequest.json
format: uri
readOnly: true
type: string
@@ -6061,7 +7052,7 @@ components:
token:
type: string
required:
- - token
+ - token
type: object
EnvironmentCreate:
additionalProperties: false
@@ -6069,7 +7060,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/EnvironmentCreate.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/EnvironmentCreate.json
format: uri
readOnly: true
type: string
@@ -6077,8 +7068,6 @@ components:
type: string
apiUrl:
type: string
- bootstrapToken:
- type: string
enabled:
type: boolean
isEdge:
@@ -6088,7 +7077,26 @@ components:
useApiKey:
type: boolean
required:
- - apiUrl
+ - apiUrl
+ type: object
+ EnvironmentEdgeMTLSCertificate:
+ additionalProperties: false
+ properties:
+ commonName:
+ type: string
+ daysRemaining:
+ format: int64
+ type: integer
+ expired:
+ type: boolean
+ expiresAt:
+ format: date-time
+ type: string
+ expiringSoon:
+ type: boolean
+ required:
+ - expired
+ - expiringSoon
type: object
EnvironmentEnvironment:
additionalProperties: false
@@ -6102,6 +7110,20 @@ components:
connectedAt:
format: date-time
type: string
+ edgeAgentInstance:
+ type: string
+ edgeCapabilities:
+ items:
+ type: string
+ type:
+ - array
+ - "null"
+ edgeMTLSCertificate:
+ $ref: "#/components/schemas/EnvironmentEdgeMTLSCertificate"
+ edgeSecurityMode:
+ type: string
+ edgeSessionId:
+ type: string
edgeTransport:
type: string
enabled:
@@ -6110,22 +7132,27 @@ components:
type: string
isEdge:
type: boolean
+ lastEdgeTransport:
+ type: string
lastHeartbeat:
format: date-time
type: string
lastPollAt:
format: date-time
type: string
+ lastSeen:
+ format: date-time
+ type: string
name:
type: string
status:
type: string
required:
- - id
- - apiUrl
- - status
- - enabled
- - isEdge
+ - id
+ - apiUrl
+ - status
+ - enabled
+ - isEdge
type: object
EnvironmentPaginatedResponse:
additionalProperties: false
@@ -6133,24 +7160,24 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/EnvironmentPaginatedResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/EnvironmentPaginatedResponse.json
format: uri
readOnly: true
type: string
data:
items:
- $ref: '#/components/schemas/EnvironmentEnvironment'
+ $ref: "#/components/schemas/EnvironmentEnvironment"
type:
- - array
- - 'null'
+ - array
+ - "null"
pagination:
- $ref: '#/components/schemas/BasePaginationResponse'
+ $ref: "#/components/schemas/BasePaginationResponse"
success:
type: boolean
required:
- - success
- - data
- - pagination
+ - success
+ - data
+ - pagination
type: object
EnvironmentTest:
additionalProperties: false
@@ -6160,7 +7187,7 @@ components:
status:
type: string
required:
- - status
+ - status
type: object
EnvironmentTestConnectionRequest:
additionalProperties: false
@@ -6168,7 +7195,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/EnvironmentTestConnectionRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/EnvironmentTestConnectionRequest.json
format: uri
readOnly: true
type: string
@@ -6181,7 +7208,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/EnvironmentUpdate.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/EnvironmentUpdate.json
format: uri
readOnly: true
type: string
@@ -6189,8 +7216,6 @@ components:
type: string
apiUrl:
type: string
- bootstrapToken:
- type: string
enabled:
type: boolean
name:
@@ -6198,6 +7223,70 @@ components:
regenerateApiKey:
type: boolean
type: object
+ EnvironmentUpdateJob:
+ additionalProperties: false
+ properties:
+ completedAt:
+ format: date-time
+ type: string
+ createdAt:
+ format: date-time
+ type: string
+ error:
+ type: string
+ id:
+ type: string
+ managerDigestAtStart:
+ type: string
+ managerTargetVersion:
+ type: string
+ managerVersionAtStart:
+ type: string
+ results:
+ items:
+ $ref: "#/components/schemas/EnvironmentUpdateResult"
+ type:
+ - array
+ - "null"
+ status:
+ type: string
+ updatedAt:
+ format: date-time
+ type: string
+ userId:
+ type: string
+ username:
+ type: string
+ required:
+ - status
+ - userId
+ - username
+ - managerVersionAtStart
+ - managerDigestAtStart
+ - managerTargetVersion
+ - id
+ - createdAt
+ type: object
+ EnvironmentUpdateResult:
+ additionalProperties: false
+ properties:
+ environmentId:
+ type: string
+ environmentName:
+ type: string
+ error:
+ type: string
+ fromVersion:
+ type: string
+ status:
+ type: string
+ toVersion:
+ type: string
+ required:
+ - environmentId
+ - environmentName
+ - status
+ type: object
EnvironmentWithApiKey:
additionalProperties: false
properties:
@@ -6211,6 +7300,20 @@ components:
connectedAt:
format: date-time
type: string
+ edgeAgentInstance:
+ type: string
+ edgeCapabilities:
+ items:
+ type: string
+ type:
+ - array
+ - "null"
+ edgeMTLSCertificate:
+ $ref: "#/components/schemas/EnvironmentEdgeMTLSCertificate"
+ edgeSecurityMode:
+ type: string
+ edgeSessionId:
+ type: string
edgeTransport:
type: string
enabled:
@@ -6219,22 +7322,27 @@ components:
type: string
isEdge:
type: boolean
+ lastEdgeTransport:
+ type: string
lastHeartbeat:
format: date-time
type: string
lastPollAt:
format: date-time
type: string
+ lastSeen:
+ format: date-time
+ type: string
name:
type: string
status:
type: string
required:
- - id
- - apiUrl
- - status
- - enabled
- - isEdge
+ - id
+ - apiUrl
+ - status
+ - enabled
+ - isEdge
type: object
ErrorDetail:
additionalProperties: false
@@ -6254,64 +7362,59 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/ErrorModel.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/ErrorModel.json
format: uri
readOnly: true
type: string
detail:
- description: A human-readable explanation specific to this occurrence of
- the problem.
+ description: A human-readable explanation specific to this occurrence of the problem.
examples:
- - Property foo is required but is missing.
+ - Property foo is required but is missing.
type: string
errors:
description: Optional list of individual error details
items:
- $ref: '#/components/schemas/ErrorDetail'
+ $ref: "#/components/schemas/ErrorDetail"
type:
- - array
- - 'null'
+ - array
+ - "null"
instance:
- description: A URI reference that identifies the specific occurrence of
- the problem.
+ description: A URI reference that identifies the specific occurrence of the problem.
examples:
- - https://example.com/error-log/abc123
+ - https://example.com/error-log/abc123
format: uri
type: string
status:
description: HTTP status code
examples:
- - 400
+ - 400
format: int64
type: integer
title:
- description: A short, human-readable summary of the problem type. This value
- should not change between occurrences of the error.
+ description: A short, human-readable summary of the problem type. This value should not change between occurrences of the error.
examples:
- - Bad Request
+ - Bad Request
type: string
type:
default: about:blank
description: A URI reference to human-readable documentation for the error.
examples:
- - https://example.com/errors/example
+ - https://example.com/errors/example
format: uri
type: string
type: object
- EventCreateEvent:
+ EventEvent:
additionalProperties: false
properties:
- $schema:
- description: A URL to the JSON Schema for this object.
- examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/EventCreateEvent.json
- format: uri
- readOnly: true
+ createdAt:
+ format: date-time
type: string
description:
type: string
environmentId:
type: string
+ id:
+ type: string
metadata:
additionalProperties: {}
type: object
@@ -6323,95 +7426,286 @@ components:
type: string
severity:
type: string
+ timestamp:
+ format: date-time
+ type: string
title:
type: string
type:
type: string
+ updatedAt:
+ format: date-time
+ type: string
userId:
type: string
username:
type: string
required:
- - type
- - title
+ - id
+ - type
+ - severity
+ - title
+ - timestamp
+ - createdAt
type: object
- EventEvent:
+ EventPaginatedResponse:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/EventPaginatedResponse.json
+ format: uri
+ readOnly: true
+ type: string
+ data:
+ items:
+ $ref: "#/components/schemas/EventEvent"
+ type:
+ - array
+ - "null"
+ pagination:
+ $ref: "#/components/schemas/BasePaginationResponse"
+ success:
+ type: boolean
+ required:
+ - success
+ - data
+ - pagination
+ type: object
+ ExtendsConfig:
+ additionalProperties: false
+ properties:
+ file:
+ type: string
+ service:
+ type: string
+ type: object
+ FederatedCreateFederatedCredential:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/FederatedCreateFederatedCredential.json
+ format: uri
+ readOnly: true
+ type: string
+ audiences:
+ description: Allowed external token audiences
+ items:
+ type: string
+ minItems: 1
+ type:
+ - array
+ - "null"
+ description:
+ description: Optional description
+ maxLength: 1000
+ type: string
+ enabled:
+ description: Whether exchanges are allowed
+ type: boolean
+ environmentId:
+ description: Optional environment scope for the role assignment
+ type: string
+ expiresAt:
+ description: Optional credential expiration
+ format: date-time
+ type: string
+ issuerUrl:
+ description: Trusted external OIDC issuer URL
+ format: uri
+ minLength: 1
+ type: string
+ matchType:
+ description: Subject match strategy
+ enum:
+ - exact
+ - glob
+ type: string
+ name:
+ description: Display name
+ maxLength: 255
+ minLength: 1
+ type: string
+ roleId:
+ description: Mapped role ID
+ minLength: 1
+ type: string
+ subjectClaim:
+ description: Claim path to match against; defaults to sub
+ type: string
+ subjectMatch:
+ description: Exact subject or anchored glob pattern
+ minLength: 1
+ type: string
+ tokenTtlSeconds:
+ description: Issued token lifetime in seconds
+ format: int64
+ maximum: 3600
+ minimum: 60
+ type: integer
+ required:
+ - name
+ - enabled
+ - issuerUrl
+ - audiences
+ - subjectMatch
+ - roleId
+ type: object
+ FederatedFederatedCredential:
additionalProperties: false
properties:
+ audiences:
+ description: Allowed external token audiences
+ items:
+ type: string
+ type:
+ - array
+ - "null"
createdAt:
+ description: Creation timestamp
format: date-time
type: string
description:
+ description: Optional description
type: string
+ enabled:
+ description: Whether exchanges are allowed
+ type: boolean
environmentId:
+ description: Optional environment scope for the role assignment
type: string
- id:
+ environmentName:
+ description: Mapped environment name when scoped
type: string
- metadata:
- additionalProperties: {}
- type: object
- resourceId:
+ expiresAt:
+ description: Optional credential expiration
+ format: date-time
type: string
- resourceName:
+ id:
+ description: Unique identifier of the federated credential
type: string
- resourceType:
+ identityUserId:
+ description: Dedicated service user ID backing issued tokens
type: string
- severity:
+ issuerUrl:
+ description: Trusted external OIDC issuer URL
type: string
- timestamp:
+ lastUsedAt:
+ description: Last successful token exchange
format: date-time
type: string
- title:
+ matchType:
+ description: Subject match strategy
+ enum:
+ - exact
+ - glob
type: string
- type:
+ name:
+ description: Display name
type: string
- updatedAt:
- format: date-time
+ roleId:
+ description: Mapped role ID
type: string
- userId:
+ roleName:
+ description: Mapped role name
type: string
- username:
+ serviceUsername:
+ description: Dedicated service account username
+ type: string
+ subjectClaim:
+ description: Claim path to match against
+ type: string
+ subjectMatch:
+ description: Exact subject or anchored glob pattern
+ type: string
+ tokenTtlSeconds:
+ description: Issued token lifetime in seconds
+ format: int64
+ type: integer
+ updatedAt:
+ description: Last update timestamp
+ format: date-time
type: string
required:
- - id
- - type
- - severity
- - title
- - timestamp
- - createdAt
+ - id
+ - name
+ - enabled
+ - issuerUrl
+ - audiences
+ - subjectClaim
+ - subjectMatch
+ - matchType
+ - roleId
+ - identityUserId
+ - tokenTtlSeconds
+ - createdAt
type: object
- EventPaginatedResponse:
+ FederatedUpdateFederatedCredential:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/EventPaginatedResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/FederatedUpdateFederatedCredential.json
format: uri
readOnly: true
type: string
- data:
+ audiences:
+ description: Allowed external token audiences
items:
- $ref: '#/components/schemas/EventEvent'
+ type: string
+ minItems: 1
type:
- - array
- - 'null'
- pagination:
- $ref: '#/components/schemas/BasePaginationResponse'
- success:
+ - array
+ - "null"
+ description:
+ description: Optional description
+ maxLength: 1000
+ type: string
+ enabled:
+ description: Whether exchanges are allowed
type: boolean
- required:
- - success
- - data
- - pagination
- type: object
- ExtendsConfig:
- additionalProperties: false
- properties:
- file:
+ environmentId:
+ description: Optional environment scope for the role assignment
type: string
- service:
+ expiresAt:
+ description: Optional credential expiration
+ format: date-time
+ type: string
+ issuerUrl:
+ description: Trusted external OIDC issuer URL
+ format: uri
+ type: string
+ matchType:
+ description: Subject match strategy
+ enum:
+ - exact
+ - glob
+ type: string
+ name:
+ description: Display name
+ maxLength: 255
+ type: string
+ roleId:
+ description: Mapped role ID
+ minLength: 1
+ type: string
+ subjectClaim:
+ description: Claim path to match against
+ type: string
+ subjectMatch:
+ description: Exact subject or anchored glob pattern
+ minLength: 1
type: string
+ tokenTtlSeconds:
+ description: Issued token lifetime in seconds
+ format: int64
+ maximum: 3600
+ minimum: 60
+ type: integer
type: object
FileContentResponse:
additionalProperties: false
@@ -6422,8 +7716,8 @@ components:
mimeType:
type: string
required:
- - content
- - mimeType
+ - content
+ - mimeType
type: object
GetSwarmNodeAgentDeploymentInputBody:
additionalProperties: false
@@ -6431,7 +7725,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/GetSwarmNodeAgentDeploymentInputBody.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/GetSwarmNodeAgentDeploymentInputBody.json
format: uri
readOnly: true
type: string
@@ -6445,27 +7739,27 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/GitOpsSyncPaginatedResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/GitOpsSyncPaginatedResponse.json
format: uri
readOnly: true
type: string
counts:
- $ref: '#/components/schemas/GitopsSyncCounts'
+ $ref: "#/components/schemas/GitopsSyncCounts"
data:
items:
- $ref: '#/components/schemas/GitopsGitOpsSync'
+ $ref: "#/components/schemas/GitopsGitOpsSync"
type:
- - array
- - 'null'
+ - array
+ - "null"
pagination:
- $ref: '#/components/schemas/BasePaginationResponse'
+ $ref: "#/components/schemas/BasePaginationResponse"
success:
type: boolean
required:
- - success
- - data
- - counts
- - pagination
+ - success
+ - data
+ - counts
+ - pagination
type: object
GitRepositoryPaginatedResponse:
additionalProperties: false
@@ -6473,24 +7767,24 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/GitRepositoryPaginatedResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/GitRepositoryPaginatedResponse.json
format: uri
readOnly: true
type: string
data:
items:
- $ref: '#/components/schemas/GitopsGitRepository'
+ $ref: "#/components/schemas/GitopsGitRepository"
type:
- - array
- - 'null'
+ - array
+ - "null"
pagination:
- $ref: '#/components/schemas/BasePaginationResponse'
+ $ref: "#/components/schemas/BasePaginationResponse"
success:
type: boolean
required:
- - success
- - data
- - pagination
+ - success
+ - data
+ - pagination
type: object
GitopsBranchInfo:
additionalProperties: false
@@ -6500,35 +7794,35 @@ components:
name:
type: string
required:
- - name
- - isDefault
+ - name
+ - isDefault
type: object
GitopsBranchesResponse:
additionalProperties: false
properties:
branches:
items:
- $ref: '#/components/schemas/GitopsBranchInfo'
+ $ref: "#/components/schemas/GitopsBranchInfo"
type:
- - array
- - 'null'
+ - array
+ - "null"
required:
- - branches
+ - branches
type: object
GitopsBrowseResponse:
additionalProperties: false
properties:
files:
items:
- $ref: '#/components/schemas/GitopsFileTreeNode'
+ $ref: "#/components/schemas/GitopsFileTreeNode"
type:
- - array
- - 'null'
+ - array
+ - "null"
path:
type: string
required:
- - path
- - files
+ - path
+ - files
type: object
GitopsCreateSyncRequest:
additionalProperties: false
@@ -6536,7 +7830,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/GitopsCreateSyncRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/GitopsCreateSyncRequest.json
format: uri
readOnly: true
type: string
@@ -6557,6 +7851,19 @@ components:
type: integer
name:
type: string
+ preDeployEnv:
+ type: string
+ preDeployExtraMounts:
+ type: string
+ preDeployNetworkMode:
+ type: string
+ preDeployRunnerImage:
+ type: string
+ preDeployScriptPath:
+ type: string
+ preDeployTimeoutSec:
+ format: int64
+ type: integer
projectName:
type: string
repositoryId:
@@ -6566,21 +7873,23 @@ components:
syncInterval:
format: int64
type: integer
+ targetType:
+ type: string
required:
- - name
- - repositoryId
- - branch
- - composePath
+ - name
+ - repositoryId
+ - branch
+ - composePath
type: object
GitopsFileTreeNode:
additionalProperties: false
properties:
children:
items:
- $ref: '#/components/schemas/GitopsFileTreeNode'
+ $ref: "#/components/schemas/GitopsFileTreeNode"
type:
- - array
- - 'null'
+ - array
+ - "null"
name:
type: string
path:
@@ -6591,9 +7900,9 @@ components:
type:
type: string
required:
- - name
- - path
- - type
+ - name
+ - path
+ - type
type: object
GitopsGitOpsSync:
additionalProperties: false
@@ -6631,12 +7940,32 @@ components:
type: integer
name:
type: string
+ preDeployEnv:
+ type: string
+ preDeployExtraMounts:
+ type: string
+ preDeployLastRunAt:
+ format: date-time
+ type: string
+ preDeployLastRunOutput:
+ type: string
+ preDeployLastRunStatus:
+ type: string
+ preDeployNetworkMode:
+ type: string
+ preDeployRunnerImage:
+ type: string
+ preDeployScriptPath:
+ type: string
+ preDeployTimeoutSec:
+ format: int64
+ type: integer
projectId:
type: string
projectName:
type: string
repository:
- $ref: '#/components/schemas/GitopsGitRepository'
+ $ref: "#/components/schemas/GitopsGitRepository"
repositoryId:
type: string
syncDirectory:
@@ -6646,25 +7975,30 @@ components:
type: integer
syncedFiles:
type: string
+ targetType:
+ type: string
updatedAt:
format: date-time
type: string
required:
- - id
- - name
- - environmentId
- - repositoryId
- - branch
- - composePath
- - projectName
- - autoSync
- - syncInterval
- - syncDirectory
- - maxSyncFiles
- - maxSyncTotalSize
- - maxSyncBinarySize
- - createdAt
- - updatedAt
+ - id
+ - name
+ - environmentId
+ - repositoryId
+ - branch
+ - composePath
+ - targetType
+ - projectName
+ - autoSync
+ - syncInterval
+ - syncDirectory
+ - maxSyncFiles
+ - maxSyncTotalSize
+ - maxSyncBinarySize
+ - preDeployTimeoutSec
+ - preDeployNetworkMode
+ - createdAt
+ - updatedAt
type: object
GitopsGitRepository:
additionalProperties: false
@@ -6692,13 +8026,13 @@ components:
username:
type: string
required:
- - id
- - name
- - url
- - authType
- - enabled
- - createdAt
- - updatedAt
+ - id
+ - name
+ - url
+ - authType
+ - enabled
+ - createdAt
+ - updatedAt
type: object
GitopsImportGitOpsSyncRequest:
additionalProperties: false
@@ -6728,12 +8062,12 @@ components:
syncName:
type: string
required:
- - syncName
- - gitRepo
- - branch
- - dockerComposePath
- - autoSync
- - syncInterval
+ - syncName
+ - gitRepo
+ - branch
+ - dockerComposePath
+ - autoSync
+ - syncInterval
type: object
GitopsImportGitOpsSyncResponse:
additionalProperties: false
@@ -6742,8 +8076,8 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
failedCount:
format: int64
type: integer
@@ -6751,9 +8085,9 @@ components:
format: int64
type: integer
required:
- - successCount
- - failedCount
- - errors
+ - successCount
+ - failedCount
+ - errors
type: object
GitopsRepositorySync:
additionalProperties: false
@@ -6785,13 +8119,13 @@ components:
username:
type: string
required:
- - id
- - name
- - url
- - authType
- - enabled
- - createdAt
- - updatedAt
+ - id
+ - name
+ - url
+ - authType
+ - enabled
+ - createdAt
+ - updatedAt
type: object
GitopsRepositorySyncRequest:
additionalProperties: false
@@ -6799,18 +8133,18 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/GitopsRepositorySyncRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/GitopsRepositorySyncRequest.json
format: uri
readOnly: true
type: string
repositories:
items:
- $ref: '#/components/schemas/GitopsRepositorySync'
+ $ref: "#/components/schemas/GitopsRepositorySync"
type:
- - array
- - 'null'
+ - array
+ - "null"
required:
- - repositories
+ - repositories
type: object
GitopsSyncCounts:
additionalProperties: false
@@ -6825,9 +8159,9 @@ components:
format: int64
type: integer
required:
- - totalSyncs
- - activeSyncs
- - successfulSyncs
+ - totalSyncs
+ - activeSyncs
+ - successfulSyncs
type: object
GitopsSyncResult:
additionalProperties: false
@@ -6842,9 +8176,9 @@ components:
format: date-time
type: string
required:
- - success
- - message
- - syncedAt
+ - success
+ - message
+ - syncedAt
type: object
GitopsSyncStatus:
additionalProperties: false
@@ -6866,8 +8200,8 @@ components:
format: date-time
type: string
required:
- - id
- - autoSync
+ - id
+ - autoSync
type: object
GitopsUpdateSyncRequest:
additionalProperties: false
@@ -6875,7 +8209,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/GitopsUpdateSyncRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/GitopsUpdateSyncRequest.json
format: uri
readOnly: true
type: string
@@ -6896,6 +8230,19 @@ components:
type: integer
name:
type: string
+ preDeployEnv:
+ type: string
+ preDeployExtraMounts:
+ type: string
+ preDeployNetworkMode:
+ type: string
+ preDeployRunnerImage:
+ type: string
+ preDeployScriptPath:
+ type: string
+ preDeployTimeoutSec:
+ format: int64
+ type: integer
projectName:
type: string
repositoryId:
@@ -6905,6 +8252,8 @@ components:
syncInterval:
format: int64
type: integer
+ targetType:
+ type: string
type: object
HealthCheckConfig:
additionalProperties: false
@@ -6928,8 +8277,8 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
timeout:
format: int64
type: integer
@@ -6953,36 +8302,101 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
Timeout:
format: int64
type: integer
type: object
- ImageBuildPaginatedResponse:
+ ImageAttestation:
additionalProperties: false
properties:
- $schema:
- description: A URL to the JSON Schema for this object.
- examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/ImageBuildPaginatedResponse.json
- format: uri
+ artifactType:
+ type: string
+ digest:
+ type: string
+ mediaType:
+ type: string
+ platform:
+ type: string
+ predicateType:
+ type: string
+ size:
+ format: int64
+ type: integer
+ statement: {}
+ statementType:
+ type: string
+ subject:
+ items:
+ $ref: "#/components/schemas/ImageAttestationSubject"
+ type:
+ - array
+ - "null"
+ required:
+ - digest
+ - mediaType
+ - predicateType
+ - subject
+ - size
+ type: object
+ ImageAttestationList:
+ additionalProperties: false
+ properties:
+ attestations:
+ items:
+ $ref: "#/components/schemas/ImageAttestation"
+ type:
+ - array
+ - "null"
+ imageRef:
+ type: string
+ platform:
+ type: string
+ subjectDigest:
+ type: string
+ required:
+ - imageRef
+ - subjectDigest
+ - attestations
+ type: object
+ ImageAttestationSubject:
+ additionalProperties: false
+ properties:
+ digest:
+ additionalProperties:
+ type: string
+ type: object
+ name:
+ type: string
+ required:
+ - name
+ - digest
+ type: object
+ ImageBuildPaginatedResponse:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/ImageBuildPaginatedResponse.json
+ format: uri
readOnly: true
type: string
data:
items:
- $ref: '#/components/schemas/ImageBuildRecord'
+ $ref: "#/components/schemas/ImageBuildRecord"
type:
- - array
- - 'null'
+ - array
+ - "null"
pagination:
- $ref: '#/components/schemas/BasePaginationResponse'
+ $ref: "#/components/schemas/BasePaginationResponse"
success:
type: boolean
required:
- - success
- - data
- - pagination
+ - success
+ - data
+ - pagination
type: object
ImageBuildRecord:
additionalProperties: false
@@ -6995,14 +8409,14 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
cacheTo:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
completedAt:
format: date-time
type: string
@@ -7022,8 +8436,8 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
environmentId:
type: string
errorMessage:
@@ -7032,8 +8446,8 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
id:
type: string
isolation:
@@ -7056,8 +8470,8 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
privileged:
type: boolean
provider:
@@ -7075,8 +8489,8 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
target:
type: string
ulimits:
@@ -7088,128 +8502,17 @@ components:
username:
type: string
required:
- - id
- - environmentId
- - status
- - contextDir
- - noCache
- - pull
- - privileged
- - push
- - load
- - outputTruncated
- - createdAt
- type: object
- ImageBuildRequest:
- additionalProperties: false
- properties:
- $schema:
- description: A URL to the JSON Schema for this object.
- examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/ImageBuildRequest.json
- format: uri
- readOnly: true
- type: string
- buildArgs:
- additionalProperties:
- type: string
- description: Build arguments
- type: object
- cacheFrom:
- description: Build cache sources
- items:
- type: string
- type:
- - array
- - 'null'
- cacheTo:
- description: Build cache targets
- items:
- type: string
- type:
- - array
- - 'null'
- contextDir:
- description: Build context directory or Git URL
- minLength: 1
- type: string
- dockerfile:
- description: Dockerfile path
- type: string
- dockerfileInline:
- description: Inline Dockerfile content
- type: string
- entitlements:
- description: Build entitlements
- items:
- type: string
- type:
- - array
- - 'null'
- extraHosts:
- description: Build extra host mappings
- items:
- type: string
- type:
- - array
- - 'null'
- isolation:
- description: Build isolation mode
- type: string
- labels:
- additionalProperties:
- type: string
- description: Build labels
- type: object
- load:
- description: Load image into local Docker
- type: boolean
- network:
- description: Build network mode
- type: string
- noCache:
- description: Disable build cache
- type: boolean
- platforms:
- description: Target platforms
- items:
- type: string
- type:
- - array
- - 'null'
- privileged:
- description: Enable privileged build
- type: boolean
- provider:
- description: Build provider override
- type: string
- pull:
- description: Always pull referenced base images
- type: boolean
- push:
- description: Push image
- type: boolean
- shmSize:
- description: Build shared memory size in bytes
- format: int64
- type: integer
- tags:
- description: Image tags
- items:
- type: string
- type:
- - array
- - 'null'
- target:
- description: Target stage
- type: string
- ulimits:
- additionalProperties:
- type: string
- description: Build ulimits
- type: object
- required:
- - contextDir
+ - id
+ - environmentId
+ - status
+ - contextDir
+ - noCache
+ - pull
+ - privileged
+ - push
+ - load
+ - outputTruncated
+ - createdAt
type: object
ImageDetailSummary:
additionalProperties: false
@@ -7221,51 +8524,80 @@ components:
comment:
type: string
config:
- $ref: '#/components/schemas/DetailSummaryConfigStruct'
+ $ref: "#/components/schemas/DetailSummaryConfigStruct"
created:
type: string
descriptor:
- $ref: '#/components/schemas/DetailSummaryDescriptorStruct'
+ $ref: "#/components/schemas/DetailSummaryDescriptorStruct"
graphDriver:
- $ref: '#/components/schemas/DetailSummaryGraphDriverStruct'
+ $ref: "#/components/schemas/DetailSummaryGraphDriverStruct"
id:
type: string
metadata:
- $ref: '#/components/schemas/DetailSummaryMetadataStruct'
+ $ref: "#/components/schemas/DetailSummaryMetadataStruct"
os:
type: string
repoDigests:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
repoTags:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
rootFs:
- $ref: '#/components/schemas/DetailSummaryRootFsStruct'
+ $ref: "#/components/schemas/DetailSummaryRootFsStruct"
+ size:
+ format: int64
+ type: integer
+ required:
+ - id
+ - repoTags
+ - repoDigests
+ - comment
+ - created
+ - author
+ - config
+ - architecture
+ - os
+ - size
+ - graphDriver
+ - rootFs
+ - metadata
+ - descriptor
+ type: object
+ ImageHistoryItem:
+ additionalProperties: false
+ properties:
+ comment:
+ type: string
+ created:
+ format: int64
+ type: integer
+ createdBy:
+ type: string
+ id:
+ type: string
size:
format: int64
type: integer
+ tags:
+ items:
+ type: string
+ type:
+ - array
+ - "null"
required:
- - id
- - repoTags
- - repoDigests
- - comment
- - created
- - author
- - config
- - architecture
- - os
- - size
- - graphDriver
- - rootFs
- - metadata
- - descriptor
+ - id
+ - created
+ - createdBy
+ - tags
+ - size
+ - comment
type: object
ImageLoadResult:
additionalProperties: false
@@ -7273,7 +8605,7 @@ components:
stream:
type: string
required:
- - stream
+ - stream
type: object
ImagePaginatedResponse:
additionalProperties: false
@@ -7281,24 +8613,24 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/ImagePaginatedResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/ImagePaginatedResponse.json
format: uri
readOnly: true
type: string
data:
items:
- $ref: '#/components/schemas/ImageSummary'
+ $ref: "#/components/schemas/ImageSummary"
type:
- - array
- - 'null'
+ - array
+ - "null"
pagination:
- $ref: '#/components/schemas/BasePaginationResponse'
+ $ref: "#/components/schemas/BasePaginationResponse"
success:
type: boolean
required:
- - success
- - data
- - pagination
+ - success
+ - data
+ - pagination
type: object
ImagePruneReport:
additionalProperties: false
@@ -7307,14 +8639,14 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
spaceReclaimed:
format: int64
type: integer
required:
- - imagesDeleted
- - spaceReclaimed
+ - imagesDeleted
+ - spaceReclaimed
type: object
ImagePullOptions:
additionalProperties: false
@@ -7322,18 +8654,18 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/ImagePullOptions.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/ImagePullOptions.json
format: uri
readOnly: true
type: string
auth:
- $ref: '#/components/schemas/ContainerregistryCredential'
+ $ref: "#/components/schemas/ContainerregistryCredential"
credentials:
items:
- $ref: '#/components/schemas/ContainerregistryCredential'
+ $ref: "#/components/schemas/ContainerregistryCredential"
type:
- - array
- - 'null'
+ - array
+ - "null"
imageName:
description: Name of the image to pull (e.g., nginx)
minLength: 1
@@ -7342,7 +8674,28 @@ components:
description: Tag of the image to pull (e.g., latest)
type: string
required:
- - imageName
+ - imageName
+ type: object
+ ImageSearchResult:
+ additionalProperties: false
+ properties:
+ automated:
+ type: boolean
+ description:
+ type: string
+ name:
+ type: string
+ official:
+ type: boolean
+ starCount:
+ format: int64
+ type: integer
+ required:
+ - name
+ - description
+ - starCount
+ - official
+ - automated
type: object
ImageSummary:
additionalProperties: false
@@ -7363,43 +8716,62 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
repoTags:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
size:
format: int64
type: integer
tag:
type: string
updateInfo:
- $ref: '#/components/schemas/ImageUpdateInfo'
+ $ref: "#/components/schemas/ImageUpdateInfo"
usedBy:
items:
- $ref: '#/components/schemas/ImageUsedBy'
+ $ref: "#/components/schemas/ImageUsedBy"
type:
- - array
- - 'null'
+ - array
+ - "null"
virtualSize:
format: int64
type: integer
vulnerabilityScan:
- $ref: '#/components/schemas/VulnerabilityScanSummary'
- required:
- - id
- - repoTags
- - repoDigests
- - created
- - size
- - virtualSize
- - labels
- - inUse
- - repo
- - tag
+ $ref: "#/components/schemas/VulnerabilityScanSummary"
+ required:
+ - id
+ - repoTags
+ - repoDigests
+ - created
+ - size
+ - virtualSize
+ - labels
+ - inUse
+ - repo
+ - tag
+ type: object
+ ImageTagRequest:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/ImageTagRequest.json
+ format: uri
+ readOnly: true
+ type: string
+ repository:
+ description: Target repository name
+ type: string
+ tag:
+ description: Target tag
+ type: string
+ required:
+ - repository
type: object
ImageUpdateInfo:
additionalProperties: false
@@ -7433,15 +8805,15 @@ components:
usedCredential:
type: boolean
required:
- - hasUpdate
- - updateType
- - currentVersion
- - latestVersion
- - currentDigest
- - latestDigest
- - checkTime
- - responseTimeMs
- - error
+ - hasUpdate
+ - updateType
+ - currentVersion
+ - latestVersion
+ - currentDigest
+ - latestDigest
+ - checkTime
+ - responseTimeMs
+ - error
type: object
ImageUsageCounts:
additionalProperties: false
@@ -7459,10 +8831,10 @@ components:
format: int64
type: integer
required:
- - imagesInuse
- - imagesUnused
- - totalImages
- - totalImageSize
+ - imagesInuse
+ - imagesUnused
+ - totalImages
+ - totalImageSize
type: object
ImageUsageCountsResponse:
additionalProperties: false
@@ -7470,17 +8842,17 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/ImageUsageCountsResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/ImageUsageCountsResponse.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/ImageUsageCounts'
+ $ref: "#/components/schemas/ImageUsageCounts"
success:
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
ImageUsedBy:
additionalProperties: false
@@ -7492,8 +8864,8 @@ components:
type:
type: string
required:
- - type
- - name
+ - type
+ - name
type: object
ImageupdateBatchImageUpdateRequest:
additionalProperties: false
@@ -7501,24 +8873,24 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/ImageupdateBatchImageUpdateRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/ImageupdateBatchImageUpdateRequest.json
format: uri
readOnly: true
type: string
credentials:
items:
- $ref: '#/components/schemas/ContainerregistryCredential'
+ $ref: "#/components/schemas/ContainerregistryCredential"
type:
- - array
- - 'null'
+ - array
+ - "null"
imageRefs:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
required:
- - imageRefs
+ - imageRefs
type: object
ImageupdateCheckAllImagesRequest:
additionalProperties: false
@@ -7526,20 +8898,22 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/ImageupdateCheckAllImagesRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/ImageupdateCheckAllImagesRequest.json
format: uri
readOnly: true
type: string
credentials:
items:
- $ref: '#/components/schemas/ContainerregistryCredential'
+ $ref: "#/components/schemas/ContainerregistryCredential"
type:
- - array
- - 'null'
+ - array
+ - "null"
type: object
ImageupdateResponse:
additionalProperties: false
properties:
+ activityId:
+ type: string
authMethod:
type: string
authRegistry:
@@ -7569,11 +8943,11 @@ components:
usedCredential:
type: boolean
required:
- - hasUpdate
- - updateType
- - currentVersion
- - checkTime
- - responseTimeMs
+ - hasUpdate
+ - updateType
+ - currentVersion
+ - checkTime
+ - responseTimeMs
type: object
ImageupdateSummary:
additionalProperties: false
@@ -7591,10 +8965,10 @@ components:
format: int64
type: integer
required:
- - totalImages
- - imagesWithUpdates
- - digestUpdates
- - errorsCount
+ - totalImages
+ - imagesWithUpdates
+ - digestUpdates
+ - errorsCount
type: object
JobscheduleConfig:
additionalProperties: false
@@ -7602,7 +8976,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/JobscheduleConfig.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/JobscheduleConfig.json
format: uri
readOnly: true
type: string
@@ -7610,11 +8984,13 @@ components:
type: string
autoUpdateInterval:
type: string
+ dockerClientRefreshInterval:
+ type: string
environmentHealthInterval:
type: string
eventCleanupInterval:
type: string
- gitopsSyncInterval:
+ expiredSessionsCleanupInterval:
type: string
pollingInterval:
type: string
@@ -7623,14 +8999,15 @@ components:
vulnerabilityScanInterval:
type: string
required:
- - environmentHealthInterval
- - eventCleanupInterval
- - autoUpdateInterval
- - pollingInterval
- - scheduledPruneInterval
- - gitopsSyncInterval
- - vulnerabilityScanInterval
- - autoHealInterval
+ - environmentHealthInterval
+ - eventCleanupInterval
+ - expiredSessionsCleanupInterval
+ - autoUpdateInterval
+ - dockerClientRefreshInterval
+ - pollingInterval
+ - scheduledPruneInterval
+ - vulnerabilityScanInterval
+ - autoHealInterval
type: object
JobscheduleJobListResponse:
additionalProperties: false
@@ -7638,7 +9015,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/JobscheduleJobListResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/JobscheduleJobListResponse.json
format: uri
readOnly: true
type: string
@@ -7646,13 +9023,13 @@ components:
type: boolean
jobs:
items:
- $ref: '#/components/schemas/JobscheduleJobStatus'
+ $ref: "#/components/schemas/JobscheduleJobStatus"
type:
- - array
- - 'null'
+ - array
+ - "null"
required:
- - jobs
- - isAgent
+ - jobs
+ - isAgent
type: object
JobscheduleJobPrerequisite:
additionalProperties: false
@@ -7666,9 +9043,9 @@ components:
settingsUrl:
type: string
required:
- - settingKey
- - label
- - isMet
+ - settingKey
+ - label
+ - isMet
type: object
JobscheduleJobRunResponse:
additionalProperties: false
@@ -7676,7 +9053,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/JobscheduleJobRunResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/JobscheduleJobRunResponse.json
format: uri
readOnly: true
type: string
@@ -7685,8 +9062,8 @@ components:
success:
type: boolean
required:
- - success
- - message
+ - success
+ - message
type: object
JobscheduleJobStatus:
additionalProperties: false
@@ -7712,25 +9089,25 @@ components:
type: string
prerequisites:
items:
- $ref: '#/components/schemas/JobscheduleJobPrerequisite'
+ $ref: "#/components/schemas/JobscheduleJobPrerequisite"
type:
- - array
- - 'null'
+ - array
+ - "null"
schedule:
type: string
settingsKey:
type: string
required:
- - id
- - name
- - description
- - category
- - schedule
- - enabled
- - managerOnly
- - isContinuous
- - canRunManually
- - prerequisites
+ - id
+ - name
+ - description
+ - category
+ - schedule
+ - enabled
+ - managerOnly
+ - isContinuous
+ - canRunManually
+ - prerequisites
type: object
JobscheduleUpdate:
additionalProperties: false
@@ -7738,7 +9115,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/JobscheduleUpdate.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/JobscheduleUpdate.json
format: uri
readOnly: true
type: string
@@ -7746,11 +9123,13 @@ components:
type: string
autoUpdateInterval:
type: string
+ dockerClientRefreshInterval:
+ type: string
environmentHealthInterval:
type: string
eventCleanupInterval:
type: string
- gitopsSyncInterval:
+ expiredSessionsCleanupInterval:
type: string
pollingInterval:
type: string
@@ -7759,6 +9138,28 @@ components:
vulnerabilityScanInterval:
type: string
type: object
+ ListOidcRoleMappingsOutputBody:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/ListOidcRoleMappingsOutputBody.json
+ format: uri
+ readOnly: true
+ type: string
+ data:
+ items:
+ $ref: "#/components/schemas/RoleOidcRoleMapping"
+ type:
+ - array
+ - "null"
+ success:
+ type: boolean
+ required:
+ - success
+ - data
+ type: object
LoggingConfig:
additionalProperties: false
properties:
@@ -7780,16 +9181,16 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
label:
type: string
type:
type: string
required:
- - key
- - label
- - type
+ - key
+ - label
+ - type
type: object
MetaTemplateMeta:
additionalProperties: false
@@ -7808,8 +9209,8 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
updatedAt:
type: string
version:
@@ -7831,12 +9232,12 @@ components:
name:
type: string
required:
- - id
- - name
- - endpointId
- - ipv4Address
- - ipv6Address
- - macAddress
+ - id
+ - name
+ - endpointId
+ - ipv4Address
+ - ipv6Address
+ - macAddress
type: object
NetworkCountsApiResponse:
additionalProperties: false
@@ -7844,17 +9245,17 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/NetworkCountsApiResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/NetworkCountsApiResponse.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/NetworkUsageCounts'
+ $ref: "#/components/schemas/NetworkUsageCounts"
success:
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
NetworkCreateOptions:
additionalProperties: false
@@ -7878,7 +9279,7 @@ components:
description: Restrict external access to the network
type: boolean
ipam:
- $ref: '#/components/schemas/NetworkIPAM'
+ $ref: "#/components/schemas/NetworkIPAM"
description: IP Address Management configuration
labels:
additionalProperties:
@@ -7897,7 +9298,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/NetworkCreateRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/NetworkCreateRequest.json
format: uri
readOnly: true
type: string
@@ -7906,21 +9307,23 @@ components:
minLength: 1
type: string
options:
- $ref: '#/components/schemas/NetworkCreateOptions'
+ $ref: "#/components/schemas/NetworkCreateOptions"
description: Network creation options
required:
- - name
- - options
+ - name
+ - options
type: object
NetworkCreateResponse:
additionalProperties: false
properties:
+ activityId:
+ type: string
id:
type: string
warning:
type: string
required:
- - id
+ - id
type: object
NetworkCreatedApiResponse:
additionalProperties: false
@@ -7928,27 +9331,27 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/NetworkCreatedApiResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/NetworkCreatedApiResponse.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/NetworkCreateResponse'
+ $ref: "#/components/schemas/NetworkCreateResponse"
success:
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
NetworkIPAM:
additionalProperties: false
properties:
config:
items:
- $ref: '#/components/schemas/NetworkIPAMConfig'
+ $ref: "#/components/schemas/NetworkIPAMConfig"
type:
- - array
- - 'null'
+ - array
+ - "null"
driver:
type: string
options:
@@ -7976,19 +9379,19 @@ components:
attachable:
type: boolean
configFrom:
- $ref: '#/components/schemas/DockerNetworkConfigReference'
+ $ref: "#/components/schemas/DockerNetworkConfigReference"
configOnly:
type: boolean
containers:
additionalProperties:
- $ref: '#/components/schemas/DockerNetworkEndpointResource'
+ $ref: "#/components/schemas/DockerNetworkEndpointResource"
type: object
containersList:
items:
- $ref: '#/components/schemas/NetworkContainerEndpoint'
+ $ref: "#/components/schemas/NetworkContainerEndpoint"
type:
- - array
- - 'null'
+ - array
+ - "null"
created:
format: date-time
type: string
@@ -8005,7 +9408,7 @@ components:
internal:
type: boolean
ipam:
- $ref: '#/components/schemas/NetworkIPAM'
+ $ref: "#/components/schemas/NetworkIPAM"
labels:
additionalProperties:
type: string
@@ -8018,34 +9421,34 @@ components:
type: object
peers:
items:
- $ref: '#/components/schemas/DockerNetworkPeerInfo'
+ $ref: "#/components/schemas/DockerNetworkPeerInfo"
type:
- - array
- - 'null'
+ - array
+ - "null"
scope:
type: string
services:
additionalProperties:
- $ref: '#/components/schemas/DockerNetworkServiceInfo'
+ $ref: "#/components/schemas/DockerNetworkServiceInfo"
type: object
required:
- - id
- - name
- - driver
- - scope
- - created
- - enableIPv4
- - enableIPv6
- - ipam
- - internal
- - attachable
- - ingress
- - configFrom
- - configOnly
- - containers
- - options
- - labels
- - containersList
+ - id
+ - name
+ - driver
+ - scope
+ - created
+ - enableIPv4
+ - enableIPv6
+ - ipam
+ - internal
+ - attachable
+ - ingress
+ - configFrom
+ - configOnly
+ - containers
+ - options
+ - labels
+ - containersList
type: object
NetworkInspectApiResponse:
additionalProperties: false
@@ -8053,17 +9456,17 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/NetworkInspectApiResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/NetworkInspectApiResponse.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/NetworkInspect'
+ $ref: "#/components/schemas/NetworkInspect"
success:
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
NetworkMessageApiResponse:
additionalProperties: false
@@ -8071,17 +9474,17 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/NetworkMessageApiResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/NetworkMessageApiResponse.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/BaseMessageResponse'
+ $ref: "#/components/schemas/BaseMessageResponse"
success:
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
NetworkPaginatedResponse:
additionalProperties: false
@@ -8089,44 +9492,46 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/NetworkPaginatedResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/NetworkPaginatedResponse.json
format: uri
readOnly: true
type: string
counts:
- $ref: '#/components/schemas/NetworkUsageCounts'
+ $ref: "#/components/schemas/NetworkUsageCounts"
data:
items:
- $ref: '#/components/schemas/NetworkSummary'
+ $ref: "#/components/schemas/NetworkSummary"
type:
- - array
- - 'null'
+ - array
+ - "null"
pagination:
- $ref: '#/components/schemas/BasePaginationResponse'
+ $ref: "#/components/schemas/BasePaginationResponse"
success:
type: boolean
required:
- - success
- - data
- - counts
- - pagination
+ - success
+ - data
+ - counts
+ - pagination
type: object
NetworkPruneReport:
additionalProperties: false
properties:
+ activityId:
+ type: string
networksDeleted:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
spaceReclaimed:
format: int64
minimum: 0
type: integer
required:
- - networksDeleted
- - spaceReclaimed
+ - networksDeleted
+ - spaceReclaimed
type: object
NetworkPruneResponse:
additionalProperties: false
@@ -8134,17 +9539,17 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/NetworkPruneResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/NetworkPruneResponse.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/NetworkPruneReport'
+ $ref: "#/components/schemas/NetworkPruneReport"
success:
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
NetworkSummary:
additionalProperties: false
@@ -8173,34 +9578,34 @@ components:
scope:
type: string
required:
- - id
- - name
- - driver
- - scope
- - created
- - options
- - labels
- - inUse
- - isDefault
+ - id
+ - name
+ - driver
+ - scope
+ - created
+ - options
+ - labels
+ - inUse
+ - isDefault
type: object
NetworkTopology:
additionalProperties: false
properties:
edges:
items:
- $ref: '#/components/schemas/NetworkTopologyEdge'
+ $ref: "#/components/schemas/NetworkTopologyEdge"
type:
- - array
- - 'null'
+ - array
+ - "null"
nodes:
items:
- $ref: '#/components/schemas/NetworkTopologyNode'
+ $ref: "#/components/schemas/NetworkTopologyNode"
type:
- - array
- - 'null'
+ - array
+ - "null"
required:
- - nodes
- - edges
+ - nodes
+ - edges
type: object
NetworkTopologyApiResponse:
additionalProperties: false
@@ -8208,17 +9613,17 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/NetworkTopologyApiResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/NetworkTopologyApiResponse.json
format: uri
readOnly: true
type: string
data:
- $ref: '#/components/schemas/NetworkTopology'
+ $ref: "#/components/schemas/NetworkTopology"
success:
type: boolean
required:
- - success
- - data
+ - success
+ - data
type: object
NetworkTopologyEdge:
additionalProperties: false
@@ -8234,9 +9639,9 @@ components:
target:
type: string
required:
- - id
- - source
- - target
+ - id
+ - source
+ - target
type: object
NetworkTopologyNode:
additionalProperties: false
@@ -8244,16 +9649,16 @@ components:
id:
type: string
metadata:
- $ref: '#/components/schemas/NetworkTopologyNodeMetadata'
+ $ref: "#/components/schemas/NetworkTopologyNodeMetadata"
name:
type: string
type:
type: string
required:
- - id
- - name
- - type
- - metadata
+ - id
+ - name
+ - type
+ - metadata
type: object
NetworkTopologyNodeMetadata:
additionalProperties: false
@@ -8282,83 +9687,30 @@ components:
format: int64
type: integer
required:
- - inuse
- - unused
- - total
+ - inuse
+ - unused
+ - total
type: object
- NotificationAppriseResponse:
+ NotificationDispatchAutoHeal:
additionalProperties: false
properties:
- $schema:
- description: A URL to the JSON Schema for this object.
- examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/NotificationAppriseResponse.json
- format: uri
- readOnly: true
- type: string
- apiUrl:
+ containerId:
type: string
- containerUpdateTag:
- type: string
- enabled:
- type: boolean
- id:
- format: int64
- minimum: 0
- type: integer
- imageUpdateTag:
- type: string
- required:
- - id
- - apiUrl
- - enabled
- - imageUpdateTag
- - containerUpdateTag
- type: object
- NotificationAppriseUpdate:
- additionalProperties: false
- properties:
- $schema:
- description: A URL to the JSON Schema for this object.
- examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/NotificationAppriseUpdate.json
- format: uri
- readOnly: true
- type: string
- apiUrl:
- type: string
- containerUpdateTag:
- type: string
- enabled:
- type: boolean
- imageUpdateTag:
- type: string
- required:
- - apiUrl
- - enabled
- - imageUpdateTag
- - containerUpdateTag
- type: object
- NotificationDispatchAutoHeal:
- additionalProperties: false
- properties:
- containerId:
- type: string
- containerName:
+ containerName:
type: string
required:
- - containerName
- - containerId
+ - containerName
+ - containerId
type: object
NotificationDispatchBatchImageUpdate:
additionalProperties: false
properties:
updates:
additionalProperties:
- $ref: '#/components/schemas/ImageupdateResponse'
+ $ref: "#/components/schemas/ImageupdateResponse"
type: object
required:
- - updates
+ - updates
type: object
NotificationDispatchContainerUpdate:
additionalProperties: false
@@ -8372,8 +9724,8 @@ components:
oldDigest:
type: string
required:
- - containerName
- - imageRef
+ - containerName
+ - imageRef
type: object
NotificationDispatchImageUpdate:
additionalProperties: false
@@ -8381,18 +9733,18 @@ components:
imageRef:
type: string
updateInfo:
- $ref: '#/components/schemas/ImageupdateResponse'
+ $ref: "#/components/schemas/ImageupdateResponse"
required:
- - imageRef
- - updateInfo
+ - imageRef
+ - updateInfo
type: object
NotificationDispatchPruneReport:
additionalProperties: false
properties:
result:
- $ref: '#/components/schemas/SystemPruneAllResult'
+ $ref: "#/components/schemas/SystemPruneAllResult"
required:
- - result
+ - result
type: object
NotificationDispatchRequest:
additionalProperties: false
@@ -8400,26 +9752,38 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/NotificationDispatchRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/NotificationDispatchRequest.json
format: uri
readOnly: true
type: string
autoHeal:
- $ref: '#/components/schemas/NotificationDispatchAutoHeal'
+ $ref: "#/components/schemas/NotificationDispatchAutoHeal"
batchImageUpdate:
- $ref: '#/components/schemas/NotificationDispatchBatchImageUpdate'
+ $ref: "#/components/schemas/NotificationDispatchBatchImageUpdate"
containerUpdate:
- $ref: '#/components/schemas/NotificationDispatchContainerUpdate'
+ $ref: "#/components/schemas/NotificationDispatchContainerUpdate"
imageUpdate:
- $ref: '#/components/schemas/NotificationDispatchImageUpdate'
+ $ref: "#/components/schemas/NotificationDispatchImageUpdate"
kind:
type: string
pruneReport:
- $ref: '#/components/schemas/NotificationDispatchPruneReport'
+ $ref: "#/components/schemas/NotificationDispatchPruneReport"
vulnerabilityFound:
- $ref: '#/components/schemas/NotificationDispatchVulnerabilityFound'
+ $ref: "#/components/schemas/NotificationDispatchVulnerabilityFound"
+ required:
+ - kind
+ type: object
+ NotificationDispatchResponse:
+ additionalProperties: false
+ properties:
+ delivered:
+ format: int64
+ type: integer
+ message:
+ type: string
required:
- - kind
+ - message
+ - delivered
type: object
NotificationDispatchVulnerabilityFound:
additionalProperties: false
@@ -8439,10 +9803,10 @@ components:
severity:
type: string
required:
- - cveId
- - cveLink
- - severity
- - imageName
+ - cveId
+ - cveLink
+ - severity
+ - imageName
type: object
NotificationResponse:
additionalProperties: false
@@ -8450,7 +9814,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/NotificationResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/NotificationResponse.json
format: uri
readOnly: true
type: string
@@ -8466,10 +9830,20 @@ components:
provider:
type: string
required:
- - id
- - provider
- - enabled
- - config
+ - id
+ - provider
+ - enabled
+ - config
+ type: object
+ NotificationTestResponse:
+ additionalProperties: false
+ properties:
+ message:
+ type: string
+ warning:
+ type: string
+ required:
+ - message
type: object
NotificationUpdate:
additionalProperties: false
@@ -8477,7 +9851,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/NotificationUpdate.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/NotificationUpdate.json
format: uri
readOnly: true
type: string
@@ -8489,9 +9863,9 @@ components:
provider:
type: string
required:
- - provider
- - enabled
- - config
+ - provider
+ - enabled
+ - config
type: object
PortPaginatedResponse:
additionalProperties: false
@@ -8499,24 +9873,24 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/PortPaginatedResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/PortPaginatedResponse.json
format: uri
readOnly: true
type: string
data:
items:
- $ref: '#/components/schemas/PortPortMapping'
+ $ref: "#/components/schemas/PortPortMapping"
type:
- - array
- - 'null'
+ - array
+ - "null"
pagination:
- $ref: '#/components/schemas/BasePaginationResponse'
+ $ref: "#/components/schemas/BasePaginationResponse"
success:
type: boolean
required:
- - success
- - data
- - pagination
+ - success
+ - data
+ - pagination
type: object
PortPortMapping:
additionalProperties: false
@@ -8540,12 +9914,12 @@ components:
protocol:
type: string
required:
- - id
- - containerId
- - containerName
- - containerPort
- - protocol
- - isPublished
+ - id
+ - containerId
+ - containerName
+ - containerPort
+ - protocol
+ - isPublished
type: object
ProjectCreateProject:
additionalProperties: false
@@ -8553,7 +9927,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/ProjectCreateProject.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/ProjectCreateProject.json
format: uri
readOnly: true
type: string
@@ -8563,13 +9937,25 @@ components:
type: string
name:
type: string
+ projectFiles:
+ items:
+ $ref: "#/components/schemas/ProjectProjectFileDraft"
+ maxItems: 500
+ type:
+ - array
+ - "null"
required:
- - name
- - composeContent
+ - name
+ - composeContent
type: object
ProjectCreateReponse:
additionalProperties: false
properties:
+ activityId:
+ type: string
+ archivedAt:
+ format: date-time
+ type: string
createdAt:
type: string
dirName:
@@ -8578,6 +9964,8 @@ components:
type: string
id:
type: string
+ isArchived:
+ type: boolean
name:
type: string
path:
@@ -8597,14 +9985,15 @@ components:
updatedAt:
type: string
required:
- - id
- - name
- - path
- - status
- - serviceCount
- - runningCount
- - createdAt
- - updatedAt
+ - id
+ - name
+ - path
+ - status
+ - serviceCount
+ - runningCount
+ - isArchived
+ - createdAt
+ - updatedAt
type: object
ProjectDeployOptions:
additionalProperties: false
@@ -8612,7 +10001,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/ProjectDeployOptions.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/ProjectDeployOptions.json
format: uri
readOnly: true
type: string
@@ -8620,6 +10009,8 @@ components:
type: boolean
pullPolicy:
type: string
+ removeOrphans:
+ type: boolean
type: object
ProjectDestroy:
additionalProperties: false
@@ -8627,7 +10018,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/ProjectDestroy.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/ProjectDestroy.json
format: uri
readOnly: true
type: string
@@ -8639,42 +10030,65 @@ components:
ProjectDetails:
additionalProperties: false
properties:
+ activityId:
+ type: string
+ archivedAt:
+ format: date-time
+ type: string
composeContent:
type: string
+ composeFileName:
+ type: string
createdAt:
type: string
dirName:
type: string
directoryFiles:
items:
- $ref: '#/components/schemas/ProjectIncludeFile'
+ $ref: "#/components/schemas/ProjectIncludeFile"
type:
- - array
- - 'null'
+ - array
+ - "null"
envContent:
type: string
+ fileTreeRevision:
+ type: string
gitOpsManagedBy:
type: string
gitRepositoryURL:
type: string
hasBuildDirective:
type: boolean
- iconUrl:
+ iconDarkUrl:
+ type: string
+ iconLightUrl:
type: string
id:
type: string
includeFiles:
items:
- $ref: '#/components/schemas/ProjectIncludeFile'
+ $ref: "#/components/schemas/ProjectIncludeFile"
type:
- - array
- - 'null'
+ - array
+ - "null"
+ isArchived:
+ type: boolean
+ isDiscovered:
+ type: boolean
lastSyncCommit:
type: string
name:
type: string
path:
type: string
+ projectFiles:
+ items:
+ $ref: "#/components/schemas/ProjectProjectFile"
+ type:
+ - array
+ - "null"
+ redeployDisabled:
+ type: boolean
relativePath:
type: string
runningCount:
@@ -8682,40 +10096,43 @@ components:
type: integer
runtimeServices:
items:
- $ref: '#/components/schemas/ProjectRuntimeService'
+ $ref: "#/components/schemas/ProjectRuntimeService"
type:
- - array
- - 'null'
+ - array
+ - "null"
serviceCount:
format: int64
type: integer
services:
items:
- $ref: '#/components/schemas/DockerTypesServiceConfig'
+ $ref: "#/components/schemas/DockerTypesServiceConfig"
type:
- - array
- - 'null'
+ - array
+ - "null"
status:
type: string
statusReason:
type: string
+ updateInfo:
+ $ref: "#/components/schemas/ProjectUpdateInfo"
updatedAt:
type: string
urls:
items:
type: string
type:
- - array
- - 'null'
- required:
- - id
- - name
- - path
- - status
- - serviceCount
- - runningCount
- - createdAt
- - updatedAt
+ - array
+ - "null"
+ required:
+ - id
+ - name
+ - path
+ - status
+ - serviceCount
+ - runningCount
+ - isArchived
+ - createdAt
+ - updatedAt
type: object
ProjectIncludeFile:
additionalProperties: false
@@ -8727,9 +10144,8 @@ components:
relativePath:
type: string
required:
- - path
- - relativePath
- - content
+ - path
+ - relativePath
type: object
ProjectPaginatedResponse:
additionalProperties: false
@@ -8737,24 +10153,92 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/ProjectPaginatedResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/ProjectPaginatedResponse.json
format: uri
readOnly: true
type: string
data:
items:
- $ref: '#/components/schemas/ProjectDetails'
+ $ref: "#/components/schemas/ProjectDetails"
type:
- - array
- - 'null'
+ - array
+ - "null"
pagination:
- $ref: '#/components/schemas/BasePaginationResponse'
+ $ref: "#/components/schemas/BasePaginationResponse"
success:
type: boolean
required:
- - success
- - data
- - pagination
+ - success
+ - data
+ - pagination
+ type: object
+ ProjectProjectFile:
+ additionalProperties: false
+ properties:
+ content:
+ type: string
+ isDirectory:
+ type: boolean
+ modTime:
+ format: date-time
+ type: string
+ name:
+ type: string
+ path:
+ type: string
+ protected:
+ type: boolean
+ relativePath:
+ type: string
+ size:
+ format: int64
+ type: integer
+ required:
+ - path
+ - relativePath
+ - name
+ - isDirectory
+ - size
+ - modTime
+ type: object
+ ProjectProjectFileChange:
+ additionalProperties: false
+ properties:
+ content:
+ type: string
+ newName:
+ type: string
+ newParentPath:
+ type: string
+ operation:
+ enum:
+ - create_file
+ - create_folder
+ - update_file
+ - rename
+ - move
+ - delete
+ type: string
+ recursive:
+ type: boolean
+ relativePath:
+ type: string
+ required:
+ - operation
+ - relativePath
+ type: object
+ ProjectProjectFileDraft:
+ additionalProperties: false
+ properties:
+ content:
+ type: string
+ isDirectory:
+ type: boolean
+ relativePath:
+ type: string
+ required:
+ - relativePath
+ - isDirectory
type: object
ProjectRuntimeService:
additionalProperties: false
@@ -8765,7 +10249,9 @@ components:
type: string
health:
type: string
- iconUrl:
+ iconDarkUrl:
+ type: string
+ iconLightUrl:
type: string
image:
type: string
@@ -8775,20 +10261,25 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
+ redeployDisabled:
+ type: boolean
serviceConfig:
- $ref: '#/components/schemas/ServiceConfig'
+ $ref: "#/components/schemas/ServiceConfig"
status:
type: string
required:
- - name
- - image
- - status
+ - name
+ - image
+ - status
type: object
ProjectStatusCounts:
additionalProperties: false
properties:
+ archivedProjects:
+ format: int64
+ type: integer
runningProjects:
format: int64
type: integer
@@ -8799,9 +10290,10 @@ components:
format: int64
type: integer
required:
- - runningProjects
- - stoppedProjects
- - totalProjects
+ - runningProjects
+ - stoppedProjects
+ - totalProjects
+ - archivedProjects
type: object
ProjectUpdateIncludeFile:
additionalProperties: false
@@ -8809,7 +10301,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/ProjectUpdateIncludeFile.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/ProjectUpdateIncludeFile.json
format: uri
readOnly: true
type: string
@@ -8818,8 +10310,52 @@ components:
relativePath:
type: string
required:
- - relativePath
- - content
+ - relativePath
+ - content
+ type: object
+ ProjectUpdateInfo:
+ additionalProperties: false
+ properties:
+ checkedImageCount:
+ format: int64
+ type: integer
+ errorCount:
+ format: int64
+ type: integer
+ errorMessage:
+ type: string
+ hasUpdate:
+ type: boolean
+ imageCount:
+ format: int64
+ type: integer
+ imageRefs:
+ items:
+ type: string
+ type:
+ - array
+ - "null"
+ imagesWithUpdates:
+ format: int64
+ type: integer
+ lastCheckedAt:
+ format: date-time
+ type: string
+ status:
+ type: string
+ updatedImageRefs:
+ items:
+ type: string
+ type:
+ - array
+ - "null"
+ required:
+ - status
+ - hasUpdate
+ - imageCount
+ - checkedImageCount
+ - imagesWithUpdates
+ - errorCount
type: object
ProjectUpdateProject:
additionalProperties: false
@@ -8827,7 +10363,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/ProjectUpdateProject.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/ProjectUpdateProject.json
format: uri
readOnly: true
type: string
@@ -8835,6 +10371,15 @@ components:
type: string
envContent:
type: string
+ fileChanges:
+ items:
+ $ref: "#/components/schemas/ProjectProjectFileChange"
+ maxItems: 500
+ type:
+ - array
+ - "null"
+ fileTreeRevision:
+ type: string
name:
type: string
type: object
@@ -8844,7 +10389,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/PruneImagesInputBody.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/PruneImagesInputBody.json
format: uri
readOnly: true
type: string
@@ -8855,9 +10400,13 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
type: object
+ mode:
+ type: string
+ until:
+ type: string
type: object
Resource:
additionalProperties: false
@@ -8867,16 +10416,16 @@ components:
type: number
devices:
items:
- $ref: '#/components/schemas/DockerTypesDeviceRequest'
+ $ref: "#/components/schemas/DockerTypesDeviceRequest"
type:
- - array
- - 'null'
+ - array
+ - "null"
generic_resources:
items:
- $ref: '#/components/schemas/DockerTypesGenericResource'
+ $ref: "#/components/schemas/DockerTypesGenericResource"
type:
- - array
- - 'null'
+ - array
+ - "null"
memory:
format: int64
type: integer
@@ -8906,7 +10455,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/RestoreBackupFilesInputBody.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/RestoreBackupFilesInputBody.json
format: uri
readOnly: true
type: string
@@ -8915,111 +10464,587 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
required:
- - paths
+ - paths
type: object
- ScannerStatus:
+ RoleAccessSurface:
additionalProperties: false
properties:
- available:
- type: boolean
- version:
+ accessMode:
+ description: How reachability is evaluated
+ enum:
+ - permissions
+ - any-child
+ type: string
+ children:
+ description: Child surface IDs used by aggregate landing surfaces
+ items:
+ type: string
+ type:
+ - array
+ - "null"
+ fallbackOrder:
+ description: Positive ordering hint for route fallback selection
+ format: int64
+ type: integer
+ id:
+ description: Stable surface identifier
+ examples:
+ - settings.category.webhooks
+ type: string
+ kind:
+ description: Surface type
+ enum:
+ - route
+ - settings-category
+ - customize-category
+ - landing
+ type: string
+ label:
+ description: Human-readable surface label
+ examples:
+ - Webhooks
+ type: string
+ matchMode:
+ description: How permissions are combined when accessMode is permissions
+ enum:
+ - any-of
+ - all-of
+ type: string
+ permissions:
+ description: Permissions used by permission-based surfaces
+ items:
+ type: string
+ type:
+ - array
+ - "null"
+ scopeMode:
+ description: Which effective permission scope is considered
+ enum:
+ - global-only
+ - selected-env-plus-global
+ - any-effective-scope
+ type: string
+ url:
+ description: Route URL or prefix represented by this surface
+ examples:
+ - /settings/webhooks
type: string
required:
- - available
+ - id
+ - kind
+ - label
+ - accessMode
+ - matchMode
+ - scopeMode
type: object
- SearchRequest:
+ RoleCreateOidcRoleMapping:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/SearchRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/RoleCreateOidcRoleMapping.json
format: uri
readOnly: true
type: string
- query:
+ claimValue:
+ description: OIDC claim value to match
+ minLength: 1
+ type: string
+ environmentId:
+ description: Environment ID to scope the assignment to; omit for a global assignment
+ type: string
+ roleId:
+ description: Role to grant
+ minLength: 1
type: string
required:
- - query
+ - claimValue
+ - roleId
type: object
- SearchResponse:
+ RoleCreateRole:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/SearchResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/RoleCreateRole.json
format: uri
readOnly: true
type: string
- count:
- format: int64
- type: integer
- query:
+ description:
+ description: Optional human description
+ maxLength: 500
type: string
- results:
+ name:
+ description: Display name of the role
+ examples:
+ - Deploy Bot
+ maxLength: 100
+ minLength: 1
+ type: string
+ permissions:
+ description: Permission strings granted by this role
items:
- $ref: '#/components/schemas/CategoryCategory'
+ type: string
+ minItems: 1
type:
- - array
- - 'null'
+ - array
+ - "null"
required:
- - results
- - query
- - count
+ - name
+ - permissions
type: object
- ServiceConfig:
+ RoleOidcRoleMapping:
additionalProperties: false
properties:
- annotations:
- additionalProperties:
- type: string
- type: object
- attach:
- type: boolean
- blkio_config:
- $ref: '#/components/schemas/BlkioConfig'
- build:
- $ref: '#/components/schemas/BuildConfig'
- cap_add:
- items:
- type: string
- type:
- - array
- - 'null'
- cap_drop:
- items:
- type: string
- type:
- - array
- - 'null'
- cgroup:
+ claimValue:
+ description: OIDC claim value that triggers this mapping
+ examples:
+ - docker-admins
type: string
- cgroup_parent:
+ createdAt:
+ format: date-time
type: string
- command:
- items:
- type: string
- type:
- - array
- - 'null'
- configs:
- items:
- $ref: '#/components/schemas/DockerTypesServiceConfigObjConfig'
- type:
- - array
- - 'null'
- container_name:
+ environmentId:
+ description: Environment ID to scope the assignment to; omit for a global assignment
type: string
- cpu_count:
- format: int64
- type: integer
- cpu_percent:
- format: float
- type: number
+ id:
+ description: Unique identifier of the mapping
+ type: string
+ roleId:
+ description: Role to assign when the claim matches
+ type: string
+ source:
+ description: How this mapping was created. 'manual' rows are UI/API-managed and freely editable; 'env' rows are declared via OIDC_ROLE_MAPPINGS and are read-only at runtime.
+ enum:
+ - manual
+ - env
+ type: string
+ updatedAt:
+ format: date-time
+ type: string
+ required:
+ - id
+ - claimValue
+ - roleId
+ - source
+ - createdAt
+ type: object
+ RolePaginatedResponse:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/RolePaginatedResponse.json
+ format: uri
+ readOnly: true
+ type: string
+ data:
+ items:
+ $ref: "#/components/schemas/RoleRole"
+ type:
+ - array
+ - "null"
+ pagination:
+ $ref: "#/components/schemas/BasePaginationResponse"
+ success:
+ type: boolean
+ required:
+ - success
+ - data
+ - pagination
+ type: object
+ RolePermissionAction:
+ additionalProperties: false
+ properties:
+ description:
+ description: Optional longer description
+ type: string
+ key:
+ description: Action verb
+ examples:
+ - start
+ type: string
+ label:
+ description: Human-readable label
+ examples:
+ - Start
+ type: string
+ permission:
+ description: Fully-qualified permission string used in role definitions
+ examples:
+ - containers:start
+ type: string
+ requires:
+ description: Permissions that should be auto-selected when this permission is chosen in the UI
+ items:
+ type: string
+ type:
+ - array
+ - "null"
+ required:
+ - key
+ - permission
+ - label
+ type: object
+ RolePermissionPreset:
+ additionalProperties: false
+ properties:
+ description:
+ description: Optional longer description for the preset
+ type: string
+ key:
+ description: Stable preset key
+ examples:
+ - editor
+ type: string
+ label:
+ description: Human-readable preset label
+ examples:
+ - All permissions (non-admin)
+ type: string
+ permissions:
+ description: Permissions included when the preset is selected
+ items:
+ type: string
+ type:
+ - array
+ - "null"
+ required:
+ - key
+ - label
+ - permissions
+ type: object
+ RolePermissionResource:
+ additionalProperties: false
+ properties:
+ actions:
+ description: Actions available on this resource
+ items:
+ $ref: "#/components/schemas/RolePermissionAction"
+ type:
+ - array
+ - "null"
+ key:
+ description: Stable resource key
+ examples:
+ - containers
+ type: string
+ label:
+ description: Human-readable label
+ examples:
+ - Containers
+ type: string
+ scope:
+ description: "'global' for org-level perms; 'env' for per-environment perms"
+ enum:
+ - global
+ - env
+ type: string
+ required:
+ - key
+ - label
+ - scope
+ - actions
+ type: object
+ RolePermissionsManifest:
+ additionalProperties: false
+ properties:
+ accessSurfaces:
+ description: Backend-owned route, landing, and category access metadata for frontend UX gating
+ items:
+ $ref: "#/components/schemas/RoleAccessSurface"
+ type:
+ - array
+ - "null"
+ presets:
+ description: Optional preset permission bundles for bulk selection in the UI
+ items:
+ $ref: "#/components/schemas/RolePermissionPreset"
+ type:
+ - array
+ - "null"
+ resources:
+ description: Resource groups, in display order
+ items:
+ $ref: "#/components/schemas/RolePermissionResource"
+ type:
+ - array
+ - "null"
+ required:
+ - resources
+ type: object
+ RoleRole:
+ additionalProperties: false
+ properties:
+ assignedUserCount:
+ description: How many users currently hold an assignment to this role
+ format: int64
+ type: integer
+ builtIn:
+ description: True for built-in roles (Admin/Editor/Deployer/Viewer); built-ins cannot be edited or deleted
+ type: boolean
+ createdAt:
+ description: Creation timestamp
+ format: date-time
+ type: string
+ description:
+ description: Optional human description
+ type: string
+ id:
+ description: Unique identifier of the role
+ examples:
+ - role_admin
+ type: string
+ name:
+ description: Display name of the role
+ examples:
+ - Admin
+ type: string
+ permissions:
+ description: Permission strings granted by this role
+ examples:
+ - - containers:start
+ - projects:deploy
+ items:
+ type: string
+ type:
+ - array
+ - "null"
+ updatedAt:
+ description: Last update timestamp
+ format: date-time
+ type: string
+ required:
+ - id
+ - name
+ - permissions
+ - builtIn
+ - assignedUserCount
+ - createdAt
+ type: object
+ RoleRoleAssignment:
+ additionalProperties: false
+ properties:
+ createdAt:
+ description: Creation timestamp
+ format: date-time
+ type: string
+ environmentId:
+ description: Environment ID this assignment is scoped to; omit for a global assignment
+ type: string
+ id:
+ description: Unique identifier of the assignment
+ type: string
+ roleId:
+ description: ID of the granted role
+ type: string
+ source:
+ description: How the assignment was created
+ enum:
+ - manual
+ - oidc
+ type: string
+ userId:
+ description: ID of the user holding this assignment
+ type: string
+ required:
+ - id
+ - userId
+ - roleId
+ - source
+ - createdAt
+ type: object
+ RoleSetUserAssignments:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/RoleSetUserAssignments.json
+ format: uri
+ readOnly: true
+ type: string
+ assignments:
+ description: Desired manual role assignments for the user
+ items:
+ $ref: "#/components/schemas/RoleUserAssignmentInput"
+ type:
+ - array
+ - "null"
+ required:
+ - assignments
+ type: object
+ RoleUpdateOidcRoleMapping:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/RoleUpdateOidcRoleMapping.json
+ format: uri
+ readOnly: true
+ type: string
+ claimValue:
+ minLength: 1
+ type: string
+ environmentId:
+ type: string
+ roleId:
+ minLength: 1
+ type: string
+ required:
+ - claimValue
+ - roleId
+ type: object
+ RoleUpdateRole:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/RoleUpdateRole.json
+ format: uri
+ readOnly: true
+ type: string
+ description:
+ description: Optional human description
+ maxLength: 500
+ type: string
+ name:
+ description: Display name of the role
+ maxLength: 100
+ minLength: 1
+ type: string
+ permissions:
+ description: Permission strings granted by this role
+ items:
+ type: string
+ minItems: 1
+ type:
+ - array
+ - "null"
+ required:
+ - name
+ - permissions
+ type: object
+ RoleUserAssignmentInput:
+ additionalProperties: false
+ properties:
+ environmentId:
+ description: Environment ID to scope the assignment to; omit for a global assignment
+ type: string
+ roleId:
+ description: ID of the role to grant
+ type: string
+ required:
+ - roleId
+ type: object
+ ScannerStatus:
+ additionalProperties: false
+ properties:
+ available:
+ type: boolean
+ version:
+ type: string
+ required:
+ - available
+ type: object
+ SearchRequest:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/SearchRequest.json
+ format: uri
+ readOnly: true
+ type: string
+ query:
+ type: string
+ required:
+ - query
+ type: object
+ SearchResponse:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/SearchResponse.json
+ format: uri
+ readOnly: true
+ type: string
+ count:
+ format: int64
+ type: integer
+ query:
+ type: string
+ results:
+ items:
+ $ref: "#/components/schemas/CategoryCategory"
+ type:
+ - array
+ - "null"
+ required:
+ - results
+ - query
+ - count
+ type: object
+ ServiceConfig:
+ additionalProperties: false
+ properties:
+ annotations:
+ additionalProperties:
+ type: string
+ type: object
+ attach:
+ type: boolean
+ blkio_config:
+ $ref: "#/components/schemas/BlkioConfig"
+ build:
+ $ref: "#/components/schemas/BuildConfig"
+ cap_add:
+ items:
+ type: string
+ type:
+ - array
+ - "null"
+ cap_drop:
+ items:
+ type: string
+ type:
+ - array
+ - "null"
+ cgroup:
+ type: string
+ cgroup_parent:
+ type: string
+ command:
+ items:
+ type: string
+ type:
+ - array
+ - "null"
+ configs:
+ items:
+ $ref: "#/components/schemas/DockerTypesServiceConfigObjConfig"
+ type:
+ - array
+ - "null"
+ container_name:
+ type: string
+ cpu_count:
+ format: int64
+ type: integer
+ cpu_percent:
+ format: float
+ type: number
cpu_period:
format: int64
type: integer
@@ -9041,45 +11066,45 @@ components:
cpuset:
type: string
credential_spec:
- $ref: '#/components/schemas/CredentialSpecConfig'
+ $ref: "#/components/schemas/CredentialSpecConfig"
depends_on:
additionalProperties:
- $ref: '#/components/schemas/DockerTypesServiceDependency'
+ $ref: "#/components/schemas/DockerTypesServiceDependency"
type: object
deploy:
- $ref: '#/components/schemas/DeployConfig'
+ $ref: "#/components/schemas/DeployConfig"
develop:
- $ref: '#/components/schemas/DevelopConfig'
+ $ref: "#/components/schemas/DevelopConfig"
device_cgroup_rules:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
devices:
items:
- $ref: '#/components/schemas/DockerTypesDeviceMapping'
+ $ref: "#/components/schemas/DockerTypesDeviceMapping"
type:
- - array
- - 'null'
+ - array
+ - "null"
dns:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
dns_opt:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
dns_search:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
dockerfile:
type: string
domainname:
@@ -9088,56 +11113,56 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
env_file:
items:
- $ref: '#/components/schemas/DockerTypesEnvFile'
+ $ref: "#/components/schemas/DockerTypesEnvFile"
type:
- - array
- - 'null'
+ - array
+ - "null"
environment:
additionalProperties:
type:
- - string
- - 'null'
+ - string
+ - "null"
type: object
expose:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
extends:
- $ref: '#/components/schemas/ExtendsConfig'
+ $ref: "#/components/schemas/ExtendsConfig"
external_links:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
extra_hosts:
additionalProperties:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
type: object
gpus:
items:
- $ref: '#/components/schemas/DockerTypesDeviceRequest'
+ $ref: "#/components/schemas/DockerTypesDeviceRequest"
type:
- - array
- - 'null'
+ - array
+ - "null"
group_add:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
healthcheck:
- $ref: '#/components/schemas/HealthCheckConfig'
+ $ref: "#/components/schemas/HealthCheckConfig"
hostname:
type: string
image:
@@ -9152,8 +11177,8 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
labels:
additionalProperties:
type: string
@@ -9162,8 +11187,8 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
log_driver:
type: string
log_opt:
@@ -9171,7 +11196,7 @@ components:
type: string
type: object
logging:
- $ref: '#/components/schemas/LoggingConfig'
+ $ref: "#/components/schemas/LoggingConfig"
mac_address:
type: string
mem_limit:
@@ -9188,7 +11213,7 @@ components:
type: integer
models:
additionalProperties:
- $ref: '#/components/schemas/ServiceModelConfig'
+ $ref: "#/components/schemas/ServiceModelConfig"
type: object
net:
type: string
@@ -9196,7 +11221,7 @@ components:
type: string
networks:
additionalProperties:
- $ref: '#/components/schemas/ServiceNetworkConfig'
+ $ref: "#/components/schemas/ServiceNetworkConfig"
type: object
oom_kill_disable:
type: boolean
@@ -9212,32 +11237,38 @@ components:
type: string
ports:
items:
- $ref: '#/components/schemas/DockerTypesServicePortConfig'
+ $ref: "#/components/schemas/DockerTypesServicePortConfig"
type:
- - array
- - 'null'
+ - array
+ - "null"
post_start:
items:
- $ref: '#/components/schemas/DockerTypesServiceHook'
+ $ref: "#/components/schemas/DockerTypesServiceHook"
+ type:
+ - array
+ - "null"
+ pre_start:
+ items:
+ $ref: "#/components/schemas/DockerTypesServiceHook"
type:
- - array
- - 'null'
+ - array
+ - "null"
pre_stop:
items:
- $ref: '#/components/schemas/DockerTypesServiceHook'
+ $ref: "#/components/schemas/DockerTypesServiceHook"
type:
- - array
- - 'null'
+ - array
+ - "null"
privileged:
type: boolean
profiles:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
provider:
- $ref: '#/components/schemas/ServiceProviderConfig'
+ $ref: "#/components/schemas/ServiceProviderConfig"
pull_policy:
type: string
read_only:
@@ -9251,16 +11282,16 @@ components:
type: integer
secrets:
items:
- $ref: '#/components/schemas/DockerTypesServiceSecretConfig'
+ $ref: "#/components/schemas/DockerTypesServiceSecretConfig"
type:
- - array
- - 'null'
+ - array
+ - "null"
security_opt:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
shm_size:
format: int64
type: integer
@@ -9283,13 +11314,13 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
tty:
type: boolean
ulimits:
additionalProperties:
- $ref: '#/components/schemas/UlimitsConfig'
+ $ref: "#/components/schemas/UlimitsConfig"
type: object
use_api_socket:
type: boolean
@@ -9303,21 +11334,21 @@ components:
type: string
volumes:
items:
- $ref: '#/components/schemas/DockerTypesServiceVolumeConfig'
+ $ref: "#/components/schemas/DockerTypesServiceVolumeConfig"
type:
- - array
- - 'null'
+ - array
+ - "null"
volumes_from:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
working_dir:
type: string
required:
- - command
- - entrypoint
+ - command
+ - entrypoint
type: object
ServiceModelConfig:
additionalProperties: false
@@ -9334,8 +11365,8 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
driver_opts:
additionalProperties:
type: string
@@ -9353,8 +11384,8 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
mac_address:
type: string
priority:
@@ -9369,8 +11400,8 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
type: object
type:
type: string
@@ -9422,7 +11453,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/SetAutoUpdateInputBody.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/SetAutoUpdateInputBody.json
format: uri
readOnly: true
type: string
@@ -9430,7 +11461,7 @@ components:
description: Whether auto-update is enabled for this container
type: boolean
required:
- - enabled
+ - enabled
type: object
SettingsPublicSetting:
additionalProperties: false
@@ -9442,9 +11473,9 @@ components:
value:
type: string
required:
- - key
- - type
- - value
+ - key
+ - type
+ - value
type: object
SettingsSettingDto:
additionalProperties: false
@@ -9458,10 +11489,10 @@ components:
value:
type: string
required:
- - isPublic
- - key
- - type
- - value
+ - isPublic
+ - key
+ - type
+ - value
type: object
SettingsUpdate:
additionalProperties: false
@@ -9469,18 +11500,22 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/SettingsUpdate.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/SettingsUpdate.json
format: uri
readOnly: true
type: string
accentColor:
type: string
+ activityHistoryMaxEntries:
+ type: string
+ activityHistoryRetentionDays:
+ type: string
+ animationsEnabled:
+ type: string
applicationTheme:
type: string
authLocalEnabled:
type: string
- authOidcConfig:
- type: string
authPasswordPolicy:
type: string
authSessionTimeout:
@@ -9503,6 +11538,8 @@ components:
type: string
autoUpdateInterval:
type: string
+ avatarMaxUploadSizeMb:
+ type: string
baseServerUrl:
type: string
buildProvider:
@@ -9523,12 +11560,12 @@ components:
type: string
dockerApiTimeout:
type: string
+ dockerClientRefreshInterval:
+ type: string
dockerHost:
type: string
dockerImagePullTimeout:
type: string
- dockerPruneMode:
- type: string
enableGravatar:
type: string
environmentHealthInterval:
@@ -9543,20 +11580,26 @@ components:
type: string
gitSyncMaxTotalSizeMb:
type: string
+ glassEffectsEnabled:
+ type: string
httpClientTimeout:
type: string
+ iconCatalog:
+ type: string
keyboardShortcutsEnabled:
type: string
+ lifecycleDefaultRunnerImage:
+ type: string
+ lifecycleEnabled:
+ type: string
+ lifecycleMaxTimeoutSec:
+ type: string
maxImageUploadSize:
type: string
mobileNavigationMode:
type: string
mobileNavigationShowLabels:
type: string
- oidcAdminClaim:
- type: string
- oidcAdminValue:
- type: string
oidcAutoRedirectToProvider:
type: string
oidcClientId:
@@ -9565,6 +11608,8 @@ components:
type: string
oidcEnabled:
type: string
+ oidcGroupsClaim:
+ type: string
oidcIssuerUrl:
type: string
oidcMergeAccounts:
@@ -9587,30 +11632,42 @@ components:
type: string
proxyRequestTimeout:
type: string
- registryTimeout:
+ pruneBuildCacheMode:
type: string
- scheduledPruneBuildCache:
+ pruneBuildCacheUntil:
type: string
- scheduledPruneContainers:
+ pruneContainerMode:
type: string
- scheduledPruneEnabled:
+ pruneContainerUntil:
type: string
- scheduledPruneImages:
+ pruneImageMode:
type: string
- scheduledPruneInterval:
+ pruneImageUntil:
+ type: string
+ pruneNetworkMode:
type: string
- scheduledPruneNetworks:
+ pruneNetworkUntil:
type: string
- scheduledPruneVolumes:
+ pruneVolumeMode:
+ type: string
+ registryTimeout:
+ type: string
+ scheduledPruneEnabled:
+ type: string
+ scheduledPruneInterval:
type: string
sidebarHoverExpansion:
type: string
swarmStackSourcesDirectory:
type: string
+ templatesDirectory:
+ type: string
trivyConcurrentScanContainers:
type: string
trivyCpuLimit:
type: string
+ trivyIgnoreUnfixed:
+ type: string
trivyImage:
type: string
trivyMemoryLimitMb:
@@ -9627,6 +11684,14 @@ components:
type: string
trivySecurityOpts:
type: string
+ trivyServerEnabled:
+ type: string
+ trivyServerToken:
+ type: string
+ trivyServerUrl:
+ type: string
+ volumeBrowserHelperIdleTimeout:
+ type: string
vulnerabilityScanEnabled:
type: string
vulnerabilityScanInterval:
@@ -9638,14 +11703,14 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmConfigCreateRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmConfigCreateRequest.json
format: uri
readOnly: true
type: string
spec:
description: Config specification
required:
- - spec
+ - spec
type: object
SwarmConfigSummary:
additionalProperties: false
@@ -9656,18 +11721,18 @@ components:
id:
type: string
spec:
- $ref: '#/components/schemas/DockerSwarmConfigSpec'
+ $ref: "#/components/schemas/DockerSwarmConfigSpec"
updatedAt:
format: date-time
type: string
version:
- $ref: '#/components/schemas/DockerSwarmVersion'
+ $ref: "#/components/schemas/DockerSwarmVersion"
required:
- - id
- - version
- - createdAt
- - updatedAt
- - spec
+ - id
+ - version
+ - createdAt
+ - updatedAt
+ - spec
type: object
SwarmConfigUpdateRequest:
additionalProperties: false
@@ -9675,7 +11740,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmConfigUpdateRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmConfigUpdateRequest.json
format: uri
readOnly: true
type: string
@@ -9686,13 +11751,13 @@ components:
minimum: 0
type: integer
required:
- - spec
+ - spec
type: object
SwarmNodeAgentDeployment:
additionalProperties: false
properties:
agent:
- $ref: '#/components/schemas/SwarmNodeAgentStatus'
+ $ref: "#/components/schemas/SwarmNodeAgentStatus"
dockerCompose:
description: Docker compose YAML snippet
type: string
@@ -9701,11 +11766,14 @@ components:
type: string
environmentId:
type: string
+ mtls:
+ $ref: "#/components/schemas/DeploymentSnippetMTLS"
+ description: Optional Arcane-generated mTLS deployment assets for edge agents
required:
- - environmentId
- - agent
- - dockerRun
- - dockerCompose
+ - environmentId
+ - agent
+ - dockerRun
+ - dockerCompose
type: object
SwarmNodeAgentStatus:
additionalProperties: false
@@ -9727,7 +11795,7 @@ components:
state:
type: string
required:
- - state
+ - state
type: object
SwarmNodeIdentity:
additionalProperties: false
@@ -9743,11 +11811,11 @@ components:
swarmNodeId:
type: string
required:
- - swarmNodeId
- - hostname
- - role
- - engineVersion
- - swarmActive
+ - swarmNodeId
+ - hostname
+ - role
+ - engineVersion
+ - swarmActive
type: object
SwarmNodeSummary:
additionalProperties: false
@@ -9755,7 +11823,7 @@ components:
address:
type: string
agent:
- $ref: '#/components/schemas/SwarmNodeAgentStatus'
+ $ref: "#/components/schemas/SwarmNodeAgentStatus"
availability:
type: string
createdAt:
@@ -9781,18 +11849,22 @@ components:
type: string
status:
type: string
+ systemLabels:
+ additionalProperties:
+ type: string
+ type: object
updatedAt:
format: date-time
type: string
required:
- - id
- - hostname
- - role
- - availability
- - status
- - createdAt
- - updatedAt
- - agent
+ - id
+ - hostname
+ - role
+ - availability
+ - status
+ - createdAt
+ - updatedAt
+ - agent
type: object
SwarmNodeUpdateRequest:
additionalProperties: false
@@ -9800,7 +11872,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmNodeUpdateRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmNodeUpdateRequest.json
format: uri
readOnly: true
type: string
@@ -9825,24 +11897,24 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmPaginatedResponseNodeSummary.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmPaginatedResponseNodeSummary.json
format: uri
readOnly: true
type: string
data:
items:
- $ref: '#/components/schemas/SwarmNodeSummary'
+ $ref: "#/components/schemas/SwarmNodeSummary"
type:
- - array
- - 'null'
+ - array
+ - "null"
pagination:
- $ref: '#/components/schemas/BasePaginationResponse'
+ $ref: "#/components/schemas/BasePaginationResponse"
success:
type: boolean
required:
- - success
- - data
- - pagination
+ - success
+ - data
+ - pagination
type: object
SwarmPaginatedResponseServiceSummary:
additionalProperties: false
@@ -9850,24 +11922,24 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmPaginatedResponseServiceSummary.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmPaginatedResponseServiceSummary.json
format: uri
readOnly: true
type: string
data:
items:
- $ref: '#/components/schemas/SwarmServiceSummary'
+ $ref: "#/components/schemas/SwarmServiceSummary"
type:
- - array
- - 'null'
+ - array
+ - "null"
pagination:
- $ref: '#/components/schemas/BasePaginationResponse'
+ $ref: "#/components/schemas/BasePaginationResponse"
success:
type: boolean
required:
- - success
- - data
- - pagination
+ - success
+ - data
+ - pagination
type: object
SwarmPaginatedResponseStackSummary:
additionalProperties: false
@@ -9875,24 +11947,24 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmPaginatedResponseStackSummary.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmPaginatedResponseStackSummary.json
format: uri
readOnly: true
type: string
data:
items:
- $ref: '#/components/schemas/SwarmStackSummary'
+ $ref: "#/components/schemas/SwarmStackSummary"
type:
- - array
- - 'null'
+ - array
+ - "null"
pagination:
- $ref: '#/components/schemas/BasePaginationResponse'
+ $ref: "#/components/schemas/BasePaginationResponse"
success:
type: boolean
required:
- - success
- - data
- - pagination
+ - success
+ - data
+ - pagination
type: object
SwarmPaginatedResponseTaskSummary:
additionalProperties: false
@@ -9900,24 +11972,24 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmPaginatedResponseTaskSummary.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmPaginatedResponseTaskSummary.json
format: uri
readOnly: true
type: string
data:
items:
- $ref: '#/components/schemas/SwarmTaskSummary'
+ $ref: "#/components/schemas/SwarmTaskSummary"
type:
- - array
- - 'null'
+ - array
+ - "null"
pagination:
- $ref: '#/components/schemas/BasePaginationResponse'
+ $ref: "#/components/schemas/BasePaginationResponse"
success:
type: boolean
required:
- - success
- - data
- - pagination
+ - success
+ - data
+ - pagination
type: object
SwarmRuntimeStatus:
additionalProperties: false
@@ -9925,7 +11997,7 @@ components:
enabled:
type: boolean
required:
- - enabled
+ - enabled
type: object
SwarmSecretCreateRequest:
additionalProperties: false
@@ -9933,14 +12005,14 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmSecretCreateRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmSecretCreateRequest.json
format: uri
readOnly: true
type: string
spec:
description: Secret specification
required:
- - spec
+ - spec
type: object
SwarmSecretSummary:
additionalProperties: false
@@ -9951,18 +12023,18 @@ components:
id:
type: string
spec:
- $ref: '#/components/schemas/DockerSwarmSecretSpec'
+ $ref: "#/components/schemas/DockerSwarmSecretSpec"
updatedAt:
format: date-time
type: string
version:
- $ref: '#/components/schemas/DockerSwarmVersion'
+ $ref: "#/components/schemas/DockerSwarmVersion"
required:
- - id
- - version
- - createdAt
- - updatedAt
- - spec
+ - id
+ - version
+ - createdAt
+ - updatedAt
+ - spec
type: object
SwarmSecretUpdateRequest:
additionalProperties: false
@@ -9970,7 +12042,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmSecretUpdateRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmSecretUpdateRequest.json
format: uri
readOnly: true
type: string
@@ -9981,7 +12053,7 @@ components:
minimum: 0
type: integer
required:
- - spec
+ - spec
type: object
SwarmServiceCreateOptions:
additionalProperties: false
@@ -9997,17 +12069,17 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmServiceCreateRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmServiceCreateRequest.json
format: uri
readOnly: true
type: string
options:
- $ref: '#/components/schemas/SwarmServiceCreateOptions'
+ $ref: "#/components/schemas/SwarmServiceCreateOptions"
description: Additional create options
spec:
description: Service specification
required:
- - spec
+ - spec
type: object
SwarmServiceCreateResponse:
additionalProperties: false
@@ -10018,10 +12090,10 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
required:
- - id
+ - id
type: object
SwarmServiceInspect:
additionalProperties: false
@@ -10030,41 +12102,41 @@ components:
format: date-time
type: string
endpoint:
- $ref: '#/components/schemas/DockerSwarmEndpoint'
+ $ref: "#/components/schemas/DockerSwarmEndpoint"
id:
type: string
mounts:
items:
- $ref: '#/components/schemas/SwarmServiceMount'
+ $ref: "#/components/schemas/SwarmServiceMount"
type:
- - array
- - 'null'
+ - array
+ - "null"
networkDetails:
additionalProperties:
- $ref: '#/components/schemas/SwarmServiceNetworkDetail'
+ $ref: "#/components/schemas/SwarmServiceNetworkDetail"
type: object
nodes:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
spec:
- $ref: '#/components/schemas/DockerSwarmServiceSpec'
+ $ref: "#/components/schemas/DockerSwarmServiceSpec"
updateStatus:
- $ref: '#/components/schemas/DockerSwarmUpdateStatus'
+ $ref: "#/components/schemas/DockerSwarmUpdateStatus"
updatedAt:
format: date-time
type: string
version:
- $ref: '#/components/schemas/DockerSwarmVersion'
+ $ref: "#/components/schemas/DockerSwarmVersion"
required:
- - id
- - version
- - createdAt
- - updatedAt
- - spec
- - endpoint
+ - id
+ - version
+ - createdAt
+ - updatedAt
+ - spec
+ - endpoint
type: object
SwarmServiceMount:
additionalProperties: false
@@ -10086,8 +12158,8 @@ components:
type: string
type: object
required:
- - type
- - target
+ - type
+ - target
type: object
SwarmServiceNetworkConfigDetail:
additionalProperties: false
@@ -10100,16 +12172,16 @@ components:
type: boolean
ipv4Configs:
items:
- $ref: '#/components/schemas/SwarmServiceNetworkIPAMConfig'
+ $ref: "#/components/schemas/SwarmServiceNetworkIPAMConfig"
type:
- - array
- - 'null'
+ - array
+ - "null"
ipv6Configs:
items:
- $ref: '#/components/schemas/SwarmServiceNetworkIPAMConfig'
+ $ref: "#/components/schemas/SwarmServiceNetworkIPAMConfig"
type:
- - array
- - 'null'
+ - array
+ - "null"
name:
type: string
options:
@@ -10119,11 +12191,11 @@ components:
scope:
type: string
required:
- - name
- - driver
- - scope
- - enableIPv4
- - enableIPv6
+ - name
+ - driver
+ - scope
+ - enableIPv4
+ - enableIPv6
type: object
SwarmServiceNetworkDetail:
additionalProperties: false
@@ -10133,7 +12205,7 @@ components:
configFrom:
type: string
configNetwork:
- $ref: '#/components/schemas/SwarmServiceNetworkConfigDetail'
+ $ref: "#/components/schemas/SwarmServiceNetworkConfigDetail"
configOnly:
type: boolean
driver:
@@ -10150,10 +12222,10 @@ components:
type: boolean
ipamConfigs:
items:
- $ref: '#/components/schemas/SwarmServiceNetworkIPAMConfig'
+ $ref: "#/components/schemas/SwarmServiceNetworkIPAMConfig"
type:
- - array
- - 'null'
+ - array
+ - "null"
name:
type: string
options:
@@ -10163,16 +12235,16 @@ components:
scope:
type: string
required:
- - id
- - name
- - driver
- - scope
- - internal
- - attachable
- - ingress
- - enableIPv4
- - enableIPv6
- - configOnly
+ - id
+ - name
+ - driver
+ - scope
+ - internal
+ - attachable
+ - ingress
+ - enableIPv4
+ - enableIPv6
+ - configOnly
type: object
SwarmServiceNetworkIPAMConfig:
additionalProperties: false
@@ -10200,8 +12272,8 @@ components:
minimum: 0
type: integer
required:
- - protocol
- - targetPort
+ - protocol
+ - targetPort
type: object
SwarmServiceScaleRequest:
additionalProperties: false
@@ -10209,7 +12281,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmServiceScaleRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmServiceScaleRequest.json
format: uri
readOnly: true
type: string
@@ -10218,7 +12290,7 @@ components:
minimum: 0
type: integer
required:
- - replicas
+ - replicas
type: object
SwarmServiceSummary:
additionalProperties: false
@@ -10238,30 +12310,30 @@ components:
type: string
mounts:
items:
- $ref: '#/components/schemas/SwarmServiceMount'
+ $ref: "#/components/schemas/SwarmServiceMount"
type:
- - array
- - 'null'
+ - array
+ - "null"
name:
type: string
networks:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
nodes:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
ports:
items:
- $ref: '#/components/schemas/SwarmServicePort'
+ $ref: "#/components/schemas/SwarmServicePort"
type:
- - array
- - 'null'
+ - array
+ - "null"
replicas:
format: int64
minimum: 0
@@ -10276,19 +12348,19 @@ components:
format: date-time
type: string
required:
- - id
- - name
- - image
- - mode
- - replicas
- - runningReplicas
- - ports
- - createdAt
- - updatedAt
- - labels
- - nodes
- - networks
- - mounts
+ - id
+ - name
+ - image
+ - mode
+ - replicas
+ - runningReplicas
+ - ports
+ - createdAt
+ - updatedAt
+ - labels
+ - nodes
+ - networks
+ - mounts
type: object
SwarmServiceUpdateOptions:
additionalProperties: false
@@ -10308,21 +12380,21 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmServiceUpdateRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmServiceUpdateRequest.json
format: uri
readOnly: true
type: string
options:
- $ref: '#/components/schemas/SwarmServiceUpdateOptions'
+ $ref: "#/components/schemas/SwarmServiceUpdateOptions"
spec:
- $ref: '#/components/schemas/DockerSwarmServiceSpec'
+ $ref: "#/components/schemas/DockerSwarmServiceSpec"
version:
format: int64
minimum: 0
type: integer
required:
- - version
- - spec
+ - version
+ - spec
type: object
SwarmServiceUpdateResponse:
additionalProperties: false
@@ -10331,8 +12403,8 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
type: object
SwarmStackDeployRequest:
additionalProperties: false
@@ -10340,7 +12412,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmStackDeployRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmStackDeployRequest.json
format: uri
readOnly: true
type: string
@@ -10348,6 +12420,12 @@ components:
type: string
envContent:
type: string
+ files:
+ items:
+ $ref: "#/components/schemas/SwarmSyncFile"
+ type:
+ - array
+ - "null"
name:
type: string
prune:
@@ -10356,9 +12434,11 @@ components:
type: string
withRegistryAuth:
type: boolean
+ workingDir:
+ type: string
required:
- - name
- - composeContent
+ - name
+ - composeContent
type: object
SwarmStackDeployResponse:
additionalProperties: false
@@ -10366,7 +12446,7 @@ components:
name:
type: string
required:
- - name
+ - name
type: object
SwarmStackInspect:
additionalProperties: false
@@ -10385,11 +12465,11 @@ components:
format: date-time
type: string
required:
- - name
- - namespace
- - services
- - createdAt
- - updatedAt
+ - name
+ - namespace
+ - services
+ - createdAt
+ - updatedAt
type: object
SwarmStackRenderConfigRequest:
additionalProperties: false
@@ -10397,7 +12477,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmStackRenderConfigRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmStackRenderConfigRequest.json
format: uri
readOnly: true
type: string
@@ -10408,8 +12488,8 @@ components:
name:
type: string
required:
- - name
- - composeContent
+ - name
+ - composeContent
type: object
SwarmStackRenderConfigResponse:
additionalProperties: false
@@ -10418,50 +12498,50 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
name:
type: string
networks:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
renderedCompose:
type: string
secrets:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
services:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
volumes:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
warnings:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
required:
- - name
- - renderedCompose
- - services
- - networks
- - volumes
- - configs
- - secrets
+ - name
+ - renderedCompose
+ - services
+ - networks
+ - volumes
+ - configs
+ - secrets
type: object
SwarmStackSource:
additionalProperties: false
@@ -10470,11 +12550,40 @@ components:
type: string
envContent:
type: string
+ files:
+ items:
+ $ref: "#/components/schemas/SwarmSyncFile"
+ type:
+ - array
+ - "null"
name:
type: string
required:
- - name
- - composeContent
+ - name
+ - composeContent
+ type: object
+ SwarmStackSourceUpdateRequest:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmStackSourceUpdateRequest.json
+ format: uri
+ readOnly: true
+ type: string
+ composeContent:
+ type: string
+ envContent:
+ type: string
+ files:
+ items:
+ $ref: "#/components/schemas/SwarmSyncFile"
+ type:
+ - array
+ - "null"
+ required:
+ - composeContent
type: object
SwarmStackSummary:
additionalProperties: false
@@ -10495,12 +12604,12 @@ components:
format: date-time
type: string
required:
- - id
- - name
- - namespace
- - services
- - createdAt
- - updatedAt
+ - id
+ - name
+ - namespace
+ - services
+ - createdAt
+ - updatedAt
type: object
SwarmSwarmInfo:
additionalProperties: false
@@ -10513,16 +12622,16 @@ components:
rootRotationInProgress:
type: boolean
spec:
- $ref: '#/components/schemas/DockerSwarmSpec'
+ $ref: "#/components/schemas/DockerSwarmSpec"
updatedAt:
format: date-time
type: string
required:
- - id
- - createdAt
- - updatedAt
- - spec
- - rootRotationInProgress
+ - id
+ - createdAt
+ - updatedAt
+ - spec
+ - rootRotationInProgress
type: object
SwarmSwarmInitRequest:
additionalProperties: false
@@ -10530,7 +12639,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmSwarmInitRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmSwarmInitRequest.json
format: uri
readOnly: true
type: string
@@ -10550,20 +12659,20 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
forceNewCluster:
type: boolean
listenAddr:
type: string
spec:
- $ref: '#/components/schemas/DockerSwarmSpec'
+ description: Swarm specification
subnetSize:
format: int32
minimum: 0
type: integer
required:
- - spec
+ - spec
type: object
SwarmSwarmInitResponse:
additionalProperties: false
@@ -10571,7 +12680,7 @@ components:
nodeId:
type: string
required:
- - nodeId
+ - nodeId
type: object
SwarmSwarmJoinRequest:
additionalProperties: false
@@ -10579,7 +12688,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmSwarmJoinRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmSwarmJoinRequest.json
format: uri
readOnly: true
type: string
@@ -10597,11 +12706,11 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
required:
- - remoteAddrs
- - joinToken
+ - remoteAddrs
+ - joinToken
type: object
SwarmSwarmJoinTokensResponse:
additionalProperties: false
@@ -10611,8 +12720,8 @@ components:
worker:
type: string
required:
- - worker
- - manager
+ - worker
+ - manager
type: object
SwarmSwarmLeaveRequest:
additionalProperties: false
@@ -10620,7 +12729,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmSwarmLeaveRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmSwarmLeaveRequest.json
format: uri
readOnly: true
type: string
@@ -10633,7 +12742,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmSwarmRotateJoinTokensRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmSwarmRotateJoinTokensRequest.json
format: uri
readOnly: true
type: string
@@ -10648,7 +12757,7 @@ components:
unlockKey:
type: string
required:
- - unlockKey
+ - unlockKey
type: object
SwarmSwarmUnlockRequest:
additionalProperties: false
@@ -10656,14 +12765,14 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmSwarmUnlockRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmSwarmUnlockRequest.json
format: uri
readOnly: true
type: string
key:
type: string
required:
- - key
+ - key
type: object
SwarmSwarmUpdateRequest:
additionalProperties: false
@@ -10671,7 +12780,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmSwarmUpdateRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmSwarmUpdateRequest.json
format: uri
readOnly: true
type: string
@@ -10682,13 +12791,25 @@ components:
rotateWorkerToken:
type: boolean
spec:
- $ref: '#/components/schemas/DockerSwarmSpec'
+ description: Updated swarm specification
version:
format: int64
minimum: 0
type: integer
required:
- - spec
+ - spec
+ type: object
+ SwarmSyncFile:
+ additionalProperties: false
+ properties:
+ content:
+ contentEncoding: base64
+ type: string
+ relativePath:
+ type: string
+ required:
+ - relativePath
+ - content
type: object
SwarmTaskSummary:
additionalProperties: false
@@ -10725,16 +12846,16 @@ components:
format: date-time
type: string
required:
- - id
- - name
- - serviceId
- - serviceName
- - nodeId
- - nodeName
- - desiredState
- - currentState
- - createdAt
- - updatedAt
+ - id
+ - name
+ - serviceId
+ - serviceName
+ - nodeId
+ - nodeName
+ - desiredState
+ - currentState
+ - createdAt
+ - updatedAt
type: object
SystemConvertDockerRunRequest:
additionalProperties: false
@@ -10742,53 +12863,213 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/SystemConvertDockerRunRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/SystemConvertDockerRunRequest.json
+ format: uri
+ readOnly: true
+ type: string
+ dockerRunCommand:
+ type: string
+ required:
+ - dockerRunCommand
+ type: object
+ SystemConvertDockerRunResponse:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/SystemConvertDockerRunResponse.json
+ format: uri
+ readOnly: true
+ type: string
+ dockerCompose:
+ type: string
+ envVars:
+ type: string
+ serviceName:
+ type: string
+ success:
+ type: boolean
+ required:
+ - success
+ - dockerCompose
+ - envVars
+ - serviceName
+ type: object
+ SystemDiagnostics:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/SystemDiagnostics.json
+ format: uri
+ readOnly: true
+ type: string
+ gc:
+ $ref: "#/components/schemas/SystemGCInfo"
+ memory:
+ $ref: "#/components/schemas/SystemMemoryInfo"
+ runtime:
+ $ref: "#/components/schemas/SystemRuntimeInfo"
+ timestamp:
+ format: date-time
+ type: string
+ websocket:
+ $ref: "#/components/schemas/SystemWebSocketDiagnostics"
+ required:
+ - timestamp
+ - runtime
+ - memory
+ - gc
+ - websocket
+ type: object
+ SystemGCInfo:
+ additionalProperties: false
+ properties:
+ lastGc:
+ format: date-time
+ type: string
+ numGc:
+ format: int64
+ type: integer
+ pauseTotalNs:
+ format: int64
+ type: integer
+ recentPausesNs:
+ items:
+ format: int64
+ type: integer
+ type:
+ - array
+ - "null"
+ required:
+ - lastGc
+ - numGc
+ - pauseTotalNs
+ - recentPausesNs
+ type: object
+ SystemHealthResponse:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/SystemHealthResponse.json
format: uri
readOnly: true
type: string
- dockerRunCommand:
+ status:
type: string
required:
- - dockerRunCommand
+ - status
type: object
- SystemConvertDockerRunResponse:
+ SystemLogEntry:
additionalProperties: false
properties:
- $schema:
- description: A URL to the JSON Schema for this object.
- examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/SystemConvertDockerRunResponse.json
- format: uri
- readOnly: true
- type: string
- dockerCompose:
+ attrs:
+ additionalProperties: {}
+ type: object
+ level:
type: string
- envVars:
+ message:
type: string
- serviceName:
+ time:
+ format: date-time
type: string
- success:
- type: boolean
required:
- - success
- - dockerCompose
- - envVars
- - serviceName
+ - time
+ - level
+ - message
type: object
- SystemHealthResponse:
+ SystemMemoryInfo:
additionalProperties: false
properties:
- $schema:
- description: A URL to the JSON Schema for this object.
- examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/SystemHealthResponse.json
- format: uri
- readOnly: true
- type: string
- status:
- type: string
+ alloc:
+ format: int64
+ minimum: 0
+ type: integer
+ gcCpuFraction:
+ format: double
+ type: number
+ heapAlloc:
+ format: int64
+ minimum: 0
+ type: integer
+ heapIdle:
+ format: int64
+ minimum: 0
+ type: integer
+ heapInuse:
+ format: int64
+ minimum: 0
+ type: integer
+ heapObjects:
+ format: int64
+ minimum: 0
+ type: integer
+ heapReleased:
+ format: int64
+ minimum: 0
+ type: integer
+ heapSys:
+ format: int64
+ minimum: 0
+ type: integer
+ mcacheInuse:
+ format: int64
+ minimum: 0
+ type: integer
+ mspanInuse:
+ format: int64
+ minimum: 0
+ type: integer
+ nextGc:
+ format: int64
+ minimum: 0
+ type: integer
+ numForcedGc:
+ format: int32
+ minimum: 0
+ type: integer
+ numGc:
+ format: int32
+ minimum: 0
+ type: integer
+ stackInuse:
+ format: int64
+ minimum: 0
+ type: integer
+ stackSys:
+ format: int64
+ minimum: 0
+ type: integer
+ sys:
+ format: int64
+ minimum: 0
+ type: integer
+ totalAlloc:
+ format: int64
+ minimum: 0
+ type: integer
required:
- - status
+ - alloc
+ - totalAlloc
+ - sys
+ - heapAlloc
+ - heapSys
+ - heapInuse
+ - heapIdle
+ - heapReleased
+ - heapObjects
+ - stackInuse
+ - stackSys
+ - mspanInuse
+ - mcacheInuse
+ - nextGc
+ - numGc
+ - numForcedGc
+ - gcCpuFraction
type: object
SystemPruneAllRequest:
additionalProperties: false
@@ -10796,33 +13077,26 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/SystemPruneAllRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/SystemPruneAllRequest.json
format: uri
readOnly: true
type: string
buildCache:
- type: boolean
+ $ref: "#/components/schemas/SystemPruneBuildCacheOptions"
containers:
- type: boolean
- dangling:
- type: boolean
+ $ref: "#/components/schemas/SystemPruneContainersOptions"
images:
- type: boolean
+ $ref: "#/components/schemas/SystemPruneImagesOptions"
networks:
- type: boolean
+ $ref: "#/components/schemas/SystemPruneNetworksOptions"
volumes:
- type: boolean
- required:
- - containers
- - images
- - volumes
- - networks
- - buildCache
- - dangling
+ $ref: "#/components/schemas/SystemPruneVolumesOptions"
type: object
SystemPruneAllResult:
additionalProperties: false
properties:
+ activityId:
+ type: string
buildCacheSpaceReclaimed:
format: int64
minimum: 0
@@ -10835,14 +13109,14 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
errors:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
imageSpaceReclaimed:
format: int64
minimum: 0
@@ -10851,14 +13125,14 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
networksDeleted:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
spaceReclaimed:
format: int64
minimum: 0
@@ -10873,11 +13147,166 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
+ required:
+ - spaceReclaimed
+ - success
+ type: object
+ SystemPruneBuildCacheOptions:
+ additionalProperties: false
+ properties:
+ mode:
+ type: string
+ until:
+ type: string
+ required:
+ - mode
+ type: object
+ SystemPruneContainersOptions:
+ additionalProperties: false
+ properties:
+ mode:
+ type: string
+ until:
+ type: string
+ required:
+ - mode
+ type: object
+ SystemPruneImagesOptions:
+ additionalProperties: false
+ properties:
+ mode:
+ type: string
+ until:
+ type: string
+ required:
+ - mode
+ type: object
+ SystemPruneNetworksOptions:
+ additionalProperties: false
+ properties:
+ mode:
+ type: string
+ until:
+ type: string
+ required:
+ - mode
+ type: object
+ SystemPruneVolumesOptions:
+ additionalProperties: false
+ properties:
+ mode:
+ type: string
+ required:
+ - mode
+ type: object
+ SystemRuntimeInfo:
+ additionalProperties: false
+ properties:
+ arch:
+ type: string
+ goVersion:
+ type: string
+ gomaxprocs:
+ format: int64
+ type: integer
+ goroutines:
+ format: int64
+ type: integer
+ numCgoCall:
+ format: int64
+ type: integer
+ numCpu:
+ format: int64
+ type: integer
+ os:
+ type: string
+ uptimeSeconds:
+ format: int64
+ type: integer
+ wsWorkerGoroutines:
+ format: int64
+ type: integer
+ required:
+ - goroutines
+ - wsWorkerGoroutines
+ - gomaxprocs
+ - numCpu
+ - goVersion
+ - os
+ - arch
+ - numCgoCall
+ - uptimeSeconds
+ type: object
+ SystemWebSocketConnectionInfo:
+ additionalProperties: false
+ properties:
+ clientIp:
+ type: string
+ envId:
+ type: string
+ id:
+ type: string
+ kind:
+ type: string
+ resourceId:
+ type: string
+ startedAt:
+ format: date-time
+ type: string
+ userAgent:
+ type: string
+ userId:
+ type: string
+ required:
+ - id
+ - kind
+ - startedAt
+ type: object
+ SystemWebSocketDiagnostics:
+ additionalProperties: false
+ properties:
+ connections:
+ items:
+ $ref: "#/components/schemas/SystemWebSocketConnectionInfo"
+ type:
+ - array
+ - "null"
+ snapshot:
+ $ref: "#/components/schemas/SystemWebSocketMetricsSnapshot"
+ required:
+ - snapshot
+ - connections
+ type: object
+ SystemWebSocketMetricsSnapshot:
+ additionalProperties: false
+ properties:
+ containerExec:
+ format: int64
+ type: integer
+ containerLogsActive:
+ format: int64
+ type: integer
+ containerStats:
+ format: int64
+ type: integer
+ projectLogsActive:
+ format: int64
+ type: integer
+ serviceLogsActive:
+ format: int64
+ type: integer
+ systemStats:
+ format: int64
+ type: integer
required:
- - spaceReclaimed
- - success
+ - projectLogsActive
+ - containerLogsActive
+ - containerStats
+ - containerExec
+ - systemStats
+ - serviceLogsActive
type: object
TemplateCreateRegistryRequest:
additionalProperties: false
@@ -10885,7 +13314,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/TemplateCreateRegistryRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/TemplateCreateRegistryRequest.json
format: uri
readOnly: true
type: string
@@ -10898,10 +13327,10 @@ components:
url:
type: string
required:
- - name
- - url
- - description
- - enabled
+ - name
+ - url
+ - description
+ - enabled
type: object
TemplateCreateRequest:
additionalProperties: false
@@ -10909,7 +13338,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/TemplateCreateRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/TemplateCreateRequest.json
format: uri
readOnly: true
type: string
@@ -10922,10 +13351,10 @@ components:
name:
type: string
required:
- - name
- - description
- - content
- - envContent
+ - name
+ - description
+ - content
+ - envContent
type: object
TemplateDefaultTemplatesResponse:
additionalProperties: false
@@ -10939,10 +13368,10 @@ components:
swarmStackTemplate:
type: string
required:
- - composeTemplate
- - swarmStackTemplate
- - swarmStackEnvTemplate
- - envTemplate
+ - composeTemplate
+ - swarmStackTemplate
+ - swarmStackEnvTemplate
+ - envTemplate
type: object
TemplatePaginatedResponse:
additionalProperties: false
@@ -10950,24 +13379,24 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/TemplatePaginatedResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/TemplatePaginatedResponse.json
format: uri
readOnly: true
type: string
data:
items:
- $ref: '#/components/schemas/TemplateTemplate'
+ $ref: "#/components/schemas/TemplateTemplate"
type:
- - array
- - 'null'
+ - array
+ - "null"
pagination:
- $ref: '#/components/schemas/BasePaginationResponse'
+ $ref: "#/components/schemas/BasePaginationResponse"
success:
type: boolean
required:
- - success
- - data
- - pagination
+ - success
+ - data
+ - pagination
type: object
TemplateRemoteRegistry:
additionalProperties: false
@@ -10982,21 +13411,21 @@ components:
type: string
templates:
items:
- $ref: '#/components/schemas/TemplateRemoteTemplate'
+ $ref: "#/components/schemas/TemplateRemoteTemplate"
type:
- - array
- - 'null'
+ - array
+ - "null"
url:
type: string
version:
type: string
required:
- - version
- - author
- - templates
- - name
- - description
- - url
+ - version
+ - author
+ - templates
+ - name
+ - description
+ - url
type: object
TemplateRemoteTemplate:
additionalProperties: false
@@ -11019,20 +13448,20 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
version:
type: string
required:
- - version
- - author
- - compose_url
- - env_url
- - documentation_url
- - tags
- - id
- - name
- - description
+ - version
+ - author
+ - compose_url
+ - env_url
+ - documentation_url
+ - tags
+ - id
+ - name
+ - description
type: object
TemplateSaveDefaultTemplatesRequest:
additionalProperties: false
@@ -11040,7 +13469,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/TemplateSaveDefaultTemplatesRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/TemplateSaveDefaultTemplatesRequest.json
format: uri
readOnly: true
type: string
@@ -11049,8 +13478,8 @@ components:
envContent:
type: string
required:
- - composeContent
- - envContent
+ - composeContent
+ - envContent
type: object
TemplateTemplate:
additionalProperties: false
@@ -11068,20 +13497,20 @@ components:
isRemote:
type: boolean
metadata:
- $ref: '#/components/schemas/MetaTemplateMeta'
+ $ref: "#/components/schemas/MetaTemplateMeta"
name:
type: string
registry:
- $ref: '#/components/schemas/TemplateTemplateRegistry'
+ $ref: "#/components/schemas/TemplateTemplateRegistry"
registryId:
type: string
required:
- - content
- - isCustom
- - isRemote
- - id
- - name
- - description
+ - content
+ - isCustom
+ - isRemote
+ - id
+ - name
+ - description
type: object
TemplateTemplateContent:
additionalProperties: false
@@ -11092,24 +13521,24 @@ components:
type: string
envVariables:
items:
- $ref: '#/components/schemas/EnvVariable'
+ $ref: "#/components/schemas/EnvVariable"
type:
- - array
- - 'null'
+ - array
+ - "null"
services:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
template:
- $ref: '#/components/schemas/TemplateTemplate'
+ $ref: "#/components/schemas/TemplateTemplate"
required:
- - template
- - content
- - envContent
- - services
- - envVariables
+ - template
+ - content
+ - envContent
+ - services
+ - envVariables
type: object
TemplateTemplateRegistry:
additionalProperties: false
@@ -11120,16 +13549,18 @@ components:
type: boolean
id:
type: string
+ lastFetchError:
+ type: string
name:
type: string
url:
type: string
required:
- - id
- - enabled
- - name
- - description
- - url
+ - id
+ - enabled
+ - name
+ - description
+ - url
type: object
TemplateUpdateRegistryRequest:
additionalProperties: false
@@ -11137,7 +13568,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/TemplateUpdateRegistryRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/TemplateUpdateRegistryRequest.json
format: uri
readOnly: true
type: string
@@ -11150,10 +13581,10 @@ components:
url:
type: string
required:
- - name
- - url
- - description
- - enabled
+ - name
+ - url
+ - description
+ - enabled
type: object
TemplateUpdateRequest:
additionalProperties: false
@@ -11161,7 +13592,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/TemplateUpdateRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/TemplateUpdateRequest.json
format: uri
readOnly: true
type: string
@@ -11174,10 +13605,10 @@ components:
name:
type: string
required:
- - name
- - description
- - content
- - envContent
+ - name
+ - description
+ - content
+ - envContent
type: object
Ulimit:
additionalProperties: false
@@ -11191,9 +13622,9 @@ components:
format: int64
type: integer
required:
- - Name
- - Hard
- - Soft
+ - Name
+ - Hard
+ - Soft
type: object
UlimitsConfig:
additionalProperties: false
@@ -11235,90 +13666,148 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/UpdateContainerRegistryRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/UpdateContainerRegistryRequest.json
format: uri
readOnly: true
type: string
awsAccessKeyId:
type:
- - string
- - 'null'
+ - string
+ - "null"
awsRegion:
type:
- - string
- - 'null'
+ - string
+ - "null"
awsSecretAccessKey:
type:
- - string
- - 'null'
+ - string
+ - "null"
description:
type:
- - string
- - 'null'
+ - string
+ - "null"
enabled:
type:
- - boolean
- - 'null'
+ - boolean
+ - "null"
insecure:
type:
- - boolean
- - 'null'
+ - boolean
+ - "null"
registryType:
type:
- - string
- - 'null'
+ - string
+ - "null"
token:
type:
- - string
- - 'null'
+ - string
+ - "null"
url:
type:
- - string
- - 'null'
+ - string
+ - "null"
username:
type:
- - string
- - 'null'
+ - string
+ - "null"
+ required:
+ - url
+ - username
+ - token
+ - description
+ - insecure
+ - enabled
+ - registryType
+ - awsAccessKeyId
+ - awsSecretAccessKey
+ - awsRegion
+ type: object
+ UpdateGitRepositoryRequest:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/UpdateGitRepositoryRequest.json
+ format: uri
+ readOnly: true
+ type: string
+ authType:
+ type: string
+ description:
+ type: string
+ enabled:
+ type: boolean
+ name:
+ type: string
+ sshHostKeyVerification:
+ type: string
+ sshKey:
+ type: string
+ token:
+ type: string
+ url:
+ type: string
+ username:
+ type: string
+ type: object
+ UpdateMyProfileInputBody:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/UpdateMyProfileInputBody.json
+ format: uri
+ readOnly: true
+ type: string
+ displayName:
+ type: string
+ email:
+ type: string
+ fontSize:
+ format: int64
+ maximum: 20
+ minimum: 12
+ type: integer
+ locale:
+ type: string
+ type: object
+ UpdateOidcRoleMappingOutputBody:
+ additionalProperties: false
+ properties:
+ $schema:
+ description: A URL to the JSON Schema for this object.
+ examples:
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/UpdateOidcRoleMappingOutputBody.json
+ format: uri
+ readOnly: true
+ type: string
+ data:
+ $ref: "#/components/schemas/RoleOidcRoleMapping"
+ success:
+ type: boolean
required:
- - url
- - username
- - token
- - description
- - insecure
- - enabled
- - registryType
- - awsAccessKeyId
- - awsSecretAccessKey
- - awsRegion
+ - success
+ - data
type: object
- UpdateGitRepositoryRequest:
+ UpdateProjectServicesInputBody:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/UpdateGitRepositoryRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/UpdateProjectServicesInputBody.json
format: uri
readOnly: true
type: string
- authType:
- type: string
- description:
- type: string
- enabled:
- type: boolean
- name:
- type: string
- sshHostKeyVerification:
- type: string
- sshKey:
- type: string
- token:
- type: string
- url:
- type: string
- username:
- type: string
+ services:
+ description: Service names to update; empty updates all services
+ items:
+ type: string
+ type:
+ - array
+ - "null"
type: object
UpdaterOptions:
additionalProperties: false
@@ -11326,7 +13815,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/UpdaterOptions.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/UpdaterOptions.json
format: uri
readOnly: true
type: string
@@ -11338,8 +13827,8 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
type:
type: string
type: object
@@ -11372,13 +13861,15 @@ components:
updateAvailable:
type: boolean
required:
- - resourceId
- - resourceType
- - status
+ - resourceId
+ - resourceType
+ - status
type: object
UpdaterResult:
additionalProperties: false
properties:
+ activityId:
+ type: string
checked:
format: int64
type: integer
@@ -11391,10 +13882,13 @@ components:
type: integer
items:
items:
- $ref: '#/components/schemas/UpdaterResourceResult'
+ $ref: "#/components/schemas/UpdaterResourceResult"
type:
- - array
- - 'null'
+ - array
+ - "null"
+ restarted:
+ format: int64
+ type: integer
skipped:
format: int64
type: integer
@@ -11406,12 +13900,12 @@ components:
format: int64
type: integer
required:
- - checked
- - updated
- - skipped
- - failed
- - duration
- - items
+ - checked
+ - updated
+ - skipped
+ - failed
+ - duration
+ - items
type: object
UpdaterStatus:
additionalProperties: false
@@ -11420,14 +13914,14 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
projectIds:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
updatingContainers:
format: int64
type: integer
@@ -11435,10 +13929,10 @@ components:
format: int64
type: integer
required:
- - updatingContainers
- - updatingProjects
- - containerIds
- - projectIds
+ - updatingContainers
+ - updatingProjects
+ - containerIds
+ - projectIds
type: object
UpgradeCheckResultData:
additionalProperties: false
@@ -11446,7 +13940,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/UpgradeCheckResultData.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/UpgradeCheckResultData.json
format: uri
readOnly: true
type: string
@@ -11457,9 +13951,9 @@ components:
message:
type: string
required:
- - canUpgrade
- - error
- - message
+ - canUpgrade
+ - error
+ - message
type: object
UserCreateUser:
additionalProperties: false
@@ -11467,49 +13961,40 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/UserCreateUser.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/UserCreateUser.json
format: uri
readOnly: true
type: string
displayName:
description: Display name of the user
examples:
- - John Doe
+ - John Doe
maxLength: 255
type: string
email:
description: Email address of the user
examples:
- - john@example.com
+ - john@example.com
type: string
locale:
description: Locale preference of the user
examples:
- - en-US
+ - en-US
type: string
password:
description: Password of the user
minLength: 8
type: string
- roles:
- description: Roles assigned to the user
- examples:
- - - user
- items:
- type: string
- type:
- - array
- - 'null'
username:
description: Username of the user
examples:
- - johndoe
+ - johndoe
maxLength: 255
minLength: 1
type: string
required:
- - username
- - password
+ - username
+ - password
type: object
UserPaginatedResponse:
additionalProperties: false
@@ -11517,24 +14002,43 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/UserPaginatedResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/UserPaginatedResponse.json
format: uri
readOnly: true
type: string
data:
items:
- $ref: '#/components/schemas/UserUser'
+ $ref: "#/components/schemas/UserUser"
type:
- - array
- - 'null'
+ - array
+ - "null"
pagination:
- $ref: '#/components/schemas/BasePaginationResponse'
+ $ref: "#/components/schemas/BasePaginationResponse"
success:
type: boolean
required:
- - success
- - data
- - pagination
+ - success
+ - data
+ - pagination
+ type: object
+ UserRoleAssignmentSummary:
+ additionalProperties: false
+ properties:
+ environmentId:
+ description: Environment ID this assignment is scoped to; omit for a global assignment
+ type: string
+ roleId:
+ description: Role ID granted by this assignment
+ type: string
+ source:
+ description: How the assignment was created
+ enum:
+ - manual
+ - oidc
+ type: string
+ required:
+ - roleId
+ - source
type: object
UserUpdateUser:
additionalProperties: false
@@ -11542,7 +14046,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/UserUpdateUser.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/UserUpdateUser.json
format: uri
readOnly: true
type: string
@@ -11560,13 +14064,6 @@ components:
description: New password for the user
minLength: 8
type: string
- roles:
- description: Roles assigned to the user
- items:
- type: string
- type:
- - array
- - 'null'
username:
description: Username of the user
maxLength: 255
@@ -11576,6 +14073,9 @@ components:
UserUser:
additionalProperties: false
properties:
+ avatarUrl:
+ description: URL to the user's custom avatar image; omitted when using the default profile picture
+ type: string
canDelete:
description: Whether the user can currently be deleted
type: boolean
@@ -11585,53 +14085,72 @@ components:
displayName:
description: Display name of the user
examples:
- - John Doe
+ - John Doe
type: string
email:
description: Email address of the user
examples:
- - john@example.com
+ - john@example.com
type: string
+ fontSize:
+ description: Preferred root UI font size in px
+ examples:
+ - 14
+ format: int64
+ maximum: 20
+ minimum: 12
+ type: integer
id:
description: Unique identifier of the user
examples:
- - 550e8400-e29b-41d4-a716-446655440000
+ - 550e8400-e29b-41d4-a716-446655440000
type: string
+ isGlobalAdmin:
+ description: Whether the user effectively holds global administrator access
+ type: boolean
locale:
description: Locale preference of the user
examples:
- - en-US
+ - en-US
type: string
oidcSubjectId:
description: OIDC subject identifier for SSO users
type: string
+ permissionsByEnv:
+ additionalProperties:
+ items:
+ type: string
+ type:
+ - array
+ - "null"
+ description: Permissions the user effectively holds, keyed by environment ID. The 'global' key holds permissions that apply across every environment (and to org-level endpoints).
+ type: object
requiresPasswordChange:
description: Whether the user must change their password
type: boolean
- roles:
- description: Roles assigned to the user
- examples:
- - - user
- - admin
+ roleAssignments:
+ description: Role assignments held by the user
items:
- type: string
+ $ref: "#/components/schemas/UserRoleAssignmentSummary"
type:
- - array
- - 'null'
+ - array
+ - "null"
updatedAt:
description: Date and time when the user was last updated
type: string
username:
description: Username of the user
examples:
- - johndoe
+ - johndoe
type: string
required:
- - id
- - username
- - roles
- - canDelete
- - requiresPasswordChange
+ - id
+ - username
+ - roleAssignments
+ - permissionsByEnv
+ - isGlobalAdmin
+ - canDelete
+ - requiresPasswordChange
type: object
Value:
additionalProperties: false
@@ -11642,7 +14161,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/VersionCheck.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/VersionCheck.json
format: uri
readOnly: true
type: string
@@ -11655,8 +14174,8 @@ components:
updateAvailable:
type: boolean
required:
- - currentVersion
- - updateAvailable
+ - currentVersion
+ - updateAvailable
type: object
VersionInfo:
additionalProperties: false
@@ -11664,7 +14183,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/VersionInfo.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/VersionInfo.json
format: uri
readOnly: true
type: string
@@ -11682,8 +14201,8 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
goVersion:
type: string
isSemverVersion:
@@ -11692,26 +14211,38 @@ components:
type: string
newestVersion:
type: string
+ nodeVersion:
+ type: string
+ releaseNotes:
+ type: string
releaseUrl:
type: string
+ releasedAt:
+ type: string
revision:
type: string
shortRevision:
type: string
+ svelteKitVersion:
+ type: string
updateAvailable:
type: boolean
required:
- - currentVersion
- - revision
- - shortRevision
- - goVersion
- - displayVersion
- - isSemverVersion
- - updateAvailable
+ - currentVersion
+ - revision
+ - shortRevision
+ - goVersion
+ - nodeVersion
+ - svelteKitVersion
+ - displayVersion
+ - isSemverVersion
+ - updateAvailable
type: object
VolumeBackup:
additionalProperties: false
properties:
+ activityId:
+ type: string
createdAt:
format: date-time
type: string
@@ -11726,10 +14257,10 @@ components:
volumeName:
type: string
required:
- - volumeName
- - size
- - createdAt
- - id
+ - volumeName
+ - size
+ - createdAt
+ - id
type: object
VolumeBackupPaginatedResponse:
additionalProperties: false
@@ -11737,30 +14268,30 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/VolumeBackupPaginatedResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/VolumeBackupPaginatedResponse.json
format: uri
readOnly: true
type: string
data:
items:
- $ref: '#/components/schemas/VolumeBackup'
+ $ref: "#/components/schemas/VolumeBackup"
type:
- - array
- - 'null'
+ - array
+ - "null"
pagination:
- $ref: '#/components/schemas/BasePaginationResponse'
+ $ref: "#/components/schemas/BasePaginationResponse"
success:
type: boolean
warnings:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
required:
- - success
- - data
- - pagination
+ - success
+ - data
+ - pagination
type: object
VolumeCreate:
additionalProperties: false
@@ -11768,7 +14299,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/VolumeCreate.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/VolumeCreate.json
format: uri
readOnly: true
type: string
@@ -11790,7 +14321,7 @@ components:
minLength: 1
type: string
required:
- - name
+ - name
type: object
VolumeFileEntry:
additionalProperties: false
@@ -11822,13 +14353,13 @@ components:
format: int64
type: integer
required:
- - name
- - path
- - isDirectory
- - size
- - modTime
- - mode
- - isSymlink
+ - name
+ - path
+ - isDirectory
+ - size
+ - modTime
+ - mode
+ - isSymlink
type: object
VolumePaginatedResponse:
additionalProperties: false
@@ -11836,31 +14367,33 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/VolumePaginatedResponse.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/VolumePaginatedResponse.json
format: uri
readOnly: true
type: string
counts:
- $ref: '#/components/schemas/VolumeUsageCountsData'
+ $ref: "#/components/schemas/VolumeUsageCountsData"
data:
items:
- $ref: '#/components/schemas/VolumeVolume'
+ $ref: "#/components/schemas/VolumeVolume"
type:
- - array
- - 'null'
+ - array
+ - "null"
pagination:
- $ref: '#/components/schemas/BasePaginationResponse'
+ $ref: "#/components/schemas/BasePaginationResponse"
success:
type: boolean
required:
- - success
- - data
- - counts
- - pagination
+ - success
+ - data
+ - counts
+ - pagination
type: object
VolumePruneReportData:
additionalProperties: false
properties:
+ activityId:
+ type: string
spaceReclaimed:
format: int64
minimum: 0
@@ -11869,10 +14402,10 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
required:
- - spaceReclaimed
+ - spaceReclaimed
type: object
VolumeSizeInfo:
additionalProperties: false
@@ -11886,9 +14419,9 @@ components:
format: int64
type: integer
required:
- - name
- - size
- - refCount
+ - name
+ - size
+ - refCount
type: object
VolumeUsageCountsData:
additionalProperties: false
@@ -11903,9 +14436,9 @@ components:
format: int64
type: integer
required:
- - inuse
- - unused
- - total
+ - inuse
+ - unused
+ - total
type: object
VolumeUsageResponse:
additionalProperties: false
@@ -11914,23 +14447,25 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
inUse:
type: boolean
required:
- - inUse
- - containers
+ - inUse
+ - containers
type: object
VolumeVolume:
additionalProperties: false
properties:
+ activityId:
+ type: string
containers:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
createdAt:
type: string
driver:
@@ -11957,19 +14492,19 @@ components:
format: int64
type: integer
usageData:
- $ref: '#/components/schemas/DockerVolumeUsageData'
- required:
- - id
- - name
- - driver
- - mountpoint
- - scope
- - options
- - labels
- - createdAt
- - inUse
- - size
- - containers
+ $ref: "#/components/schemas/DockerVolumeUsageData"
+ required:
+ - id
+ - name
+ - driver
+ - mountpoint
+ - scope
+ - options
+ - labels
+ - createdAt
+ - inUse
+ - size
+ - containers
type: object
VulnerabilityCVSSInfo:
additionalProperties: false
@@ -11992,13 +14527,13 @@ components:
format: int64
type: integer
summary:
- $ref: '#/components/schemas/VulnerabilitySeveritySummary'
+ $ref: "#/components/schemas/VulnerabilitySeveritySummary"
totalImages:
format: int64
type: integer
required:
- - totalImages
- - scannedImages
+ - totalImages
+ - scannedImages
type: object
VulnerabilityIgnorePayload:
additionalProperties: false
@@ -12006,38 +14541,38 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/VulnerabilityIgnorePayload.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/VulnerabilityIgnorePayload.json
format: uri
readOnly: true
type: string
createdBy:
examples:
- - user-123
+ - user-123
type: string
imageId:
examples:
- - sha256:abc123
+ - sha256:abc123
type: string
installedVersion:
examples:
- - 1.1.1l
+ - 1.1.1l
type: string
pkgName:
examples:
- - openssl
+ - openssl
type: string
reason:
examples:
- - False positive - not exploitable
+ - False positive - not exploitable
type: string
vulnerabilityId:
examples:
- - CVE-2023-1234
+ - CVE-2023-1234
type: string
required:
- - imageId
- - vulnerabilityId
- - pkgName
+ - imageId
+ - vulnerabilityId
+ - pkgName
type: object
VulnerabilityIgnoredVulnerability:
additionalProperties: false
@@ -12062,18 +14597,20 @@ components:
vulnerabilityId:
type: string
required:
- - id
- - environmentId
- - imageId
- - vulnerabilityId
- - pkgName
- - installedVersion
- - createdBy
- - createdAt
+ - id
+ - environmentId
+ - imageId
+ - vulnerabilityId
+ - pkgName
+ - installedVersion
+ - createdBy
+ - createdAt
type: object
VulnerabilityScanResult:
additionalProperties: false
properties:
+ activityId:
+ type: string
duration:
format: int64
type: integer
@@ -12093,18 +14630,18 @@ components:
status:
type: string
summary:
- $ref: '#/components/schemas/VulnerabilitySeveritySummary'
+ $ref: "#/components/schemas/VulnerabilitySeveritySummary"
vulnerabilities:
items:
- $ref: '#/components/schemas/VulnerabilityVulnerability'
+ $ref: "#/components/schemas/VulnerabilityVulnerability"
type:
- - array
- - 'null'
+ - array
+ - "null"
required:
- - imageId
- - imageName
- - scanTime
- - status
+ - imageId
+ - imageName
+ - scanTime
+ - status
type: object
VulnerabilityScanSummariesRequest:
additionalProperties: false
@@ -12112,7 +14649,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/VulnerabilityScanSummariesRequest.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/VulnerabilityScanSummariesRequest.json
format: uri
readOnly: true
type: string
@@ -12120,20 +14657,20 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
required:
- - imageIds
+ - imageIds
type: object
VulnerabilityScanSummariesResponse:
additionalProperties: false
properties:
summaries:
additionalProperties:
- $ref: '#/components/schemas/VulnerabilityScanSummary'
+ $ref: "#/components/schemas/VulnerabilityScanSummary"
type: object
required:
- - summaries
+ - summaries
type: object
VulnerabilityScanSummary:
additionalProperties: false
@@ -12150,11 +14687,11 @@ components:
status:
type: string
summary:
- $ref: '#/components/schemas/VulnerabilitySeveritySummary'
+ $ref: "#/components/schemas/VulnerabilitySeveritySummary"
required:
- - imageId
- - scanTime
- - status
+ - imageId
+ - scanTime
+ - status
type: object
VulnerabilitySeveritySummary:
additionalProperties: false
@@ -12178,18 +14715,18 @@ components:
format: int64
type: integer
required:
- - critical
- - high
- - medium
- - low
- - unknown
- - total
+ - critical
+ - high
+ - medium
+ - low
+ - unknown
+ - total
type: object
VulnerabilityVulnerability:
additionalProperties: false
properties:
cvss:
- $ref: '#/components/schemas/VulnerabilityCVSSInfo'
+ $ref: "#/components/schemas/VulnerabilityCVSSInfo"
description:
type: string
fixedVersion:
@@ -12208,8 +14745,8 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
severity:
type: string
title:
@@ -12217,16 +14754,16 @@ components:
vulnerabilityId:
type: string
required:
- - vulnerabilityId
- - pkgName
- - installedVersion
- - severity
+ - vulnerabilityId
+ - pkgName
+ - installedVersion
+ - severity
type: object
VulnerabilityVulnerabilityWithImage:
additionalProperties: false
properties:
cvss:
- $ref: '#/components/schemas/VulnerabilityCVSSInfo'
+ $ref: "#/components/schemas/VulnerabilityCVSSInfo"
description:
type: string
fixedVersion:
@@ -12249,8 +14786,8 @@ components:
items:
type: string
type:
- - array
- - 'null'
+ - array
+ - "null"
severity:
type: string
title:
@@ -12258,12 +14795,12 @@ components:
vulnerabilityId:
type: string
required:
- - imageId
- - imageName
- - vulnerabilityId
- - pkgName
- - installedVersion
- - severity
+ - imageId
+ - imageName
+ - vulnerabilityId
+ - pkgName
+ - installedVersion
+ - severity
type: object
WebhookCreateInput:
additionalProperties: false
@@ -12271,23 +14808,22 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/WebhookCreateInput.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/WebhookCreateInput.json
format: uri
readOnly: true
type: string
actionType:
- description: Action to run for the selected target type. Supported values
- depend on targetType.
+ description: Action to run for the selected target type. Supported values depend on targetType.
enum:
- - update
- - start
- - stop
- - restart
- - redeploy
- - up
- - down
- - run
- - sync
+ - update
+ - start
+ - stop
+ - restart
+ - redeploy
+ - up
+ - down
+ - run
+ - sync
type: string
name:
description: Human-readable name for this webhook
@@ -12295,23 +14831,21 @@ components:
minLength: 1
type: string
targetId:
- description: Container ID, project ID, or GitOps sync ID to target. Leave
- empty for 'updater' webhooks.
+ description: Container ID, project ID, or GitOps sync ID to target. Leave empty for 'updater' webhooks.
type: string
targetType:
- description: 'Resource type this webhook targets: ''container'', ''project'',
- ''updater'', or ''gitops'''
+ description: "Resource type this webhook targets: 'container', 'project', 'updater', or 'gitops'"
enum:
- - container
- - project
- - updater
- - gitops
+ - container
+ - project
+ - updater
+ - gitops
type: string
required:
- - name
- - targetType
- - actionType
- - targetId
+ - name
+ - targetType
+ - actionType
+ - targetId
type: object
WebhookCreated:
additionalProperties: false
@@ -12336,17 +14870,16 @@ components:
description: Target type
type: string
token:
- description: Full webhook token — store this securely, it will not be shown
- again
+ description: Full webhook token — store this securely, it will not be shown again
type: string
required:
- - id
- - name
- - token
- - targetType
- - actionType
- - targetId
- - createdAt
+ - id
+ - name
+ - token
+ - targetType
+ - actionType
+ - targetId
+ - createdAt
type: object
WebhookSummary:
additionalProperties: false
@@ -12381,21 +14914,21 @@ components:
description: Resolved target resource name when available
type: string
targetType:
- description: 'Target type: ''container'', ''project'', ''updater'', or ''gitops'''
+ description: "Target type: 'container', 'project', 'updater', or 'gitops'"
type: string
tokenPrefix:
description: Masked token prefix for identification
type: string
required:
- - id
- - name
- - tokenPrefix
- - targetType
- - actionType
- - targetId
- - environmentId
- - enabled
- - createdAt
+ - id
+ - name
+ - tokenPrefix
+ - targetType
+ - actionType
+ - targetId
+ - environmentId
+ - enabled
+ - createdAt
type: object
WebhookUpdateInput:
additionalProperties: false
@@ -12403,7 +14936,7 @@ components:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- - https://arcane.randomsynergy.xyz:3552/api/schemas/WebhookUpdateInput.json
+ - https://arcane.randomsynergy.xyz:3552/api/schemas/WebhookUpdateInput.json
format: uri
readOnly: true
type: string
@@ -12411,7 +14944,7 @@ components:
description: Whether the webhook is active
type: boolean
required:
- - enabled
+ - enabled
type: object
securitySchemes:
ApiKeyAuth:
@@ -12427,73 +14960,102 @@ components:
info:
description: Modern Docker Management, Designed for Everyone
title: Arcane API
- version: v1.17.0
+ version: v2.3.2
openapi: 3.1.0
paths:
+ /activities/stream:
+ get:
+ description: Stream background activity updates for the local environment and all enabled remote environments as JSON lines
+ operationId: stream-all-activities
+ parameters:
+ - description: Snapshot limit per environment
+ explode: false
+ in: query
+ name: limit
+ schema:
+ default: 50
+ description: Snapshot limit per environment
+ format: int64
+ type: integer
+ responses:
+ "200":
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Stream background activities across all environments
+ tags:
+ - Activities
/api-keys:
get:
description: Get a paginated list of API keys
operationId: list-api-keys
parameters:
- - description: Search query for filtering by name or description
- explode: false
- in: query
- name: search
- schema:
- description: Search query for filtering by name or description
- type: string
- - description: Column to sort by
- explode: false
- in: query
- name: sort
- schema:
- description: Column to sort by
- type: string
- - description: Sort direction (asc or desc)
- explode: false
- in: query
- name: order
- schema:
- default: asc
- description: Sort direction (asc or desc)
- type: string
- - description: Start index for pagination
- explode: false
- in: query
- name: start
- schema:
- default: 0
- description: Start index for pagination
- format: int64
- type: integer
- - description: Number of items per page
- explode: false
- in: query
- name: limit
- schema:
- default: 20
- description: Number of items per page
- format: int64
- type: integer
- responses:
- '200':
+ - description: Search query for filtering by name or description
+ explode: false
+ in: query
+ name: search
+ schema:
+ description: Search query for filtering by name or description
+ type: string
+ - description: Column to sort by
+ explode: false
+ in: query
+ name: sort
+ schema:
+ description: Column to sort by
+ type: string
+ - description: Sort direction (asc or desc)
+ explode: false
+ in: query
+ name: order
+ schema:
+ default: asc
+ description: Sort direction (asc or desc)
+ type: string
+ - description: Start index for pagination
+ explode: false
+ in: query
+ name: start
+ schema:
+ default: 0
+ description: Start index for pagination
+ format: int64
+ type: integer
+ - description: Number of items per page
+ explode: false
+ in: query
+ name: limit
+ schema:
+ default: 20
+ description: Number of items per page
+ format: int64
+ type: integer
+ responses:
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/ApiKeyPaginatedResponse'
+ $ref: "#/components/schemas/ApiKeyPaginatedResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: List API keys
tags:
- - API Keys
+ - API Keys
post:
description: Create a new API key for programmatic access
operationId: create-api-key
@@ -12501,130 +15063,130 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/ApikeyCreateApiKey'
+ $ref: "#/components/schemas/ApikeyCreateApiKey"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseApiKeyCreatedDto'
+ $ref: "#/components/schemas/BaseApiResponseApiKeyCreatedDto"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Create an API key
tags:
- - API Keys
+ - API Keys
/api-keys/{id}:
delete:
description: Delete an API key by ID
operationId: delete-api-key
parameters:
- - description: API key ID
- in: path
- name: id
- required: true
- schema:
- description: API key ID
- type: string
+ - description: API key ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: API key ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Delete an API key
tags:
- - API Keys
+ - API Keys
get:
description: Get details of a specific API key by ID
operationId: get-api-key
parameters:
- - description: API key ID
- in: path
- name: id
- required: true
- schema:
- description: API key ID
- type: string
+ - description: API key ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: API key ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseApiKey'
+ $ref: "#/components/schemas/BaseApiResponseApiKey"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get an API key
tags:
- - API Keys
+ - API Keys
put:
description: Update an existing API key's details
operationId: update-api-key
parameters:
- - description: API key ID
- in: path
- name: id
- required: true
- schema:
- description: API key ID
- type: string
+ - description: API key ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: API key ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/ApikeyUpdateApiKey'
+ $ref: "#/components/schemas/ApikeyUpdateApiKey"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseApiKey'
+ $ref: "#/components/schemas/BaseApiResponseApiKey"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Update an API key
tags:
- - API Keys
+ - API Keys
/app-images/favicon:
get:
description: Get the application favicon image
operationId: get-favicon
responses:
- '200':
+ "200":
content:
application/json:
schema:
@@ -12638,39 +15200,41 @@ paths:
Content-Type:
schema:
type: string
+ X-Content-Type-Options:
+ schema:
+ type: string
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
+ security: []
summary: Get application favicon
tags:
- - Application Images
+ - Application Images
/app-images/logo:
get:
description: Get the application logo image
operationId: get-logo
parameters:
- - description: Return full logo instead of icon
- explode: false
- in: query
- name: full
- schema:
- default: false
- description: Return full logo instead of icon
- type: boolean
- - description: Optional accent color override for preview (e.g., 'oklch(0.65
- 0.2 150)')
- explode: false
- in: query
- name: color
- schema:
- description: Optional accent color override for preview (e.g., 'oklch(0.65
- 0.2 150)')
- type: string
+ - description: Return full logo instead of icon
+ explode: false
+ in: query
+ name: full
+ schema:
+ default: false
+ description: Return full logo instead of icon
+ type: boolean
+ - description: Optional accent color override for preview (e.g., 'oklch(0.65 0.2 150)')
+ explode: false
+ in: query
+ name: color
+ schema:
+ description: Optional accent color override for preview (e.g., 'oklch(0.65 0.2 150)')
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
@@ -12684,21 +15248,25 @@ paths:
Content-Type:
schema:
type: string
+ X-Content-Type-Options:
+ schema:
+ type: string
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
+ security: []
summary: Get application logo
tags:
- - Application Images
+ - Application Images
/app-images/logo-email:
get:
description: Get the application logo image in PNG format for emails
operationId: get-logo-email
responses:
- '200':
+ "200":
content:
application/json:
schema:
@@ -12712,21 +15280,25 @@ paths:
Content-Type:
schema:
type: string
+ X-Content-Type-Options:
+ schema:
+ type: string
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
+ security: []
summary: Get application logo for email
tags:
- - Application Images
+ - Application Images
/app-images/profile:
get:
description: Get the default user profile image
operationId: get-default-profile
responses:
- '200':
+ "200":
content:
application/json:
schema:
@@ -12740,31 +15312,35 @@ paths:
Content-Type:
schema:
type: string
+ X-Content-Type-Options:
+ schema:
+ type: string
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
+ security: []
summary: Get default profile image
tags:
- - Application Images
+ - Application Images
/app-images/pwa/{filename}:
get:
description: Get a Progressive Web App icon image
operationId: get-pwa-icon
parameters:
- - description: PWA icon filename
- in: path
- name: filename
- required: true
- schema:
- description: PWA icon filename
- examples:
- - icon-192x192.png
- type: string
+ - description: PWA icon filename
+ in: path
+ name: filename
+ required: true
+ schema:
+ description: PWA icon filename
+ examples:
+ - icon-192x192.png
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
@@ -12778,51 +15354,61 @@ paths:
Content-Type:
schema:
type: string
+ X-Content-Type-Options:
+ schema:
+ type: string
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
+ security: []
summary: Get PWA icon
tags:
- - Application Images
+ - Application Images
/app-version:
get:
description: Get the current application version
operationId: getAppVersion
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/VersionInfo'
+ $ref: "#/components/schemas/VersionInfo"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
+ security: []
summary: Get app version
tags:
- - Version
+ - Version
/auth/login:
post:
description: Authenticate a user with username and password
operationId: login
+ parameters:
+ - in: header
+ name: User-Agent
+ schema:
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/AuthLogin'
+ $ref: "#/components/schemas/AuthLogin"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseLoginResponse'
+ $ref: "#/components/schemas/BaseApiResponseLoginResponse"
description: OK
headers:
Set-Cookie:
@@ -12833,21 +15419,22 @@ paths:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
+ security: []
summary: Login
tags:
- - Auth
+ - Auth
/auth/logout:
post:
description: Clear authentication session
operationId: logout
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
headers:
Set-Cookie:
@@ -12858,34 +15445,200 @@ paths:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
+ security: []
summary: Logout
tags:
- - Auth
+ - Auth
/auth/me:
get:
description: Get the currently authenticated user's information
operationId: get-current-user
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseUser'
+ $ref: "#/components/schemas/BaseApiResponseUser"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get current user
tags:
- - Auth
+ - Auth
+ /auth/me/api-keys:
+ get:
+ description: List API keys owned by the current user
+ operationId: list-my-api-keys
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BaseApiResponseListApiKey"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: List my API keys
+ tags:
+ - API Keys
+ post:
+ description: Create a new personal API key owned by the current user. Personal keys inherit the owner's role permissions.
+ operationId: create-my-api-key
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/ApikeyCreateUserApiKey"
+ required: true
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BaseApiResponseApiKeyCreatedDto"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ summary: Create my API key
+ tags:
+ - API Keys
+ /auth/me/api-keys/{id}:
+ delete:
+ description: Delete one of the current user's own API keys
+ operationId: delete-my-api-key
+ parameters:
+ - description: API key ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: API key ID
+ type: string
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ summary: Delete my API key
+ tags:
+ - API Keys
+ /auth/me/avatar:
+ delete:
+ description: Remove the current user's custom profile picture, reverting to the default avatar.
+ operationId: delete-my-avatar
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BaseApiResponseUser"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Delete own avatar
+ tags:
+ - Auth
+ post:
+ description: Upload a custom profile picture (PNG, JPEG or WebP). Replaces any existing avatar.
+ operationId: upload-my-avatar
+ requestBody:
+ content:
+ multipart/form-data:
+ schema:
+ properties:
+ file:
+ contentMediaType: application/octet-stream
+ format: binary
+ type: string
+ type: object
+ required: true
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BaseApiResponseUser"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Upload own avatar
+ tags:
+ - Auth
+ /auth/me/profile:
+ put:
+ description: Update the current user's display name and email. Forbidden for OIDC-managed accounts.
+ operationId: update-my-profile
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/UpdateMyProfileInputBody"
+ required: true
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BaseApiResponseUser"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Update own profile
+ tags:
+ - Auth
/auth/password:
post:
description: Change the current user's password
@@ -12894,122 +15647,151 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/AuthPasswordChange'
+ $ref: "#/components/schemas/AuthPasswordChange"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Change password
tags:
- - Auth
+ - Auth
/auth/refresh:
post:
description: Obtain a new access token using a refresh token
operationId: refresh-token
+ parameters:
+ - in: header
+ name: User-Agent
+ schema:
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/AuthRefresh'
+ $ref: "#/components/schemas/AuthRefresh"
required: true
responses:
- '200':
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BaseApiResponseTokenRefreshResponse"
+ description: OK
+ headers:
+ Set-Cookie:
+ schema:
+ description: Updated session cookie
+ type: string
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security: []
+ summary: Refresh token
+ tags:
+ - Auth
+ /auth/sessions/logout-all:
+ post:
+ description: Revoke every session for the current user except the one making this request
+ operationId: logout-all-other-sessions
+ responses:
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseTokenRefreshResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
- headers:
- Set-Cookie:
- schema:
- description: Updated session cookie
- type: string
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
- summary: Refresh token
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Logout all other sessions
tags:
- - Auth
+ - Auth
/container-registries:
get:
description: Get a paginated list of container registries
operationId: listContainerRegistries
parameters:
- - description: Search query
- explode: false
- in: query
- name: search
- schema:
- description: Search query
- type: string
- - description: Column to sort by
- explode: false
- in: query
- name: sort
- schema:
- description: Column to sort by
- type: string
- - description: Sort direction
- explode: false
- in: query
- name: order
- schema:
- default: asc
- description: Sort direction
- type: string
- - description: Start index
- explode: false
- in: query
- name: start
- schema:
- default: 0
- description: Start index
- format: int64
- type: integer
- - description: Items per page
- explode: false
- in: query
- name: limit
- schema:
- default: 20
- description: Items per page
- format: int64
- type: integer
- responses:
- '200':
+ - description: Search query
+ explode: false
+ in: query
+ name: search
+ schema:
+ description: Search query
+ type: string
+ - description: Column to sort by
+ explode: false
+ in: query
+ name: sort
+ schema:
+ description: Column to sort by
+ type: string
+ - description: Sort direction
+ explode: false
+ in: query
+ name: order
+ schema:
+ default: asc
+ description: Sort direction
+ type: string
+ - description: Start index
+ explode: false
+ in: query
+ name: start
+ schema:
+ default: 0
+ description: Start index
+ format: int64
+ type: integer
+ - description: Items per page
+ explode: false
+ in: query
+ name: limit
+ schema:
+ default: 20
+ description: Items per page
+ format: int64
+ type: integer
+ responses:
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/ContainerRegistryPaginatedResponse'
+ $ref: "#/components/schemas/ContainerRegistryPaginatedResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: List container registries
tags:
- - Container Registries
+ - Container Registries
post:
description: Create a new container registry
operationId: createContainerRegistry
@@ -13017,27 +15799,50 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/CreateContainerRegistryRequest'
+ $ref: "#/components/schemas/CreateContainerRegistryRequest"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseContainerRegistry'
+ $ref: "#/components/schemas/BaseApiResponseContainerRegistry"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Create a container registry
tags:
- - Container Registries
+ - Container Registries
+ /container-registries/pull-usage:
+ get:
+ description: Get configured registry pull usage and rate limit visibility
+ operationId: getContainerRegistryPullUsage
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BaseApiResponsePullUsageResponse"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Get container registry pull usage
+ tags:
+ - Container Registries
/container-registries/sync:
post:
description: Sync container registries from a remote source
@@ -13046,246 +15851,246 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/ContainerregistrySyncRequest'
+ $ref: "#/components/schemas/ContainerregistrySyncRequest"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Sync container registries
tags:
- - Container Registries
+ - Container Registries
/container-registries/{id}:
delete:
description: Delete a container registry by ID
operationId: deleteContainerRegistry
parameters:
- - description: Registry ID
- in: path
- name: id
- required: true
- schema:
- description: Registry ID
- type: string
+ - description: Registry ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Registry ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Delete a container registry
tags:
- - Container Registries
+ - Container Registries
get:
description: Get a container registry by ID
operationId: getContainerRegistry
parameters:
- - description: Registry ID
- in: path
- name: id
- required: true
- schema:
- description: Registry ID
- type: string
+ - description: Registry ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Registry ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseContainerRegistry'
+ $ref: "#/components/schemas/BaseApiResponseContainerRegistry"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get a container registry
tags:
- - Container Registries
+ - Container Registries
put:
description: Update an existing container registry
operationId: updateContainerRegistry
parameters:
- - description: Registry ID
- in: path
- name: id
- required: true
- schema:
- description: Registry ID
- type: string
+ - description: Registry ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Registry ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/UpdateContainerRegistryRequest'
+ $ref: "#/components/schemas/UpdateContainerRegistryRequest"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseContainerRegistry'
+ $ref: "#/components/schemas/BaseApiResponseContainerRegistry"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Update a container registry
tags:
- - Container Registries
+ - Container Registries
/container-registries/{id}/test:
post:
description: Test connectivity and authentication to a container registry
operationId: testContainerRegistry
parameters:
- - description: Registry ID
- in: path
- name: id
- required: true
- schema:
- description: Registry ID
- type: string
+ - description: Registry ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Registry ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Test a container registry
tags:
- - Container Registries
+ - Container Registries
/customize/categories:
get:
description: Get all available customization categories with metadata
operationId: get-customize-categories
responses:
- '200':
+ "200":
content:
application/json:
schema:
items:
- $ref: '#/components/schemas/CategoryCategory'
+ $ref: "#/components/schemas/CategoryCategory"
type:
- - array
- - 'null'
+ - array
+ - "null"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get customization categories
tags:
- - Customize
+ - Customize
/customize/git-repositories:
get:
description: Get a paginated list of git repositories
operationId: listGitRepositories
parameters:
- - description: Search query
- explode: false
- in: query
- name: search
- schema:
- description: Search query
- type: string
- - description: Column to sort by
- explode: false
- in: query
- name: sort
- schema:
- description: Column to sort by
- type: string
- - description: Sort direction
- explode: false
- in: query
- name: order
- schema:
- default: asc
- description: Sort direction
- type: string
- - description: Start index
- explode: false
- in: query
- name: start
- schema:
- default: 0
- description: Start index
- format: int64
- type: integer
- - description: Items per page
- explode: false
- in: query
- name: limit
- schema:
- default: 20
- description: Items per page
- format: int64
- type: integer
- responses:
- '200':
+ - description: Search query
+ explode: false
+ in: query
+ name: search
+ schema:
+ description: Search query
+ type: string
+ - description: Column to sort by
+ explode: false
+ in: query
+ name: sort
+ schema:
+ description: Column to sort by
+ type: string
+ - description: Sort direction
+ explode: false
+ in: query
+ name: order
+ schema:
+ default: asc
+ description: Sort direction
+ type: string
+ - description: Start index
+ explode: false
+ in: query
+ name: start
+ schema:
+ default: 0
+ description: Start index
+ format: int64
+ type: integer
+ - description: Items per page
+ explode: false
+ in: query
+ name: limit
+ schema:
+ default: 20
+ description: Items per page
+ format: int64
+ type: integer
+ responses:
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/GitRepositoryPaginatedResponse'
+ $ref: "#/components/schemas/GitRepositoryPaginatedResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: List git repositories
tags:
- - Customize
+ - Customize
post:
description: Create a new git repository configuration
operationId: createGitRepository
@@ -13293,240 +16098,238 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/CreateGitRepositoryRequest'
+ $ref: "#/components/schemas/CreateGitRepositoryRequest"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseGitRepository'
+ $ref: "#/components/schemas/BaseApiResponseGitRepository"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Create a git repository
tags:
- - Customize
+ - Customize
/customize/git-repositories/{id}:
delete:
description: Delete a git repository configuration by ID
operationId: deleteGitRepository
parameters:
- - description: Repository ID
- in: path
- name: id
- required: true
- schema:
- description: Repository ID
- type: string
+ - description: Repository ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Repository ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Delete a git repository
tags:
- - Customize
+ - Customize
get:
description: Get a git repository by ID
operationId: getGitRepository
parameters:
- - description: Repository ID
- in: path
- name: id
- required: true
- schema:
- description: Repository ID
- type: string
+ - description: Repository ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Repository ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseGitRepository'
+ $ref: "#/components/schemas/BaseApiResponseGitRepository"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get a git repository
tags:
- - Customize
+ - Customize
put:
description: Update an existing git repository configuration
operationId: updateGitRepository
parameters:
- - description: Repository ID
- in: path
- name: id
- required: true
- schema:
- description: Repository ID
- type: string
+ - description: Repository ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Repository ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/UpdateGitRepositoryRequest'
+ $ref: "#/components/schemas/UpdateGitRepositoryRequest"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseGitRepository'
+ $ref: "#/components/schemas/BaseApiResponseGitRepository"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Update a git repository
tags:
- - Customize
+ - Customize
/customize/git-repositories/{id}/branches:
get:
description: Get all branches from a git repository with default branch detection
operationId: listGitRepositoryBranches
parameters:
- - description: Repository ID
- in: path
- name: id
- required: true
- schema:
- description: Repository ID
- type: string
+ - description: Repository ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Repository ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseBranchesResponse'
+ $ref: "#/components/schemas/BaseApiResponseBranchesResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: List repository branches
tags:
- - Customize
+ - Customize
/customize/git-repositories/{id}/files:
get:
description: Browse files and directories in a git repository
operationId: browseGitRepositoryFiles
parameters:
- - description: Repository ID
- in: path
- name: id
- required: true
- schema:
- description: Repository ID
- type: string
- - description: Branch to browse
- explode: false
- in: query
- name: branch
- schema:
- description: Branch to browse
- type: string
- - description: Path within repository (optional)
- explode: false
- in: query
- name: path
- schema:
- description: Path within repository (optional)
- type: string
+ - description: Repository ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Repository ID
+ type: string
+ - description: Branch to browse
+ explode: false
+ in: query
+ name: branch
+ schema:
+ description: Branch to browse
+ type: string
+ - description: Path within repository (optional)
+ explode: false
+ in: query
+ name: path
+ schema:
+ description: Path within repository (optional)
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseBrowseResponse'
+ $ref: "#/components/schemas/BaseApiResponseBrowseResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Browse repository files
tags:
- - Customize
+ - Customize
/customize/git-repositories/{id}/test:
post:
description: Test connectivity and authentication to a git repository
operationId: testGitRepository
parameters:
- - description: Repository ID
- in: path
- name: id
- required: true
- schema:
- description: Repository ID
- type: string
- - description: Branch to test (optional, uses repository default branch when
- omitted)
- explode: false
- in: query
- name: branch
- schema:
- description: Branch to test (optional, uses repository default branch when
- omitted)
- type: string
+ - description: Repository ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Repository ID
+ type: string
+ - description: Branch to test (optional, uses repository default branch when omitted)
+ explode: false
+ in: query
+ name: branch
+ schema:
+ description: Branch to test (optional, uses repository default branch when omitted)
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Test a git repository
tags:
- - Customize
+ - Customize
/customize/search:
post:
description: Search customization categories and options by query
@@ -13535,91 +16338,195 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/SearchRequest'
+ $ref: "#/components/schemas/SearchRequest"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/SearchResponse'
+ $ref: "#/components/schemas/SearchResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Search customization options
tags:
- - Customize
+ - Customize
+ /dashboard/stream:
+ get:
+ description: Stream dashboard snapshot updates for the local environment and all enabled remote environments as JSON lines
+ operationId: stream-all-dashboards
+ parameters:
+ - description: "Debug mode: force an empty action item list"
+ explode: false
+ in: query
+ name: debugAllGood
+ schema:
+ default: false
+ description: "Debug mode: force an empty action item list"
+ type: boolean
+ responses:
+ "200":
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Stream dashboard snapshots across all environments
+ tags:
+ - Dashboard
+ /diagnostics:
+ get:
+ description: Returns Go runtime, memory, garbage-collector, and WebSocket connection statistics.
+ operationId: get-diagnostics
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/SystemDiagnostics"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Get runtime diagnostics
+ tags:
+ - Diagnostics
+ /diagnostics/logs:
+ get:
+ description: Returns the most recent buffered backend log entries (oldest first).
+ operationId: get-diagnostics-logs
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ items:
+ $ref: "#/components/schemas/SystemLogEntry"
+ type:
+ - array
+ - "null"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Get recent backend logs
+ tags:
+ - Diagnostics
+ /edge-mtls/ca:
+ get:
+ description: Download the Arcane-managed certificate authority used for generated edge mTLS client certificates
+ operationId: downloadEdgeMTLSCA
+ responses:
+ "200":
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Download Arcane-generated edge mTLS CA
+ tags:
+ - Environments
/environments:
get:
description: Get a paginated list of Docker environments
operationId: listEnvironments
parameters:
- - description: Search query for filtering by name or API URL
- explode: false
- in: query
- name: search
- schema:
- description: Search query for filtering by name or API URL
- type: string
- - description: Column to sort by
- explode: false
- in: query
- name: sort
- schema:
- description: Column to sort by
- type: string
- - description: Sort direction (asc or desc)
- explode: false
- in: query
- name: order
- schema:
- default: asc
- description: Sort direction (asc or desc)
- type: string
- - description: Start index for pagination
- explode: false
- in: query
- name: start
- schema:
- default: 0
- description: Start index for pagination
- format: int64
- type: integer
- - description: Items per page
- explode: false
- in: query
- name: limit
- schema:
- default: 20
- description: Items per page
- format: int64
- type: integer
+ - description: Search query for filtering by name or API URL
+ explode: false
+ in: query
+ name: search
+ schema:
+ description: Search query for filtering by name or API URL
+ type: string
+ - description: Column to sort by
+ explode: false
+ in: query
+ name: sort
+ schema:
+ description: Column to sort by
+ type: string
+ - description: Sort direction (asc or desc)
+ explode: false
+ in: query
+ name: order
+ schema:
+ default: asc
+ description: Sort direction (asc or desc)
+ type: string
+ - description: Start index for pagination
+ explode: false
+ in: query
+ name: start
+ schema:
+ default: 0
+ description: Start index for pagination
+ format: int64
+ type: integer
+ - description: Items per page
+ explode: false
+ in: query
+ name: limit
+ schema:
+ default: 20
+ description: Items per page
+ format: int64
+ type: integer
+ - description: "Filter by environment type (comma-separated: http,edge,websocket,grpc,polling)"
+ explode: false
+ in: query
+ name: type
+ schema:
+ description: "Filter by environment type (comma-separated: http,edge,websocket,grpc,polling)"
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/EnvironmentPaginatedResponse'
+ $ref: "#/components/schemas/EnvironmentPaginatedResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: List environments
tags:
- - Environments
+ - Environments
post:
description: Create a new Docker environment
operationId: createEnvironment
@@ -13627,213 +16534,429 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/EnvironmentCreate'
+ $ref: "#/components/schemas/EnvironmentCreate"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseEnvironmentWithApiKey'
+ $ref: "#/components/schemas/BaseApiResponseEnvironmentWithApiKey"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Create an environment
tags:
- - Environments
+ - Environments
/environments/pair:
post:
description: Agent sends API key to complete environment pairing
operationId: pairEnvironment
parameters:
- - description: API key for environment pairing
- in: header
- name: X-API-Key
- schema:
- description: API key for environment pairing
- type: string
+ - description: API key for environment pairing
+ in: header
+ name: X-API-Key
+ schema:
+ description: API key for environment pairing
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
+ security: []
summary: Pair agent with manager
tags:
- - Environments
+ - Environments
/environments/{id}:
delete:
description: Delete a Arcane environment
operationId: deleteEnvironment
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Delete an environment
tags:
- - Environments
+ - Environments
get:
description: Get a Docker environment by ID
operationId: getEnvironment
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseEnvironment'
+ $ref: "#/components/schemas/BaseApiResponseEnvironment"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get an environment
tags:
- - Environments
+ - Environments
put:
description: Update a Docker environment
operationId: updateEnvironment
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/EnvironmentUpdate'
+ $ref: "#/components/schemas/EnvironmentUpdate"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseEnvironment'
+ $ref: "#/components/schemas/BaseApiResponseEnvironment"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Update an environment
tags:
- - Environments
+ - Environments
+ /environments/{id}/activities:
+ get:
+ description: Get current and recent background activities for an environment
+ operationId: list-activities
+ parameters:
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Search query
+ explode: false
+ in: query
+ name: search
+ schema:
+ description: Search query
+ type: string
+ - description: Column to sort by
+ explode: false
+ in: query
+ name: sort
+ schema:
+ description: Column to sort by
+ type: string
+ - description: Sort direction
+ explode: false
+ in: query
+ name: order
+ schema:
+ default: desc
+ description: Sort direction
+ type: string
+ - description: Start index
+ explode: false
+ in: query
+ name: start
+ schema:
+ default: 0
+ description: Start index
+ format: int64
+ type: integer
+ - description: Limit
+ explode: false
+ in: query
+ name: limit
+ schema:
+ default: 50
+ description: Limit
+ format: int64
+ type: integer
+ - description: Filter by activity status
+ explode: false
+ in: query
+ name: status
+ schema:
+ description: Filter by activity status
+ type: string
+ - description: Filter by activity type
+ explode: false
+ in: query
+ name: type
+ schema:
+ description: Filter by activity type
+ type: string
+ - description: Filter by resource type
+ explode: false
+ in: query
+ name: resourceType
+ schema:
+ description: Filter by resource type
+ type: string
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BasePaginatedActivity"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: List background activities
+ tags:
+ - Activities
+ /environments/{id}/activities/history:
+ delete:
+ description: Delete completed background activity history for an environment
+ operationId: clear-activity-history
+ parameters:
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BaseApiResponseClearHistoryResult"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Clear background activity history
+ tags:
+ - Activities
+ /environments/{id}/activities/{activityId}:
+ get:
+ description: Get a background activity with its recent output messages
+ operationId: get-activity
+ parameters:
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Activity ID
+ in: path
+ name: activityId
+ required: true
+ schema:
+ description: Activity ID
+ type: string
+ - description: Maximum messages to return
+ explode: false
+ in: query
+ name: limit
+ schema:
+ default: 500
+ description: Maximum messages to return
+ format: int64
+ type: integer
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BaseApiResponseDetail"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Get background activity
+ tags:
+ - Activities
+ /environments/{id}/activities/{activityId}/cancel:
+ post:
+ description: Request cancellation of a running or queued background activity
+ operationId: cancel-activity
+ parameters:
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Activity ID
+ in: path
+ name: activityId
+ required: true
+ schema:
+ description: Activity ID
+ type: string
+ - description: Display name to attribute the cancellation to (used when proxying to a remote environment)
+ explode: false
+ in: query
+ name: requestedBy
+ schema:
+ description: Display name to attribute the cancellation to (used when proxying to a remote environment)
+ type: string
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BaseApiResponseActivity"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Cancel a background activity
+ tags:
+ - Activities
/environments/{id}/agent/pair:
post:
description: Generate or rotate the local agent pairing token
operationId: pairAgent
parameters:
- - description: Environment ID (must be 0 for local)
- in: path
- name: id
- required: true
- schema:
- description: Environment ID (must be 0 for local)
- type: string
+ - description: Environment ID (must be 0 for local)
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID (must be 0 for local)
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/EnvironmentAgentPairRequest'
+ $ref: "#/components/schemas/EnvironmentAgentPairRequest"
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseAgentPairResponse'
+ $ref: "#/components/schemas/BaseApiResponseAgentPairResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Pair with local agent
tags:
- - Environments
+ - Environments
/environments/{id}/builds/browse:
delete:
description: Delete a file or directory under the builds workspace root
operationId: builds-browse-delete
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: File or directory path to delete
- explode: false
- in: query
- name: path
- schema:
- description: File or directory path to delete
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: File or directory path to delete
+ explode: false
+ in: query
+ name: path
+ schema:
+ description: File or directory path to delete
+ type: string
responses:
- '204':
+ "204":
description: No Content
headers:
Data:
schema:
- $ref: '#/components/schemas/BaseMessageResponse'
+ $ref: "#/components/schemas/BaseMessageResponse"
description: Response data
Success:
schema:
@@ -13843,120 +16966,120 @@ paths:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Delete build workspace file
tags:
- - Builds
+ - Builds
get:
description: List files and directories under the builds workspace root
operationId: builds-browse
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Directory path to browse
- explode: false
- in: query
- name: path
- schema:
- default: /
- description: Directory path to browse
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Directory path to browse
+ explode: false
+ in: query
+ name: path
+ schema:
+ default: /
+ description: Directory path to browse
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseListFileEntry'
+ $ref: "#/components/schemas/BaseApiResponseListFileEntry"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Browse build workspace files
- tags:
- - Builds
- /environments/{id}/builds/browse/content:
- get:
- description: Read file content under the builds workspace root
- operationId: builds-browse-content
- parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: File path
- explode: false
- in: query
- name: path
- schema:
- description: File path
- type: string
- - description: Maximum bytes to read (default 1MB)
- explode: false
- in: query
- name: maxBytes
- schema:
- default: 1048576
- description: Maximum bytes to read (default 1MB)
- format: int64
- type: integer
- responses:
- '200':
+ tags:
+ - Builds
+ /environments/{id}/builds/browse/content:
+ get:
+ description: Read file content under the builds workspace root
+ operationId: builds-browse-content
+ parameters:
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: File path
+ explode: false
+ in: query
+ name: path
+ schema:
+ description: File path
+ type: string
+ - description: Maximum bytes to read (default 1MB)
+ explode: false
+ in: query
+ name: maxBytes
+ schema:
+ default: 1048576
+ description: Maximum bytes to read (default 1MB)
+ format: int64
+ type: integer
+ responses:
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseBuildFileContentResponse'
+ $ref: "#/components/schemas/BaseApiResponseBuildFileContentResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get build workspace file content
tags:
- - Builds
+ - Builds
/environments/{id}/builds/browse/download:
get:
description: Download a file from the builds workspace root
operationId: builds-browse-download
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: File path
- explode: false
- in: query
- name: path
- schema:
- description: File path
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: File path
+ explode: false
+ in: query
+ name: path
+ schema:
+ description: File path
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema: {}
@@ -13976,40 +17099,40 @@ paths:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Download build workspace file
tags:
- - Builds
+ - Builds
/environments/{id}/builds/browse/mkdir:
post:
description: Create a directory under the builds workspace root
operationId: builds-browse-mkdir
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Directory path to create
- explode: false
- in: query
- name: path
- schema:
- description: Directory path to create
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Directory path to create
+ explode: false
+ in: query
+ name: path
+ schema:
+ description: Directory path to create
+ type: string
responses:
- '204':
+ "204":
description: No Content
headers:
Data:
schema:
- $ref: '#/components/schemas/BaseMessageResponse'
+ $ref: "#/components/schemas/BaseMessageResponse"
description: Response data
Success:
schema:
@@ -14019,34 +17142,34 @@ paths:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Create build workspace directory
tags:
- - Builds
+ - Builds
/environments/{id}/builds/browse/upload:
post:
description: Upload a file into the builds workspace root
operationId: builds-browse-upload
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Destination path
- explode: false
- in: query
- name: path
- schema:
- default: /
- description: Destination path
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Destination path
+ explode: false
+ in: query
+ name: path
+ schema:
+ default: /
+ description: Destination path
+ type: string
requestBody:
content:
multipart/form-data:
@@ -14058,16 +17181,16 @@ paths:
format: binary
type: string
required:
- - file
+ - file
type: object
required: true
responses:
- '204':
+ "204":
description: No Content
headers:
Data:
schema:
- $ref: '#/components/schemas/BaseMessageResponse'
+ $ref: "#/components/schemas/BaseMessageResponse"
description: Response data
Success:
schema:
@@ -14077,1602 +17200,1869 @@ paths:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Upload build workspace file
tags:
- - Builds
+ - Builds
/environments/{id}/containers:
get:
description: Paginated list of containers
operationId: list-containers
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Search query
- explode: false
- in: query
- name: search
- schema:
- description: Search query
- type: string
- - description: Column to sort by
- explode: false
- in: query
- name: sort
- schema:
- description: Column to sort by
- type: string
- - description: Sort direction
- explode: false
- in: query
- name: order
- schema:
- default: asc
- description: Sort direction
- type: string
- - description: Start index
- explode: false
- in: query
- name: start
- schema:
- default: 0
- description: Start index
- format: int64
- type: integer
- - description: Limit
- explode: false
- in: query
- name: limit
- schema:
- default: 20
- description: Limit
- format: int64
- type: integer
- - description: 'Optional grouping mode (for example: project)'
- explode: false
- in: query
- name: groupBy
- schema:
- description: 'Optional grouping mode (for example: project)'
- type: string
- - description: Include internal containers
- explode: false
- in: query
- name: includeInternal
- schema:
- default: false
- description: Include internal containers
- type: boolean
- - description: Filter by update status (has_update, up_to_date, error, unknown)
- explode: false
- in: query
- name: updates
- schema:
- description: Filter by update status (has_update, up_to_date, error, unknown)
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Search query
+ explode: false
+ in: query
+ name: search
+ schema:
+ description: Search query
+ type: string
+ - description: Column to sort by
+ explode: false
+ in: query
+ name: sort
+ schema:
+ description: Column to sort by
+ type: string
+ - description: Sort direction
+ explode: false
+ in: query
+ name: order
+ schema:
+ default: asc
+ description: Sort direction
+ type: string
+ - description: Start index
+ explode: false
+ in: query
+ name: start
+ schema:
+ default: 0
+ description: Start index
+ format: int64
+ type: integer
+ - description: Limit
+ explode: false
+ in: query
+ name: limit
+ schema:
+ default: 20
+ description: Limit
+ format: int64
+ type: integer
+ - description: "Optional grouping mode (for example: project)"
+ explode: false
+ in: query
+ name: groupBy
+ schema:
+ description: "Optional grouping mode (for example: project)"
+ type: string
+ - description: Include internal containers
+ explode: false
+ in: query
+ name: includeInternal
+ schema:
+ default: false
+ description: Include internal containers
+ type: boolean
+ - description: Filter by update status (has_update, up_to_date, error, unknown)
+ explode: false
+ in: query
+ name: updates
+ schema:
+ description: Filter by update status (has_update, up_to_date, error, unknown)
+ type: string
+ - description: Filter standalone containers only (true/false)
+ explode: false
+ in: query
+ name: standalone
+ schema:
+ description: Filter standalone containers only (true/false)
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/ContainerPaginatedResponse'
+ $ref: "#/components/schemas/ContainerPaginatedResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: List containers
tags:
- - Containers
+ - Containers
post:
operationId: create-container
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/ContainerCreate'
+ $ref: "#/components/schemas/ContainerCreate"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/ContainerCreatedResponse'
+ $ref: "#/components/schemas/ContainerCreatedResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Create container
tags:
- - Containers
+ - Containers
/environments/{id}/containers/counts:
get:
operationId: container-status-counts
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Include internal containers
- explode: false
- in: query
- name: includeInternal
- schema:
- default: false
- description: Include internal containers
- type: boolean
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Include internal containers
+ explode: false
+ in: query
+ name: includeInternal
+ schema:
+ default: false
+ description: Include internal containers
+ type: boolean
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/ContainerStatusCountsResponse'
+ $ref: "#/components/schemas/ContainerStatusCountsResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Container status counts
tags:
- - Containers
+ - Containers
/environments/{id}/containers/{containerId}:
delete:
operationId: delete-container
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Container ID
- in: path
- name: containerId
- required: true
- schema:
- description: Container ID
- type: string
- - description: Force delete running container
- explode: false
- in: query
- name: force
- schema:
- default: false
- description: Force delete running container
- type: boolean
- - description: Remove associated volumes
- explode: false
- in: query
- name: volumes
- schema:
- default: false
- description: Remove associated volumes
- type: boolean
- responses:
- '200':
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Container ID
+ in: path
+ name: containerId
+ required: true
+ schema:
+ description: Container ID
+ type: string
+ - description: Force delete running container
+ explode: false
+ in: query
+ name: force
+ schema:
+ default: false
+ description: Force delete running container
+ type: boolean
+ - description: Remove associated volumes
+ explode: false
+ in: query
+ name: volumes
+ schema:
+ default: false
+ description: Remove associated volumes
+ type: boolean
+ responses:
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/ContainerActionResponse'
+ $ref: "#/components/schemas/ContainerActionResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Delete container
tags:
- - Containers
+ - Containers
get:
operationId: get-container
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Container ID
- in: path
- name: containerId
- required: true
- schema:
- description: Container ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Container ID
+ in: path
+ name: containerId
+ required: true
+ schema:
+ description: Container ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/ContainerDetailsResponse'
+ $ref: "#/components/schemas/ContainerDetailsResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get container
tags:
- - Containers
+ - Containers
/environments/{id}/containers/{containerId}/auto-update:
put:
description: Enable or disable auto-update for a specific container
operationId: set-container-auto-update
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Container ID
- in: path
- name: containerId
- required: true
- schema:
- description: Container ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Container ID
+ in: path
+ name: containerId
+ required: true
+ schema:
+ description: Container ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/SetAutoUpdateInputBody'
+ $ref: "#/components/schemas/SetAutoUpdateInputBody"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/ContainerActionResponse'
+ $ref: "#/components/schemas/ContainerActionResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Set container auto-update
tags:
- - Containers
- - Updater
+ - Containers
+ - Updater
+ /environments/{id}/containers/{containerId}/commit:
+ post:
+ description: Create an image from a container
+ operationId: commit-container
+ parameters:
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Container ID
+ in: path
+ name: containerId
+ required: true
+ schema:
+ description: Container ID
+ type: string
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/ContainerCommitRequest"
+ required: true
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BaseApiResponseCommitResult"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Commit container
+ tags:
+ - Containers
+ - Images
+ /environments/{id}/containers/{containerId}/kill:
+ post:
+ description: Send a signal to the container's main process (default SIGKILL)
+ operationId: kill-container
+ parameters:
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Container ID
+ in: path
+ name: containerId
+ required: true
+ schema:
+ description: Container ID
+ type: string
+ - description: Signal to send (for example SIGTERM, SIGKILL). Defaults to SIGKILL.
+ explode: false
+ in: query
+ name: signal
+ schema:
+ description: Signal to send (for example SIGTERM, SIGKILL). Defaults to SIGKILL.
+ type: string
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/ContainerActionResponse"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Kill container
+ tags:
+ - Containers
+ /environments/{id}/containers/{containerId}/pause:
+ post:
+ operationId: pause-container
+ parameters:
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Container ID
+ in: path
+ name: containerId
+ required: true
+ schema:
+ description: Container ID
+ type: string
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/ContainerActionResponse"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Pause container
+ tags:
+ - Containers
/environments/{id}/containers/{containerId}/redeploy:
post:
description: Pull latest image and recreate container
operationId: redeploy-container
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Container ID
- in: path
- name: containerId
- required: true
- schema:
- description: Container ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Container ID
+ in: path
+ name: containerId
+ required: true
+ schema:
+ description: Container ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/ContainerDetailsResponse'
+ $ref: "#/components/schemas/ContainerDetailsResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Redeploy container
tags:
- - Containers
+ - Containers
/environments/{id}/containers/{containerId}/restart:
post:
operationId: restart-container
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Container ID
- in: path
- name: containerId
- required: true
- schema:
- description: Container ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Container ID
+ in: path
+ name: containerId
+ required: true
+ schema:
+ description: Container ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/ContainerActionResponse'
+ $ref: "#/components/schemas/ContainerActionResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Restart container
tags:
- - Containers
+ - Containers
/environments/{id}/containers/{containerId}/start:
post:
operationId: start-container
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Container ID
- in: path
- name: containerId
- required: true
- schema:
- description: Container ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Container ID
+ in: path
+ name: containerId
+ required: true
+ schema:
+ description: Container ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/ContainerActionResponse'
+ $ref: "#/components/schemas/ContainerActionResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Start container
tags:
- - Containers
+ - Containers
/environments/{id}/containers/{containerId}/stop:
post:
operationId: stop-container
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Container ID
- in: path
- name: containerId
- required: true
- schema:
- description: Container ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Container ID
+ in: path
+ name: containerId
+ required: true
+ schema:
+ description: Container ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/ContainerActionResponse'
+ $ref: "#/components/schemas/ContainerActionResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Stop container
tags:
- - Containers
+ - Containers
+ /environments/{id}/containers/{containerId}/unpause:
+ post:
+ operationId: unpause-container
+ parameters:
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Container ID
+ in: path
+ name: containerId
+ required: true
+ schema:
+ description: Container ID
+ type: string
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/ContainerActionResponse"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Unpause container
+ tags:
+ - Containers
/environments/{id}/containers/{containerId}/update:
post:
- description: Pull the latest image and apply the appropriate update strategy
- for a specific container
+ description: Pull the latest image and apply the appropriate update strategy for a specific container
operationId: update-container
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Container ID to update
- in: path
- name: containerId
- required: true
- schema:
- description: Container ID to update
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Container ID to update
+ in: path
+ name: containerId
+ required: true
+ schema:
+ description: Container ID to update
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseResult'
+ $ref: "#/components/schemas/BaseApiResponseResult"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Update a single container
tags:
- - Updater
- - Containers
+ - Updater
+ - Containers
/environments/{id}/dashboard:
get:
description: Returns the dashboard first-paint snapshot in a single response
operationId: get-dashboard
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: 'Debug mode: force an empty action item list'
- explode: false
- in: query
- name: debugAllGood
- schema:
- default: false
- description: 'Debug mode: force an empty action item list'
- type: boolean
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: "Debug mode: force an empty action item list"
+ explode: false
+ in: query
+ name: debugAllGood
+ schema:
+ default: false
+ description: "Debug mode: force an empty action item list"
+ type: boolean
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseSnapshot'
+ $ref: "#/components/schemas/BaseApiResponseSnapshot"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get dashboard snapshot
tags:
- - Dashboard
- /environments/{id}/dashboard/action-items:
+ - Dashboard
+ /environments/{id}/deployment:
get:
- description: Returns only dashboard action items that currently need attention
- operationId: get-dashboard-action-items
+ description: Get Docker run and compose snippets for environment deployment
+ operationId: getDeploymentSnippets
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: 'Debug mode: force an empty action item list'
- explode: false
- in: query
- name: debugAllGood
- schema:
- default: false
- description: 'Debug mode: force an empty action item list'
- type: boolean
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseActionItems'
+ $ref: "#/components/schemas/BaseApiResponseDeploymentSnippet"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
- summary: Get dashboard action items
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Get deployment snippets
tags:
- - Dashboard
- /environments/{id}/deployment:
+ - Environments
+ /environments/{id}/deployment/mtls/bundle:
get:
- description: Get Docker run and compose snippets for environment deployment
- operationId: getDeploymentSnippets
+ description: Download the generated mTLS client certificate bundle for an edge environment
+ operationId: downloadEnvironmentMTLSBundle
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
responses:
- '200':
+ "200":
+ description: OK
+ default:
content:
- application/json:
+ application/problem+json:
schema:
- $ref: '#/components/schemas/BaseApiResponseDeploymentSnippet'
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Download environment mTLS bundle
+ tags:
+ - Environments
+ /environments/{id}/deployment/mtls/{fileName}:
+ get:
+ description: Download an individual generated mTLS client certificate asset for an edge environment
+ operationId: downloadEnvironmentMTLSFile
+ parameters:
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: mTLS asset filename
+ in: path
+ name: fileName
+ required: true
+ schema:
+ description: mTLS asset filename
+ type: string
+ responses:
+ "200":
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
- summary: Get deployment snippets
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Download environment mTLS asset
tags:
- - Environments
+ - Environments
/environments/{id}/gitops-syncs:
get:
description: Get a paginated list of GitOps syncs for an environment
operationId: listGitOpsSyncs
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Search query
- explode: false
- in: query
- name: search
- schema:
- description: Search query
- type: string
- - description: Column to sort by
- explode: false
- in: query
- name: sort
- schema:
- description: Column to sort by
- type: string
- - description: Sort direction
- explode: false
- in: query
- name: order
- schema:
- default: asc
- description: Sort direction
- type: string
- - description: Start index
- explode: false
- in: query
- name: start
- schema:
- default: 0
- description: Start index
- format: int64
- type: integer
- - description: Items per page
- explode: false
- in: query
- name: limit
- schema:
- default: 20
- description: Items per page
- format: int64
- type: integer
- responses:
- '200':
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Search query
+ explode: false
+ in: query
+ name: search
+ schema:
+ description: Search query
+ type: string
+ - description: Column to sort by
+ explode: false
+ in: query
+ name: sort
+ schema:
+ description: Column to sort by
+ type: string
+ - description: Sort direction
+ explode: false
+ in: query
+ name: order
+ schema:
+ default: asc
+ description: Sort direction
+ type: string
+ - description: Start index
+ explode: false
+ in: query
+ name: start
+ schema:
+ default: 0
+ description: Start index
+ format: int64
+ type: integer
+ - description: Items per page
+ explode: false
+ in: query
+ name: limit
+ schema:
+ default: 20
+ description: Items per page
+ format: int64
+ type: integer
+ responses:
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/GitOpsSyncPaginatedResponse'
+ $ref: "#/components/schemas/GitOpsSyncPaginatedResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: List GitOps syncs
tags:
- - GitOps Syncs
+ - GitOps Syncs
post:
description: Create a new GitOps sync configuration for an environment
operationId: createGitOpsSync
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/GitopsCreateSyncRequest'
+ $ref: "#/components/schemas/GitopsCreateSyncRequest"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseGitOpsSync'
+ $ref: "#/components/schemas/BaseApiResponseGitOpsSync"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Create a GitOps sync
tags:
- - GitOps Syncs
+ - GitOps Syncs
/environments/{id}/gitops-syncs/import:
post:
description: Import multiple GitOps sync configurations from JSON
operationId: importGitOpsSyncs
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
requestBody:
content:
application/json:
schema:
items:
- $ref: '#/components/schemas/GitopsImportGitOpsSyncRequest'
+ $ref: "#/components/schemas/GitopsImportGitOpsSyncRequest"
type:
- - array
- - 'null'
+ - array
+ - "null"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseImportGitOpsSyncResponse'
+ $ref: "#/components/schemas/BaseApiResponseImportGitOpsSyncResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Import GitOps syncs
tags:
- - GitOps Syncs
+ - GitOps Syncs
/environments/{id}/gitops-syncs/{syncId}:
delete:
description: Delete a GitOps sync configuration by ID
operationId: deleteGitOpsSync
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Sync ID
- in: path
- name: syncId
- required: true
- schema:
- description: Sync ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Sync ID
+ in: path
+ name: syncId
+ required: true
+ schema:
+ description: Sync ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Delete a GitOps sync
tags:
- - GitOps Syncs
+ - GitOps Syncs
get:
description: Get a GitOps sync by ID
operationId: getGitOpsSync
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Sync ID
- in: path
- name: syncId
- required: true
- schema:
- description: Sync ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Sync ID
+ in: path
+ name: syncId
+ required: true
+ schema:
+ description: Sync ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseGitOpsSync'
+ $ref: "#/components/schemas/BaseApiResponseGitOpsSync"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get a GitOps sync
tags:
- - GitOps Syncs
+ - GitOps Syncs
put:
description: Update an existing GitOps sync configuration
operationId: updateGitOpsSync
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Sync ID
- in: path
- name: syncId
- required: true
- schema:
- description: Sync ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Sync ID
+ in: path
+ name: syncId
+ required: true
+ schema:
+ description: Sync ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/GitopsUpdateSyncRequest'
+ $ref: "#/components/schemas/GitopsUpdateSyncRequest"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseGitOpsSync'
+ $ref: "#/components/schemas/BaseApiResponseGitOpsSync"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Update a GitOps sync
tags:
- - GitOps Syncs
+ - GitOps Syncs
/environments/{id}/gitops-syncs/{syncId}/files:
get:
description: Browse files in the synced repository
operationId: browseGitOpsSyncFiles
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Sync ID
- in: path
- name: syncId
- required: true
- schema:
- description: Sync ID
- type: string
- - description: Path to browse (optional)
- explode: false
- in: query
- name: path
- schema:
- description: Path to browse (optional)
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Sync ID
+ in: path
+ name: syncId
+ required: true
+ schema:
+ description: Sync ID
+ type: string
+ - description: Path to browse (optional)
+ explode: false
+ in: query
+ name: path
+ schema:
+ description: Path to browse (optional)
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseBrowseResponse'
+ $ref: "#/components/schemas/BaseApiResponseBrowseResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Browse GitOps sync files
tags:
- - GitOps Syncs
+ - GitOps Syncs
/environments/{id}/gitops-syncs/{syncId}/status:
get:
description: Get the current status of a GitOps sync
operationId: getGitOpsSyncStatus
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Sync ID
- in: path
- name: syncId
- required: true
- schema:
- description: Sync ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Sync ID
+ in: path
+ name: syncId
+ required: true
+ schema:
+ description: Sync ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseSyncStatus'
+ $ref: "#/components/schemas/BaseApiResponseSyncStatus"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get GitOps sync status
tags:
- - GitOps Syncs
+ - GitOps Syncs
/environments/{id}/gitops-syncs/{syncId}/sync:
post:
description: Manually trigger a sync operation
operationId: performGitOpsSync
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Sync ID
- in: path
- name: syncId
- required: true
- schema:
- description: Sync ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Sync ID
+ in: path
+ name: syncId
+ required: true
+ schema:
+ description: Sync ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseSyncResult'
+ $ref: "#/components/schemas/BaseApiResponseSyncResult"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Perform a GitOps sync
tags:
- - GitOps Syncs
+ - GitOps Syncs
/environments/{id}/heartbeat:
post:
description: Update the heartbeat timestamp for an environment
operationId: updateHeartbeat
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Update environment heartbeat
tags:
- - Environments
+ - Environments
+ /environments/{id}/image-updates/by-refs:
+ get:
+ operationId: get-update-info-by-refs
+ parameters:
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Comma-separated image references
+ explode: false
+ in: query
+ name: imageRefs
+ schema:
+ description: Comma-separated image references
+ type: string
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BaseApiResponseMapStringUpdateInfo"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Get persisted update info for image references
+ tags:
+ - Image Updates
/environments/{id}/image-updates/check:
get:
operationId: check-image-update
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Image reference
- explode: false
- in: query
- name: imageRef
- schema:
- description: Image reference
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Image reference
+ explode: false
+ in: query
+ name: imageRef
+ schema:
+ description: Image reference
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseResponse'
+ $ref: "#/components/schemas/BaseApiResponseResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Check image update by reference
tags:
- - Image Updates
+ - Image Updates
/environments/{id}/image-updates/check-all:
post:
operationId: check-all-images
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/ImageupdateCheckAllImagesRequest'
+ $ref: "#/components/schemas/ImageupdateCheckAllImagesRequest"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseBatchResponse'
+ $ref: "#/components/schemas/BaseApiResponseBatchResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Check all images
tags:
- - Image Updates
+ - Image Updates
/environments/{id}/image-updates/check-batch:
post:
operationId: check-multiple-images
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/ImageupdateBatchImageUpdateRequest'
+ $ref: "#/components/schemas/ImageupdateBatchImageUpdateRequest"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseBatchResponse'
+ $ref: "#/components/schemas/BaseApiResponseBatchResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Check multiple images
tags:
- - Image Updates
+ - Image Updates
/environments/{id}/image-updates/check/{imageId}:
get:
operationId: check-image-update-by-id
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Image ID
- in: path
- name: imageId
- required: true
- schema:
- description: Image ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Image ID
+ in: path
+ name: imageId
+ required: true
+ schema:
+ description: Image ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseResponse'
+ $ref: "#/components/schemas/BaseApiResponseResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Check image update by ID
tags:
- - Image Updates
+ - Image Updates
post:
operationId: check-image-update-by-id-post
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Image ID
- in: path
- name: imageId
- required: true
- schema:
- description: Image ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Image ID
+ in: path
+ name: imageId
+ required: true
+ schema:
+ description: Image ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseResponse'
+ $ref: "#/components/schemas/BaseApiResponseResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Check image update by ID (POST)
tags:
- - Image Updates
+ - Image Updates
/environments/{id}/image-updates/summary:
get:
operationId: get-update-summary
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseSummary'
+ $ref: "#/components/schemas/BaseApiResponseSummary"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get update summary
tags:
- - Image Updates
+ - Image Updates
/environments/{id}/images:
get:
description: Get a paginated list of Docker images
operationId: list-images
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Search query
- explode: false
- in: query
- name: search
- schema:
- description: Search query
- type: string
- - description: Column to sort by
- explode: false
- in: query
- name: sort
- schema:
- description: Column to sort by
- type: string
- - description: Sort direction (asc or desc)
- explode: false
- in: query
- name: order
- schema:
- default: asc
- description: Sort direction (asc or desc)
- type: string
- - description: Start index for pagination
- explode: false
- in: query
- name: start
- schema:
- default: 0
- description: Start index for pagination
- format: int64
- type: integer
- - description: Number of items per page
- explode: false
- in: query
- name: limit
- schema:
- default: 20
- description: Number of items per page
- format: int64
- type: integer
- - description: Filter by in-use status (true/false)
- explode: false
- in: query
- name: inUse
- schema:
- description: Filter by in-use status (true/false)
- type: string
- - description: Filter by update availability (true/false)
- explode: false
- in: query
- name: updates
- schema:
- description: Filter by update availability (true/false)
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Search query
+ explode: false
+ in: query
+ name: search
+ schema:
+ description: Search query
+ type: string
+ - description: Column to sort by
+ explode: false
+ in: query
+ name: sort
+ schema:
+ description: Column to sort by
+ type: string
+ - description: Sort direction (asc or desc)
+ explode: false
+ in: query
+ name: order
+ schema:
+ default: asc
+ description: Sort direction (asc or desc)
+ type: string
+ - description: Start index for pagination
+ explode: false
+ in: query
+ name: start
+ schema:
+ default: 0
+ description: Start index for pagination
+ format: int64
+ type: integer
+ - description: Number of items per page
+ explode: false
+ in: query
+ name: limit
+ schema:
+ default: 20
+ description: Number of items per page
+ format: int64
+ type: integer
+ - description: Filter by in-use status (true/false)
+ explode: false
+ in: query
+ name: inUse
+ schema:
+ description: Filter by in-use status (true/false)
+ type: string
+ - description: Filter by update availability (true/false)
+ explode: false
+ in: query
+ name: updates
+ schema:
+ description: Filter by update availability (true/false)
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/ImagePaginatedResponse'
+ $ref: "#/components/schemas/ImagePaginatedResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: List images
tags:
- - Images
+ - Images
/environments/{id}/images/build:
post:
description: Build a Docker image using BuildKit with streaming progress output
operationId: build-image
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/ImageBuildRequest'
+ $ref: "#/components/schemas/DockerTypesBuildRequest"
required: true
responses:
- '200':
+ "200":
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Build an image
tags:
- - Images
+ - Images
/environments/{id}/images/builds:
get:
description: Get a paginated list of image build history for an environment
operationId: list-image-builds
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Search query
- explode: false
- in: query
- name: search
- schema:
- description: Search query
- type: string
- - description: Column to sort by
- explode: false
- in: query
- name: sort
- schema:
- description: Column to sort by
- type: string
- - description: Sort direction (asc or desc)
- explode: false
- in: query
- name: order
- schema:
- default: desc
- description: Sort direction (asc or desc)
- type: string
- - description: Start index for pagination
- explode: false
- in: query
- name: start
- schema:
- default: 0
- description: Start index for pagination
- format: int64
- type: integer
- - description: Number of items per page
- explode: false
- in: query
- name: limit
- schema:
- default: 20
- description: Number of items per page
- format: int64
- type: integer
- - description: Filter by status
- explode: false
- in: query
- name: status
- schema:
- description: Filter by status
- type: string
- - description: Filter by provider
- explode: false
- in: query
- name: provider
- schema:
- description: Filter by provider
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Search query
+ explode: false
+ in: query
+ name: search
+ schema:
+ description: Search query
+ type: string
+ - description: Column to sort by
+ explode: false
+ in: query
+ name: sort
+ schema:
+ description: Column to sort by
+ type: string
+ - description: Sort direction (asc or desc)
+ explode: false
+ in: query
+ name: order
+ schema:
+ default: desc
+ description: Sort direction (asc or desc)
+ type: string
+ - description: Start index for pagination
+ explode: false
+ in: query
+ name: start
+ schema:
+ default: 0
+ description: Start index for pagination
+ format: int64
+ type: integer
+ - description: Number of items per page
+ explode: false
+ in: query
+ name: limit
+ schema:
+ default: 20
+ description: Number of items per page
+ format: int64
+ type: integer
+ - description: Filter by status
+ explode: false
+ in: query
+ name: status
+ schema:
+ description: Filter by status
+ type: string
+ - description: Filter by provider
+ explode: false
+ in: query
+ name: provider
+ schema:
+ description: Filter by provider
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/ImageBuildPaginatedResponse'
+ $ref: "#/components/schemas/ImageBuildPaginatedResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: List image builds
tags:
- - Images
+ - Images
/environments/{id}/images/builds/{buildId}:
get:
description: Get a single image build history entry with output
operationId: get-image-build
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Build ID
- in: path
- name: buildId
- required: true
- schema:
- description: Build ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Build ID
+ in: path
+ name: buildId
+ required: true
+ schema:
+ description: Build ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseBuildRecord'
+ $ref: "#/components/schemas/BaseApiResponseBuildRecord"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get image build
tags:
- - Images
+ - Images
/environments/{id}/images/counts:
get:
description: Get counts of images in use, unused, total, and total size
operationId: get-image-usage-counts
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/ImageUsageCountsResponse'
+ $ref: "#/components/schemas/ImageUsageCountsResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get image usage counts
tags:
- - Images
+ - Images
/environments/{id}/images/prune:
post:
description: Remove unused Docker images
operationId: prune-images
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Only remove dangling images
- explode: false
- in: query
- name: dangling
- schema:
- description: Only remove dangling images
- type: boolean
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Only remove dangling images
+ explode: false
+ in: query
+ name: dangling
+ schema:
+ description: Only remove dangling images
+ type: boolean
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/PruneImagesInputBody'
+ $ref: "#/components/schemas/PruneImagesInputBody"
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponsePruneReport'
+ $ref: "#/components/schemas/BaseApiResponsePruneReport"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Prune unused images
tags:
- - Images
+ - Images
/environments/{id}/images/pull:
post:
description: Pull a Docker image from a registry with streaming progress output
operationId: pull-image
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/ImagePullOptions'
+ $ref: "#/components/schemas/ImagePullOptions"
required: true
responses:
- '200':
+ "200":
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Pull an image
tags:
- - Images
+ - Images
+ /environments/{id}/images/search:
+ get:
+ description: Search Docker Hub images
+ operationId: search-images
+ parameters:
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Search term
+ explode: false
+ in: query
+ name: term
+ schema:
+ description: Search term
+ type: string
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BaseApiResponseListSearchResult"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Search images
+ tags:
+ - Images
/environments/{id}/images/upload:
post:
description: Upload a Docker image from a tar archive
operationId: upload-image
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
requestBody:
content:
multipart/form-data:
@@ -15684,4866 +19074,5361 @@ paths:
format: binary
type: string
required:
- - file
+ - file
type: object
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseLoadResult'
+ $ref: "#/components/schemas/BaseApiResponseLoadResult"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Upload an image
tags:
- - Images
+ - Images
/environments/{id}/images/vulnerabilities/summaries:
post:
description: Retrieves scan summaries for a list of images (batch)
operationId: get-image-vulnerability-summaries
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/VulnerabilityScanSummariesRequest'
+ $ref: "#/components/schemas/VulnerabilityScanSummariesRequest"
description: Batch scan summary request
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseScanSummariesResponse'
+ $ref: "#/components/schemas/BaseApiResponseScanSummariesResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get vulnerability scan summaries
tags:
- - Vulnerabilities
+ - Vulnerabilities
/environments/{id}/images/{imageId}:
delete:
description: Remove a Docker image by ID
operationId: remove-image
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Image ID
- in: path
- name: imageId
- required: true
- schema:
- description: Image ID
- type: string
- - description: Force removal
- explode: false
- in: query
- name: force
- schema:
- description: Force removal
- type: boolean
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Image ID
+ in: path
+ name: imageId
+ required: true
+ schema:
+ description: Image ID
+ type: string
+ - description: Force removal
+ explode: false
+ in: query
+ name: force
+ schema:
+ description: Force removal
+ type: boolean
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Remove an image
tags:
- - Images
+ - Images
get:
description: Get a Docker image by its ID
operationId: get-image
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Image ID
- in: path
- name: imageId
- required: true
- schema:
- description: Image ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Image ID
+ in: path
+ name: imageId
+ required: true
+ schema:
+ description: Image ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseDetailSummary'
+ $ref: "#/components/schemas/BaseApiResponseDetailSummary"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get image by ID
tags:
- - Images
+ - Images
/environments/{id}/images/{imageId}/vulnerabilities:
get:
description: Retrieves the most recent vulnerability scan result for an image
operationId: get-image-vulnerabilities
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Image ID
- in: path
- name: imageId
- required: true
- schema:
- description: Image ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Image ID
+ in: path
+ name: imageId
+ required: true
+ schema:
+ description: Image ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseScanResult'
+ $ref: "#/components/schemas/BaseApiResponseScanResult"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get vulnerability scan result
tags:
- - Vulnerabilities
+ - Vulnerabilities
/environments/{id}/images/{imageId}/vulnerabilities/list:
get:
description: Retrieves paginated vulnerabilities for an image
operationId: list-image-vulnerabilities
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Image ID
- in: path
- name: imageId
- required: true
- schema:
- description: Image ID
- type: string
- - description: Search query
- explode: false
- in: query
- name: search
- schema:
- description: Search query
- type: string
- - description: Sort field
- explode: false
- in: query
- name: sort
- schema:
- description: Sort field
- type: string
- - description: Sort order
- explode: false
- in: query
- name: order
- schema:
- description: Sort order
- type: string
- - description: Start offset
- explode: false
- in: query
- name: start
- schema:
- description: Start offset
- format: int64
- type: integer
- - description: Limit
- explode: false
- in: query
- name: limit
- schema:
- description: Limit
- format: int64
- type: integer
- - description: Page number
- explode: false
- in: query
- name: page
- schema:
- description: Page number
- format: int64
- type: integer
- - description: Comma-separated severity filter
- explode: false
- in: query
- name: severity
- schema:
- description: Comma-separated severity filter
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Image ID
+ in: path
+ name: imageId
+ required: true
+ schema:
+ description: Image ID
+ type: string
+ - description: Search query
+ explode: false
+ in: query
+ name: search
+ schema:
+ description: Search query
+ type: string
+ - description: Sort field
+ explode: false
+ in: query
+ name: sort
+ schema:
+ description: Sort field
+ type: string
+ - description: Sort order
+ explode: false
+ in: query
+ name: order
+ schema:
+ description: Sort order
+ type: string
+ - description: Start offset
+ explode: false
+ in: query
+ name: start
+ schema:
+ description: Start offset
+ format: int64
+ type: integer
+ - description: Limit
+ explode: false
+ in: query
+ name: limit
+ schema:
+ description: Limit
+ format: int64
+ type: integer
+ - description: Comma-separated severity filter
+ explode: false
+ in: query
+ name: severity
+ schema:
+ description: Comma-separated severity filter
+ type: string
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BasePaginatedVulnerability"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: List image vulnerabilities
+ tags:
+ - Vulnerabilities
+ /environments/{id}/images/{imageId}/vulnerabilities/scan:
+ post:
+ description: Initiates a vulnerability scan for the specified image using Trivy
+ operationId: scan-image-vulnerabilities
+ parameters:
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Image ID to scan
+ in: path
+ name: imageId
+ required: true
+ schema:
+ description: Image ID to scan
+ type: string
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BaseApiResponseScanResult"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Scan image for vulnerabilities
+ tags:
+ - Vulnerabilities
+ /environments/{id}/images/{imageId}/vulnerabilities/summary:
+ get:
+ description: Retrieves just the summary of vulnerabilities for an image (for list views)
+ operationId: get-image-vulnerability-summary
+ parameters:
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Image ID
+ in: path
+ name: imageId
+ required: true
+ schema:
+ description: Image ID
+ type: string
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BaseApiResponseScanSummary"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Get vulnerability scan summary
+ tags:
+ - Vulnerabilities
+ /environments/{id}/images/{name}/attestations:
+ get:
+ description: Get in-toto attestation statements attached to a Docker image
+ operationId: get-image-attestations
+ parameters:
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Image ID or image reference
+ in: path
+ name: name
+ required: true
+ schema:
+ description: Image ID or image reference
+ type: string
+ - description: OCI platform selector, for example linux/amd64
+ explode: false
+ in: query
+ name: platform
+ schema:
+ description: OCI platform selector, for example linux/amd64
+ type: string
+ - description: Exact in-toto predicate type URI to include
+ explode: false
+ in: query
+ name: predicateType
+ schema:
+ description: Exact in-toto predicate type URI to include
+ type: string
+ - description: Include verbatim statement JSON bodies
+ explode: false
+ in: query
+ name: statement
+ schema:
+ default: false
+ description: Include verbatim statement JSON bodies
+ type: boolean
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BasePaginatedVulnerability'
+ $ref: "#/components/schemas/BaseApiResponseAttestationList"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
- summary: List image vulnerabilities
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Get image attestations
tags:
- - Vulnerabilities
- /environments/{id}/images/{imageId}/vulnerabilities/scan:
- post:
- description: Initiates a vulnerability scan for the specified image using Trivy
- operationId: scan-image-vulnerabilities
+ - Images
+ /environments/{id}/images/{name}/export:
+ get:
+ description: Download a Docker image as a tar archive
+ operationId: export-image
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Image ID to scan
- in: path
- name: imageId
- required: true
- schema:
- description: Image ID to scan
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Image ID or image reference
+ in: path
+ name: name
+ required: true
+ schema:
+ description: Image ID or image reference
+ type: string
+ responses:
+ "200":
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Export image
+ tags:
+ - Images
+ /environments/{id}/images/{name}/history:
+ get:
+ description: Get Docker image layer history
+ operationId: get-image-history
+ parameters:
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Image ID or image reference
+ in: path
+ name: name
+ required: true
+ schema:
+ description: Image ID or image reference
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseScanResult'
+ $ref: "#/components/schemas/BaseApiResponseListHistoryItem"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
- summary: Scan image for vulnerabilities
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Get image history
tags:
- - Vulnerabilities
- /environments/{id}/images/{imageId}/vulnerabilities/summary:
- get:
- description: Retrieves just the summary of vulnerabilities for an image (for
- list views)
- operationId: get-image-vulnerability-summary
+ - Images
+ /environments/{id}/images/{name}/tag:
+ post:
+ description: Add a repository tag to an image
+ operationId: tag-image
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Image ID
- in: path
- name: imageId
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Image ID or image reference
+ in: path
+ name: name
+ required: true
+ schema:
+ description: Image ID or image reference
+ type: string
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/ImageTagRequest"
required: true
- schema:
- description: Image ID
- type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseScanSummary'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
- summary: Get vulnerability scan summary
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Tag image
tags:
- - Vulnerabilities
+ - Images
/environments/{id}/job-schedules:
get:
description: Get configured cron schedules for background jobs
operationId: get-job-schedules
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/JobscheduleConfig'
+ $ref: "#/components/schemas/JobscheduleConfig"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get job schedules
tags:
- - JobSchedules
+ - JobSchedules
put:
description: Update background job cron schedules and reschedule running jobs
operationId: update-job-schedules
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/JobscheduleUpdate'
+ $ref: "#/components/schemas/JobscheduleUpdate"
description: Job schedule update data
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseConfig'
+ $ref: "#/components/schemas/BaseApiResponseConfig"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Update job schedules
tags:
- - JobSchedules
+ - JobSchedules
/environments/{id}/jobs:
get:
description: Get status, schedule, and metadata for all background jobs
operationId: list-jobs
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/JobscheduleJobListResponse'
+ $ref: "#/components/schemas/JobscheduleJobListResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: List all background jobs
tags:
- - JobSchedules
+ - JobSchedules
/environments/{id}/jobs/{jobId}/run:
post:
description: Manually trigger a background job to run immediately
operationId: run-job
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Job ID to run
- in: path
- name: jobId
- required: true
- schema:
- description: Job ID to run
- minLength: 1
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Job ID to run
+ in: path
+ name: jobId
+ required: true
+ schema:
+ description: Job ID to run
+ minLength: 1
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/JobscheduleJobRunResponse'
+ $ref: "#/components/schemas/JobscheduleJobRunResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Run a job now
tags:
- - JobSchedules
+ - JobSchedules
/environments/{id}/networks:
get:
operationId: list-networks
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Search query
- explode: false
- in: query
- name: search
- schema:
- description: Search query
- type: string
- - description: Column to sort by
- explode: false
- in: query
- name: sort
- schema:
- description: Column to sort by
- type: string
- - description: Sort direction (asc or desc)
- explode: false
- in: query
- name: order
- schema:
- default: asc
- description: Sort direction (asc or desc)
- type: string
- - description: Start index for pagination
- explode: false
- in: query
- name: start
- schema:
- default: 0
- description: Start index for pagination
- format: int64
- type: integer
- - description: Number of items per page
- explode: false
- in: query
- name: limit
- schema:
- default: 20
- description: Number of items per page
- format: int64
- type: integer
- - description: Filter by in-use status (true/false)
- explode: false
- in: query
- name: inUse
- schema:
- description: Filter by in-use status (true/false)
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Search query
+ explode: false
+ in: query
+ name: search
+ schema:
+ description: Search query
+ type: string
+ - description: Column to sort by
+ explode: false
+ in: query
+ name: sort
+ schema:
+ description: Column to sort by
+ type: string
+ - description: Sort direction (asc or desc)
+ explode: false
+ in: query
+ name: order
+ schema:
+ default: asc
+ description: Sort direction (asc or desc)
+ type: string
+ - description: Start index for pagination
+ explode: false
+ in: query
+ name: start
+ schema:
+ default: 0
+ description: Start index for pagination
+ format: int64
+ type: integer
+ - description: Number of items per page
+ explode: false
+ in: query
+ name: limit
+ schema:
+ default: 20
+ description: Number of items per page
+ format: int64
+ type: integer
+ - description: Filter by in-use status (true/false)
+ explode: false
+ in: query
+ name: inUse
+ schema:
+ description: Filter by in-use status (true/false)
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/NetworkPaginatedResponse'
+ $ref: "#/components/schemas/NetworkPaginatedResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: List networks
tags:
- - Networks
+ - Networks
post:
operationId: create-network
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/NetworkCreateRequest'
+ $ref: "#/components/schemas/NetworkCreateRequest"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/NetworkCreatedApiResponse'
+ $ref: "#/components/schemas/NetworkCreatedApiResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Create network
tags:
- - Networks
+ - Networks
/environments/{id}/networks/counts:
get:
operationId: network-counts
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/NetworkCountsApiResponse'
+ $ref: "#/components/schemas/NetworkCountsApiResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Network counts
tags:
- - Networks
+ - Networks
/environments/{id}/networks/prune:
post:
operationId: prune-networks
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/NetworkPruneResponse'
+ $ref: "#/components/schemas/NetworkPruneResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Prune networks
tags:
- - Networks
+ - Networks
/environments/{id}/networks/topology:
get:
operationId: get-network-topology
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/NetworkTopologyApiResponse'
+ $ref: "#/components/schemas/NetworkTopologyApiResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get network topology
tags:
- - Networks
+ - Networks
/environments/{id}/networks/{networkId}:
delete:
operationId: delete-network
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Network ID
- in: path
- name: networkId
- required: true
- schema:
- description: Network ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Network ID
+ in: path
+ name: networkId
+ required: true
+ schema:
+ description: Network ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/NetworkMessageApiResponse'
+ $ref: "#/components/schemas/NetworkMessageApiResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Delete network
tags:
- - Networks
+ - Networks
get:
operationId: get-network
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Network ID
- in: path
- name: networkId
- required: true
- schema:
- description: Network ID
- type: string
- - explode: false
- in: query
- name: sort
- schema:
- default: name
- type: string
- - explode: false
- in: query
- name: order
- schema:
- default: asc
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Network ID
+ in: path
+ name: networkId
+ required: true
+ schema:
+ description: Network ID
+ type: string
+ - explode: false
+ in: query
+ name: sort
+ schema:
+ default: name
+ type: string
+ - explode: false
+ in: query
+ name: order
+ schema:
+ default: asc
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/NetworkInspectApiResponse'
+ $ref: "#/components/schemas/NetworkInspectApiResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get network
tags:
- - Networks
- /environments/{id}/notifications/apprise:
- get:
- operationId: get-apprise-settings
- parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- responses:
- '200':
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/NotificationAppriseResponse'
- description: OK
- default:
- content:
- application/problem+json:
- schema:
- $ref: '#/components/schemas/ErrorModel'
- description: Error
- security:
- - BearerAuth: []
- - ApiKeyAuth: []
- summary: Get Apprise settings
- tags:
- - Notifications
- post:
- operationId: create-or-update-apprise-settings
- parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/NotificationAppriseUpdate'
- required: true
- responses:
- '200':
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/NotificationAppriseResponse'
- description: OK
- default:
- content:
- application/problem+json:
- schema:
- $ref: '#/components/schemas/ErrorModel'
- description: Error
- security:
- - BearerAuth: []
- - ApiKeyAuth: []
- summary: Create or update Apprise settings
- tags:
- - Notifications
- /environments/{id}/notifications/apprise/test:
- post:
- operationId: test-apprise-notification
- parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - explode: false
- in: query
- name: type
- schema:
- default: simple
- type: string
- responses:
- '200':
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
- description: OK
- default:
- content:
- application/problem+json:
- schema:
- $ref: '#/components/schemas/ErrorModel'
- description: Error
- security:
- - BearerAuth: []
- - ApiKeyAuth: []
- summary: Test Apprise notification
- tags:
- - Notifications
+ - Networks
/environments/{id}/notifications/settings:
get:
operationId: get-all-notification-settings
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
items:
- $ref: '#/components/schemas/NotificationResponse'
+ $ref: "#/components/schemas/NotificationResponse"
type:
- - array
- - 'null'
+ - array
+ - "null"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get all notification settings
tags:
- - Notifications
+ - Notifications
post:
operationId: create-or-update-notification-settings
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/NotificationUpdate'
+ $ref: "#/components/schemas/NotificationUpdate"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/NotificationResponse'
+ $ref: "#/components/schemas/NotificationResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Create or update notification settings
tags:
- - Notifications
+ - Notifications
/environments/{id}/notifications/settings/{provider}:
delete:
operationId: delete-notification-settings
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Provider
- in: path
- name: provider
- required: true
- schema:
- description: Provider
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Provider
+ in: path
+ name: provider
+ required: true
+ schema:
+ description: Provider
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Delete notification settings
tags:
- - Notifications
+ - Notifications
get:
operationId: get-notification-settings
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Provider
- in: path
- name: provider
- required: true
- schema:
- description: Provider
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Provider
+ in: path
+ name: provider
+ required: true
+ schema:
+ description: Provider
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/NotificationResponse'
+ $ref: "#/components/schemas/NotificationResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get notification settings by provider
tags:
- - Notifications
+ - Notifications
/environments/{id}/notifications/test/{provider}:
post:
operationId: test-notification
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Provider
- in: path
- name: provider
- required: true
- schema:
- description: Provider
- type: string
- - explode: false
- in: query
- name: type
- schema:
- default: simple
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Provider
+ in: path
+ name: provider
+ required: true
+ schema:
+ description: Provider
+ type: string
+ - explode: false
+ in: query
+ name: type
+ schema:
+ default: simple
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseTestResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Test notification
tags:
- - Notifications
+ - Notifications
/environments/{id}/ports:
get:
operationId: list-ports
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Search query
- explode: false
- in: query
- name: search
- schema:
- description: Search query
- type: string
- - description: Column to sort by
- explode: false
- in: query
- name: sort
- schema:
- description: Column to sort by
- type: string
- - description: Sort direction (asc or desc)
- explode: false
- in: query
- name: order
- schema:
- default: asc
- description: Sort direction (asc or desc)
- type: string
- - description: Start index for pagination
- explode: false
- in: query
- name: start
- schema:
- default: 0
- description: Start index for pagination
- format: int64
- type: integer
- - description: Number of items per page
- explode: false
- in: query
- name: limit
- schema:
- default: 20
- description: Number of items per page
- format: int64
- type: integer
- responses:
- '200':
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Search query
+ explode: false
+ in: query
+ name: search
+ schema:
+ description: Search query
+ type: string
+ - description: Column to sort by
+ explode: false
+ in: query
+ name: sort
+ schema:
+ description: Column to sort by
+ type: string
+ - description: Sort direction (asc or desc)
+ explode: false
+ in: query
+ name: order
+ schema:
+ default: asc
+ description: Sort direction (asc or desc)
+ type: string
+ - description: Start index for pagination
+ explode: false
+ in: query
+ name: start
+ schema:
+ default: 0
+ description: Start index for pagination
+ format: int64
+ type: integer
+ - description: Number of items per page
+ explode: false
+ in: query
+ name: limit
+ schema:
+ default: 20
+ description: Number of items per page
+ format: int64
+ type: integer
+ responses:
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/PortPaginatedResponse'
+ $ref: "#/components/schemas/PortPaginatedResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: List port mappings
tags:
- - Ports
+ - Ports
/environments/{id}/projects:
get:
description: Get a paginated list of Docker Compose projects
operationId: list-projects
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Search query
- explode: false
- in: query
- name: search
- schema:
- description: Search query
- type: string
- - description: Column to sort by
- explode: false
- in: query
- name: sort
- schema:
- description: Column to sort by
- type: string
- - description: Sort direction (asc or desc)
- explode: false
- in: query
- name: order
- schema:
- default: asc
- description: Sort direction (asc or desc)
- type: string
- - description: Start index for pagination
- explode: false
- in: query
- name: start
- schema:
- default: 0
- description: Start index for pagination
- format: int64
- type: integer
- - description: Number of items per page
- explode: false
- in: query
- name: limit
- schema:
- default: 20
- description: Number of items per page
- format: int64
- type: integer
- - description: 'Filter by status (comma-separated: running,stopped,partially
- running)'
- explode: false
- in: query
- name: status
- schema:
- description: 'Filter by status (comma-separated: running,stopped,partially
- running)'
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Search query
+ explode: false
+ in: query
+ name: search
+ schema:
+ description: Search query
+ type: string
+ - description: Column to sort by
+ explode: false
+ in: query
+ name: sort
+ schema:
+ description: Column to sort by
+ type: string
+ - description: Sort direction (asc or desc)
+ explode: false
+ in: query
+ name: order
+ schema:
+ default: asc
+ description: Sort direction (asc or desc)
+ type: string
+ - description: Start index for pagination
+ explode: false
+ in: query
+ name: start
+ schema:
+ default: 0
+ description: Start index for pagination
+ format: int64
+ type: integer
+ - description: Number of items per page
+ explode: false
+ in: query
+ name: limit
+ schema:
+ default: 20
+ description: Number of items per page
+ format: int64
+ type: integer
+ - description: "Filter by status (comma-separated: running,stopped,partially running)"
+ explode: false
+ in: query
+ name: status
+ schema:
+ description: "Filter by status (comma-separated: running,stopped,partially running)"
+ type: string
+ - description: Filter by update status (has_update, up_to_date, error, unknown)
+ explode: false
+ in: query
+ name: updates
+ schema:
+ description: Filter by update status (has_update, up_to_date, error, unknown)
+ type: string
+ - description: "Archived filter: 'true' (only archived), 'all' (include archived). Default excludes archived."
+ explode: false
+ in: query
+ name: archived
+ schema:
+ description: "Archived filter: 'true' (only archived), 'all' (include archived). Default excludes archived."
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/ProjectPaginatedResponse'
+ $ref: "#/components/schemas/ProjectPaginatedResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: List projects
tags:
- - Projects
+ - Projects
post:
description: Create a new Docker Compose project
operationId: create-project
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/ProjectCreateProject'
+ $ref: "#/components/schemas/ProjectCreateProject"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseCreateReponse'
+ $ref: "#/components/schemas/BaseApiResponseCreateReponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Create a project
tags:
- - Projects
+ - Projects
/environments/{id}/projects/counts:
get:
description: Get counts of running, stopped, and total projects
operationId: get-project-status-counts
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseStatusCounts'
+ $ref: "#/components/schemas/BaseApiResponseStatusCounts"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get project status counts
tags:
- - Projects
+ - Projects
/environments/{id}/projects/{projectId}:
get:
description: Get a Docker Compose project by ID
operationId: get-project
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Project ID
- in: path
- name: projectId
- required: true
- schema:
- description: Project ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Project ID
+ in: path
+ name: projectId
+ required: true
+ schema:
+ description: Project ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseDetails'
+ $ref: "#/components/schemas/BaseApiResponseDetails"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get a project
tags:
- - Projects
+ - Projects
put:
description: Update a Docker Compose project configuration
operationId: update-project
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Project ID
- in: path
- name: projectId
- required: true
- schema:
- description: Project ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Project ID
+ in: path
+ name: projectId
+ required: true
+ schema:
+ description: Project ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/ProjectUpdateProject'
+ $ref: "#/components/schemas/ProjectUpdateProject"
required: true
responses:
- '200':
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BaseApiResponseDetails"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Update a project
+ tags:
+ - Projects
+ /environments/{id}/projects/{projectId}/archive:
+ post:
+ description: Archive a stopped Docker Compose project
+ operationId: archive-project
+ parameters:
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Project ID
+ in: path
+ name: projectId
+ required: true
+ schema:
+ description: Project ID
+ type: string
+ responses:
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseDetails'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
- summary: Update a project
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Archive a project
tags:
- - Projects
+ - Projects
/environments/{id}/projects/{projectId}/build:
post:
description: Build Docker Compose services with build directives using BuildKit
operationId: build-project-images
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Project ID
- in: path
- name: projectId
- required: true
- schema:
- description: Project ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Project ID
+ in: path
+ name: projectId
+ required: true
+ schema:
+ description: Project ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/BuildProjectInputBody'
+ $ref: "#/components/schemas/BuildProjectInputBody"
responses:
- '200':
+ "200":
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Build project images
tags:
- - Projects
+ - Projects
+ /environments/{id}/projects/{projectId}/compose:
+ get:
+ description: Get compose content, includes, and service configs for a project
+ operationId: get-project-compose
+ parameters:
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Project ID
+ in: path
+ name: projectId
+ required: true
+ schema:
+ description: Project ID
+ type: string
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BaseApiResponseDetails"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Get project compose details
+ tags:
+ - Projects
/environments/{id}/projects/{projectId}/destroy:
delete:
description: Destroy a Docker Compose project and optionally remove files/volumes
operationId: destroy-project
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Project ID
- in: path
- name: projectId
- required: true
- schema:
- description: Project ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Project ID
+ in: path
+ name: projectId
+ required: true
+ schema:
+ description: Project ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/ProjectDestroy'
+ $ref: "#/components/schemas/ProjectDestroy"
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Destroy a project
tags:
- - Projects
+ - Projects
/environments/{id}/projects/{projectId}/down:
post:
description: Bring down a Docker Compose project (docker-compose down)
operationId: down-project
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Project ID
- in: path
- name: projectId
- required: true
- schema:
- description: Project ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Project ID
+ in: path
+ name: projectId
+ required: true
+ schema:
+ description: Project ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Bring down a project
tags:
- - Projects
+ - Projects
+ /environments/{id}/projects/{projectId}/file:
+ get:
+ description: Get the contents of a single project-related file by relative path
+ operationId: get-project-file
+ parameters:
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Project ID
+ in: path
+ name: projectId
+ required: true
+ schema:
+ description: Project ID
+ type: string
+ - description: Path to the file relative to the project
+ explode: false
+ in: query
+ name: relativePath
+ schema:
+ description: Path to the file relative to the project
+ type: string
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BaseApiResponseIncludeFile"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Get a project file
+ tags:
+ - Projects
+ /environments/{id}/projects/{projectId}/files:
+ get:
+ description: Get directory files for a project
+ operationId: get-project-files
+ parameters:
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Project ID
+ in: path
+ name: projectId
+ required: true
+ schema:
+ description: Project ID
+ type: string
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BaseApiResponseDetails"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Get project files
+ tags:
+ - Projects
/environments/{id}/projects/{projectId}/includes:
put:
description: Update an include file within a Docker Compose project
operationId: update-project-include
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Project ID
- in: path
- name: projectId
- required: true
- schema:
- description: Project ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Project ID
+ in: path
+ name: projectId
+ required: true
+ schema:
+ description: Project ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/ProjectUpdateIncludeFile'
+ $ref: "#/components/schemas/ProjectUpdateIncludeFile"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseDetails'
+ $ref: "#/components/schemas/BaseApiResponseDetails"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Update project include file
tags:
- - Projects
+ - Projects
/environments/{id}/projects/{projectId}/pull:
post:
- description: Pull all images for a Docker Compose project with streaming progress
- output
+ description: Pull all images for a Docker Compose project with streaming progress output
operationId: pull-project-images
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Project ID
- in: path
- name: projectId
- required: true
- schema:
- description: Project ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Project ID
+ in: path
+ name: projectId
+ required: true
+ schema:
+ description: Project ID
+ type: string
responses:
- '200':
+ "200":
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Pull project images
tags:
- - Projects
+ - Projects
/environments/{id}/projects/{projectId}/redeploy:
post:
description: Redeploy a Docker Compose project (down + up)
operationId: redeploy-project
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Project ID
- in: path
- name: projectId
- required: true
- schema:
- description: Project ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Project ID
+ in: path
+ name: projectId
+ required: true
+ schema:
+ description: Project ID
+ type: string
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/ProjectDeployOptions"
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Redeploy a project
tags:
- - Projects
+ - Projects
/environments/{id}/projects/{projectId}/restart:
post:
description: Restart all containers in a Docker Compose project
operationId: restart-project
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Project ID
- in: path
- name: projectId
- required: true
- schema:
- description: Project ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Project ID
+ in: path
+ name: projectId
+ required: true
+ schema:
+ description: Project ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Restart a project
tags:
- - Projects
+ - Projects
+ /environments/{id}/projects/{projectId}/runtime:
+ get:
+ description: Get runtime service state for a project
+ operationId: get-project-runtime
+ parameters:
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Project ID
+ in: path
+ name: projectId
+ required: true
+ schema:
+ description: Project ID
+ type: string
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BaseApiResponseDetails"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Get project runtime
+ tags:
+ - Projects
+ /environments/{id}/projects/{projectId}/unarchive:
+ post:
+ description: Unarchive a Docker Compose project
+ operationId: unarchive-project
+ parameters:
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Project ID
+ in: path
+ name: projectId
+ required: true
+ schema:
+ description: Project ID
+ type: string
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Unarchive a project
+ tags:
+ - Projects
/environments/{id}/projects/{projectId}/up:
post:
description: Deploy a Docker Compose project (docker-compose up)
operationId: deploy-project
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Project ID
- in: path
- name: projectId
- required: true
- schema:
- description: Project ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Project ID
+ in: path
+ name: projectId
+ required: true
+ schema:
+ description: Project ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/ProjectDeployOptions'
+ $ref: "#/components/schemas/ProjectDeployOptions"
responses:
- '200':
+ "200":
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Deploy a project
tags:
- - Projects
+ - Projects
+ /environments/{id}/projects/{projectId}/update-services:
+ post:
+ description: Pull latest images and recreate the given services (all services when none are specified)
+ operationId: update-project-services
+ parameters:
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Project ID
+ in: path
+ name: projectId
+ required: true
+ schema:
+ description: Project ID
+ type: string
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/UpdateProjectServicesInputBody"
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Update project services
+ tags:
+ - Projects
+ /environments/{id}/projects/{projectId}/updates:
+ get:
+ description: Get image update summary for a project
+ operationId: get-project-updates
+ parameters:
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Project ID
+ in: path
+ name: projectId
+ required: true
+ schema:
+ description: Project ID
+ type: string
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BaseApiResponseDetails"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Get project updates
+ tags:
+ - Projects
/environments/{id}/settings:
get:
description: Get all settings for an environment
operationId: get-settings
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
items:
- $ref: '#/components/schemas/SettingsPublicSetting'
+ $ref: "#/components/schemas/SettingsPublicSetting"
type:
- - array
- - 'null'
+ - array
+ - "null"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get settings
tags:
- - Settings
+ - Settings
put:
description: Update settings for an environment
operationId: update-settings
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/SettingsUpdate'
+ $ref: "#/components/schemas/SettingsUpdate"
description: Settings update data
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseListSettingDto'
+ $ref: "#/components/schemas/BaseApiResponseListSettingDto"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Update settings
tags:
- - Settings
+ - Settings
/environments/{id}/settings/public:
get:
description: Get all public settings for an environment
operationId: get-public-settings
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
items:
- $ref: '#/components/schemas/SettingsPublicSetting'
+ $ref: "#/components/schemas/SettingsPublicSetting"
type:
- - array
- - 'null'
+ - array
+ - "null"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
+ security: []
summary: Get public settings
tags:
- - Settings
+ - Settings
/environments/{id}/swarm/configs:
get:
operationId: list-swarm-configs
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseListConfigSummary'
+ $ref: "#/components/schemas/BaseApiResponseListConfigSummary"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: List swarm configs
tags:
- - Swarm
+ - Swarm
post:
operationId: create-swarm-config
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/SwarmConfigCreateRequest'
+ $ref: "#/components/schemas/SwarmConfigCreateRequest"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseConfigSummary'
+ $ref: "#/components/schemas/BaseApiResponseConfigSummary"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Create swarm config
tags:
- - Swarm
+ - Swarm
/environments/{id}/swarm/configs/{configId}:
delete:
operationId: delete-swarm-config
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Config ID
- in: path
- name: configId
- required: true
- schema:
- description: Config ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Config ID
+ in: path
+ name: configId
+ required: true
+ schema:
+ description: Config ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Delete swarm config
tags:
- - Swarm
+ - Swarm
get:
operationId: get-swarm-config
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Config ID
- in: path
- name: configId
- required: true
- schema:
- description: Config ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Config ID
+ in: path
+ name: configId
+ required: true
+ schema:
+ description: Config ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseConfigSummary'
+ $ref: "#/components/schemas/BaseApiResponseConfigSummary"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get swarm config
tags:
- - Swarm
+ - Swarm
put:
operationId: update-swarm-config
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Config ID
- in: path
- name: configId
- required: true
- schema:
- description: Config ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Config ID
+ in: path
+ name: configId
+ required: true
+ schema:
+ description: Config ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/SwarmConfigUpdateRequest'
+ $ref: "#/components/schemas/SwarmConfigUpdateRequest"
required: true
responses:
- '200':
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/BaseApiResponseConfigSummary'
- description: OK
+ "204":
+ description: No Content
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Update swarm config
tags:
- - Swarm
+ - Swarm
/environments/{id}/swarm/info:
get:
operationId: get-swarm-info
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseSwarmInfo'
+ $ref: "#/components/schemas/BaseApiResponseSwarmInfo"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get swarm info
tags:
- - Swarm
+ - Swarm
/environments/{id}/swarm/init:
post:
operationId: init-swarm
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/SwarmSwarmInitRequest'
+ $ref: "#/components/schemas/SwarmSwarmInitRequest"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseSwarmInitResponse'
+ $ref: "#/components/schemas/BaseApiResponseSwarmInitResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Initialize swarm
tags:
- - Swarm
+ - Swarm
/environments/{id}/swarm/join:
post:
operationId: join-swarm
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/SwarmSwarmJoinRequest'
+ $ref: "#/components/schemas/SwarmSwarmJoinRequest"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Join swarm
tags:
- - Swarm
+ - Swarm
/environments/{id}/swarm/join-tokens:
get:
operationId: get-swarm-join-tokens
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseSwarmJoinTokensResponse'
+ $ref: "#/components/schemas/BaseApiResponseSwarmJoinTokensResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get swarm join tokens
tags:
- - Swarm
+ - Swarm
/environments/{id}/swarm/join-tokens/rotate:
post:
operationId: rotate-swarm-join-tokens
- parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ parameters:
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/SwarmSwarmRotateJoinTokensRequest'
+ $ref: "#/components/schemas/SwarmSwarmRotateJoinTokensRequest"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Rotate swarm join tokens
tags:
- - Swarm
+ - Swarm
/environments/{id}/swarm/leave:
post:
operationId: leave-swarm
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/SwarmSwarmLeaveRequest'
+ $ref: "#/components/schemas/SwarmSwarmLeaveRequest"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Leave swarm
tags:
- - Swarm
+ - Swarm
/environments/{id}/swarm/nodes:
get:
operationId: list-swarm-nodes
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Search query
- explode: false
- in: query
- name: search
- schema:
- description: Search query
- type: string
- - description: Column to sort by
- explode: false
- in: query
- name: sort
- schema:
- description: Column to sort by
- type: string
- - description: Sort direction (asc or desc)
- explode: false
- in: query
- name: order
- schema:
- default: asc
- description: Sort direction (asc or desc)
- type: string
- - description: Start index for pagination
- explode: false
- in: query
- name: start
- schema:
- default: 0
- description: Start index for pagination
- format: int64
- type: integer
- - description: Number of items per page
- explode: false
- in: query
- name: limit
- schema:
- default: 20
- description: Number of items per page
- format: int64
- type: integer
- responses:
- '200':
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Search query
+ explode: false
+ in: query
+ name: search
+ schema:
+ description: Search query
+ type: string
+ - description: Column to sort by
+ explode: false
+ in: query
+ name: sort
+ schema:
+ description: Column to sort by
+ type: string
+ - description: Sort direction (asc or desc)
+ explode: false
+ in: query
+ name: order
+ schema:
+ default: asc
+ description: Sort direction (asc or desc)
+ type: string
+ - description: Start index for pagination
+ explode: false
+ in: query
+ name: start
+ schema:
+ default: 0
+ description: Start index for pagination
+ format: int64
+ type: integer
+ - description: Number of items per page
+ explode: false
+ in: query
+ name: limit
+ schema:
+ default: 20
+ description: Number of items per page
+ format: int64
+ type: integer
+ responses:
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/SwarmPaginatedResponseNodeSummary'
+ $ref: "#/components/schemas/SwarmPaginatedResponseNodeSummary"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: List swarm nodes
tags:
- - Swarm
+ - Swarm
/environments/{id}/swarm/nodes/{nodeId}:
delete:
operationId: delete-swarm-node
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Node ID
- in: path
- name: nodeId
- required: true
- schema:
- description: Node ID
- type: string
- - description: Force node removal
- explode: false
- in: query
- name: force
- schema:
- default: false
- description: Force node removal
- type: boolean
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Node ID
+ in: path
+ name: nodeId
+ required: true
+ schema:
+ description: Node ID
+ type: string
+ - description: Force node removal
+ explode: false
+ in: query
+ name: force
+ schema:
+ default: false
+ description: Force node removal
+ type: boolean
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Delete swarm node
tags:
- - Swarm
+ - Swarm
get:
operationId: get-swarm-node
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Node ID
- in: path
- name: nodeId
- required: true
- schema:
- description: Node ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Node ID
+ in: path
+ name: nodeId
+ required: true
+ schema:
+ description: Node ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseNodeSummary'
+ $ref: "#/components/schemas/BaseApiResponseNodeSummary"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get swarm node
tags:
- - Swarm
+ - Swarm
patch:
operationId: update-swarm-node
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Node ID
- in: path
- name: nodeId
- required: true
- schema:
- description: Node ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Node ID
+ in: path
+ name: nodeId
+ required: true
+ schema:
+ description: Node ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/SwarmNodeUpdateRequest'
+ $ref: "#/components/schemas/SwarmNodeUpdateRequest"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Update swarm node
tags:
- - Swarm
+ - Swarm
/environments/{id}/swarm/nodes/{nodeId}/agent/deployment:
post:
operationId: get-swarm-node-agent-deployment
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Node ID
- in: path
- name: nodeId
- required: true
- schema:
- description: Node ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Node ID
+ in: path
+ name: nodeId
+ required: true
+ schema:
+ description: Node ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/GetSwarmNodeAgentDeploymentInputBody'
+ $ref: "#/components/schemas/GetSwarmNodeAgentDeploymentInputBody"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseSwarmNodeAgentDeployment'
+ $ref: "#/components/schemas/BaseApiResponseSwarmNodeAgentDeployment"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get swarm node agent deployment snippets
tags:
- - Swarm
+ - Swarm
/environments/{id}/swarm/nodes/{nodeId}/demote:
post:
operationId: demote-swarm-node
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Node ID
- in: path
- name: nodeId
- required: true
- schema:
- description: Node ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Node ID
+ in: path
+ name: nodeId
+ required: true
+ schema:
+ description: Node ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Demote swarm node
tags:
- - Swarm
+ - Swarm
/environments/{id}/swarm/nodes/{nodeId}/promote:
post:
operationId: promote-swarm-node
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Node ID
- in: path
- name: nodeId
- required: true
- schema:
- description: Node ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Node ID
+ in: path
+ name: nodeId
+ required: true
+ schema:
+ description: Node ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Promote swarm node
tags:
- - Swarm
+ - Swarm
/environments/{id}/swarm/nodes/{nodeId}/tasks:
get:
operationId: list-swarm-node-tasks
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Node ID
- in: path
- name: nodeId
- required: true
- schema:
- description: Node ID
- type: string
- - description: Search query
- explode: false
- in: query
- name: search
- schema:
- description: Search query
- type: string
- - description: Column to sort by
- explode: false
- in: query
- name: sort
- schema:
- description: Column to sort by
- type: string
- - description: Sort direction (asc or desc)
- explode: false
- in: query
- name: order
- schema:
- default: asc
- description: Sort direction (asc or desc)
- type: string
- - description: Start index for pagination
- explode: false
- in: query
- name: start
- schema:
- default: 0
- description: Start index for pagination
- format: int64
- type: integer
- - description: Number of items per page
- explode: false
- in: query
- name: limit
- schema:
- default: 20
- description: Number of items per page
- format: int64
- type: integer
- responses:
- '200':
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Node ID
+ in: path
+ name: nodeId
+ required: true
+ schema:
+ description: Node ID
+ type: string
+ - description: Search query
+ explode: false
+ in: query
+ name: search
+ schema:
+ description: Search query
+ type: string
+ - description: Column to sort by
+ explode: false
+ in: query
+ name: sort
+ schema:
+ description: Column to sort by
+ type: string
+ - description: Sort direction (asc or desc)
+ explode: false
+ in: query
+ name: order
+ schema:
+ default: asc
+ description: Sort direction (asc or desc)
+ type: string
+ - description: Start index for pagination
+ explode: false
+ in: query
+ name: start
+ schema:
+ default: 0
+ description: Start index for pagination
+ format: int64
+ type: integer
+ - description: Number of items per page
+ explode: false
+ in: query
+ name: limit
+ schema:
+ default: 20
+ description: Number of items per page
+ format: int64
+ type: integer
+ responses:
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/SwarmPaginatedResponseTaskSummary'
+ $ref: "#/components/schemas/SwarmPaginatedResponseTaskSummary"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: List tasks for a swarm node
tags:
- - Swarm
+ - Swarm
/environments/{id}/swarm/secrets:
get:
operationId: list-swarm-secrets
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseListSecretSummary'
+ $ref: "#/components/schemas/BaseApiResponseListSecretSummary"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: List swarm secrets
tags:
- - Swarm
+ - Swarm
post:
operationId: create-swarm-secret
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/SwarmSecretCreateRequest'
+ $ref: "#/components/schemas/SwarmSecretCreateRequest"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseSecretSummary'
+ $ref: "#/components/schemas/BaseApiResponseSecretSummary"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Create swarm secret
tags:
- - Swarm
+ - Swarm
/environments/{id}/swarm/secrets/{secretId}:
delete:
operationId: delete-swarm-secret
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Secret ID
- in: path
- name: secretId
- required: true
- schema:
- description: Secret ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Secret ID
+ in: path
+ name: secretId
+ required: true
+ schema:
+ description: Secret ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Delete swarm secret
tags:
- - Swarm
+ - Swarm
get:
operationId: get-swarm-secret
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Secret ID
- in: path
- name: secretId
- required: true
- schema:
- description: Secret ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Secret ID
+ in: path
+ name: secretId
+ required: true
+ schema:
+ description: Secret ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseSecretSummary'
+ $ref: "#/components/schemas/BaseApiResponseSecretSummary"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get swarm secret
tags:
- - Swarm
+ - Swarm
put:
operationId: update-swarm-secret
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Secret ID
- in: path
- name: secretId
- required: true
- schema:
- description: Secret ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Secret ID
+ in: path
+ name: secretId
+ required: true
+ schema:
+ description: Secret ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/SwarmSecretUpdateRequest'
+ $ref: "#/components/schemas/SwarmSecretUpdateRequest"
required: true
responses:
- '200':
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/BaseApiResponseSecretSummary'
- description: OK
+ "204":
+ description: No Content
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Update swarm secret
tags:
- - Swarm
+ - Swarm
/environments/{id}/swarm/services:
get:
operationId: list-swarm-services
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Search query
- explode: false
- in: query
- name: search
- schema:
- description: Search query
- type: string
- - description: Column to sort by
- explode: false
- in: query
- name: sort
- schema:
- description: Column to sort by
- type: string
- - description: Sort direction (asc or desc)
- explode: false
- in: query
- name: order
- schema:
- default: asc
- description: Sort direction (asc or desc)
- type: string
- - description: Start index for pagination
- explode: false
- in: query
- name: start
- schema:
- default: 0
- description: Start index for pagination
- format: int64
- type: integer
- - description: Number of items per page
- explode: false
- in: query
- name: limit
- schema:
- default: 20
- description: Number of items per page
- format: int64
- type: integer
- responses:
- '200':
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Search query
+ explode: false
+ in: query
+ name: search
+ schema:
+ description: Search query
+ type: string
+ - description: Column to sort by
+ explode: false
+ in: query
+ name: sort
+ schema:
+ description: Column to sort by
+ type: string
+ - description: Sort direction (asc or desc)
+ explode: false
+ in: query
+ name: order
+ schema:
+ default: asc
+ description: Sort direction (asc or desc)
+ type: string
+ - description: Start index for pagination
+ explode: false
+ in: query
+ name: start
+ schema:
+ default: 0
+ description: Start index for pagination
+ format: int64
+ type: integer
+ - description: Number of items per page
+ explode: false
+ in: query
+ name: limit
+ schema:
+ default: 20
+ description: Number of items per page
+ format: int64
+ type: integer
+ responses:
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/SwarmPaginatedResponseServiceSummary'
+ $ref: "#/components/schemas/SwarmPaginatedResponseServiceSummary"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: List swarm services
tags:
- - Swarm
+ - Swarm
post:
operationId: create-swarm-service
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/SwarmServiceCreateRequest'
+ $ref: "#/components/schemas/SwarmServiceCreateRequest"
description: Service creation request
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseServiceCreateResponse'
+ $ref: "#/components/schemas/BaseApiResponseServiceCreateResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Create swarm service
tags:
- - Swarm
+ - Swarm
/environments/{id}/swarm/services/{serviceId}:
delete:
operationId: delete-swarm-service
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Service ID
- in: path
- name: serviceId
- required: true
- schema:
- description: Service ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Service ID
+ in: path
+ name: serviceId
+ required: true
+ schema:
+ description: Service ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Delete swarm service
tags:
- - Swarm
+ - Swarm
get:
operationId: get-swarm-service
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Service ID
- in: path
- name: serviceId
- required: true
- schema:
- description: Service ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Service ID
+ in: path
+ name: serviceId
+ required: true
+ schema:
+ description: Service ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseServiceInspect'
+ $ref: "#/components/schemas/BaseApiResponseServiceInspect"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get swarm service
tags:
- - Swarm
+ - Swarm
put:
operationId: update-swarm-service
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Service ID
- in: path
- name: serviceId
- required: true
- schema:
- description: Service ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Service ID
+ in: path
+ name: serviceId
+ required: true
+ schema:
+ description: Service ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/SwarmServiceUpdateRequest'
+ $ref: "#/components/schemas/SwarmServiceUpdateRequest"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseServiceUpdateResponse'
+ $ref: "#/components/schemas/BaseApiResponseServiceUpdateResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Update swarm service
tags:
- - Swarm
+ - Swarm
/environments/{id}/swarm/services/{serviceId}/rollback:
post:
operationId: rollback-swarm-service
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Service ID
- in: path
- name: serviceId
- required: true
- schema:
- description: Service ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Service ID
+ in: path
+ name: serviceId
+ required: true
+ schema:
+ description: Service ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseServiceUpdateResponse'
+ $ref: "#/components/schemas/BaseApiResponseServiceUpdateResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Rollback a swarm service
tags:
- - Swarm
+ - Swarm
/environments/{id}/swarm/services/{serviceId}/scale:
post:
operationId: scale-swarm-service
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Service ID
- in: path
- name: serviceId
- required: true
- schema:
- description: Service ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Service ID
+ in: path
+ name: serviceId
+ required: true
+ schema:
+ description: Service ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/SwarmServiceScaleRequest'
+ $ref: "#/components/schemas/SwarmServiceScaleRequest"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseServiceUpdateResponse'
+ $ref: "#/components/schemas/BaseApiResponseServiceUpdateResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Scale a swarm service
tags:
- - Swarm
+ - Swarm
/environments/{id}/swarm/services/{serviceId}/tasks:
get:
operationId: list-swarm-service-tasks
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Service ID
- in: path
- name: serviceId
- required: true
- schema:
- description: Service ID
- type: string
- - description: Search query
- explode: false
- in: query
- name: search
- schema:
- description: Search query
- type: string
- - description: Column to sort by
- explode: false
- in: query
- name: sort
- schema:
- description: Column to sort by
- type: string
- - description: Sort direction (asc or desc)
- explode: false
- in: query
- name: order
- schema:
- default: asc
- description: Sort direction (asc or desc)
- type: string
- - description: Start index for pagination
- explode: false
- in: query
- name: start
- schema:
- default: 0
- description: Start index for pagination
- format: int64
- type: integer
- - description: Number of items per page
- explode: false
- in: query
- name: limit
- schema:
- default: 20
- description: Number of items per page
- format: int64
- type: integer
- responses:
- '200':
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Service ID
+ in: path
+ name: serviceId
+ required: true
+ schema:
+ description: Service ID
+ type: string
+ - description: Search query
+ explode: false
+ in: query
+ name: search
+ schema:
+ description: Search query
+ type: string
+ - description: Column to sort by
+ explode: false
+ in: query
+ name: sort
+ schema:
+ description: Column to sort by
+ type: string
+ - description: Sort direction (asc or desc)
+ explode: false
+ in: query
+ name: order
+ schema:
+ default: asc
+ description: Sort direction (asc or desc)
+ type: string
+ - description: Start index for pagination
+ explode: false
+ in: query
+ name: start
+ schema:
+ default: 0
+ description: Start index for pagination
+ format: int64
+ type: integer
+ - description: Number of items per page
+ explode: false
+ in: query
+ name: limit
+ schema:
+ default: 20
+ description: Number of items per page
+ format: int64
+ type: integer
+ responses:
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/SwarmPaginatedResponseTaskSummary'
+ $ref: "#/components/schemas/SwarmPaginatedResponseTaskSummary"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: List tasks for a swarm service
tags:
- - Swarm
+ - Swarm
/environments/{id}/swarm/spec:
put:
operationId: update-swarm-spec
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/SwarmSwarmUpdateRequest'
+ $ref: "#/components/schemas/SwarmSwarmUpdateRequest"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Update swarm spec
tags:
- - Swarm
+ - Swarm
/environments/{id}/swarm/stacks:
get:
operationId: list-swarm-stacks
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Search query
- explode: false
- in: query
- name: search
- schema:
- description: Search query
- type: string
- - description: Column to sort by
- explode: false
- in: query
- name: sort
- schema:
- description: Column to sort by
- type: string
- - description: Sort direction (asc or desc)
- explode: false
- in: query
- name: order
- schema:
- default: asc
- description: Sort direction (asc or desc)
- type: string
- - description: Start index for pagination
- explode: false
- in: query
- name: start
- schema:
- default: 0
- description: Start index for pagination
- format: int64
- type: integer
- - description: Number of items per page
- explode: false
- in: query
- name: limit
- schema:
- default: 20
- description: Number of items per page
- format: int64
- type: integer
- responses:
- '200':
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Search query
+ explode: false
+ in: query
+ name: search
+ schema:
+ description: Search query
+ type: string
+ - description: Column to sort by
+ explode: false
+ in: query
+ name: sort
+ schema:
+ description: Column to sort by
+ type: string
+ - description: Sort direction (asc or desc)
+ explode: false
+ in: query
+ name: order
+ schema:
+ default: asc
+ description: Sort direction (asc or desc)
+ type: string
+ - description: Start index for pagination
+ explode: false
+ in: query
+ name: start
+ schema:
+ default: 0
+ description: Start index for pagination
+ format: int64
+ type: integer
+ - description: Number of items per page
+ explode: false
+ in: query
+ name: limit
+ schema:
+ default: 20
+ description: Number of items per page
+ format: int64
+ type: integer
+ responses:
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/SwarmPaginatedResponseStackSummary'
+ $ref: "#/components/schemas/SwarmPaginatedResponseStackSummary"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: List swarm stacks
tags:
- - Swarm
+ - Swarm
post:
operationId: deploy-swarm-stack
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/SwarmStackDeployRequest'
+ $ref: "#/components/schemas/SwarmStackDeployRequest"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseStackDeployResponse'
+ $ref: "#/components/schemas/BaseApiResponseStackDeployResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Deploy swarm stack
tags:
- - Swarm
+ - Swarm
/environments/{id}/swarm/stacks/config/render:
post:
operationId: render-swarm-stack-config
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/SwarmStackRenderConfigRequest'
+ $ref: "#/components/schemas/SwarmStackRenderConfigRequest"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseStackRenderConfigResponse'
+ $ref: "#/components/schemas/BaseApiResponseStackRenderConfigResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Render/validate swarm stack config
tags:
- - Swarm
+ - Swarm
/environments/{id}/swarm/stacks/{name}:
delete:
operationId: delete-swarm-stack
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Stack name
- in: path
- name: name
- required: true
- schema:
- description: Stack name
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Stack name
+ in: path
+ name: name
+ required: true
+ schema:
+ description: Stack name
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Delete swarm stack
tags:
- - Swarm
+ - Swarm
get:
operationId: get-swarm-stack
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Stack name
- in: path
- name: name
- required: true
- schema:
- description: Stack name
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Stack name
+ in: path
+ name: name
+ required: true
+ schema:
+ description: Stack name
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseStackInspect'
+ $ref: "#/components/schemas/BaseApiResponseStackInspect"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get swarm stack
tags:
- - Swarm
+ - Swarm
/environments/{id}/swarm/stacks/{name}/services:
get:
operationId: list-swarm-stack-services
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Stack name
- in: path
- name: name
- required: true
- schema:
- description: Stack name
- type: string
- - description: Search query
- explode: false
- in: query
- name: search
- schema:
- description: Search query
- type: string
- - description: Column to sort by
- explode: false
- in: query
- name: sort
- schema:
- description: Column to sort by
- type: string
- - description: Sort direction (asc or desc)
- explode: false
- in: query
- name: order
- schema:
- default: asc
- description: Sort direction (asc or desc)
- type: string
- - description: Start index for pagination
- explode: false
- in: query
- name: start
- schema:
- default: 0
- description: Start index for pagination
- format: int64
- type: integer
- - description: Number of items per page
- explode: false
- in: query
- name: limit
- schema:
- default: 20
- description: Number of items per page
- format: int64
- type: integer
- responses:
- '200':
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Stack name
+ in: path
+ name: name
+ required: true
+ schema:
+ description: Stack name
+ type: string
+ - description: Search query
+ explode: false
+ in: query
+ name: search
+ schema:
+ description: Search query
+ type: string
+ - description: Column to sort by
+ explode: false
+ in: query
+ name: sort
+ schema:
+ description: Column to sort by
+ type: string
+ - description: Sort direction (asc or desc)
+ explode: false
+ in: query
+ name: order
+ schema:
+ default: asc
+ description: Sort direction (asc or desc)
+ type: string
+ - description: Start index for pagination
+ explode: false
+ in: query
+ name: start
+ schema:
+ default: 0
+ description: Start index for pagination
+ format: int64
+ type: integer
+ - description: Number of items per page
+ explode: false
+ in: query
+ name: limit
+ schema:
+ default: 20
+ description: Number of items per page
+ format: int64
+ type: integer
+ responses:
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/SwarmPaginatedResponseServiceSummary'
+ $ref: "#/components/schemas/SwarmPaginatedResponseServiceSummary"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: List swarm stack services
tags:
- - Swarm
+ - Swarm
/environments/{id}/swarm/stacks/{name}/source:
get:
operationId: get-swarm-stack-source
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Stack name
- in: path
- name: name
- required: true
- schema:
- description: Stack name
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Stack name
+ in: path
+ name: name
+ required: true
+ schema:
+ description: Stack name
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseStackSource'
+ $ref: "#/components/schemas/BaseApiResponseStackSource"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get swarm stack source
tags:
- - Swarm
+ - Swarm
+ put:
+ operationId: update-swarm-stack-source
+ parameters:
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Stack name
+ in: path
+ name: name
+ required: true
+ schema:
+ description: Stack name
+ type: string
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/SwarmStackSourceUpdateRequest"
+ required: true
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BaseApiResponseStackSource"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Update swarm stack source
+ tags:
+ - Swarm
/environments/{id}/swarm/stacks/{name}/tasks:
get:
operationId: list-swarm-stack-tasks
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Stack name
- in: path
- name: name
- required: true
- schema:
- description: Stack name
- type: string
- - description: Search query
- explode: false
- in: query
- name: search
- schema:
- description: Search query
- type: string
- - description: Column to sort by
- explode: false
- in: query
- name: sort
- schema:
- description: Column to sort by
- type: string
- - description: Sort direction (asc or desc)
- explode: false
- in: query
- name: order
- schema:
- default: asc
- description: Sort direction (asc or desc)
- type: string
- - description: Start index for pagination
- explode: false
- in: query
- name: start
- schema:
- default: 0
- description: Start index for pagination
- format: int64
- type: integer
- - description: Number of items per page
- explode: false
- in: query
- name: limit
- schema:
- default: 20
- description: Number of items per page
- format: int64
- type: integer
- responses:
- '200':
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Stack name
+ in: path
+ name: name
+ required: true
+ schema:
+ description: Stack name
+ type: string
+ - description: Search query
+ explode: false
+ in: query
+ name: search
+ schema:
+ description: Search query
+ type: string
+ - description: Column to sort by
+ explode: false
+ in: query
+ name: sort
+ schema:
+ description: Column to sort by
+ type: string
+ - description: Sort direction (asc or desc)
+ explode: false
+ in: query
+ name: order
+ schema:
+ default: asc
+ description: Sort direction (asc or desc)
+ type: string
+ - description: Start index for pagination
+ explode: false
+ in: query
+ name: start
+ schema:
+ default: 0
+ description: Start index for pagination
+ format: int64
+ type: integer
+ - description: Number of items per page
+ explode: false
+ in: query
+ name: limit
+ schema:
+ default: 20
+ description: Number of items per page
+ format: int64
+ type: integer
+ responses:
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/SwarmPaginatedResponseTaskSummary'
+ $ref: "#/components/schemas/SwarmPaginatedResponseTaskSummary"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: List swarm stack tasks
tags:
- - Swarm
+ - Swarm
/environments/{id}/swarm/status:
get:
operationId: get-swarm-status
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseRuntimeStatus'
+ $ref: "#/components/schemas/BaseApiResponseRuntimeStatus"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get swarm status
tags:
- - Swarm
+ - Swarm
/environments/{id}/swarm/tasks:
get:
operationId: list-swarm-tasks
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Search query
- explode: false
- in: query
- name: search
- schema:
- description: Search query
- type: string
- - description: Column to sort by
- explode: false
- in: query
- name: sort
- schema:
- description: Column to sort by
- type: string
- - description: Sort direction (asc or desc)
- explode: false
- in: query
- name: order
- schema:
- default: asc
- description: Sort direction (asc or desc)
- type: string
- - description: Start index for pagination
- explode: false
- in: query
- name: start
- schema:
- default: 0
- description: Start index for pagination
- format: int64
- type: integer
- - description: Number of items per page
- explode: false
- in: query
- name: limit
- schema:
- default: 20
- description: Number of items per page
- format: int64
- type: integer
- responses:
- '200':
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Search query
+ explode: false
+ in: query
+ name: search
+ schema:
+ description: Search query
+ type: string
+ - description: Column to sort by
+ explode: false
+ in: query
+ name: sort
+ schema:
+ description: Column to sort by
+ type: string
+ - description: Sort direction (asc or desc)
+ explode: false
+ in: query
+ name: order
+ schema:
+ default: asc
+ description: Sort direction (asc or desc)
+ type: string
+ - description: Start index for pagination
+ explode: false
+ in: query
+ name: start
+ schema:
+ default: 0
+ description: Start index for pagination
+ format: int64
+ type: integer
+ - description: Number of items per page
+ explode: false
+ in: query
+ name: limit
+ schema:
+ default: 20
+ description: Number of items per page
+ format: int64
+ type: integer
+ responses:
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/SwarmPaginatedResponseTaskSummary'
+ $ref: "#/components/schemas/SwarmPaginatedResponseTaskSummary"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: List swarm tasks
tags:
- - Swarm
+ - Swarm
/environments/{id}/swarm/unlock:
post:
operationId: unlock-swarm
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/SwarmSwarmUnlockRequest'
+ $ref: "#/components/schemas/SwarmSwarmUnlockRequest"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Unlock swarm
tags:
- - Swarm
+ - Swarm
/environments/{id}/swarm/unlock-key:
get:
operationId: get-swarm-unlock-key
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseSwarmUnlockKeyResponse'
+ $ref: "#/components/schemas/BaseApiResponseSwarmUnlockKeyResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get swarm unlock key
tags:
- - Swarm
+ - Swarm
/environments/{id}/sync:
post:
description: Sync container registries and git repositories to a remote environment
operationId: syncEnvironment
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Sync environment
tags:
- - Environments
+ - Environments
/environments/{id}/system/containers/start-all:
post:
description: Start all Docker containers
operationId: start-all-containers
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseActionResult'
+ $ref: "#/components/schemas/BaseApiResponseActionResult"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Start all containers
tags:
- - System
+ - System
/environments/{id}/system/containers/start-stopped:
post:
description: Start all stopped Docker containers
operationId: start-all-stopped-containers
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseActionResult'
+ $ref: "#/components/schemas/BaseApiResponseActionResult"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Start all stopped containers
tags:
- - System
+ - System
/environments/{id}/system/containers/stop-all:
post:
description: Stop all running Docker containers
operationId: stop-all-containers
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseActionResult'
+ $ref: "#/components/schemas/BaseApiResponseActionResult"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Stop all containers
tags:
- - System
+ - System
/environments/{id}/system/convert:
post:
description: Convert a docker run command to docker-compose format
operationId: convert-docker-run
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/SystemConvertDockerRunRequest'
+ $ref: "#/components/schemas/SystemConvertDockerRunRequest"
description: Docker run command
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/SystemConvertDockerRunResponse'
+ $ref: "#/components/schemas/SystemConvertDockerRunResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Convert docker run command
tags:
- - System
+ - System
/environments/{id}/system/docker/info:
get:
description: Get Docker daemon version and system information
operationId: get-docker-info
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/DockerinfoInfo'
+ $ref: "#/components/schemas/DockerinfoInfo"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get Docker info
tags:
- - System
+ - System
/environments/{id}/system/health:
head:
description: Check if the Docker daemon is responsive
operationId: system-health
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
responses:
- '200':
+ "200":
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Check system health
tags:
- - System
+ - System
/environments/{id}/system/prune:
post:
description: Remove unused Docker resources (containers, images, volumes, networks)
operationId: prune-all
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/SystemPruneAllRequest'
+ $ref: "#/components/schemas/SystemPruneAllRequest"
description: Prune options
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponsePruneAllResult'
+ $ref: "#/components/schemas/BaseApiResponsePruneAllResult"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Prune Docker resources
tags:
- - System
+ - System
/environments/{id}/system/upgrade:
post:
description: Trigger a system upgrade
operationId: trigger-upgrade
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
responses:
- '202':
+ "202":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: Accepted
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Trigger system upgrade
tags:
- - System
+ - System
+ /environments/{id}/system/upgrade/all:
+ post:
+ description: Upgrade every Arcane environment, starting with the manager
+ operationId: trigger-update-all
+ parameters:
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ responses:
+ "202":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BaseApiResponseEnvironmentUpdateJob"
+ description: Accepted
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Update all environments
+ tags:
+ - System
+ /environments/{id}/system/upgrade/all/status:
+ get:
+ description: Get the status of the latest update-all-environments job
+ operationId: update-all-status
+ parameters:
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BaseApiResponseEnvironmentUpdateJob"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Get update-all status
+ tags:
+ - System
/environments/{id}/system/upgrade/check:
get:
description: Check if a system upgrade is available
operationId: check-upgrade
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/UpgradeCheckResultData'
+ $ref: "#/components/schemas/UpgradeCheckResultData"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Check for system upgrade
tags:
- - System
+ - System
/environments/{id}/templates/variables:
get:
description: Get global template variables for an environment
operationId: getGlobalVariables
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseListVariable'
+ $ref: "#/components/schemas/BaseApiResponseListVariable"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get global variables
tags:
- - Templates
+ - Templates
put:
description: Update global template variables for an environment
operationId: updateGlobalVariables
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/EnvSummary'
+ $ref: "#/components/schemas/EnvSummary"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Update global variables
tags:
- - Templates
+ - Templates
/environments/{id}/test:
post:
description: Test connectivity to a Arcane environment
operationId: testConnection
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/EnvironmentTestConnectionRequest'
+ $ref: "#/components/schemas/EnvironmentTestConnectionRequest"
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseTest'
+ $ref: "#/components/schemas/BaseApiResponseTest"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Test environment connection
tags:
- - Environments
+ - Environments
/environments/{id}/updater/history:
get:
description: Get the history of update operations
operationId: get-updater-history
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Number of history entries to return
- explode: false
- in: query
- name: limit
- schema:
- default: 50
- description: Number of history entries to return
- format: int64
- type: integer
- responses:
- '200':
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Number of history entries to return
+ explode: false
+ in: query
+ name: limit
+ schema:
+ default: 50
+ description: Number of history entries to return
+ format: int64
+ type: integer
+ responses:
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseListAutoUpdateRecord'
+ $ref: "#/components/schemas/BaseApiResponseListAutoUpdateRecord"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get updater history
tags:
- - Updater
+ - Updater
/environments/{id}/updater/run:
post:
description: Apply pending container updates
operationId: run-updater
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/UpdaterOptions'
+ $ref: "#/components/schemas/UpdaterOptions"
description: Updater run options
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseResult'
+ $ref: "#/components/schemas/BaseApiResponseResult"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Run updater
tags:
- - Updater
+ - Updater
/environments/{id}/updater/status:
get:
description: Get the current status of the updater
operationId: get-updater-status
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseStatus'
+ $ref: "#/components/schemas/BaseApiResponseStatus"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get updater status
tags:
- - Updater
+ - Updater
/environments/{id}/version:
get:
description: Get the version of a remote environment
operationId: getEnvironmentVersion
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseInfo'
+ $ref: "#/components/schemas/BaseApiResponseInfo"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get environment version
tags:
- - Environments
+ - Environments
/environments/{id}/volumes:
get:
description: Get a paginated list of Docker volumes
operationId: list-volumes
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Search query
- explode: false
- in: query
- name: search
- schema:
- description: Search query
- type: string
- - description: Column to sort by
- explode: false
- in: query
- name: sort
- schema:
- description: Column to sort by
- type: string
- - description: Sort direction (asc or desc)
- explode: false
- in: query
- name: order
- schema:
- default: asc
- description: Sort direction (asc or desc)
- type: string
- - description: Start index for pagination
- explode: false
- in: query
- name: start
- schema:
- default: 0
- description: Start index for pagination
- format: int64
- type: integer
- - description: Number of items per page
- explode: false
- in: query
- name: limit
- schema:
- default: 20
- description: Number of items per page
- format: int64
- type: integer
- - description: Filter by in-use status (true/false)
- explode: false
- in: query
- name: inUse
- schema:
- description: Filter by in-use status (true/false)
- type: string
- - description: Include internal volumes
- explode: false
- in: query
- name: includeInternal
- schema:
- default: false
- description: Include internal volumes
- type: boolean
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Search query
+ explode: false
+ in: query
+ name: search
+ schema:
+ description: Search query
+ type: string
+ - description: Column to sort by
+ explode: false
+ in: query
+ name: sort
+ schema:
+ description: Column to sort by
+ type: string
+ - description: Sort direction (asc or desc)
+ explode: false
+ in: query
+ name: order
+ schema:
+ default: asc
+ description: Sort direction (asc or desc)
+ type: string
+ - description: Start index for pagination
+ explode: false
+ in: query
+ name: start
+ schema:
+ default: 0
+ description: Start index for pagination
+ format: int64
+ type: integer
+ - description: Number of items per page
+ explode: false
+ in: query
+ name: limit
+ schema:
+ default: 20
+ description: Number of items per page
+ format: int64
+ type: integer
+ - description: Filter by in-use status (true/false)
+ explode: false
+ in: query
+ name: inUse
+ schema:
+ description: Filter by in-use status (true/false)
+ type: string
+ - description: Include internal volumes
+ explode: false
+ in: query
+ name: includeInternal
+ schema:
+ default: false
+ description: Include internal volumes
+ type: boolean
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/VolumePaginatedResponse'
+ $ref: "#/components/schemas/VolumePaginatedResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: List volumes
tags:
- - Volumes
+ - Volumes
post:
description: Create a new Docker volume
operationId: create-volume
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/VolumeCreate'
+ $ref: "#/components/schemas/VolumeCreate"
description: Volume creation data
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseVolume'
+ $ref: "#/components/schemas/BaseApiResponseVolume"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Create a volume
tags:
- - Volumes
+ - Volumes
/environments/{id}/volumes/backups/{backupId}:
delete:
operationId: delete-volume-backup
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Backup ID
- in: path
- name: backupId
- required: true
- schema:
- description: Backup ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Backup ID
+ in: path
+ name: backupId
+ required: true
+ schema:
+ description: Backup ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Delete volume backup
tags:
- - Volume Backup
+ - Volume Backup
/environments/{id}/volumes/backups/{backupId}/download:
get:
operationId: download-volume-backup
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Backup ID
- in: path
- name: backupId
- required: true
- schema:
- description: Backup ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Backup ID
+ in: path
+ name: backupId
+ required: true
+ schema:
+ description: Backup ID
+ type: string
responses:
- '200':
+ "200":
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Download volume backup
tags:
- - Volume Backup
+ - Volume Backup
/environments/{id}/volumes/backups/{backupId}/files:
get:
operationId: list-backup-files
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Backup ID
- in: path
- name: backupId
- required: true
- schema:
- description: Backup ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Backup ID
+ in: path
+ name: backupId
+ required: true
+ schema:
+ description: Backup ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseListString'
+ $ref: "#/components/schemas/BaseApiResponseListString"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: List files in a volume backup
tags:
- - Volume Backup
+ - Volume Backup
/environments/{id}/volumes/backups/{backupId}/has-path:
get:
operationId: backup-has-path
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Backup ID
- in: path
- name: backupId
- required: true
- schema:
- description: Backup ID
- type: string
- - description: Path to check
- explode: false
- in: query
- name: path
- schema:
- description: Path to check
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Backup ID
+ in: path
+ name: backupId
+ required: true
+ schema:
+ description: Backup ID
+ type: string
+ - description: Path to check
+ explode: false
+ in: query
+ name: path
+ schema:
+ description: Path to check
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseBackupHasPathResponse'
+ $ref: "#/components/schemas/BaseApiResponseBackupHasPathResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Check if backup contains path
tags:
- - Volume Backup
+ - Volume Backup
/environments/{id}/volumes/counts:
get:
description: Get counts of volumes in use, unused, and total
operationId: get-volume-usage-counts
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Include internal volumes
- explode: false
- in: query
- name: includeInternal
- schema:
- default: false
- description: Include internal volumes
- type: boolean
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Include internal volumes
+ explode: false
+ in: query
+ name: includeInternal
+ schema:
+ default: false
+ description: Include internal volumes
+ type: boolean
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseVolumeUsageCountsData'
+ $ref: "#/components/schemas/BaseApiResponseVolumeUsageCountsData"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get volume usage counts
tags:
- - Volumes
+ - Volumes
/environments/{id}/volumes/prune:
post:
description: Remove all unused Docker volumes
operationId: prune-volumes
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseVolumePruneReportData'
+ $ref: "#/components/schemas/BaseApiResponseVolumePruneReportData"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Prune unused volumes
tags:
- - Volumes
+ - Volumes
/environments/{id}/volumes/sizes:
get:
description: Get disk usage sizes for all volumes (slow operation)
operationId: get-volume-sizes
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseListVolumeSizeInfo'
+ $ref: "#/components/schemas/BaseApiResponseListVolumeSizeInfo"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get volume sizes
tags:
- - Volumes
+ - Volumes
/environments/{id}/volumes/{volumeName}:
delete:
description: Remove a Docker volume by name
operationId: remove-volume
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Volume name
- in: path
- name: volumeName
- required: true
- schema:
- description: Volume name
- type: string
- - description: Force removal
- explode: false
- in: query
- name: force
- schema:
- description: Force removal
- type: boolean
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Volume name
+ in: path
+ name: volumeName
+ required: true
+ schema:
+ description: Volume name
+ type: string
+ - description: Force removal
+ explode: false
+ in: query
+ name: force
+ schema:
+ description: Force removal
+ type: boolean
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Remove a volume
tags:
- - Volumes
+ - Volumes
get:
description: Get a Docker volume by its name
operationId: get-volume
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Volume name
- in: path
- name: volumeName
- required: true
- schema:
- description: Volume name
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Volume name
+ in: path
+ name: volumeName
+ required: true
+ schema:
+ description: Volume name
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseVolume'
+ $ref: "#/components/schemas/BaseApiResponseVolume"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get volume by name
tags:
- - Volumes
+ - Volumes
/environments/{id}/volumes/{volumeName}/backups:
get:
operationId: list-volume-backups
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Volume name
- in: path
- name: volumeName
- required: true
- schema:
- description: Volume name
- type: string
- - description: Search query
- explode: false
- in: query
- name: search
- schema:
- description: Search query
- type: string
- - description: Column to sort by
- explode: false
- in: query
- name: sort
- schema:
- description: Column to sort by
- type: string
- - description: Sort direction
- explode: false
- in: query
- name: order
- schema:
- default: asc
- description: Sort direction
- type: string
- - description: Start index
- explode: false
- in: query
- name: start
- schema:
- default: 0
- description: Start index
- format: int64
- type: integer
- - description: Limit
- explode: false
- in: query
- name: limit
- schema:
- default: 20
- description: Limit
- format: int64
- type: integer
- responses:
- '200':
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Volume name
+ in: path
+ name: volumeName
+ required: true
+ schema:
+ description: Volume name
+ type: string
+ - description: Search query
+ explode: false
+ in: query
+ name: search
+ schema:
+ description: Search query
+ type: string
+ - description: Column to sort by
+ explode: false
+ in: query
+ name: sort
+ schema:
+ description: Column to sort by
+ type: string
+ - description: Sort direction
+ explode: false
+ in: query
+ name: order
+ schema:
+ default: asc
+ description: Sort direction
+ type: string
+ - description: Start index
+ explode: false
+ in: query
+ name: start
+ schema:
+ default: 0
+ description: Start index
+ format: int64
+ type: integer
+ - description: Limit
+ explode: false
+ in: query
+ name: limit
+ schema:
+ default: 20
+ description: Limit
+ format: int64
+ type: integer
+ responses:
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/VolumeBackupPaginatedResponse'
+ $ref: "#/components/schemas/VolumeBackupPaginatedResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: List volume backups
tags:
- - Volume Backup
+ - Volume Backup
post:
operationId: create-volume-backup
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Volume name
- in: path
- name: volumeName
- required: true
- schema:
- description: Volume name
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Volume name
+ in: path
+ name: volumeName
+ required: true
+ schema:
+ description: Volume name
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseVolumeBackup'
+ $ref: "#/components/schemas/BaseApiResponseVolumeBackup"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Create volume backup
tags:
- - Volume Backup
+ - Volume Backup
/environments/{id}/volumes/{volumeName}/backups/upload:
post:
operationId: upload-volume-backup
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Volume name
- in: path
- name: volumeName
- required: true
- schema:
- description: Volume name
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Volume name
+ in: path
+ name: volumeName
+ required: true
+ schema:
+ description: Volume name
+ type: string
requestBody:
content:
multipart/form-data:
@@ -20555,154 +24440,154 @@ paths:
format: binary
type: string
required:
- - file
+ - file
type: object
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Upload and restore volume backup
tags:
- - Volume Backup
+ - Volume Backup
/environments/{id}/volumes/{volumeName}/backups/{backupId}/restore:
post:
operationId: restore-volume-backup
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Volume name
- in: path
- name: volumeName
- required: true
- schema:
- description: Volume name
- type: string
- - description: Backup ID
- in: path
- name: backupId
- required: true
- schema:
- description: Backup ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Volume name
+ in: path
+ name: volumeName
+ required: true
+ schema:
+ description: Volume name
+ type: string
+ - description: Backup ID
+ in: path
+ name: backupId
+ required: true
+ schema:
+ description: Backup ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Restore volume backup
tags:
- - Volume Backup
+ - Volume Backup
/environments/{id}/volumes/{volumeName}/backups/{backupId}/restore-files:
post:
operationId: restore-volume-backup-files
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Volume name
- in: path
- name: volumeName
- required: true
- schema:
- description: Volume name
- type: string
- - description: Backup ID
- in: path
- name: backupId
- required: true
- schema:
- description: Backup ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Volume name
+ in: path
+ name: volumeName
+ required: true
+ schema:
+ description: Volume name
+ type: string
+ - description: Backup ID
+ in: path
+ name: backupId
+ required: true
+ schema:
+ description: Backup ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/RestoreBackupFilesInputBody'
+ $ref: "#/components/schemas/RestoreBackupFilesInputBody"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Restore specific files from a volume backup
tags:
- - Volume Backup
+ - Volume Backup
/environments/{id}/volumes/{volumeName}/browse:
delete:
operationId: delete-volume-file
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Volume name
- in: path
- name: volumeName
- required: true
- schema:
- description: Volume name
- type: string
- - description: File or directory path to delete
- explode: false
- in: query
- name: path
- schema:
- description: File or directory path to delete
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Volume name
+ in: path
+ name: volumeName
+ required: true
+ schema:
+ description: Volume name
+ type: string
+ - description: File or directory path to delete
+ explode: false
+ in: query
+ name: path
+ schema:
+ description: File or directory path to delete
+ type: string
responses:
- '204':
+ "204":
description: No Content
headers:
Data:
schema:
- $ref: '#/components/schemas/BaseMessageResponse'
+ $ref: "#/components/schemas/BaseMessageResponse"
description: Response data
Success:
schema:
@@ -20712,183 +24597,183 @@ paths:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Delete file or directory in volume
tags:
- - Volume Browser
+ - Volume Browser
get:
operationId: browse-volume-directory
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Volume name
- in: path
- name: volumeName
- required: true
- schema:
- description: Volume name
- type: string
- - description: Directory path to browse
- explode: false
- in: query
- name: path
- schema:
- default: /
- description: Directory path to browse
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Volume name
+ in: path
+ name: volumeName
+ required: true
+ schema:
+ description: Volume name
+ type: string
+ - description: Directory path to browse
+ explode: false
+ in: query
+ name: path
+ schema:
+ default: /
+ description: Directory path to browse
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseListFileEntry'
+ $ref: "#/components/schemas/BaseApiResponseListFileEntry"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: List volume directory
tags:
- - Volume Browser
+ - Volume Browser
/environments/{id}/volumes/{volumeName}/browse/content:
get:
operationId: get-volume-file-content
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Volume name
- in: path
- name: volumeName
- required: true
- schema:
- description: Volume name
- type: string
- - description: File path
- explode: false
- in: query
- name: path
- schema:
- description: File path
- type: string
- - description: Maximum bytes to read (default 1MB)
- explode: false
- in: query
- name: maxBytes
- schema:
- default: 1048576
- description: Maximum bytes to read (default 1MB)
- format: int64
- type: integer
- responses:
- '200':
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Volume name
+ in: path
+ name: volumeName
+ required: true
+ schema:
+ description: Volume name
+ type: string
+ - description: File path
+ explode: false
+ in: query
+ name: path
+ schema:
+ description: File path
+ type: string
+ - description: Maximum bytes to read (default 1MB)
+ explode: false
+ in: query
+ name: maxBytes
+ schema:
+ default: 1048576
+ description: Maximum bytes to read (default 1MB)
+ format: int64
+ type: integer
+ responses:
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseFileContentResponse'
+ $ref: "#/components/schemas/BaseApiResponseFileContentResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get file content preview
tags:
- - Volume Browser
+ - Volume Browser
/environments/{id}/volumes/{volumeName}/browse/download:
get:
operationId: download-volume-file
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Volume name
- in: path
- name: volumeName
- required: true
- schema:
- description: Volume name
- type: string
- - description: File path
- explode: false
- in: query
- name: path
- schema:
- description: File path
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Volume name
+ in: path
+ name: volumeName
+ required: true
+ schema:
+ description: Volume name
+ type: string
+ - description: File path
+ explode: false
+ in: query
+ name: path
+ schema:
+ description: File path
+ type: string
responses:
- '200':
+ "200":
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Download file from volume
tags:
- - Volume Browser
+ - Volume Browser
/environments/{id}/volumes/{volumeName}/browse/mkdir:
post:
operationId: create-volume-directory
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Volume name
- in: path
- name: volumeName
- required: true
- schema:
- description: Volume name
- type: string
- - description: Directory path to create
- explode: false
- in: query
- name: path
- schema:
- description: Directory path to create
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Volume name
+ in: path
+ name: volumeName
+ required: true
+ schema:
+ description: Volume name
+ type: string
+ - description: Directory path to create
+ explode: false
+ in: query
+ name: path
+ schema:
+ description: Directory path to create
+ type: string
responses:
- '204':
+ "204":
description: No Content
headers:
Data:
schema:
- $ref: '#/components/schemas/BaseMessageResponse'
+ $ref: "#/components/schemas/BaseMessageResponse"
description: Response data
Success:
schema:
@@ -20898,40 +24783,40 @@ paths:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Create directory in volume
tags:
- - Volume Browser
+ - Volume Browser
/environments/{id}/volumes/{volumeName}/browse/upload:
post:
operationId: upload-volume-file
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Volume name
- in: path
- name: volumeName
- required: true
- schema:
- description: Volume name
- type: string
- - description: Destination path
- explode: false
- in: query
- name: path
- schema:
- default: /
- description: Destination path
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Volume name
+ in: path
+ name: volumeName
+ required: true
+ schema:
+ description: Volume name
+ type: string
+ - description: Destination path
+ explode: false
+ in: query
+ name: path
+ schema:
+ default: /
+ description: Destination path
+ type: string
requestBody:
content:
multipart/form-data:
@@ -20943,16 +24828,16 @@ paths:
format: binary
type: string
required:
- - file
+ - file
type: object
required: true
responses:
- '204':
+ "204":
description: No Content
headers:
Data:
schema:
- $ref: '#/components/schemas/BaseMessageResponse'
+ $ref: "#/components/schemas/BaseMessageResponse"
description: Response data
Success:
schema:
@@ -20962,1196 +24847,1594 @@ paths:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Upload file to volume
tags:
- - Volume Browser
+ - Volume Browser
/environments/{id}/volumes/{volumeName}/usage:
get:
description: Get containers using a specific volume
operationId: get-volume-usage
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Volume name
- in: path
- name: volumeName
- required: true
- schema:
- description: Volume name
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Volume name
+ in: path
+ name: volumeName
+ required: true
+ schema:
+ description: Volume name
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseVolumeUsageResponse'
+ $ref: "#/components/schemas/BaseApiResponseVolumeUsageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get volume usage
tags:
- - Volumes
+ - Volumes
/environments/{id}/vulnerabilities/all:
get:
- description: Retrieves paginated vulnerabilities across all scanned images in
- the environment
+ description: Retrieves paginated vulnerabilities across all scanned images in the environment
operationId: list-environment-vulnerabilities
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Search query
- explode: false
- in: query
- name: search
- schema:
- description: Search query
- type: string
- - description: Sort field
- explode: false
- in: query
- name: sort
- schema:
- description: Sort field
- type: string
- - description: Sort order
- explode: false
- in: query
- name: order
- schema:
- description: Sort order
- type: string
- - description: Start offset
- explode: false
- in: query
- name: start
- schema:
- description: Start offset
- format: int64
- type: integer
- - description: Limit
- explode: false
- in: query
- name: limit
- schema:
- description: Limit
- format: int64
- type: integer
- - description: Page number
- explode: false
- in: query
- name: page
- schema:
- description: Page number
- format: int64
- type: integer
- - description: Comma-separated severity filter
- explode: false
- in: query
- name: severity
- schema:
- description: Comma-separated severity filter
- type: string
- - description: Filter by image/repo name (substring)
- explode: false
- in: query
- name: imageName
- schema:
- description: Filter by image/repo name (substring)
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Search query
+ explode: false
+ in: query
+ name: search
+ schema:
+ description: Search query
+ type: string
+ - description: Sort field
+ explode: false
+ in: query
+ name: sort
+ schema:
+ description: Sort field
+ type: string
+ - description: Sort order
+ explode: false
+ in: query
+ name: order
+ schema:
+ description: Sort order
+ type: string
+ - description: Start offset
+ explode: false
+ in: query
+ name: start
+ schema:
+ description: Start offset
+ format: int64
+ type: integer
+ - description: Limit
+ explode: false
+ in: query
+ name: limit
+ schema:
+ description: Limit
+ format: int64
+ type: integer
+ - description: Comma-separated severity filter
+ explode: false
+ in: query
+ name: severity
+ schema:
+ description: Comma-separated severity filter
+ type: string
+ - description: Filter by image/repo name (substring)
+ explode: false
+ in: query
+ name: imageName
+ schema:
+ description: Filter by image/repo name (substring)
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BasePaginatedVulnerabilityWithImage'
+ $ref: "#/components/schemas/BasePaginatedVulnerabilityWithImage"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: List environment vulnerabilities
tags:
- - Vulnerabilities
+ - Vulnerabilities
/environments/{id}/vulnerabilities/ignore:
post:
description: Creates an ignore record for a specific vulnerability
operationId: ignore-vulnerability
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/VulnerabilityIgnorePayload'
+ $ref: "#/components/schemas/VulnerabilityIgnorePayload"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseIgnoredVulnerability'
+ $ref: "#/components/schemas/BaseApiResponseIgnoredVulnerability"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Ignore a vulnerability
tags:
- - Vulnerabilities
+ - Vulnerabilities
/environments/{id}/vulnerabilities/ignore/{ignoreId}:
delete:
description: Removes an ignore record for a vulnerability
operationId: unignore-vulnerability
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Ignore record ID
- in: path
- name: ignoreId
- required: true
- schema:
- description: Ignore record ID
- type: string
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Ignore record ID
+ in: path
+ name: ignoreId
+ required: true
+ schema:
+ description: Ignore record ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseStruct {}'
+ $ref: "#/components/schemas/BaseApiResponseStruct {}"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Unignore a vulnerability
tags:
- - Vulnerabilities
+ - Vulnerabilities
/environments/{id}/vulnerabilities/ignored:
get:
description: Retrieves a list of all ignored vulnerabilities for the environment
operationId: list-ignored-vulnerabilities
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Search query
- explode: false
- in: query
- name: search
- schema:
- description: Search query
- type: string
- - description: Sort field
- explode: false
- in: query
- name: sort
- schema:
- description: Sort field
- type: string
- - description: Sort order
- explode: false
- in: query
- name: order
- schema:
- description: Sort order
- type: string
- - description: Start offset
- explode: false
- in: query
- name: start
- schema:
- description: Start offset
- format: int64
- type: integer
- - description: Limit
- explode: false
- in: query
- name: limit
- schema:
- description: Limit
- format: int64
- type: integer
- - description: Page number
- explode: false
- in: query
- name: page
- schema:
- description: Page number
- format: int64
- type: integer
- responses:
- '200':
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Search query
+ explode: false
+ in: query
+ name: search
+ schema:
+ description: Search query
+ type: string
+ - description: Sort field
+ explode: false
+ in: query
+ name: sort
+ schema:
+ description: Sort field
+ type: string
+ - description: Sort order
+ explode: false
+ in: query
+ name: order
+ schema:
+ description: Sort order
+ type: string
+ - description: Start offset
+ explode: false
+ in: query
+ name: start
+ schema:
+ description: Start offset
+ format: int64
+ type: integer
+ - description: Limit
+ explode: false
+ in: query
+ name: limit
+ schema:
+ description: Limit
+ format: int64
+ type: integer
+ responses:
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BasePaginatedIgnoredVulnerability'
+ $ref: "#/components/schemas/BasePaginatedIgnoredVulnerability"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: List ignored vulnerabilities
tags:
- - Vulnerabilities
+ - Vulnerabilities
/environments/{id}/vulnerabilities/image-options:
get:
description: Retrieves available image filter options for environment vulnerabilities
operationId: list-environment-vulnerability-image-options
parameters:
- - description: Environment ID
- in: path
- name: id
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Comma-separated severity filter
+ explode: false
+ in: query
+ name: severity
+ schema:
+ description: Comma-separated severity filter
+ type: string
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BaseApiResponseListString"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: List vulnerability image options
+ tags:
+ - Vulnerabilities
+ /environments/{id}/vulnerabilities/scanner-status:
+ get:
+ description: Check if the vulnerability scanner (Trivy) is available and get its version
+ operationId: get-vulnerability-scanner-status
+ parameters:
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BaseApiResponseScannerStatus"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Get vulnerability scanner status
+ tags:
+ - Vulnerabilities
+ /environments/{id}/vulnerabilities/summary:
+ get:
+ description: Retrieves aggregated vulnerability counts across all images in the environment
+ operationId: get-environment-vulnerability-summary
+ parameters:
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BaseApiResponseEnvironmentVulnerabilitySummary"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Get environment vulnerability summary
+ tags:
+ - Vulnerabilities
+ /environments/{id}/webhooks:
+ get:
+ description: List all webhooks configured for this environment
+ operationId: list-webhooks
+ parameters:
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BaseApiResponseListSummary"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: List webhooks
+ tags:
+ - Webhooks
+ post:
+ description: Create a webhook that triggers a container or stack update. The token is only returned once.
+ operationId: create-webhook
+ parameters:
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/WebhookCreateInput"
required: true
- schema:
- description: Environment ID
- type: string
- - description: Comma-separated severity filter
- explode: false
- in: query
- name: severity
- schema:
- description: Comma-separated severity filter
- type: string
responses:
- '200':
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BaseApiResponseCreated"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Create webhook
+ tags:
+ - Webhooks
+ /environments/{id}/webhooks/{webhookId}:
+ delete:
+ description: Delete a webhook by ID
+ operationId: delete-webhook
+ parameters:
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Webhook ID
+ in: path
+ name: webhookId
+ required: true
+ schema:
+ description: Webhook ID
+ type: string
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BaseApiResponseInterface {}"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Delete webhook
+ tags:
+ - Webhooks
+ patch:
+ description: Update a webhook's enabled state
+ operationId: update-webhook
+ parameters:
+ - description: Environment ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Webhook ID
+ in: path
+ name: webhookId
+ required: true
+ schema:
+ description: Webhook ID
+ type: string
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/WebhookUpdateInput"
+ required: true
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BaseApiResponseInterface {}"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Update webhook
+ tags:
+ - Webhooks
+ /events:
+ get:
+ description: Get a paginated list of system events
+ operationId: listEvents
+ parameters:
+ - description: Search query
+ explode: false
+ in: query
+ name: search
+ schema:
+ description: Search query
+ type: string
+ - description: Column to sort by
+ explode: false
+ in: query
+ name: sort
+ schema:
+ description: Column to sort by
+ type: string
+ - description: Sort direction
+ explode: false
+ in: query
+ name: order
+ schema:
+ default: asc
+ description: Sort direction
+ type: string
+ - description: Start index
+ explode: false
+ in: query
+ name: start
+ schema:
+ default: 0
+ description: Start index
+ format: int64
+ type: integer
+ - description: Limit
+ explode: false
+ in: query
+ name: limit
+ schema:
+ default: 20
+ description: Limit
+ format: int64
+ type: integer
+ - description: Filter by severity
+ explode: false
+ in: query
+ name: severity
+ schema:
+ description: Filter by severity
+ type: string
+ - description: Filter by event type
+ explode: false
+ in: query
+ name: type
+ schema:
+ description: Filter by event type
+ type: string
+ responses:
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseListString'
+ $ref: "#/components/schemas/EventPaginatedResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
- summary: List vulnerability image options
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: List events
tags:
- - Vulnerabilities
- /environments/{id}/vulnerabilities/scanner-status:
+ - Events
+ /events/environment/{environmentId}:
get:
- description: Check if the vulnerability scanner (Trivy) is available and get
- its version
- operationId: get-vulnerability-scanner-status
+ description: Get a paginated list of events for a specific environment
+ operationId: getEventsByEnvironment
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Environment ID
+ in: path
+ name: environmentId
+ required: true
+ schema:
+ description: Environment ID
+ type: string
+ - description: Search query
+ explode: false
+ in: query
+ name: search
+ schema:
+ description: Search query
+ type: string
+ - description: Column to sort by
+ explode: false
+ in: query
+ name: sort
+ schema:
+ description: Column to sort by
+ type: string
+ - description: Sort direction
+ explode: false
+ in: query
+ name: order
+ schema:
+ default: asc
+ description: Sort direction
+ type: string
+ - description: Start index
+ explode: false
+ in: query
+ name: start
+ schema:
+ default: 0
+ description: Start index
+ format: int64
+ type: integer
+ - description: Limit
+ explode: false
+ in: query
+ name: limit
+ schema:
+ default: 20
+ description: Limit
+ format: int64
+ type: integer
+ - description: Filter by severity
+ explode: false
+ in: query
+ name: severity
+ schema:
+ description: Filter by severity
+ type: string
+ - description: Filter by event type
+ explode: false
+ in: query
+ name: type
+ schema:
+ description: Filter by event type
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseScannerStatus'
+ $ref: "#/components/schemas/EventPaginatedResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
- summary: Get vulnerability scanner status
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Get events by environment
tags:
- - Vulnerabilities
- /environments/{id}/vulnerabilities/summary:
- get:
- description: Retrieves aggregated vulnerability counts across all images in
- the environment
- operationId: get-environment-vulnerability-summary
+ - Events
+ /events/{eventId}:
+ delete:
+ description: Delete a system event by ID
+ operationId: deleteEvent
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ - description: Event ID
+ in: path
+ name: eventId
+ required: true
+ schema:
+ description: Event ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseEnvironmentVulnerabilitySummary'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
- summary: Get environment vulnerability summary
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Delete an event
tags:
- - Vulnerabilities
- /environments/{id}/webhooks:
+ - Events
+ /federated-credentials:
get:
- description: List all webhooks configured for this environment
- operationId: list-webhooks
+ description: Get a paginated list of workload identity federation trust rules
+ operationId: list-federated-credentials
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- responses:
- '200':
+ - description: Search query for filtering by name, issuer, or subject
+ explode: false
+ in: query
+ name: search
+ schema:
+ description: Search query for filtering by name, issuer, or subject
+ type: string
+ - description: Column to sort by
+ explode: false
+ in: query
+ name: sort
+ schema:
+ description: Column to sort by
+ type: string
+ - description: Sort direction (asc or desc)
+ explode: false
+ in: query
+ name: order
+ schema:
+ default: asc
+ description: Sort direction (asc or desc)
+ type: string
+ - description: Start index for pagination
+ explode: false
+ in: query
+ name: start
+ schema:
+ default: 0
+ description: Start index for pagination
+ format: int64
+ type: integer
+ - description: Number of items per page
+ explode: false
+ in: query
+ name: limit
+ schema:
+ default: 20
+ description: Number of items per page
+ format: int64
+ type: integer
+ responses:
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseListSummary'
+ $ref: "#/components/schemas/BasePaginatedFederatedCredential"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
- summary: List webhooks
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: List federated credentials
tags:
- - Webhooks
+ - Federated Credentials
post:
- description: Create a webhook that triggers a container or stack update. The
- token is only returned once.
- operationId: create-webhook
- parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
+ description: Create a workload identity federation trust rule
+ operationId: create-federated-credential
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/WebhookCreateInput'
+ $ref: "#/components/schemas/FederatedCreateFederatedCredential"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseCreated'
+ $ref: "#/components/schemas/BaseApiResponseFederatedCredential"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
- summary: Create webhook
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Create a federated credential
tags:
- - Webhooks
- /environments/{id}/webhooks/{webhookId}:
+ - Federated Credentials
+ /federated-credentials/{id}:
delete:
- description: Delete a webhook by ID
- operationId: delete-webhook
+ description: Delete a workload identity federation trust rule and its service user
+ operationId: delete-federated-credential
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Webhook ID
- in: path
- name: webhookId
- required: true
- schema:
- description: Webhook ID
- type: string
+ - description: Federated credential ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Federated credential ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseInterface {}'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
- summary: Delete webhook
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Delete a federated credential
tags:
- - Webhooks
- patch:
- description: Update a webhook's enabled state
- operationId: update-webhook
+ - Federated Credentials
+ get:
+ description: Get details of a workload identity federation trust rule
+ operationId: get-federated-credential
parameters:
- - description: Environment ID
- in: path
- name: id
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Webhook ID
- in: path
- name: webhookId
- required: true
- schema:
- description: Webhook ID
- type: string
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/WebhookUpdateInput'
- required: true
+ - description: Federated credential ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Federated credential ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseInterface {}'
+ $ref: "#/components/schemas/BaseApiResponseFederatedCredential"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
- summary: Update webhook
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Get a federated credential
tags:
- - Webhooks
- /events:
- get:
- description: Get a paginated list of system events
- operationId: listEvents
+ - Federated Credentials
+ put:
+ description: Update a workload identity federation trust rule
+ operationId: update-federated-credential
parameters:
- - description: Search query
- explode: false
- in: query
- name: search
- schema:
- description: Search query
- type: string
- - description: Column to sort by
- explode: false
- in: query
- name: sort
- schema:
- description: Column to sort by
- type: string
- - description: Sort direction
- explode: false
- in: query
- name: order
- schema:
- default: asc
- description: Sort direction
- type: string
- - description: Start index
- explode: false
- in: query
- name: start
- schema:
- default: 0
- description: Start index
- format: int64
- type: integer
- - description: Limit
- explode: false
- in: query
- name: limit
- schema:
- default: 20
- description: Limit
- format: int64
- type: integer
- - description: Filter by severity
- explode: false
- in: query
- name: severity
- schema:
- description: Filter by severity
- type: string
- - description: Filter by event type
- explode: false
- in: query
- name: type
- schema:
- description: Filter by event type
- type: string
+ - description: Federated credential ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Federated credential ID
+ type: string
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/FederatedUpdateFederatedCredential"
+ required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/EventPaginatedResponse'
+ $ref: "#/components/schemas/BaseApiResponseFederatedCredential"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
- summary: List events
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Update a federated credential
tags:
- - Events
+ - Federated Credentials
+ /git-repositories/sync:
post:
- description: Create a new system event
- operationId: createEvent
- parameters:
- - description: API key for environment-scoped event forwarding
- in: header
- name: X-API-Key
- schema:
- description: API key for environment-scoped event forwarding
- type: string
+ description: Sync git repositories from a manager to this agent instance
+ operationId: syncGitRepositories
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/EventCreateEvent'
+ $ref: "#/components/schemas/GitopsRepositorySyncRequest"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseEvent'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
- summary: Create an event
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Sync git repositories
tags:
- - Events
- /events/environment/{environmentId}:
+ - Git Repositories
+ /health:
get:
- description: Get a paginated list of events for a specific environment
- operationId: getEventsByEnvironment
- parameters:
- - description: Environment ID
- in: path
- name: environmentId
- required: true
- schema:
- description: Environment ID
- type: string
- - description: Search query
- explode: false
- in: query
- name: search
- schema:
- description: Search query
- type: string
- - description: Column to sort by
- explode: false
- in: query
- name: sort
- schema:
- description: Column to sort by
- type: string
- - description: Sort direction
- explode: false
- in: query
- name: order
- schema:
- default: asc
- description: Sort direction
- type: string
- - description: Start index
- explode: false
- in: query
- name: start
- schema:
- default: 0
- description: Start index
- format: int64
- type: integer
- - description: Limit
- explode: false
- in: query
- name: limit
- schema:
- default: 20
- description: Limit
- format: int64
- type: integer
- - description: Filter by severity
- explode: false
- in: query
- name: severity
- schema:
- description: Filter by severity
- type: string
- - description: Filter by event type
- explode: false
- in: query
- name: type
- schema:
- description: Filter by event type
- type: string
+ description: Check if the API is healthy
+ operationId: health-check
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/EventPaginatedResponse'
+ $ref: "#/components/schemas/SystemHealthResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
- security:
- - BearerAuth: []
- - ApiKeyAuth: []
- summary: Get events by environment
+ security: []
+ summary: Health check
tags:
- - Events
- /events/{eventId}:
- delete:
- description: Delete a system event by ID
- operationId: deleteEvent
+ - Health
+ head:
+ description: Check if the API is healthy (HEAD request)
+ operationId: health-check-head
+ responses:
+ "200":
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security: []
+ summary: Health check (HEAD)
+ tags:
+ - Health
+ /notifications/dispatch:
+ post:
+ operationId: dispatch-notification
parameters:
- - description: Event ID
- in: path
- name: eventId
+ - description: Remote environment access token
+ in: header
+ name: X-API-Key
+ schema:
+ description: Remote environment access token
+ type: string
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/NotificationDispatchRequest"
required: true
- schema:
- description: Event ID
- type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseDispatchResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
- summary: Delete an event
+ - ApiKeyAuth: []
+ summary: Dispatch notification from remote agent to manager
tags:
- - Events
- /fonts/mono:
- get:
- description: Get the application monospace font (Geist Mono)
- operationId: get-mono-font
+ - Notifications
+ /oidc/callback:
+ post:
+ description: Process the OIDC callback and complete authentication
+ operationId: handle-oidc-callback
+ parameters:
+ - in: header
+ name: Origin
+ schema:
+ type: string
+ - in: header
+ name: X-Forwarded-Host
+ schema:
+ type: string
+ - in: header
+ name: X-Forwarded-Proto
+ schema:
+ type: string
+ - in: header
+ name: Host
+ schema:
+ type: string
+ - in: header
+ name: User-Agent
+ schema:
+ type: string
+ - description: OIDC state cookie from auth URL request
+ in: cookie
+ name: oidc_state
+ schema:
+ description: OIDC state cookie from auth URL request
+ type: string
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/AuthOidcCallbackRequest"
+ required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- contentEncoding: base64
- type: string
+ $ref: "#/components/schemas/AuthOidcCallbackResponse"
description: OK
headers:
- Cache-Control:
- schema:
- type: string
- Content-Type:
+ Set-Cookie:
schema:
+ description: Session and clear state cookies
type: string
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security: []
- summary: Get monospace font
+ summary: Handle OIDC callback
tags:
- - Fonts
- /fonts/sans:
+ - OIDC
+ /oidc/config:
get:
- description: Get the application sans-serif font (Geist)
- operationId: get-sans-font
+ description: Get the OIDC client configuration
+ operationId: get-oidc-config
+ parameters:
+ - in: header
+ name: Origin
+ schema:
+ type: string
+ - in: header
+ name: X-Forwarded-Host
+ schema:
+ type: string
+ - in: header
+ name: X-Forwarded-Proto
+ schema:
+ type: string
+ - in: header
+ name: Host
+ schema:
+ type: string
+ - in: header
+ name: User-Agent
+ schema:
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- contentEncoding: base64
- type: string
+ $ref: "#/components/schemas/AuthOidcConfigResponse"
description: OK
- headers:
- Cache-Control:
- schema:
- type: string
- Content-Type:
- schema:
- type: string
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security: []
- summary: Get sans-serif font
+ summary: Get OIDC config
tags:
- - Fonts
- /fonts/serif:
- get:
- description: Get the application serif font (Calistoga)
- operationId: get-serif-font
+ - OIDC
+ /oidc/device/code:
+ post:
+ description: Start the device authorization flow for CLI authentication
+ operationId: initiate-oidc-device-auth
responses:
- '200':
+ "200":
content:
application/json:
schema:
- contentEncoding: base64
- type: string
+ $ref: "#/components/schemas/AuthOidcDeviceAuthResponse"
description: OK
- headers:
- Cache-Control:
- schema:
- type: string
- Content-Type:
- schema:
- type: string
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security: []
- summary: Get serif font
+ summary: Initiate OIDC device authorization
tags:
- - Fonts
- /git-repositories/sync:
+ - OIDC
+ /oidc/device/token:
post:
- description: Sync git repositories from a manager to this agent instance
- operationId: syncGitRepositories
+ description: Exchange a device code for authentication tokens
+ operationId: exchange-oidc-device-token
+ parameters:
+ - in: header
+ name: User-Agent
+ schema:
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/GitopsRepositorySyncRequest'
+ $ref: "#/components/schemas/AuthOidcDeviceTokenRequest"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/AuthOidcDeviceTokenResponse"
description: OK
+ headers:
+ Set-Cookie:
+ schema:
+ description: Session token cookie
+ type: string
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
- security:
- - BearerAuth: []
- - ApiKeyAuth: []
- summary: Sync git repositories
+ security: []
+ summary: Exchange device code for tokens
tags:
- - Git Repositories
- /health:
+ - OIDC
+ /oidc/role-mappings:
get:
- description: Check if the API is healthy
- operationId: health-check
+ description: Returns every mapping. On each OIDC login the user's group claim is matched against ClaimValue and matching rows become source='oidc' role assignments.
+ operationId: list-oidc-role-mappings
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/ListOidcRoleMappingsOutputBody"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: List OIDC group → role mappings
+ tags:
+ - OIDC
+ post:
+ operationId: create-oidc-role-mapping
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/RoleCreateOidcRoleMapping"
+ required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/SystemHealthResponse'
+ $ref: "#/components/schemas/CreateOidcRoleMappingOutputBody"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
- summary: Health check
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Create an OIDC role mapping
tags:
- - Health
- head:
- description: Check if the API is healthy (HEAD request)
- operationId: health-check-head
+ - OIDC
+ /oidc/role-mappings/{id}:
+ delete:
+ operationId: delete-oidc-role-mapping
+ parameters:
+ - description: Mapping ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Mapping ID
+ type: string
responses:
- '200':
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/DeleteOidcRoleMappingOutputBody"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
- summary: Health check (HEAD)
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Delete an OIDC role mapping
tags:
- - Health
- /notifications/dispatch:
- post:
- operationId: dispatch-notification
+ - OIDC
+ put:
+ operationId: update-oidc-role-mapping
parameters:
- - description: Remote environment access token
- in: header
- name: X-API-Key
- schema:
- description: Remote environment access token
- type: string
+ - description: Mapping ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Mapping ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/NotificationDispatchRequest'
+ $ref: "#/components/schemas/RoleUpdateOidcRoleMapping"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/UpdateOidcRoleMappingOutputBody"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - ApiKeyAuth: []
- summary: Dispatch notification from remote agent to manager
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Update an OIDC role mapping
tags:
- - Notifications
- /oidc/callback:
+ - OIDC
+ /oidc/status:
+ get:
+ description: Get the current OIDC configuration status
+ operationId: get-oidc-status
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/AuthOidcStatusInfo"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security: []
+ summary: Get OIDC status
+ tags:
+ - OIDC
+ /oidc/url:
post:
- description: Process the OIDC callback and complete authentication
- operationId: handle-oidc-callback
+ description: Generate an OIDC authorization URL for login
+ operationId: get-oidc-auth-url
parameters:
- - in: header
- name: Origin
- schema:
- type: string
- - in: header
- name: X-Forwarded-Host
- schema:
- type: string
- - in: header
- name: X-Forwarded-Proto
- schema:
- type: string
- - in: header
- name: Host
- schema:
- type: string
- - description: OIDC state cookie from auth URL request
- in: cookie
- name: oidc_state
- schema:
- description: OIDC state cookie from auth URL request
- type: string
+ - in: header
+ name: Origin
+ schema:
+ type: string
+ - in: header
+ name: X-Forwarded-Host
+ schema:
+ type: string
+ - in: header
+ name: X-Forwarded-Proto
+ schema:
+ type: string
+ - in: header
+ name: Host
+ schema:
+ type: string
+ - in: header
+ name: User-Agent
+ schema:
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/AuthOidcCallbackRequest'
+ $ref: "#/components/schemas/AuthOidcAuthUrlRequest"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/AuthOidcCallbackResponse'
+ $ref: "#/components/schemas/AuthOidcAuthUrlResponse"
description: OK
headers:
Set-Cookie:
schema:
- description: Session and clear state cookies
+ description: OIDC state cookie
type: string
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
- summary: Handle OIDC callback
+ security: []
+ summary: Get OIDC auth URL
tags:
- - OIDC
- /oidc/config:
+ - OIDC
+ /roles:
get:
- description: Get the OIDC client configuration
- operationId: get-oidc-config
+ description: Get a paginated list of roles (built-in + custom)
+ operationId: list-roles
parameters:
- - in: header
- name: Origin
- schema:
- type: string
- - in: header
- name: X-Forwarded-Host
- schema:
- type: string
- - in: header
- name: X-Forwarded-Proto
- schema:
- type: string
- - in: header
- name: Host
- schema:
- type: string
- responses:
- '200':
+ - description: Search by role name or description
+ explode: false
+ in: query
+ name: search
+ schema:
+ description: Search by role name or description
+ type: string
+ - description: Column to sort by
+ explode: false
+ in: query
+ name: sort
+ schema:
+ description: Column to sort by
+ type: string
+ - description: Sort direction (asc or desc)
+ explode: false
+ in: query
+ name: order
+ schema:
+ default: asc
+ description: Sort direction (asc or desc)
+ type: string
+ - description: Start index for pagination
+ explode: false
+ in: query
+ name: start
+ schema:
+ default: 0
+ description: Start index for pagination
+ format: int64
+ type: integer
+ - description: Items per page
+ explode: false
+ in: query
+ name: limit
+ schema:
+ default: 20
+ description: Items per page
+ format: int64
+ type: integer
+ responses:
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/AuthOidcConfigResponse'
+ $ref: "#/components/schemas/RolePaginatedResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
- summary: Get OIDC config
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: List roles
tags:
- - OIDC
- /oidc/device/code:
+ - Roles
post:
- description: Start the device authorization flow for CLI authentication
- operationId: initiate-oidc-device-auth
+ description: Built-in roles cannot be created via this endpoint; only custom roles are accepted. Reserved for global admins.
+ operationId: create-role
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/RoleCreateRole"
+ required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/AuthOidcDeviceAuthResponse'
+ $ref: "#/components/schemas/BaseApiResponseRole"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
- summary: Initiate OIDC device authorization
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Create a custom role
tags:
- - OIDC
- /oidc/device/token:
- post:
- description: Exchange a device code for authentication tokens
- operationId: exchange-oidc-device-token
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/AuthOidcDeviceTokenRequest'
- required: true
+ - Roles
+ /roles/available-permissions:
+ get:
+ description: Returns every permission the server recognizes, grouped by resource. Used by permission-picking UIs.
+ operationId: get-permissions-manifest
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/AuthOidcDeviceTokenResponse'
+ $ref: "#/components/schemas/BaseApiResponsePermissionsManifest"
description: OK
- headers:
- Set-Cookie:
+ default:
+ content:
+ application/problem+json:
schema:
- description: Session token cookie
- type: string
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Get the permission manifest
+ tags:
+ - Roles
+ /roles/{id}:
+ delete:
+ description: Built-in roles are protected; deleting cascades all user assignments. Reserved for global admins.
+ operationId: delete-role
+ parameters:
+ - description: Role ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Role ID
+ type: string
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
+ description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
- summary: Exchange device code for tokens
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Delete a custom role
tags:
- - OIDC
- /oidc/status:
+ - Roles
get:
- description: Get the current OIDC configuration status
- operationId: get-oidc-status
+ operationId: get-role
+ parameters:
+ - description: Role ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Role ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/AuthOidcStatusInfo'
+ $ref: "#/components/schemas/BaseApiResponseRole"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
- summary: Get OIDC status
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Get a role
tags:
- - OIDC
- /oidc/url:
- post:
- description: Generate an OIDC authorization URL for login
- operationId: get-oidc-auth-url
+ - Roles
+ put:
+ description: Built-in roles are read-only and return 403 on update. Reserved for global admins.
+ operationId: update-role
parameters:
- - in: header
- name: Origin
- schema:
- type: string
- - in: header
- name: X-Forwarded-Host
- schema:
- type: string
- - in: header
- name: X-Forwarded-Proto
- schema:
- type: string
- - in: header
- name: Host
- schema:
- type: string
+ - description: Role ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Role ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/AuthOidcAuthUrlRequest'
+ $ref: "#/components/schemas/RoleUpdateRole"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/AuthOidcAuthUrlResponse'
+ $ref: "#/components/schemas/BaseApiResponseRole"
description: OK
- headers:
- Set-Cookie:
- schema:
- description: OIDC state cookie
- type: string
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
- summary: Get OIDC auth URL
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Update a custom role
tags:
- - OIDC
+ - Roles
/settings/categories:
get:
description: Get all available settings categories with metadata
operationId: get-settings-categories
responses:
- '200':
+ "200":
content:
application/json:
schema:
items:
- $ref: '#/components/schemas/CategoryCategory'
+ $ref: "#/components/schemas/CategoryCategory"
type:
- - array
- - 'null'
+ - array
+ - "null"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get settings categories
tags:
- - Settings
+ - Settings
/settings/search:
post:
description: Search settings categories and individual settings by query
@@ -22160,111 +26443,118 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/SearchRequest'
+ $ref: "#/components/schemas/SearchRequest"
description: Search query
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/SearchResponse'
+ $ref: "#/components/schemas/SearchResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Search settings
tags:
- - Settings
+ - Settings
/swarm/node-identity:
get:
operationId: get-swarm-node-identity
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseSwarmNodeIdentity'
+ $ref: "#/components/schemas/BaseApiResponseSwarmNodeIdentity"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get local swarm node identity
tags:
- - Swarm
+ - Swarm
/templates:
get:
description: Get a paginated list of compose templates
operationId: listTemplatesPaginated
parameters:
- - description: Search query
- explode: false
- in: query
- name: search
- schema:
- description: Search query
- type: string
- - description: Column to sort by
- explode: false
- in: query
- name: sort
- schema:
- description: Column to sort by
- type: string
- - description: Sort direction
- explode: false
- in: query
- name: order
- schema:
- default: asc
- description: Sort direction
- type: string
- - description: Start index
- explode: false
- in: query
- name: start
- schema:
- default: 0
- description: Start index
- format: int64
- type: integer
- - description: Items per page
- explode: false
- in: query
- name: limit
- schema:
- default: 20
- description: Items per page
- format: int64
- type: integer
+ - description: Search query
+ explode: false
+ in: query
+ name: search
+ schema:
+ description: Search query
+ type: string
+ - description: Column to sort by
+ explode: false
+ in: query
+ name: sort
+ schema:
+ description: Column to sort by
+ type: string
+ - description: Sort direction
+ explode: false
+ in: query
+ name: order
+ schema:
+ default: asc
+ description: Sort direction
+ type: string
+ - description: Start index
+ explode: false
+ in: query
+ name: start
+ schema:
+ default: 0
+ description: Start index
+ format: int64
+ type: integer
+ - description: Items per page
+ explode: false
+ in: query
+ name: limit
+ schema:
+ default: 20
+ description: Items per page
+ format: int64
+ type: integer
+ - description: "Filter by template type (comma-separated: false,true)"
+ explode: false
+ in: query
+ name: type
+ schema:
+ description: "Filter by template type (comma-separated: false,true)"
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/TemplatePaginatedResponse'
+ $ref: "#/components/schemas/TemplatePaginatedResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
summary: List templates (paginated)
tags:
- - Templates
+ - Templates
post:
description: Create a new compose template
operationId: createTemplate
@@ -22272,70 +26562,70 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/TemplateCreateRequest'
+ $ref: "#/components/schemas/TemplateCreateRequest"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseTemplate'
+ $ref: "#/components/schemas/BaseApiResponseTemplate"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Create a template
tags:
- - Templates
+ - Templates
/templates/all:
get:
description: Get all compose templates without pagination
operationId: getAllTemplates
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseListTemplate'
+ $ref: "#/components/schemas/BaseApiResponseListTemplate"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
summary: List all templates
tags:
- - Templates
+ - Templates
/templates/default:
get:
description: Get the default compose and env templates
operationId: getDefaultTemplates
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseDefaultTemplatesResponse'
+ $ref: "#/components/schemas/BaseApiResponseDefaultTemplatesResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get default templates
tags:
- - Templates
+ - Templates
post:
description: Save the default compose and env templates
operationId: saveDefaultTemplates
@@ -22343,79 +26633,82 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/TemplateSaveDefaultTemplatesRequest'
+ $ref: "#/components/schemas/TemplateSaveDefaultTemplatesRequest"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Save default templates
tags:
- - Templates
+ - Templates
/templates/fetch:
get:
description: Fetch templates from a remote registry URL
operationId: fetchTemplateRegistry
parameters:
- - description: Registry URL
- explode: false
- in: query
- name: url
- required: true
- schema:
- description: Registry URL
- type: string
+ - description: Registry URL
+ explode: false
+ in: query
+ name: url
+ required: true
+ schema:
+ description: Registry URL
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseRemoteRegistry'
+ $ref: "#/components/schemas/BaseApiResponseRemoteRegistry"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Fetch remote registry
tags:
- - Templates
+ - Templates
/templates/registries:
get:
description: Get all template registries
operationId: getTemplateRegistries
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseListTemplateRegistry'
+ $ref: "#/components/schemas/BaseApiResponseListTemplateRegistry"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: List template registries
tags:
- - Templates
+ - Templates
post:
description: Create a new template registry
operationId: createTemplateRegistry
@@ -22423,311 +26716,311 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/TemplateCreateRegistryRequest'
+ $ref: "#/components/schemas/TemplateCreateRegistryRequest"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseTemplateRegistry'
+ $ref: "#/components/schemas/BaseApiResponseTemplateRegistry"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Create a template registry
tags:
- - Templates
+ - Templates
/templates/registries/{id}:
delete:
description: Delete a template registry
operationId: deleteTemplateRegistry
parameters:
- - description: Registry ID
- in: path
- name: id
- required: true
- schema:
- description: Registry ID
- type: string
+ - description: Registry ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Registry ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Delete a template registry
tags:
- - Templates
+ - Templates
put:
description: Update an existing template registry
operationId: updateTemplateRegistry
parameters:
- - description: Registry ID
- in: path
- name: id
- required: true
- schema:
- description: Registry ID
- type: string
+ - description: Registry ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Registry ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/TemplateUpdateRegistryRequest'
+ $ref: "#/components/schemas/TemplateUpdateRegistryRequest"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Update a template registry
tags:
- - Templates
+ - Templates
/templates/{id}:
delete:
description: Delete a compose template
operationId: deleteTemplate
parameters:
- - description: Template ID
- in: path
- name: id
- required: true
- schema:
- description: Template ID
- type: string
+ - description: Template ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Template ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Delete a template
tags:
- - Templates
+ - Templates
get:
description: Get a compose template by ID
operationId: getTemplate
parameters:
- - description: Template ID
- in: path
- name: id
- required: true
- schema:
- description: Template ID
- type: string
+ - description: Template ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Template ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseTemplate'
+ $ref: "#/components/schemas/BaseApiResponseTemplate"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
summary: Get a template
tags:
- - Templates
+ - Templates
put:
description: Update an existing compose template
operationId: updateTemplate
parameters:
- - description: Template ID
- in: path
- name: id
- required: true
- schema:
- description: Template ID
- type: string
+ - description: Template ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Template ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/TemplateUpdateRequest'
+ $ref: "#/components/schemas/TemplateUpdateRequest"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseTemplate'
+ $ref: "#/components/schemas/BaseApiResponseTemplate"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Update a template
tags:
- - Templates
+ - Templates
/templates/{id}/content:
get:
description: Get the compose content for a template with parsed data
operationId: getTemplateContent
parameters:
- - description: Template ID
- in: path
- name: id
- required: true
- schema:
- description: Template ID
- type: string
+ - description: Template ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Template ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseTemplateContent'
+ $ref: "#/components/schemas/BaseApiResponseTemplateContent"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
summary: Get template content
tags:
- - Templates
+ - Templates
/templates/{id}/download:
post:
description: Download a remote template to local storage
operationId: downloadTemplate
parameters:
- - description: Template ID
- in: path
- name: id
- required: true
- schema:
- description: Template ID
- type: string
+ - description: Template ID
+ in: path
+ name: id
+ required: true
+ schema:
+ description: Template ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseTemplate'
+ $ref: "#/components/schemas/BaseApiResponseTemplate"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Download a template
tags:
- - Templates
+ - Templates
/users:
get:
description: Get a paginated list of all users
operationId: listUsers
parameters:
- - description: Search query
- explode: false
- in: query
- name: search
- schema:
- description: Search query
- type: string
- - description: Column to sort by
- explode: false
- in: query
- name: sort
- schema:
- description: Column to sort by
- type: string
- - description: Sort direction
- explode: false
- in: query
- name: order
- schema:
- default: asc
- description: Sort direction
- type: string
- - description: Start index
- explode: false
- in: query
- name: start
- schema:
- default: 0
- description: Start index
- format: int64
- type: integer
- - description: Items per page
- explode: false
- in: query
- name: limit
- schema:
- default: 20
- description: Items per page
- format: int64
- type: integer
- responses:
- '200':
+ - description: Search query
+ explode: false
+ in: query
+ name: search
+ schema:
+ description: Search query
+ type: string
+ - description: Column to sort by
+ explode: false
+ in: query
+ name: sort
+ schema:
+ description: Column to sort by
+ type: string
+ - description: Sort direction
+ explode: false
+ in: query
+ name: order
+ schema:
+ default: asc
+ description: Sort direction
+ type: string
+ - description: Start index
+ explode: false
+ in: query
+ name: start
+ schema:
+ default: 0
+ description: Start index
+ format: int64
+ type: integer
+ - description: Items per page
+ explode: false
+ in: query
+ name: limit
+ schema:
+ default: 20
+ description: Items per page
+ format: int64
+ type: integer
+ responses:
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/UserPaginatedResponse'
+ $ref: "#/components/schemas/UserPaginatedResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: List users
tags:
- - Users
+ - Users
post:
description: Create a new user account
operationId: createUser
@@ -22735,151 +27028,262 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/UserCreateUser'
+ $ref: "#/components/schemas/UserCreateUser"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseUser'
+ $ref: "#/components/schemas/BaseApiResponseUser"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Create a user
tags:
- - Users
+ - Users
/users/{userId}:
delete:
description: Delete a user by ID
operationId: deleteUser
parameters:
- - description: User ID
- in: path
- name: userId
- required: true
- schema:
- description: User ID
- type: string
+ - description: User ID
+ in: path
+ name: userId
+ required: true
+ schema:
+ description: User ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseMessageResponse'
+ $ref: "#/components/schemas/BaseApiResponseMessageResponse"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Delete a user
tags:
- - Users
+ - Users
get:
description: Get a user by ID
operationId: getUser
parameters:
- - description: User ID
- in: path
- name: userId
- required: true
- schema:
- description: User ID
- type: string
+ - description: User ID
+ in: path
+ name: userId
+ required: true
+ schema:
+ description: User ID
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseUser'
+ $ref: "#/components/schemas/BaseApiResponseUser"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Get a user
tags:
- - Users
+ - Users
put:
description: Update an existing user's information
operationId: updateUser
parameters:
- - description: User ID
- in: path
- name: userId
- required: true
- schema:
- description: User ID
- type: string
+ - description: User ID
+ in: path
+ name: userId
+ required: true
+ schema:
+ description: User ID
+ type: string
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/UserUpdateUser'
+ $ref: "#/components/schemas/UserUpdateUser"
required: true
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/BaseApiResponseUser'
+ $ref: "#/components/schemas/BaseApiResponseUser"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
security:
- - BearerAuth: []
- - ApiKeyAuth: []
+ - BearerAuth: []
+ - ApiKeyAuth: []
summary: Update a user
tags:
- - Users
+ - Users
+ /users/{userId}/avatar:
+ get:
+ description: Get the custom profile picture for a user
+ operationId: getUserAvatar
+ parameters:
+ - description: User ID
+ in: path
+ name: userId
+ required: true
+ schema:
+ description: User ID
+ type: string
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ contentEncoding: base64
+ type: string
+ description: OK
+ headers:
+ Cache-Control:
+ schema:
+ type: string
+ Content-Type:
+ schema:
+ type: string
+ X-Content-Type-Options:
+ schema:
+ type: string
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security: []
+ summary: Get user avatar
+ tags:
+ - Users
+ /users/{userId}/role-assignments:
+ get:
+ description: Reserved for global admins.
+ operationId: list-user-role-assignments
+ parameters:
+ - description: User ID
+ in: path
+ name: userId
+ required: true
+ schema:
+ description: User ID
+ type: string
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BaseApiResponseListRoleAssignment"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: List a user's role assignments
+ tags:
+ - Roles
+ put:
+ description: Replaces every source='manual' assignment for the user. source='oidc' assignments are not touched. Reserved for global admins; enforces the last-admin guard.
+ operationId: set-user-role-assignments
+ parameters:
+ - description: User ID
+ in: path
+ name: userId
+ required: true
+ schema:
+ description: User ID
+ type: string
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/RoleSetUserAssignments"
+ required: true
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BaseApiResponseListRoleAssignment"
+ description: OK
+ default:
+ content:
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ description: Error
+ security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
+ summary: Replace a user's manual role assignments
+ tags:
+ - Roles
/version:
get:
description: Get application version information and check for updates
operationId: getVersion
parameters:
- - description: Current version to compare against
- explode: false
- in: query
- name: current
- schema:
- description: Current version to compare against
- type: string
+ - description: Current version to compare against
+ explode: false
+ in: query
+ name: current
+ schema:
+ description: Current version to compare against
+ type: string
responses:
- '200':
+ "200":
content:
application/json:
schema:
- $ref: '#/components/schemas/VersionCheck'
+ $ref: "#/components/schemas/VersionCheck"
description: OK
default:
content:
application/problem+json:
schema:
- $ref: '#/components/schemas/ErrorModel'
+ $ref: "#/components/schemas/ErrorModel"
description: Error
+ security: []
summary: Get version information
tags:
- - Version
+ - Version
+security:
+ - BearerAuth: []
+ - ApiKeyAuth: []
servers:
-- url: https://arcane.randomsynergy.xyz:3552/api
+ - url: https://arcane.randomsynergy.xyz:3552/api
diff --git a/commands/configure.md b/commands/configure.md
index 2bc430b..76f8e4d 100644
--- a/commands/configure.md
+++ b/commands/configure.md
@@ -42,7 +42,7 @@ Use this slash command to trim which Arcane MCP tools are exposed to Claude Code
- `full` — every tool
- `commonly-used` — every tool whose `module ∈ {container, image, project, volume, network}`
- `deploy` — every tool whose `module ∈ {project, gitops, template, registry, environment, build}`
- - `minimal` — `arcane_dashboard_get`, `arcane_dashboard_get_action_items`, `arcane_container_list`, `arcane_container_get`, `arcane_container_get_counts`
+ - `minimal` — `arcane_dashboard_get`, `arcane_container_list`, `arcane_container_get`, `arcane_container_get_counts`
- `read-only` — every tool whose `name` ends with `_list`, `_get`, `_inspect`, `_stats`, `_counts`, `_check`, `_search`, `_status`, `_summary` (or contains `_list_`, `_get_`)
- `custom` — start from every tool (modules/enabled/disabled do the narrowing)
- `added` = `proposed − current`; `removed` = `current − proposed`.
diff --git a/package-lock.json b/package-lock.json
index 2beb13a..07a68f0 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,16 +1,17 @@
{
"name": "@randomsynergy/arcane-mcp-server",
- "version": "2.1.0",
+ "version": "3.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@randomsynergy/arcane-mcp-server",
- "version": "2.1.0",
+ "version": "3.0.0",
"license": "MIT",
"dependencies": {
"@modelcontextprotocol/sdk": "^1.12.0",
"express": "^4.21.2",
+ "ws": "^8.21.0",
"zod": "^3.24.0"
},
"bin": {
@@ -19,6 +20,7 @@
"devDependencies": {
"@types/express": "^4.17.21",
"@types/node": "^20.11.0",
+ "@types/ws": "^8.18.1",
"openapi-typescript": "^7.4.0",
"tsx": "^4.19.0",
"typescript": "^5.5.0",
@@ -1399,6 +1401,16 @@
"@types/node": "*"
}
},
+ "node_modules/@types/ws": {
+ "version": "8.18.1",
+ "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz",
+ "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
"node_modules/@vitest/expect": {
"version": "2.1.9",
"resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.9.tgz",
@@ -3955,6 +3967,27 @@
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
"license": "ISC"
},
+ "node_modules/ws": {
+ "version": "8.21.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz",
+ "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
"node_modules/yaml-ast-parser": {
"version": "0.0.43",
"resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz",
diff --git a/package.json b/package.json
index 4c7347a..ed65368 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@randomsynergy/arcane-mcp-server",
- "version": "2.1.0",
+ "version": "3.0.0",
"description": "MCP Server for Arcane Docker Management API - Modern Docker Management for AI Assistants",
"type": "module",
"main": "dist/index.js",
@@ -55,11 +55,13 @@
"dependencies": {
"@modelcontextprotocol/sdk": "^1.12.0",
"express": "^4.21.2",
+ "ws": "^8.21.0",
"zod": "^3.24.0"
},
"devDependencies": {
"@types/express": "^4.17.21",
"@types/node": "^20.11.0",
+ "@types/ws": "^8.18.1",
"openapi-typescript": "^7.4.0",
"tsx": "^4.19.0",
"typescript": "^5.5.0",
diff --git a/scripts/live-smoke.mjs b/scripts/live-smoke.mjs
new file mode 100644
index 0000000..b8cb691
--- /dev/null
+++ b/scripts/live-smoke.mjs
@@ -0,0 +1,166 @@
+#!/usr/bin/env node
+/**
+ * Live smoke test: runs every read-only tool against a real Arcane instance
+ * and flags rendering bugs (undefined, [object Object], NaN, Invalid Date)
+ * plus tool errors.
+ *
+ * Usage:
+ * npm run build
+ * ARCANE_BASE_URL=… ARCANE_API_KEY=… node scripts/live-smoke.mjs [environmentId]
+ *
+ * Only tools with readOnlyHint (minus explicit exclusions that trigger
+ * server-side work) are invoked. Tools whose required params cannot be
+ * resolved from live data are reported as SKIPPED.
+ */
+
+const { registerAllTools } = await import("../dist/tools/index.js");
+const { getArcaneClient } = await import("../dist/client/arcane-client.js");
+
+// Read-only by annotation, but they kick off server-side background work
+const EXCLUDE = new Set([
+ "arcane_image_update_check_all",
+ "arcane_image_check_updates_all",
+]);
+
+// Patterns that indicate a rendering bug in the tool output
+const BAD_PATTERNS = [/\bundefined\b/, /\[object Object\]/, /\bNaN\b/, /Invalid Date/, /Invalid time/];
+
+const tools = new Map();
+const fakeServer = {
+ registerTool(name, config, handler) {
+ tools.set(name, { config, handler });
+ return { enabled: true, enable() {}, disable() {}, remove() {}, update() {} };
+ },
+ sendToolListChanged() {},
+};
+
+registerAllTools(fakeServer, { preset: "full" });
+
+const client = getArcaneClient();
+const envId = process.argv[2] || "0";
+
+// ---- Discover real IDs to fill tool params with ----
+async function tryGet(path, params) {
+ try {
+ return await client.get(path, params);
+ } catch {
+ return undefined;
+ }
+}
+
+const containers = (await tryGet(`/environments/${envId}/containers`, { limit: 5 }))?.data || [];
+const images = (await tryGet(`/environments/${envId}/images`, { limit: 5 }))?.data || [];
+const projects = (await tryGet(`/environments/${envId}/projects`, { limit: 5 }))?.data || [];
+const volumes = (await tryGet(`/environments/${envId}/volumes`, { limit: 5 }))?.data || [];
+const networks = (await tryGet(`/environments/${envId}/networks`, { limit: 5 }))?.data || [];
+const activities = (await tryGet(`/environments/${envId}/activities`, { limit: 5 }))?.data || [];
+const events = (await tryGet(`/events`, { limit: 5 }))?.data || [];
+const users = (await tryGet(`/users`, { limit: 5 }))?.data || [];
+const templates = (await tryGet(`/templates`, { limit: 5 }))?.data || [];
+const registries = (await tryGet(`/container-registries`, { limit: 5 }))?.data || [];
+const gitRepos = (await tryGet(`/customize/git-repositories`, { limit: 5 }))?.data || [];
+const gitopsSyncs = (await tryGet(`/environments/${envId}/gitops-syncs`, { limit: 5 }))?.data || [];
+const webhooks = (await tryGet(`/environments/${envId}/webhooks`, { limit: 5 }))?.data || [];
+const jobs = (await tryGet(`/environments/${envId}/jobs`, { limit: 5 }))?.data || [];
+const swarmServices = (await tryGet(`/environments/${envId}/swarm/services`, { limit: 5 }))?.data || [];
+const backups = volumes[0]
+ ? (await tryGet(`/environments/${envId}/volumes/${volumes[0].name}/backups`))?.data || []
+ : [];
+
+const PARAM_VALUES = {
+ environmentId: envId,
+ containerId: containers[0]?.id,
+ imageId: images[0]?.id,
+ imageRef: images.find((i) => i.repoTags?.length)?.repoTags?.[0],
+ imageRefs: images.filter((i) => i.repoTags?.length).slice(0, 2).map((i) => i.repoTags[0]),
+ imageIds: images.slice(0, 2).map((i) => i.id),
+ image: images.find((i) => i.repoTags?.length)?.repoTags?.[0],
+ projectId: projects[0]?.id,
+ volumeName: volumes[0]?.name,
+ networkId: networks[0]?.id,
+ activityId: activities[0]?.id,
+ eventId: events[0]?.id,
+ userId: users[0]?.id,
+ templateId: templates[0]?.id,
+ registryId: registries[0]?.id,
+ repositoryId: gitRepos[0]?.id,
+ syncId: gitopsSyncs[0]?.id,
+ webhookId: webhooks[0]?.id,
+ jobId: jobs[0]?.id,
+ serviceId: swarmServices[0]?.id,
+ backupId: backups[0]?.id,
+ vulnerabilityId: undefined,
+ ignoreId: undefined,
+ buildId: undefined,
+ keyId: undefined,
+ path: "/",
+ query: "docker",
+};
+
+function fillParams(zodShape) {
+ const params = {};
+ for (const [key, schema] of Object.entries(zodShape || {})) {
+ const optional = schema.isOptional?.() ?? false;
+ if (key in PARAM_VALUES) {
+ if (PARAM_VALUES[key] === undefined && !optional) return { missing: key };
+ if (PARAM_VALUES[key] !== undefined) params[key] = PARAM_VALUES[key];
+ } else if (!optional) {
+ return { missing: key };
+ }
+ }
+ return { params };
+}
+
+// ---- Run ----
+let pass = 0, fail = 0, skip = 0;
+const failures = [];
+
+for (const [name, { config, handler }] of tools) {
+ if (!config.annotations?.readOnlyHint || EXCLUDE.has(name)) continue;
+
+ const filled = fillParams(config.inputSchema);
+ if (filled.missing) {
+ skip++;
+ console.log(`SKIP ${name} (no value for required param "${filled.missing}")`);
+ continue;
+ }
+
+ try {
+ const result = await handler(filled.params);
+ const text = (result.content || []).map((c) => c.text).join("\n");
+ if (result.isError) {
+ // 403 = the API key lacks the permission — not a rendering bug
+ if (/HTTP 403/.test(text)) {
+ skip++;
+ console.log(`SKIP ${name} (API key lacks permission)`);
+ continue;
+ }
+ fail++;
+ failures.push([name, `tool error: ${text.substring(0, 200)}`]);
+ console.log(`FAIL ${name} — ${text.substring(0, 120).replace(/\n/g, " | ")}`);
+ continue;
+ }
+ const bad = BAD_PATTERNS.filter((p) => p.test(text));
+ if (bad.length > 0) {
+ fail++;
+ const badLines = text.split("\n").filter((l) => bad.some((p) => p.test(l))).slice(0, 3);
+ failures.push([name, badLines.join(" | ")]);
+ console.log(`FAIL ${name} — ${bad.map(String).join(",")}\n ${badLines.join("\n ")}`);
+ } else {
+ pass++;
+ console.log(`ok ${name}`);
+ }
+ } catch (error) {
+ fail++;
+ const msg = error instanceof Error ? error.message : String(error);
+ failures.push([name, `threw: ${msg}`]);
+ console.log(`FAIL ${name} — threw: ${msg.substring(0, 150)}`);
+ }
+}
+
+console.log(`\n${pass} ok, ${fail} failed, ${skip} skipped`);
+if (failures.length) {
+ console.log("\nFailures:");
+ for (const [n, why] of failures) console.log(` - ${n}: ${why}`);
+ process.exit(1);
+}
diff --git a/skills/arcane-mcp-server/SKILL.md b/skills/arcane-mcp-server/SKILL.md
index 4d2ef37..a498763 100644
--- a/skills/arcane-mcp-server/SKILL.md
+++ b/skills/arcane-mcp-server/SKILL.md
@@ -1,7 +1,7 @@
---
name: arcane-mcp-server
description: >
- Manages Docker infrastructure via 180+ Arcane MCP tools. Use when
+ Manages Docker infrastructure via 170+ Arcane MCP tools. Use when
working with Docker containers, images, volumes, networks, stacks,
Compose projects, Swarm services, registries, or environments.
Covers deployment, rollback, troubleshooting, cleanup, GitOps sync,
@@ -12,7 +12,7 @@ compatibility: Requires the Arcane MCP server running and a configured Arcane Do
# Arcane Docker Management
-Guides effective use of the Arcane MCP server's 180+ tools for Docker infrastructure management. This skill activates when users ask about Docker operations and `arcane_*` tools are available.
+Guides effective use of the Arcane MCP server's 170+ tools for Docker infrastructure management. This skill activates when users ask about Docker operations and `arcane_*` tools are available.
**Announce:** "Using the arcane-mcp-server skill to guide this Docker operation."
@@ -32,10 +32,11 @@ When the user says something general, map it to the right tool sequence:
| User says | Tools to use |
|-----------|-------------|
| "What's running?" / "Show me my containers" | `arcane_container_list` |
-| "How's everything looking?" / "Status" | `arcane_dashboard_get` then `arcane_dashboard_get_action_items` |
+| "How's everything looking?" / "Status" | `arcane_dashboard_get` |
| "Deploy this compose file" | `arcane_project_create` then `arcane_project_up` |
-| "Update everything" | `arcane_image_update_check_all` then `arcane_updater_run` (with `dryRun: true` first) |
-| "What needs attention?" | `arcane_dashboard_get_action_items` |
+| "Update everything" / "Update this stack" | `arcane_project_list` with `updates: "has_update"`, then `arcane_project_update_services` per project (needs only `projects:update`) |
+| "Which projects/stacks have updates?" | `arcane_project_list` with `updates: "has_update"` — shows exactly which image refs are outdated. Do NOT check images one by one |
+| "What needs attention?" | `arcane_dashboard_get` then `arcane_event_list` (severity filter) |
| "Is anything vulnerable?" | `arcane_vulnerability_get_environment_summary` |
| "Set up a new stack" | `arcane_project_create` with compose YAML |
| "Scale this up" | `arcane_swarm_scale_service` (swarm) or redeploy with updated config (compose) |
@@ -73,11 +74,12 @@ If a deployment goes wrong:
When something is broken, investigate systematically:
-1. **Dashboard first** — `arcane_dashboard_get` + `arcane_dashboard_get_action_items`
+1. **Dashboard first** — `arcane_dashboard_get`
2. **Container state** — `arcane_container_list` to find stopped/unhealthy containers
3. **Container detail** — `arcane_container_get` on the suspect container
-4. **Port conflicts** — `arcane_port_list` if networking issues suspected
-5. **Vulnerability check** — `arcane_vulnerability_get_environment_summary` if security related
+4. **Logs** — `arcane_container_get_logs` (or `arcane_project_get_logs` for a whole stack); to follow live, call again with `since` set to the newest timestamp
+5. **Port conflicts** — `arcane_port_list` if networking issues suspected
+6. **Vulnerability check** — `arcane_vulnerability_get_environment_summary` if security related
### Cleanup
@@ -106,17 +108,22 @@ For Docker Swarm clusters:
2. **Deploy services** — `arcane_swarm_create_service` with replicas, ports, networks
3. **Scale** — `arcane_swarm_scale_service` to adjust replica count
4. **Monitor** — `arcane_swarm_list_services` + `arcane_swarm_get_service` for task status
-5. **Logs** — `arcane_swarm_get_service_logs` for debugging
+5. **Logs** — `arcane_swarm_get_service_logs` for debugging (incremental via `since`)
-### Auto-Update Management
+### Update Overview & Auto-Update Management
-Set up hands-off container updates:
+To see what has pending updates, use the cached results — do not check images individually:
-1. `arcane_updater_get_status` — check current schedule
-2. `arcane_container_set_auto_update` — enable per-container
-3. `arcane_updater_run` with `dryRun: true` — preview what would update
-4. `arcane_updater_run` — execute updates
-5. `arcane_updater_get_history` — review what was updated
+1. `arcane_project_list` with `updates: "has_update"` — compose projects with outdated images (lists the exact image refs)
+2. `arcane_image_update_get_summary` — environment-wide counts
+3. `arcane_image_update_check_all` — refresh the cache in the background if results are stale (track via `arcane_activity_list`)
+
+Then update:
+
+1. `arcane_project_update_services` — the dedicated per-project update (pull + recreate; runs in the background, track via `arcane_activity_list`). Preferred for compose projects — needs only the `projects:update` permission, unlike pull/redeploy (`projects:deploy`)
+2. Alternatively `arcane_updater_run` with `dryRun: true` first, then for real (optionally scoped via `resourceIds`)
+3. `arcane_updater_get_history` — review what was updated
+4. `arcane_container_set_auto_update` — enable hands-off updates per container
## Safety Rules
diff --git a/src/__tests__/integration/tool-filtering.test.ts b/src/__tests__/integration/tool-filtering.test.ts
index 358b817..25438be 100644
--- a/src/__tests__/integration/tool-filtering.test.ts
+++ b/src/__tests__/integration/tool-filtering.test.ts
@@ -59,7 +59,7 @@ describe("integration: boot-per-preset", () => {
expect(enabled).toBe(registry.allToolNames().length);
expect(disabled).toBe(0);
// And the registry captured the full module inventory
- expect(registry.allModules().length).toBe(25);
+ expect(registry.allModules().length).toBe(26);
});
it("undefined config falls back to full (backwards-compatible)", () => {
@@ -79,7 +79,6 @@ describe("integration: boot-per-preset", () => {
"arcane_container_get_counts",
"arcane_container_list",
"arcane_dashboard_get",
- "arcane_dashboard_get_action_items",
]);
});
@@ -202,7 +201,7 @@ describe("integration: hot reload cycle", () => {
writeFileSync(tmpFile, JSON.stringify({ tools: { preset: "minimal" } }));
// Wait for the watcher to debounce + apply
- await waitFor(() => countEnabled(registry).enabled === 5);
+ await waitFor(() => countEnabled(registry).enabled === 4);
const { enabledNames } = countEnabled(registry);
expect(enabledNames.sort()).toEqual([
@@ -210,7 +209,6 @@ describe("integration: hot reload cycle", () => {
"arcane_container_get_counts",
"arcane_container_list",
"arcane_dashboard_get",
- "arcane_dashboard_get_action_items",
]);
} finally {
watcher.stop();
diff --git a/src/auth/auth-manager.ts b/src/auth/auth-manager.ts
index 66b32f8..29fe925 100644
--- a/src/auth/auth-manager.ts
+++ b/src/auth/auth-manager.ts
@@ -29,6 +29,14 @@ interface RefreshResponse {
expiresAt: string;
}
+/** Auth endpoints wrap their payload in `{ success, data }` — unwrap if present. */
+function unwrapAuthResponse(json: unknown): T {
+ if (json && typeof json === "object" && "data" in json && (json as { data?: unknown }).data) {
+ return (json as { data: T }).data;
+ }
+ return json as T;
+}
+
export class AuthManager {
private apiKey?: string;
private jwtTokens?: JwtTokens;
@@ -126,7 +134,7 @@ export class AuthManager {
throw new Error(`Login failed: ${response.status} ${error}`);
}
- const data = await response.json() as LoginResponse;
+ const data = unwrapAuthResponse(await response.json());
this.jwtTokens = {
accessToken: data.token,
@@ -180,7 +188,7 @@ export class AuthManager {
throw new Error(`Token refresh failed: ${response.status} ${error}`);
}
- const data = await response.json() as RefreshResponse;
+ const data = unwrapAuthResponse(await response.json());
this.jwtTokens = {
accessToken: data.token,
diff --git a/src/client/arcane-client.ts b/src/client/arcane-client.ts
index 4cc9072..8280ca3 100644
--- a/src/client/arcane-client.ts
+++ b/src/client/arcane-client.ts
@@ -11,6 +11,9 @@ import {
RETRY_BASE_DELAY_MS,
MAX_RESPONSE_SIZE,
RETRYABLE_STATUS_CODES,
+ BACKGROUND_REQUEST_TIMEOUT_MS,
+ LOG_STREAM_IDLE_TIMEOUT_MS,
+ LOG_STREAM_MAX_DURATION_MS,
} from "../constants.js";
export interface RequestOptions {
@@ -30,9 +33,10 @@ export interface PaginatedResponse {
success: boolean;
data: T[];
pagination: {
- total: number;
- start: number;
- limit: number;
+ totalItems: number;
+ totalPages: number;
+ currentPage: number;
+ itemsPerPage: number;
};
}
@@ -255,8 +259,130 @@ export class ArcaneClient {
/**
* DELETE request
*/
- async delete(path: string, params?: Record): Promise {
- return this.request(path, { method: "DELETE", params });
+ async delete(path: string, params?: Record, body?: unknown): Promise {
+ return this.request(path, { method: "DELETE", params, body });
+ }
+
+ /**
+ * POST a single file as multipart/form-data (e.g. build workspace uploads).
+ */
+ async postMultipart(
+ path: string,
+ params: Record | undefined,
+ fileName: string,
+ content: string
+ ): Promise {
+ const url = this.buildUrl(`/api${path}`, params);
+ const authHeaders = await this.authManager.getAuthHeaders();
+
+ const form = new FormData();
+ form.append("file", new Blob([content]), fileName);
+
+ // Content-Type (with boundary) is set by fetch from the FormData body
+ const response = await fetch(url, {
+ method: "POST",
+ headers: { Accept: "application/json", ...authHeaders },
+ body: form,
+ });
+
+ if (!response.ok) {
+ throw await parseApiError(response, path);
+ }
+
+ const text = await response.text();
+ return (text ? JSON.parse(text) : undefined) as T;
+ }
+
+ /**
+ * Fetch log lines from one of Arcane's WebSocket log endpoints.
+ *
+ * Connects with follow=false so the server sends the requested backlog;
+ * collection ends when the server closes, no line arrives for
+ * LOG_STREAM_IDLE_TIMEOUT_MS, the hard duration cap hits, or maxLines
+ * is reached (whichever comes first).
+ */
+ async fetchLogs(
+ path: string,
+ params: Record,
+ maxLines: number
+ ): Promise<{ lines: string[]; truncated: boolean }> {
+ const { default: WebSocket } = await import("ws");
+
+ const url = this.buildUrl(`/api${path}`, params).replace(/^http/, "ws");
+ const authHeaders = await this.authManager.getAuthHeaders();
+
+ return new Promise((resolve, reject) => {
+ const lines: string[] = [];
+ let truncated = false;
+ let settled = false;
+ let idleTimer: NodeJS.Timeout | undefined;
+
+ const ws = new WebSocket(url, {
+ headers: authHeaders,
+ rejectUnauthorized: !this.config.skipSslVerify,
+ });
+
+ const finish = () => {
+ if (settled) return;
+ settled = true;
+ clearTimeout(idleTimer);
+ clearTimeout(maxTimer);
+ try {
+ ws.terminate();
+ } catch {
+ // already closed
+ }
+ resolve({ lines, truncated });
+ };
+
+ const resetIdle = () => {
+ clearTimeout(idleTimer);
+ idleTimer = setTimeout(finish, LOG_STREAM_IDLE_TIMEOUT_MS);
+ };
+
+ const maxTimer = setTimeout(finish, LOG_STREAM_MAX_DURATION_MS);
+
+ ws.on("open", resetIdle);
+ ws.on("message", (data: Buffer | string) => {
+ for (const raw of data.toString().split("\n")) {
+ // Strip trailing CR and ANSI color codes (compose/agent logs are colored)
+ const line = raw.replace(/\r$/, "").replace(/\x1b\[[0-9;]*m/g, "");
+ if (!line) continue;
+ if (lines.length >= maxLines) {
+ truncated = true;
+ finish();
+ return;
+ }
+ lines.push(line);
+ }
+ resetIdle();
+ });
+ ws.on("close", finish);
+ ws.on("error", (error: Error) => {
+ if (settled) return;
+ if (lines.length > 0) {
+ finish();
+ return;
+ }
+ settled = true;
+ clearTimeout(idleTimer);
+ clearTimeout(maxTimer);
+ reject(new NetworkError(`Log stream failed: ${error.message}`));
+ });
+ });
+ }
+
+ /**
+ * Fire a long-running POST without awaiting its completion.
+ * Uses a generous timeout so the built-in timeout retry never re-triggers
+ * the operation on the server (e.g. duplicate image-update checks).
+ * Errors are logged instead of thrown — callers respond immediately.
+ */
+ postInBackground(path: string, body?: unknown): void {
+ this.request(path, { method: "POST", body, timeout: BACKGROUND_REQUEST_TIMEOUT_MS }).catch((error) => {
+ const message = error instanceof Error ? error.message : String(error);
+ logger.warn(`Background request POST ${path} failed: ${message}`);
+ });
}
/**
diff --git a/src/constants.ts b/src/constants.ts
index 7ead50d..f2877a2 100644
--- a/src/constants.ts
+++ b/src/constants.ts
@@ -10,6 +10,21 @@ export const TOKEN_REFRESH_BUFFER_MS = 60 * 1000;
/** Default HTTP request timeout */
export const DEFAULT_REQUEST_TIMEOUT_MS = 30000;
+/** Timeout for fire-and-forget background requests (long-running server-side operations) */
+export const BACKGROUND_REQUEST_TIMEOUT_MS = 10 * 60 * 1000;
+
+/** Log streaming (WebSocket): stop collecting when no new line arrived for this long */
+export const LOG_STREAM_IDLE_TIMEOUT_MS = 2000;
+
+/** Log streaming (WebSocket): hard cap on how long a single fetch may run */
+export const LOG_STREAM_MAX_DURATION_MS = 15000;
+
+/** Log streaming: default number of backlog lines to request */
+export const DEFAULT_LOG_TAIL = 100;
+
+/** Log streaming: hard cap on returned lines per call (protects the context window) */
+export const MAX_LOG_LINES = 500;
+
/** Session timeout - 30 minutes of inactivity */
export const SESSION_TIMEOUT_MS = 30 * 60 * 1000;
diff --git a/src/prompts/__tests__/prompts.test.ts b/src/prompts/__tests__/prompts.test.ts
index e199924..277d8c0 100644
--- a/src/prompts/__tests__/prompts.test.ts
+++ b/src/prompts/__tests__/prompts.test.ts
@@ -143,7 +143,7 @@ describe("prompts", () => {
const text = result.messages[0].content.text;
expect(text).toContain("my-app");
expect(text).toContain("arcane_container_get");
- expect(text).toContain("arcane_dashboard_get_action_items");
+ expect(text).toContain("arcane_dashboard_get");
expect(text).toContain("arcane_image_update_check_by_id");
});
});
diff --git a/src/prompts/index.ts b/src/prompts/index.ts
index 3eeefd6..f78cf7d 100644
--- a/src/prompts/index.ts
+++ b/src/prompts/index.ts
@@ -70,7 +70,7 @@ export function registerPrompts(server: McpServer): void {
"",
"Follow this systematic diagnostic workflow using Arcane tools:",
"1. Use arcane_container_get to check the container's current state, config, and labels.",
- "2. Use arcane_dashboard_get_action_items to see if there are known issues flagged.",
+ "2. Use arcane_dashboard_get for an overview of the environment (unhealthy containers, pending updates).",
"3. Check if the container is part of a project with arcane_project_list, then arcane_project_get for service-level status.",
"4. Use arcane_image_update_check_by_id to see if the image is outdated.",
"5. Use arcane_port_list to check for port conflicts across the environment.",
diff --git a/src/tools/__tests__/container-tools.test.ts b/src/tools/__tests__/container-tools.test.ts
index f5222b4..1b75b93 100644
--- a/src/tools/__tests__/container-tools.test.ts
+++ b/src/tools/__tests__/container-tools.test.ts
@@ -73,24 +73,24 @@ describe("container-tools", () => {
data: [
{
id: "abc123def456ghi789",
- name: "my-app",
+ names: ["/my-app"],
image: "nginx:latest",
status: "Up 2 hours",
state: "running",
- created: "2024-01-01T00:00:00Z",
+ created: 1704067200,
ports: [{ privatePort: 80, publicPort: 8080, type: "tcp" }],
},
{
id: "xyz987wvu654tsr321",
- name: "my-db",
+ names: ["/my-db"],
image: "postgres:16",
status: "Exited (0) 1 hour ago",
state: "stopped",
- created: "2024-01-01T00:00:00Z",
+ created: 1704067200,
ports: [],
},
],
- pagination: { total: 2, start: 0, limit: 20 },
+ pagination: { totalItems: 2, totalPages: 1, currentPage: 1, itemsPerPage: 20 },
});
const handler = server.tools.get("arcane_container_list")!;
@@ -114,7 +114,7 @@ describe("container-tools", () => {
it("returns 'No containers found' when empty", async () => {
mockClient.get.mockResolvedValueOnce({
data: [],
- pagination: { total: 0, start: 0, limit: 20 },
+ pagination: { totalItems: 0, totalPages: 0, currentPage: 1, itemsPerPage: 20 },
});
const handler = server.tools.get("arcane_container_list")!;
@@ -135,10 +135,9 @@ describe("container-tools", () => {
mockClient.get.mockResolvedValueOnce({
data: {
id: "abc123def456ghi789",
- name: "my-app",
+ name: "/my-app",
image: "nginx:latest",
- state: "running",
- status: "Up 2 hours",
+ state: { status: "running", running: true, health: { status: "healthy" } },
created: "2024-01-01T00:00:00Z",
ports: [{ privatePort: 80, publicPort: 8080, type: "tcp" }],
labels: { "com.docker.compose.project": "myproject" },
@@ -153,7 +152,7 @@ describe("container-tools", () => {
const text = result.content[0].text;
expect(text).toContain("Container: my-app");
- expect(text).toContain("State: running");
+ expect(text).toContain("State: running (healthy)");
expect(text).toContain("8080:80/tcp");
expect(text).toContain("com.docker.compose.project: myproject");
});
diff --git a/src/tools/__tests__/dashboard-tools.test.ts b/src/tools/__tests__/dashboard-tools.test.ts
index 13e37c4..fd0080c 100644
--- a/src/tools/__tests__/dashboard-tools.test.ts
+++ b/src/tools/__tests__/dashboard-tools.test.ts
@@ -57,27 +57,21 @@ describe("dashboard-tools", () => {
registerDashboardTools(server as unknown as Parameters[0]);
});
- it("registers both dashboard tools", () => {
+ it("registers the dashboard tool", () => {
expect(server.tools.has("arcane_dashboard_get")).toBe(true);
- expect(server.tools.has("arcane_dashboard_get_action_items")).toBe(true);
- expect(server.tools.size).toBe(2);
+ expect(server.tools.size).toBe(1);
});
describe("arcane_dashboard_get", () => {
- it("returns snapshot with container/project/image counts", async () => {
+ it("returns snapshot with container/image counts and action items", async () => {
mockClient.get.mockResolvedValueOnce({
data: {
- containers: { total: 10, running: 7, stopped: 3 },
- projects: { total: 4, running: 3, stopped: 1 },
- images: { total: 15, updatesAvailable: 2 },
- volumes: { total: 8, totalSize: "12.5 GB" },
- networks: { total: 5 },
- systemInfo: {
- dockerVersion: "24.0.7",
- osType: "linux",
- cpus: 4,
- memoryBytes: 8e9,
+ containers: {
+ counts: { totalContainers: 10, runningContainers: 7, stoppedContainers: 3 },
},
+ imageUsageCounts: { totalImages: 15, totalImageSize: 5e9, imagesInuse: 12, imagesUnused: 3 },
+ actionItems: { items: [{ kind: "image_updates", severity: "info", count: 2 }] },
+ versionInfo: { currentVersion: "v2.3.2", newestVersion: "v2.4.0" },
},
});
@@ -86,24 +80,19 @@ describe("dashboard-tools", () => {
const text = result.content[0].text;
expect(text).toContain("Containers: 10 total (7 running, 3 stopped)");
- expect(text).toContain("Projects: 4 total (3 running, 1 stopped)");
- expect(text).toContain("Images: 15 total (2 updates available)");
- expect(text).toContain("Volumes: 8 (12.5 GB)");
- expect(text).toContain("Networks: 5");
- expect(text).toContain("Docker: 24.0.7");
- expect(text).toContain("CPUs: 4");
- expect(text).toContain("8.0 GB");
+ expect(text).toContain("Images: 15 total (12 in use, 3 unused");
+ expect(text).toContain("[INFO] image_updates: 2");
+ expect(text).toContain("Arcane: v2.3.2 (update available: v2.4.0)");
expect(result.isError).toBeUndefined();
});
- it("handles missing system info", async () => {
+ it("handles missing action items", async () => {
mockClient.get.mockResolvedValueOnce({
data: {
- containers: { total: 1, running: 1, stopped: 0 },
- projects: { total: 0, running: 0, stopped: 0 },
- images: { total: 1, updatesAvailable: 0 },
- volumes: { total: 0 },
- networks: { total: 1 },
+ containers: {
+ counts: { totalContainers: 1, runningContainers: 1, stoppedContainers: 0 },
+ },
+ actionItems: { items: [] },
},
});
@@ -112,53 +101,13 @@ describe("dashboard-tools", () => {
const text = result.content[0].text;
expect(text).toContain("Containers: 1 total");
- expect(text).not.toContain("System:");
- });
- });
-
- describe("arcane_dashboard_get_action_items", () => {
- it("returns action items list", async () => {
- mockClient.get.mockResolvedValueOnce({
- data: [
- {
- type: "container_unhealthy",
- severity: "high",
- title: "Container my-app is unhealthy",
- description: "Health check failing for 10 minutes",
- resourceName: "my-app",
- },
- {
- type: "image_update",
- severity: "low",
- title: "Image update available for nginx",
- resourceName: "nginx",
- },
- ],
- });
-
- const handler = server.tools.get("arcane_dashboard_get_action_items")!;
- const result = await handler({ environmentId: "env-1" });
-
- const text = result.content[0].text;
- expect(text).toContain("2 action items");
- expect(text).toContain("[HIGH] Container my-app is unhealthy");
- expect(text).toContain("[LOW] Image update available for nginx");
- expect(text).toContain("Health check failing");
- });
-
- it("returns 'everything looks good' when no action items", async () => {
- mockClient.get.mockResolvedValueOnce({ data: [] });
-
- const handler = server.tools.get("arcane_dashboard_get_action_items")!;
- const result = await handler({ environmentId: "env-1" });
-
- expect(result.content[0].text).toContain("everything looks good");
+ expect(text).toContain("Action Items: none");
});
it("returns isError when client throws", async () => {
mockClient.get.mockRejectedValueOnce(new Error("Server error"));
- const handler = server.tools.get("arcane_dashboard_get_action_items")!;
+ const handler = server.tools.get("arcane_dashboard_get")!;
const result = await handler({ environmentId: "env-1" });
expect(result.isError).toBe(true);
diff --git a/src/tools/activity-tools.ts b/src/tools/activity-tools.ts
new file mode 100644
index 0000000..4818fd2
--- /dev/null
+++ b/src/tools/activity-tools.ts
@@ -0,0 +1,122 @@
+/**
+ * Activity tracking tools for Arcane MCP Server
+ *
+ * Arcane v2 runs long operations (image update checks, updater runs, prunes,
+ * vulnerability scans) as background activities. These tools let clients
+ * track that progress without waiting on the original request.
+ */
+
+import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
+import { z } from "zod";
+import { toolHandler } from "../utils/tool-helpers.js";
+import { moduleRegistrar, type ToolRegistry } from "./registry.js";
+
+interface Activity {
+ id: string;
+ type: string;
+ status: string;
+ progress?: number;
+ step?: string;
+ latestMessage?: string;
+ resourceType?: string;
+ resourceName?: string;
+ error?: string;
+ startedAt?: string;
+ endedAt?: string;
+ durationMs?: number;
+ createdAt: string;
+}
+
+function formatActivity(a: Activity): string[] {
+ const progress = a.progress !== undefined ? ` ${a.progress}%` : "";
+ const lines = [`[${a.status.toUpperCase()}${progress}] ${a.type} (ID: ${a.id})`];
+ if (a.resourceName) lines.push(` Resource: ${a.resourceType ? `${a.resourceType}/` : ""}${a.resourceName}`);
+ if (a.latestMessage) lines.push(` ${a.latestMessage}`);
+ if (a.error) lines.push(` Error: ${a.error}`);
+ lines.push(` Started: ${a.startedAt || a.createdAt}${a.endedAt ? ` — Ended: ${a.endedAt}` : ""}`);
+ lines.push("");
+ return lines;
+}
+
+export function registerActivityTools(server: McpServer, registry?: ToolRegistry): void {
+ const register = moduleRegistrar(server, registry, "activity");
+
+ // arcane_activity_list
+ register(
+ "arcane_activity_list",
+ {
+ title: "List activities",
+ description: "List background activities (image update checks, updater runs, prunes, scans) for an environment. Use this to track long-running operations.",
+ annotations: {
+ readOnlyHint: true,
+ destructiveHint: false,
+ idempotentHint: true,
+ openWorldHint: false,
+ },
+ inputSchema: {
+ environmentId: z.string().describe("Environment ID"),
+ status: z.string().optional().describe("Filter by status (e.g., running, completed, failed)"),
+ type: z.string().optional().describe("Filter by activity type"),
+ start: z.number().optional().default(0).describe("Pagination start"),
+ limit: z.number().optional().default(20).describe("Items per page"),
+ },
+ },
+ toolHandler(async ({ environmentId, status, type, start, limit }, client) => {
+ const response = await client.get<{
+ data: Activity[];
+ pagination: { totalItems: number };
+ }>(`/environments/${environmentId}/activities`, { status, type, start, limit });
+
+ if (!response.data || response.data.length === 0) {
+ return "No activities found.";
+ }
+
+ const lines = [`Found ${response.pagination.totalItems} activities:\n`];
+ for (const activity of response.data) {
+ lines.push(...formatActivity(activity));
+ }
+
+ return lines.join("\n");
+ })
+ );
+
+ // arcane_activity_get
+ register(
+ "arcane_activity_get",
+ {
+ title: "Get activity details",
+ description: "Get details and progress messages of a background activity",
+ annotations: {
+ readOnlyHint: true,
+ destructiveHint: false,
+ idempotentHint: true,
+ openWorldHint: false,
+ },
+ inputSchema: {
+ environmentId: z.string().describe("Environment ID"),
+ activityId: z.string().describe("Activity ID"),
+ limit: z.number().optional().default(20).describe("Number of progress messages to return"),
+ },
+ },
+ toolHandler(async ({ environmentId, activityId, limit }, client) => {
+ const response = await client.get<{
+ data: {
+ activity: Activity;
+ messages?: Array<{ createdAt: string; level: string; message: string }>;
+ };
+ }>(`/environments/${environmentId}/activities/${activityId}`, { limit });
+
+ const lines = formatActivity(response.data.activity);
+
+ if (response.data.messages && response.data.messages.length > 0) {
+ lines.push("Messages:");
+ for (const msg of response.data.messages) {
+ lines.push(` [${msg.createdAt}] [${msg.level.toUpperCase()}] ${msg.message}`);
+ }
+ }
+
+ return lines.join("\n");
+ })
+ );
+
+}
diff --git a/src/tools/auth-tools.ts b/src/tools/auth-tools.ts
index f5d387c..93de381 100644
--- a/src/tools/auth-tools.ts
+++ b/src/tools/auth-tools.ts
@@ -28,13 +28,16 @@ export function registerAuthTools(server: McpServer, registry?: ToolRegistry): v
},
toolHandler(async ({ username, password }, client) => {
const response = await client.post<{
- token: string;
- refreshToken: string;
- expiresAt: string;
- user: { id: string; username: string; role: string };
+ data: {
+ token: string;
+ refreshToken: string;
+ expiresAt: string;
+ user: { id: string; username: string; isGlobalAdmin?: boolean };
+ };
}>("/auth/login", { username, password });
- return `Login successful!\nUser: ${response.user.username}\nRole: ${response.user.role}\nToken expires: ${response.expiresAt}`;
+ const login = response.data;
+ return `Login successful!\nUser: ${login.user.username}\nGlobal Admin: ${login.user.isGlobalAdmin ? "Yes" : "No"}\nToken expires: ${login.expiresAt}`;
})
);
@@ -72,11 +75,11 @@ export function registerAuthTools(server: McpServer, registry?: ToolRegistry): v
},
toolHandler(async (_params, client) => {
const response = await client.get<{
- data: { id: string; username: string; role: string; createdAt: string };
+ data: { id: string; username: string; displayName?: string; email?: string; isGlobalAdmin?: boolean; createdAt: string };
}>("/auth/me");
const user = response.data;
- return `Current User:\n ID: ${user.id}\n Username: ${user.username}\n Role: ${user.role}\n Created: ${user.createdAt}`;
+ return `Current User:\n ID: ${user.id}\n Username: ${user.username}\n Display Name: ${user.displayName || "N/A"}\n Global Admin: ${user.isGlobalAdmin ? "Yes" : "No"}\n Created: ${user.createdAt}`;
})
);
@@ -98,12 +101,10 @@ export function registerAuthTools(server: McpServer, registry?: ToolRegistry): v
},
toolHandler(async ({ refreshToken }, client) => {
const response = await client.post<{
- token: string;
- refreshToken: string;
- expiresAt: string;
+ data: { token: string; refreshToken: string; expiresAt: string };
}>("/auth/refresh", { refreshToken });
- return `Token refreshed successfully!\nNew token expires: ${response.expiresAt}`;
+ return `Token refreshed successfully!\nNew token expires: ${response.data.expiresAt}`;
})
);
@@ -179,14 +180,25 @@ export function registerAuthTools(server: McpServer, registry?: ToolRegistry): v
},
},
toolHandler(async (_params, client) => {
- const response = await client.get<{
- clientId: string;
- redirectUri: string;
- issuerUrl: string;
- scopes: string;
- }>("/oidc/config");
-
- return `OIDC Configuration:\n Client ID: ${response.clientId}\n Issuer: ${response.issuerUrl}\n Redirect URI: ${response.redirectUri}\n Scopes: ${response.scopes}`;
+ try {
+ const response = await client.get<{
+ clientId: string;
+ redirectUri: string;
+ issuerUrl: string;
+ scopes: string;
+ }>("/oidc/config");
+
+ return `OIDC Configuration:\n Client ID: ${response.clientId}\n Issuer: ${response.issuerUrl}\n Redirect URI: ${response.redirectUri}\n Scopes: ${response.scopes}`;
+ } catch (error) {
+ // Arcane returns a 500 when OIDC is not set up — report that clearly
+ const status = await client
+ .get<{ envConfigured: boolean }>("/oidc/status")
+ .catch(() => undefined);
+ if (status && !status.envConfigured) {
+ return "OIDC is not configured on this instance.";
+ }
+ throw error;
+ }
})
);
diff --git a/src/tools/build-tools.ts b/src/tools/build-tools.ts
index 7e95d54..771c280 100644
--- a/src/tools/build-tools.ts
+++ b/src/tools/build-tools.ts
@@ -17,7 +17,7 @@ export function registerBuildTools(server: McpServer, registry?: ToolRegistry):
"arcane_build_image",
{
title: "Build image",
- description: "Build a Docker image from a Dockerfile or Git URL with support for build args and multi-platform builds",
+ description: "Build a Docker image from a build workspace directory with support for build args and multi-platform builds. Use the build workspace tools to browse/upload the build context first.",
annotations: {
readOnlyHint: false,
destructiveHint: false,
@@ -26,35 +26,26 @@ export function registerBuildTools(server: McpServer, registry?: ToolRegistry):
},
inputSchema: {
environmentId: z.string().describe("Environment ID"),
- dockerfile: z.string().optional().describe("Dockerfile content to build from"),
- gitUrl: z.string().optional().describe("Git repository URL to build from"),
+ contextDir: z.string().describe("Build context directory (path within the build workspace)"),
+ dockerfile: z.string().optional().describe("Path to the Dockerfile within the context (default: Dockerfile)"),
+ dockerfileInline: z.string().optional().describe("Inline Dockerfile content (used instead of a Dockerfile in the context)"),
tag: z.string().describe("Image tag (e.g., myapp:latest)"),
buildArgs: z.record(z.string()).optional().describe("Build arguments as key-value pairs"),
platform: z.string().optional().describe("Target platform (e.g., linux/amd64, linux/arm64)"),
+ noCache: z.boolean().optional().default(false).describe("Build without using the cache"),
},
},
- toolHandler(async ({ environmentId, dockerfile, gitUrl, tag, buildArgs, platform }, client) => {
- const body: Record = { tag };
+ toolHandler(async ({ environmentId, contextDir, dockerfile, dockerfileInline, tag, buildArgs, platform, noCache }, client) => {
+ const body: Record = { contextDir, tags: [tag], noCache };
if (dockerfile) body.dockerfile = dockerfile;
- if (gitUrl) body.gitUrl = gitUrl;
+ if (dockerfileInline) body.dockerfileInline = dockerfileInline;
if (buildArgs) body.buildArgs = buildArgs;
- if (platform) body.platform = platform;
+ if (platform) body.platforms = [platform];
- const response = await client.post<{ data: Build }>(
- `/environments/${environmentId}/images/build`,
- body
- );
-
- const build = response.data;
- const lines = [
- `Build started:`,
- ` Build ID: ${build.id}`,
- ` Tag: ${build.tag || tag}`,
- ` Status: ${build.status}`,
- ];
- if (build.platform) lines.push(` Platform: ${build.platform}`);
+ // The build endpoint streams progress and finishes when the build is done.
+ await client.post(`/environments/${environmentId}/images/build`, body);
- return lines.join("\n");
+ return `Build for ${tag} finished. Use arcane_build_list to inspect the result.`;
})
);
@@ -81,7 +72,7 @@ export function registerBuildTools(server: McpServer, registry?: ToolRegistry):
toolHandler(async ({ environmentId, status, search, start, limit }, client) => {
const response = await client.get<{
data: Build[];
- pagination: { total: number; start: number; limit: number };
+ pagination: { totalItems: number };
}>(`/environments/${environmentId}/images/builds`, {
status, search, start, limit,
});
@@ -90,14 +81,14 @@ export function registerBuildTools(server: McpServer, registry?: ToolRegistry):
return "No builds found.";
}
- const lines = [`Found ${response.pagination.total} builds:\n`];
+ const lines = [`Found ${response.pagination.totalItems} builds:\n`];
for (const build of response.data) {
- lines.push(`[${build.status.toUpperCase()}] ${build.tag || build.id}`);
+ lines.push(`[${build.status.toUpperCase()}] ${build.tags?.join(", ") || build.id}`);
lines.push(` Build ID: ${build.id}`);
if (build.provider) lines.push(` Provider: ${build.provider}`);
- if (build.startedAt) lines.push(` Started: ${build.startedAt}`);
+ if (build.createdAt) lines.push(` Created: ${build.createdAt}`);
if (build.completedAt) lines.push(` Completed: ${build.completedAt}`);
- if (build.error) lines.push(` Error: ${build.error}`);
+ if (build.errorMessage) lines.push(` Error: ${build.errorMessage}`);
lines.push("");
}
@@ -132,23 +123,22 @@ export function registerBuildTools(server: McpServer, registry?: ToolRegistry):
`Build Details:`,
` Build ID: ${build.id}`,
` Status: ${build.status}`,
- ` Tag: ${build.tag || "N/A"}`,
- ` Platform: ${build.platform || "default"}`,
+ ` Tags: ${build.tags?.join(", ") || "N/A"}`,
+ ` Platforms: ${build.platforms?.join(", ") || "default"}`,
];
- if (build.gitUrl) lines.push(` Git URL: ${build.gitUrl}`);
- if (build.startedAt) lines.push(` Started: ${build.startedAt}`);
+ if (build.createdAt) lines.push(` Created: ${build.createdAt}`);
if (build.completedAt) lines.push(` Completed: ${build.completedAt}`);
- if (build.error) lines.push(` Error: ${build.error}`);
+ if (build.errorMessage) lines.push(` Error: ${build.errorMessage}`);
if (build.buildArgs && Object.keys(build.buildArgs).length > 0) {
lines.push(` Build Args:`);
for (const [key, value] of Object.entries(build.buildArgs)) {
lines.push(` ${key}=${value}`);
}
}
- if (build.logs) {
+ if (build.output) {
lines.push("");
- lines.push("Build Logs:");
- lines.push(build.logs);
+ lines.push(`Build Output${build.outputTruncated ? " (truncated)" : ""}:`);
+ lines.push(build.output);
}
return lines.join("\n");
@@ -215,12 +205,12 @@ export function registerBuildTools(server: McpServer, registry?: ToolRegistry):
toolHandler(async ({ environmentId, path }, client) => {
validatePath(path);
- const response = await client.get<{ data: { content: string; path: string } }>(
+ const response = await client.get<{ data: { content: string; mimeType?: string } }>(
`/environments/${environmentId}/builds/browse/content`,
{ path }
);
- return `File: ${response.data.path}\n\n${response.data.content}`;
+ return `File: ${path}\n\n${response.data.content}`;
})
);
@@ -245,9 +235,13 @@ export function registerBuildTools(server: McpServer, registry?: ToolRegistry):
toolHandler(async ({ environmentId, path, content }, client) => {
validatePath(path);
- await client.post(
+ // The API expects multipart/form-data with the destination path as a query param
+ const fileName = path.split("/").pop() || "file";
+ await client.postMultipart(
`/environments/${environmentId}/builds/browse/upload`,
- { path, content }
+ { path },
+ fileName,
+ content
);
return `File uploaded to workspace: ${path}`;
diff --git a/src/tools/container-tools.ts b/src/tools/container-tools.ts
index 2a53a28..1798849 100644
--- a/src/tools/container-tools.ts
+++ b/src/tools/container-tools.ts
@@ -6,7 +6,8 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";
import { toolHandler } from "../utils/tool-helpers.js";
import { moduleRegistrar, type ToolRegistry } from "./registry.js";
-import { DOCKER_SHORT_ID_LENGTH, MAX_DISPLAY_LABELS, DEFAULT_PAGINATION_START, DEFAULT_PAGINATION_LIMIT } from "../constants.js";
+import { DOCKER_SHORT_ID_LENGTH, MAX_DISPLAY_LABELS, DEFAULT_PAGINATION_START, DEFAULT_PAGINATION_LIMIT, DEFAULT_LOG_TAIL, MAX_LOG_LINES } from "../constants.js";
+import { formatLogResult } from "../utils/log-format.js";
import type { Container } from "../types/arcane-types.js";
export function registerContainerTools(server: McpServer, registry?: ToolRegistry): void {
@@ -37,17 +38,20 @@ export function registerContainerTools(server: McpServer, registry?: ToolRegistr
toolHandler(async ({ environmentId, search, sort, order, start, limit, includeInternal }, client) => {
const response = await client.get<{
data: Container[];
- pagination: { total: number; start: number; limit: number };
+ pagination: { totalItems: number };
}>(`/environments/${environmentId}/containers`, { search, sort, order, start, limit, includeInternal });
if (!response.data || response.data.length === 0) {
return "No containers found.";
}
- const lines = [`Found ${response.pagination.total} containers:\n`];
+ const lines = [`Found ${response.pagination.totalItems} containers:\n`];
for (const container of response.data) {
const status = container.state === "running" ? "[RUNNING]" : "[STOPPED]";
- lines.push(`${status} ${container.name}`);
+ // The list returns Docker-style `names` (leading slash), not `name`
+ const name = container.names?.[0]?.replace(/^\//, "") || container.id.substring(0, DOCKER_SHORT_ID_LENGTH);
+ const updateFlag = container.updateInfo?.hasUpdate ? " [UPDATE AVAILABLE]" : "";
+ lines.push(`${status}${updateFlag} ${name}`);
lines.push(` ID: ${container.id.substring(0, DOCKER_SHORT_ID_LENGTH)}`);
lines.push(` Image: ${container.image}`);
lines.push(` Status: ${container.status}`);
@@ -83,19 +87,32 @@ export function registerContainerTools(server: McpServer, registry?: ToolRegistr
},
},
toolHandler(async ({ environmentId, containerId }, client) => {
- const response = await client.get<{ data: Container & { config?: Record } }>(
- `/environments/${environmentId}/containers/${containerId}`
- );
+ // Unlike the list, the detail endpoint has `name` (no `names`) and `state` is an object
+ const response = await client.get<{
+ data: {
+ id: string;
+ name: string;
+ image: string;
+ created: string;
+ state?: { status?: string; running?: boolean; exitCode?: number; startedAt?: string; health?: { status?: string } };
+ ports?: Array<{ privatePort: number; publicPort?: number; type: string }>;
+ labels?: Record;
+ };
+ }>(`/environments/${environmentId}/containers/${containerId}`);
const c = response.data;
+ const stateStatus = c.state?.status || (c.state?.running ? "running" : "unknown");
+ const health = c.state?.health?.status ? ` (${c.state.health.status})` : "";
const lines = [
- `Container: ${c.name}`,
+ `Container: ${c.name?.replace(/^\//, "")}`,
` ID: ${c.id}`,
` Image: ${c.image}`,
- ` State: ${c.state}`,
- ` Status: ${c.status}`,
+ ` State: ${stateStatus}${health}`,
` Created: ${c.created}`,
];
+ if (c.state?.running === false && c.state?.exitCode !== undefined) {
+ lines.push(` Exit Code: ${c.state.exitCode}`);
+ }
if (c.ports && c.ports.length > 0) {
lines.push(" Ports:");
@@ -118,6 +135,38 @@ export function registerContainerTools(server: McpServer, registry?: ToolRegistr
})
);
+ // arcane_container_get_logs
+ register(
+ "arcane_container_get_logs",
+ {
+ title: "Get container logs",
+ description: "Fetch recent log lines of a container. For live following, call repeatedly with 'since' set to the newest timestamp seen — each call then returns only new lines.",
+ annotations: {
+ readOnlyHint: true,
+ destructiveHint: false,
+ idempotentHint: true,
+ openWorldHint: false,
+ },
+ inputSchema: {
+ environmentId: z.string().describe("Environment ID"),
+ containerId: z.string().describe("Container ID or name"),
+ tail: z.number().optional().default(DEFAULT_LOG_TAIL).describe("Number of most recent lines to return initially"),
+ since: z.string().optional().describe("Only return lines after this time — RFC3339 timestamp (from a previous call) or relative duration like '5m'"),
+ timestamps: z.boolean().optional().default(true).describe("Prefix each line with its timestamp (needed for incremental follow-up via 'since')"),
+ maxLines: z.number().optional().default(200).describe(`Hard cap on returned lines to protect the context window (max ${MAX_LOG_LINES})`),
+ },
+ },
+ toolHandler(async ({ environmentId, containerId, tail, since, timestamps, maxLines }, client) => {
+ const result = await client.fetchLogs(
+ `/environments/${environmentId}/ws/containers/${containerId}/logs`,
+ { follow: false, tail, since, timestamps },
+ Math.min(maxLines, MAX_LOG_LINES)
+ );
+
+ return formatLogResult(`container ${containerId}`, result, timestamps);
+ })
+ );
+
// arcane_container_create
register(
"arcane_container_create",
@@ -343,13 +392,15 @@ export function registerContainerTools(server: McpServer, registry?: ToolRegistr
},
toolHandler(async ({ environmentId, includeInternal }, client) => {
const response = await client.get<{
- running: number;
- stopped: number;
- paused: number;
- total: number;
+ data: {
+ totalContainers: number;
+ runningContainers: number;
+ stoppedContainers: number;
+ };
}>(`/environments/${environmentId}/containers/counts`, { includeInternal });
- return `Container Counts:\n Total: ${response.total}\n Running: ${response.running}\n Stopped: ${response.stopped}\n Paused: ${response.paused || 0}`;
+ const c = response.data;
+ return `Container Counts:\n Total: ${c.totalContainers}\n Running: ${c.runningContainers}\n Stopped: ${c.stoppedContainers}`;
})
);
diff --git a/src/tools/dashboard-tools.ts b/src/tools/dashboard-tools.ts
index 21ac2fb..fcbd225 100644
--- a/src/tools/dashboard-tools.ts
+++ b/src/tools/dashboard-tools.ts
@@ -6,7 +6,8 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";
import { toolHandler } from "../utils/tool-helpers.js";
import { moduleRegistrar, type ToolRegistry } from "./registry.js";
-import type { DashboardSnapshot, ActionItem } from "../types/arcane-types.js";
+import { formatSizeGB } from "../utils/format.js";
+import type { DashboardSnapshot } from "../types/arcane-types.js";
export function registerDashboardTools(server: McpServer, registry?: ToolRegistry): void {
const register = moduleRegistrar(server, registry, "dashboard");
@@ -33,63 +34,32 @@ export function registerDashboardTools(server: McpServer, registry?: ToolRegistr
);
const d = response.data;
- const lines = [
- `Dashboard Snapshot:`,
- ``,
- `Containers: ${d.containers.total} total (${d.containers.running} running, ${d.containers.stopped} stopped)`,
- `Projects: ${d.projects.total} total (${d.projects.running} running, ${d.projects.stopped} stopped)`,
- `Images: ${d.images.total} total (${d.images.updatesAvailable} updates available)`,
- `Volumes: ${d.volumes.total}${d.volumes.totalSize ? ` (${d.volumes.totalSize})` : ""}`,
- `Networks: ${d.networks.total}`,
- ];
+ const lines = [`Dashboard Snapshot:`, ``];
- if (d.systemInfo) {
- lines.push("");
- lines.push("System:");
- if (d.systemInfo.dockerVersion) lines.push(` Docker: ${d.systemInfo.dockerVersion}`);
- if (d.systemInfo.osType) lines.push(` OS: ${d.systemInfo.osType}`);
- if (d.systemInfo.cpus) lines.push(` CPUs: ${d.systemInfo.cpus}`);
- if (d.systemInfo.memoryBytes) {
- const memGB = (d.systemInfo.memoryBytes / 1e9).toFixed(1);
- lines.push(` Memory: ${memGB} GB`);
- }
+ const counts = d.containers?.counts;
+ if (counts) {
+ lines.push(`Containers: ${counts.totalContainers} total (${counts.runningContainers} running, ${counts.stoppedContainers} stopped)`);
}
- return lines.join("\n");
- })
- );
-
- // arcane_dashboard_get_action_items
- register(
- "arcane_dashboard_get_action_items",
- {
- title: "Get action items",
- description: "Get dashboard action items that need attention (unhealthy containers, available updates, etc.)",
- annotations: {
- readOnlyHint: true,
- destructiveHint: false,
- idempotentHint: true,
- openWorldHint: false,
- },
- inputSchema: {
- environmentId: z.string().describe("Environment ID"),
- },
- },
- toolHandler(async ({ environmentId }, client) => {
- const response = await client.get<{ data: ActionItem[] }>(
- `/environments/${environmentId}/dashboard/action-items`
- );
+ const img = d.imageUsageCounts;
+ if (img) {
+ lines.push(`Images: ${img.totalImages} total (${img.imagesInuse} in use, ${img.imagesUnused} unused, ${formatSizeGB(img.totalImageSize)})`);
+ }
- if (!response.data || response.data.length === 0) {
- return "No action items — everything looks good!";
+ const items = d.actionItems?.items;
+ if (items && items.length > 0) {
+ lines.push("", "Action Items:");
+ for (const item of items) {
+ lines.push(` [${(item.severity || "info").toUpperCase()}] ${item.kind}: ${item.count}`);
+ }
+ } else {
+ lines.push("", "Action Items: none — everything looks good.");
}
- const lines = [`${response.data.length} action items:\n`];
- for (const item of response.data) {
- lines.push(`[${item.severity.toUpperCase()}] ${item.title}`);
- if (item.description) lines.push(` ${item.description}`);
- if (item.resourceName) lines.push(` Resource: ${item.resourceName}`);
- lines.push("");
+ const v = d.versionInfo;
+ if (v?.currentVersion) {
+ const update = v.newestVersion && v.newestVersion !== v.currentVersion ? ` (update available: ${v.newestVersion})` : "";
+ lines.push("", `Arcane: ${v.currentVersion}${update}`);
}
return lines.join("\n");
diff --git a/src/tools/environment-tools.ts b/src/tools/environment-tools.ts
index df66cd6..0c97e0e 100644
--- a/src/tools/environment-tools.ts
+++ b/src/tools/environment-tools.ts
@@ -34,14 +34,14 @@ export function registerEnvironmentTools(server: McpServer, registry?: ToolRegis
toolHandler(async ({ search, sort, order, start, limit }, client) => {
const response = await client.get<{
data: Environment[];
- pagination: { total: number; start: number; limit: number };
+ pagination: { totalItems: number };
}>("/environments", { search, sort, order, start, limit });
if (!response.data || response.data.length === 0) {
return "No environments found.";
}
- const lines = [`Found ${response.pagination.total} environments:\n`];
+ const lines = [`Found ${response.pagination.totalItems} environments:\n`];
for (const env of response.data) {
const status = env.status || "unknown";
lines.push(`[${status.toUpperCase()}] ${env.name} (ID: ${env.id})`);
@@ -77,9 +77,12 @@ export function registerEnvironmentTools(server: McpServer, registry?: ToolRegis
` ID: ${env.id}`,
` Status: ${env.status || "unknown"}`,
` API URL: ${env.apiUrl || "N/A"}`,
- ` Created: ${env.createdAt || "N/A"}`,
- ` Updated: ${env.updatedAt || "N/A"}`,
+ ` Enabled: ${env.enabled ? "yes" : "no"}`,
+ ` Connected: ${env.connected ? "yes" : "no"}`,
+ ` Edge Agent: ${env.isEdge ? "yes" : "no"}`,
];
+ if (env.connectedAt) lines.push(` Connected At: ${env.connectedAt}`);
+ if (env.lastSeen) lines.push(` Last Seen: ${env.lastSeen}`);
return lines.join("\n");
})
@@ -100,14 +103,16 @@ export function registerEnvironmentTools(server: McpServer, registry?: ToolRegis
inputSchema: {
name: z.string().describe("Name for the environment"),
apiUrl: z.string().optional().describe("API URL for the Docker host"),
- tlsEnabled: z.boolean().optional().default(false).describe("Enable TLS for Docker API"),
+ isEdge: z.boolean().optional().describe("Register as an edge agent environment"),
+ accessToken: z.string().optional().describe("Access token for connecting to the environment's agent"),
},
},
- toolHandler(async ({ name, apiUrl, tlsEnabled }, client) => {
+ toolHandler(async ({ name, apiUrl, isEdge, accessToken }, client) => {
const response = await client.post<{ data: Environment & { apiKey?: string } }>("/environments", {
name,
apiUrl,
- tlsEnabled,
+ isEdge,
+ accessToken,
});
const env = response.data;
@@ -187,8 +192,11 @@ export function registerEnvironmentTools(server: McpServer, registry?: ToolRegis
},
},
toolHandler(async ({ environmentId }, client) => {
- const response = await client.post<{ message: string }>(`/environments/${environmentId}/test`);
- return `Connection test: ${response.message || "Success"}`;
+ const response = await client.post<{ data: { status: string; message?: string } }>(
+ `/environments/${environmentId}/test`
+ );
+ const { status, message } = response.data;
+ return `Connection test: ${status}${message ? ` - ${message}` : ""}`;
})
);
@@ -210,12 +218,12 @@ export function registerEnvironmentTools(server: McpServer, registry?: ToolRegis
},
},
toolHandler(async ({ environmentId, rotate }, client) => {
- const response = await client.post<{ data: { apiKey: string; expiresAt: string } }>(
+ const response = await client.post<{ data: { token: string } }>(
`/environments/${environmentId}/agent/pair`,
{ rotate }
);
- return `Agent pairing token generated:\n Token: ${response.data.apiKey}\n Expires: ${response.data.expiresAt}`;
+ return `Agent pairing token generated:\n Token: ${response.data.token}`;
})
);
@@ -236,11 +244,11 @@ export function registerEnvironmentTools(server: McpServer, registry?: ToolRegis
},
},
toolHandler(async ({ environmentId }, client) => {
- const response = await client.get<{ data: { version: string; buildTime?: string } }>(
+ const response = await client.get<{ data: { currentVersion: string; buildTime?: string } }>(
`/environments/${environmentId}/version`
);
- return `Agent Version: ${response.data.version}${response.data.buildTime ? `\nBuild Time: ${response.data.buildTime}` : ""}`;
+ return `Agent Version: ${response.data.currentVersion}${response.data.buildTime ? `\nBuild Time: ${response.data.buildTime}` : ""}`;
})
);
@@ -261,30 +269,27 @@ export function registerEnvironmentTools(server: McpServer, registry?: ToolRegis
},
},
toolHandler(async ({ environmentId }, client) => {
- const response = await client.get<{
- data: {
- serverVersion: string;
- operatingSystem: string;
- architecture: string;
- containers: number;
- containersRunning: number;
- containersStopped: number;
- images: number;
- memTotal: number;
- ncpu: number;
- };
- }>(`/environments/${environmentId}/system/docker-info`);
+ const info = await client.get<{
+ ServerVersion: string;
+ OperatingSystem: string;
+ Architecture: string;
+ Containers: number;
+ ContainersRunning: number;
+ ContainersStopped: number;
+ Images: number;
+ MemTotal: number;
+ NCPU: number;
+ }>(`/environments/${environmentId}/system/docker/info`);
- const info = response.data;
const lines = [
"Docker System Info:",
- ` Version: ${info.serverVersion}`,
- ` OS: ${info.operatingSystem}`,
- ` Architecture: ${info.architecture}`,
- ` CPUs: ${info.ncpu}`,
- ` Memory: ${formatSizeGB(info.memTotal)}`,
- ` Containers: ${info.containers} (${info.containersRunning} running, ${info.containersStopped} stopped)`,
- ` Images: ${info.images}`,
+ ` Version: ${info.ServerVersion}`,
+ ` OS: ${info.OperatingSystem}`,
+ ` Architecture: ${info.Architecture}`,
+ ` CPUs: ${info.NCPU}`,
+ ` Memory: ${formatSizeGB(info.MemTotal)}`,
+ ` Containers: ${info.Containers} (${info.ContainersRunning} running, ${info.ContainersStopped} stopped)`,
+ ` Images: ${info.Images}`,
];
return lines.join("\n");
@@ -308,15 +313,15 @@ export function registerEnvironmentTools(server: McpServer, registry?: ToolRegis
},
},
toolHandler(async ({ environmentId }, client) => {
- const response = await client.get<{ data: { docker?: string; dockerCompose?: string } }>(
- `/environments/${environmentId}/deployment-snippets`
+ const response = await client.get<{ data: { dockerRun?: string; dockerCompose?: string } }>(
+ `/environments/${environmentId}/deployment`
);
const snippets = response.data;
let text = "Deployment Snippets:\n\n";
- if (snippets.docker) {
- text += "Docker Command:\n```\n" + snippets.docker + "\n```\n\n";
+ if (snippets.dockerRun) {
+ text += "Docker Command:\n```\n" + snippets.dockerRun + "\n```\n\n";
}
if (snippets.dockerCompose) {
text += "Docker Compose:\n```yaml\n" + snippets.dockerCompose + "\n```";
diff --git a/src/tools/event-tools.ts b/src/tools/event-tools.ts
index 458e841..2f4cce5 100644
--- a/src/tools/event-tools.ts
+++ b/src/tools/event-tools.ts
@@ -26,26 +26,26 @@ export function registerEventTools(server: McpServer, registry?: ToolRegistry):
},
inputSchema: {
type: z.string().optional().describe("Filter by event type"),
- resourceType: z.string().optional().describe("Filter by resource type (container, image, etc.)"),
+ severity: z.string().optional().describe("Filter by severity (e.g., info, warning, error)"),
start: z.number().optional().default(0).describe("Pagination start"),
limit: z.number().optional().default(50).describe("Items per page"),
},
},
- toolHandler(async ({ type, resourceType, start, limit }, client) => {
+ toolHandler(async ({ type, severity, start, limit }, client) => {
const response = await client.get<{
data: Event[];
- pagination: { total: number };
- }>("/events", { type, resourceType, start, limit });
+ pagination: { totalItems: number };
+ }>("/events", { type, severity, start, limit });
if (!response.data || response.data.length === 0) {
return "No events found.";
}
- const lines = [`Found ${response.pagination.total} events:\n`];
+ const lines = [`Found ${response.pagination.totalItems} events:\n`];
for (const event of response.data.slice(0, MAX_DISPLAY_EVENTS)) {
const time = new Date(event.createdAt).toLocaleString();
- lines.push(`[${time}] ${event.type}`);
- lines.push(` ${event.message}`);
+ lines.push(`[${time}] [${event.severity.toUpperCase()}] ${event.type}`);
+ lines.push(` ${event.title}${event.description ? ` — ${event.description}` : ""}`);
if (event.resourceName) {
lines.push(` Resource: ${event.resourceType}/${event.resourceName}`);
}
@@ -85,18 +85,18 @@ export function registerEventTools(server: McpServer, registry?: ToolRegistry):
toolHandler(async ({ environmentId, type, start, limit }, client) => {
const response = await client.get<{
data: Event[];
- pagination: { total: number };
+ pagination: { totalItems: number };
}>(`/events/environment/${environmentId}`, { type, start, limit });
if (!response.data || response.data.length === 0) {
return "No events found for this environment.";
}
- const lines = [`Found ${response.pagination.total} events:\n`];
+ const lines = [`Found ${response.pagination.totalItems} events:\n`];
for (const event of response.data.slice(0, MAX_DISPLAY_EVENTS)) {
const time = new Date(event.createdAt).toLocaleString();
- lines.push(`[${time}] ${event.type}`);
- lines.push(` ${event.message}`);
+ lines.push(`[${time}] [${event.severity.toUpperCase()}] ${event.type}`);
+ lines.push(` ${event.title}${event.description ? ` — ${event.description}` : ""}`);
if (event.resourceName) {
lines.push(` Resource: ${event.resourceType}/${event.resourceName}`);
}
@@ -107,41 +107,6 @@ export function registerEventTools(server: McpServer, registry?: ToolRegistry):
})
);
- // arcane_event_create
- register(
- "arcane_event_create",
- {
- title: "Create event",
- description: "Create a custom event for tracking",
- annotations: {
- readOnlyHint: false,
- destructiveHint: false,
- idempotentHint: false,
- openWorldHint: false,
- },
- inputSchema: {
- type: z.string().describe("Event type"),
- message: z.string().describe("Event message"),
- resourceType: z.string().optional().describe("Resource type"),
- resourceId: z.string().optional().describe("Resource ID"),
- resourceName: z.string().optional().describe("Resource name"),
- metadata: z.record(z.unknown()).optional().describe("Additional metadata"),
- },
- },
- toolHandler(async ({ type, message, resourceType, resourceId, resourceName, metadata }, client) => {
- const response = await client.post<{ data: { id: string } }>("/events", {
- type,
- message,
- resourceType,
- resourceId,
- resourceName,
- metadata,
- });
-
- return `Event created: ${response.data.id}`;
- })
- );
-
// arcane_event_delete
register(
"arcane_event_delete",
diff --git a/src/tools/gitops-tools.ts b/src/tools/gitops-tools.ts
index 405b7c5..0a39532 100644
--- a/src/tools/gitops-tools.ts
+++ b/src/tools/gitops-tools.ts
@@ -36,20 +36,20 @@ export function registerGitopsTools(server: McpServer, registry?: ToolRegistry):
toolHandler(async ({ environmentId, search, start, limit }, client) => {
const response = await client.get<{
data: GitOpsSync[];
- pagination: { total: number };
+ pagination: { totalItems: number };
}>(`/environments/${environmentId}/gitops-syncs`, { search, start, limit });
if (!response.data || response.data.length === 0) {
return "No GitOps syncs configured.";
}
- const lines = [`Found ${response.pagination.total} GitOps syncs:\n`];
+ const lines = [`Found ${response.pagination.totalItems} GitOps syncs:\n`];
for (const sync of response.data) {
const status = sync.lastSyncStatus || "never synced";
lines.push(`${sync.name}`);
lines.push(` ID: ${sync.id}`);
lines.push(` Branch: ${sync.branch}`);
- lines.push(` Path: ${sync.path}`);
+ lines.push(` Path: ${sync.composePath}`);
lines.push(` Auto-sync: ${sync.autoSync ? "Yes" : "No"}`);
lines.push(` Last sync: ${sync.lastSyncAt || "Never"} (${status})`);
lines.push("");
@@ -87,8 +87,8 @@ export function registerGitopsTools(server: McpServer, registry?: ToolRegistry):
` ID: ${sync.id}`,
` Repository ID: ${sync.repositoryId}`,
` Branch: ${sync.branch}`,
- ` Path: ${sync.path}`,
- ` Target Project: ${sync.targetProjectId || "N/A"}`,
+ ` Path: ${sync.composePath}`,
+ ` Target Project: ${sync.projectName || sync.projectId || "N/A"}`,
` Auto-sync: ${sync.autoSync ? `Yes (every ${sync.syncInterval}s)` : "No"}`,
` Last Sync: ${sync.lastSyncAt || "Never"}`,
` Last Status: ${sync.lastSyncStatus || "N/A"}`,
@@ -115,16 +115,16 @@ export function registerGitopsTools(server: McpServer, registry?: ToolRegistry):
name: z.string().describe("Name for the sync"),
repositoryId: z.string().describe("Git repository ID"),
branch: z.string().describe("Branch to sync from"),
- path: z.string().describe("Path to compose files in repo"),
- folders: z.array(z.string()).optional().describe("Specific folders to sync (for folder-level sync)"),
+ composePath: z.string().describe("Path to the compose file in the repo"),
+ syncDirectory: z.boolean().optional().describe("Sync the entire directory containing the compose file"),
autoSync: z.boolean().optional().default(false).describe("Enable automatic syncing"),
syncInterval: z.number().optional().describe("Sync interval in seconds (for auto-sync)"),
},
},
- toolHandler(async ({ environmentId, name, repositoryId, branch, path, folders, autoSync, syncInterval }, client) => {
+ toolHandler(async ({ environmentId, name, repositoryId, branch, composePath, syncDirectory, autoSync, syncInterval }, client) => {
const response = await client.post<{ data: { id: string; name: string } }>(
`/environments/${environmentId}/gitops-syncs`,
- { name, repositoryId, branch, path, folders, autoSync, syncInterval }
+ { name, repositoryId, branch, composePath, syncDirectory, autoSync, syncInterval }
);
return `GitOps sync created: ${response.data.name} (ID: ${response.data.id})`;
@@ -148,18 +148,18 @@ export function registerGitopsTools(server: McpServer, registry?: ToolRegistry):
syncId: z.string().describe("GitOps sync ID"),
name: z.string().optional().describe("New name"),
branch: z.string().optional().describe("New branch"),
- path: z.string().optional().describe("New path"),
- folders: z.array(z.string()).optional().describe("Updated folders to sync"),
+ composePath: z.string().optional().describe("New path to the compose file in the repo"),
+ syncDirectory: z.boolean().optional().describe("Sync the entire directory containing the compose file"),
autoSync: z.boolean().optional().describe("Enable/disable auto-sync"),
syncInterval: z.number().optional().describe("New sync interval"),
},
},
- toolHandler(async ({ environmentId, syncId, name, branch, path, folders, autoSync, syncInterval }, client) => {
+ toolHandler(async ({ environmentId, syncId, name, branch, composePath, syncDirectory, autoSync, syncInterval }, client) => {
const body: Record = {};
if (name) body.name = name;
if (branch) body.branch = branch;
- if (path) body.path = path;
- if (folders) body.folders = folders;
+ if (composePath) body.composePath = composePath;
+ if (syncDirectory !== undefined) body.syncDirectory = syncDirectory;
if (autoSync !== undefined) body.autoSync = autoSync;
if (syncInterval !== undefined) body.syncInterval = syncInterval;
@@ -234,21 +234,21 @@ export function registerGitopsTools(server: McpServer, registry?: ToolRegistry):
toolHandler(async ({ environmentId, syncId }, client) => {
const response = await client.get<{
data: {
- status: string;
+ lastSyncStatus?: string;
lastSyncAt?: string;
- lastCommit?: string;
- error?: string;
+ lastSyncCommit?: string;
+ lastSyncError?: string;
};
}>(`/environments/${environmentId}/gitops-syncs/${syncId}/status`);
const status = response.data;
const lines = [
- `Sync Status: ${status.status}`,
+ `Sync Status: ${status.lastSyncStatus || "never synced"}`,
` Last Sync: ${status.lastSyncAt || "Never"}`,
- ` Last Commit: ${status.lastCommit || "N/A"}`,
+ ` Last Commit: ${status.lastSyncCommit || "N/A"}`,
];
- if (status.error) {
- lines.push(` Error: ${status.error}`);
+ if (status.lastSyncError) {
+ lines.push(` Error: ${status.lastSyncError}`);
}
return lines.join("\n");
@@ -278,19 +278,18 @@ export function registerGitopsTools(server: McpServer, registry?: ToolRegistry):
toolHandler(async ({ search, start, limit }, client) => {
const response = await client.get<{
data: GitRepository[];
- pagination: { total: number };
+ pagination: { totalItems: number };
}>("/customize/git-repositories", { search, start, limit });
if (!response.data || response.data.length === 0) {
return "No Git repositories configured.";
}
- const lines = [`Found ${response.pagination.total} repositories:\n`];
+ const lines = [`Found ${response.pagination.totalItems} repositories:\n`];
for (const repo of response.data) {
lines.push(`${repo.name}`);
lines.push(` ID: ${repo.id}`);
lines.push(` URL: ${repo.url}`);
- lines.push(` Branch: ${repo.branch}`);
lines.push(` Auth: ${repo.authType}`);
lines.push("");
}
@@ -314,17 +313,16 @@ export function registerGitopsTools(server: McpServer, registry?: ToolRegistry):
inputSchema: {
name: z.string().describe("Repository name"),
url: z.string().describe("Repository URL"),
- branch: z.string().optional().default("main").describe("Default branch"),
authType: z.enum(["none", "basic", "ssh", "token"]).optional().default("none").describe("Authentication type"),
username: z.string().optional().describe("Username (for basic auth)"),
- password: z.string().optional().describe("Password or token"),
+ token: z.string().optional().describe("Access token / password for HTTPS auth"),
sshKey: z.string().optional().describe("SSH private key"),
},
},
- toolHandler(async ({ name, url, branch, authType, username, password, sshKey }, client) => {
+ toolHandler(async ({ name, url, authType, username, token, sshKey }, client) => {
const response = await client.post<{ data: { id: string; name: string } }>(
"/customize/git-repositories",
- { name, url, branch, authType, username, password, sshKey }
+ { name, url, authType, username, token, sshKey }
);
return `Git repository added: ${response.data.name} (ID: ${response.data.id})`;
@@ -349,12 +347,12 @@ export function registerGitopsTools(server: McpServer, registry?: ToolRegistry):
},
},
toolHandler(async ({ repositoryId, branch }, client) => {
- const response = await client.post<{ message: string }>(
+ const response = await client.post<{ data: { message?: string } }>(
`/customize/git-repositories/${repositoryId}/test`,
undefined,
{ branch }
);
- return response.message || "Connection successful!";
+ return response.data?.message || "Connection successful!";
})
);
@@ -376,13 +374,16 @@ export function registerGitopsTools(server: McpServer, registry?: ToolRegistry):
},
toolHandler(async ({ repositoryId }, client) => {
const response = await client.get<{
- data: { branches: string[]; defaultBranch?: string };
+ data: { branches: Array<{ name: string; isDefault: boolean }> | null };
}>(`/customize/git-repositories/${repositoryId}/branches`);
- const lines = [`Branches (default: ${response.data.defaultBranch || "unknown"}):\n`];
+ if (!response.data.branches || response.data.branches.length === 0) {
+ return "No branches found.";
+ }
+
+ const lines = ["Branches:\n"];
for (const branch of response.data.branches) {
- const isDefault = branch === response.data.defaultBranch ? " (default)" : "";
- lines.push(` - ${branch}${isDefault}`);
+ lines.push(` - ${branch.name}${branch.isDefault ? " (default)" : ""}`);
}
return lines.join("\n");
@@ -411,15 +412,18 @@ export function registerGitopsTools(server: McpServer, registry?: ToolRegistry):
if (path) validatePath(path);
const response = await client.get<{
- data: Array<{ name: string; type: string; path: string }>;
+ data: {
+ path: string;
+ files: Array<{ name: string; path: string; type: string; size?: number }> | null;
+ };
}>(`/customize/git-repositories/${repositoryId}/files`, { branch, path });
- if (!response.data || response.data.length === 0) {
+ if (!response.data.files || response.data.files.length === 0) {
return `No files found at path: ${path || "/"}`;
}
const lines = [`Files at ${path || "/"}:\n`];
- for (const file of response.data) {
+ for (const file of response.data.files) {
const type = file.type === "dir" ? "DIR " : "FILE";
lines.push(`${type} ${file.name}`);
}
diff --git a/src/tools/image-tools.ts b/src/tools/image-tools.ts
index f1a6c3b..56ea631 100644
--- a/src/tools/image-tools.ts
+++ b/src/tools/image-tools.ts
@@ -6,7 +6,8 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";
import { toolHandler } from "../utils/tool-helpers.js";
import { moduleRegistrar, type ToolRegistry } from "./registry.js";
-import { formatSize, formatSizeMB, formatSizeGB } from "../utils/format.js";
+import { formatSize, formatSizeMB, formatSizeGB, formatUnixTimestamp } from "../utils/format.js";
+import { resolveImageId } from "../utils/image-resolver.js";
import { DOCKER_DIGEST_PREFIX_LENGTH, DOCKER_SHORT_ID_LENGTH } from "../constants.js";
import type { Image } from "../types/arcane-types.js";
@@ -36,20 +37,20 @@ export function registerImageTools(server: McpServer, registry?: ToolRegistry):
toolHandler(async ({ environmentId, search, sort, order, start, limit }, client) => {
const response = await client.get<{
data: Image[];
- pagination: { total: number; start: number; limit: number };
+ pagination: { totalItems: number };
}>(`/environments/${environmentId}/images`, { search, sort, order, start, limit });
if (!response.data || response.data.length === 0) {
return "No images found.";
}
- const lines = [`Found ${response.pagination.total} images:\n`];
+ const lines = [`Found ${response.pagination.totalItems} images:\n`];
for (const img of response.data) {
const tags = img.repoTags?.join(", ") || "";
lines.push(`${tags}`);
lines.push(` ID: ${img.id.substring(DOCKER_DIGEST_PREFIX_LENGTH, DOCKER_DIGEST_PREFIX_LENGTH + DOCKER_SHORT_ID_LENGTH)}`);
lines.push(` Size: ${formatSize(img.size)}`);
- lines.push(` Created: ${img.created}`);
+ lines.push(` Created: ${formatUnixTimestamp(img.created)}`);
lines.push("");
}
@@ -71,13 +72,23 @@ export function registerImageTools(server: McpServer, registry?: ToolRegistry):
},
inputSchema: {
environmentId: z.string().describe("Environment ID"),
- imageId: z.string().describe("Image ID or tag"),
+ imageId: z.string().describe("Image ID or name:tag (names are resolved via the image list)"),
},
},
toolHandler(async ({ environmentId, imageId }, client) => {
- const response = await client.get<{ data: Image & { config?: Record } }>(
- `/environments/${environmentId}/images/${imageId}`
- );
+ const resolvedId = await resolveImageId(client, environmentId, imageId);
+ // Unlike the list endpoint, the detail endpoint returns `created` as an ISO string
+ const response = await client.get<{
+ data: {
+ id: string;
+ repoTags?: string[] | null;
+ repoDigests?: string[] | null;
+ created: string;
+ size: number;
+ architecture?: string;
+ os?: string;
+ };
+ }>(`/environments/${environmentId}/images/${resolvedId}`);
const img = response.data;
@@ -86,9 +97,12 @@ export function registerImageTools(server: McpServer, registry?: ToolRegistry):
` ID: ${img.id}`,
` Tags: ${img.repoTags?.join(", ") || "none"}`,
` Size: ${formatSizeMB(img.size)}`,
- ` Created: ${img.created}`,
+ ` Created: ${img.created || "unknown"}`,
];
+ if (img.architecture || img.os) {
+ lines.push(` Platform: ${[img.os, img.architecture].filter(Boolean).join("/")}`);
+ }
if (img.repoDigests && img.repoDigests.length > 0) {
lines.push(` Digests: ${img.repoDigests[0]}`);
}
@@ -113,15 +127,12 @@ export function registerImageTools(server: McpServer, registry?: ToolRegistry):
environmentId: z.string().describe("Environment ID"),
imageName: z.string().describe("Image name (e.g., nginx, library/ubuntu, ghcr.io/owner/repo)"),
tag: z.string().describe("Image tag (e.g., latest, v1.0, alpine) — required"),
- registryId: z.string().optional().describe("Container registry ID for private images (credentials will be fetched automatically)"),
},
},
- toolHandler(async ({ environmentId, imageName, tag, registryId }, client) => {
- const body: Record = { imageName, tag };
- if (registryId) body.registryId = registryId;
-
+ toolHandler(async ({ environmentId, imageName, tag }, client) => {
+ // Credentials of registries configured in Arcane are applied automatically by the server
const displayName = tag ? `${imageName}:${tag}` : imageName;
- await client.post(`/environments/${environmentId}/images/pull`, body);
+ await client.post(`/environments/${environmentId}/images/pull`, { imageName, tag });
return `Image ${displayName} pulled successfully.`;
})
);
@@ -140,13 +151,13 @@ export function registerImageTools(server: McpServer, registry?: ToolRegistry):
},
inputSchema: {
environmentId: z.string().describe("Environment ID"),
- imageId: z.string().describe("Image ID or tag to delete"),
+ imageId: z.string().describe("Image ID or name:tag to delete (names are resolved via the image list)"),
force: z.boolean().optional().default(false).describe("Force removal even if in use"),
- pruneChildren: z.boolean().optional().default(false).describe("Also remove child images"),
},
},
- toolHandler(async ({ environmentId, imageId, force, pruneChildren }, client) => {
- await client.delete(`/environments/${environmentId}/images/${imageId}`, { force, pruneChildren });
+ toolHandler(async ({ environmentId, imageId, force }, client) => {
+ const resolvedId = await resolveImageId(client, environmentId, imageId);
+ await client.delete(`/environments/${environmentId}/images/${resolvedId}`, { force });
return `Image ${imageId} removed successfully.`;
})
);
@@ -169,14 +180,14 @@ export function registerImageTools(server: McpServer, registry?: ToolRegistry):
},
},
toolHandler(async ({ environmentId, all }, client) => {
- const response = await client.post<{ imagesDeleted?: string[]; spaceReclaimed?: number }>(
+ const response = await client.post<{ data: { imagesDeleted?: string[]; spaceReclaimed?: number } }>(
`/environments/${environmentId}/images/prune`,
- { all }
+ { mode: all ? "all" : "dangling", dangling: !all }
);
- const deleted = response.imagesDeleted?.length || 0;
- const space = response.spaceReclaimed
- ? formatSizeMB(response.spaceReclaimed)
+ const deleted = response.data?.imagesDeleted?.length || 0;
+ const space = response.data?.spaceReclaimed
+ ? formatSizeMB(response.data.spaceReclaimed)
: "unknown";
return `Pruned ${deleted} images, reclaimed ${space} of disk space.`;
@@ -201,12 +212,16 @@ export function registerImageTools(server: McpServer, registry?: ToolRegistry):
},
toolHandler(async ({ environmentId }, client) => {
const response = await client.get<{
- total: number;
- size: number;
- danglingCount?: number;
+ data: {
+ totalImages: number;
+ totalImageSize: number;
+ imagesInuse: number;
+ imagesUnused: number;
+ };
}>(`/environments/${environmentId}/images/counts`);
- return `Image Statistics:\n Total: ${response.total}\n Total Size: ${formatSizeGB(response.size)}\n Dangling: ${response.danglingCount || 0}`;
+ const c = response.data;
+ return `Image Statistics:\n Total: ${c.totalImages}\n Total Size: ${formatSizeGB(c.totalImageSize)}\n In Use: ${c.imagesInuse}\n Unused: ${c.imagesUnused}`;
})
);
@@ -228,16 +243,21 @@ export function registerImageTools(server: McpServer, registry?: ToolRegistry):
},
},
toolHandler(async ({ environmentId, image }, client) => {
- const response = await client.post<{
+ const response = await client.get<{
data: {
hasUpdate: boolean;
+ currentVersion?: string;
+ latestVersion?: string;
currentDigest?: string;
latestDigest?: string;
};
- }>(`/environments/${environmentId}/image-updates/check`, { image });
+ }>(`/environments/${environmentId}/image-updates/check`, { imageRef: image });
- if (response.data.hasUpdate) {
- return `Update available for ${image}!\n Current: ${response.data.currentDigest?.substring(0, DOCKER_DIGEST_PREFIX_LENGTH + DOCKER_SHORT_ID_LENGTH) || "unknown"}\n Latest: ${response.data.latestDigest?.substring(0, DOCKER_DIGEST_PREFIX_LENGTH + DOCKER_SHORT_ID_LENGTH) || "unknown"}`;
+ const u = response.data;
+ if (u.hasUpdate) {
+ const current = u.currentVersion || u.currentDigest?.substring(0, DOCKER_DIGEST_PREFIX_LENGTH + DOCKER_SHORT_ID_LENGTH) || "unknown";
+ const latest = u.latestVersion || u.latestDigest?.substring(0, DOCKER_DIGEST_PREFIX_LENGTH + DOCKER_SHORT_ID_LENGTH) || "unknown";
+ return `Update available for ${image}!\n Current: ${current}\n Latest: ${latest}`;
} else {
return `${image} is up to date.`;
}
@@ -249,7 +269,7 @@ export function registerImageTools(server: McpServer, registry?: ToolRegistry):
"arcane_image_check_updates_all",
{
title: "Check all image updates",
- description: "Check for updates on all images in an environment",
+ description: "Start an update check for all images in an environment. The check runs in the background (can take several minutes) — track progress with arcane_activity_list and read the results with arcane_image_get_update_summary.",
annotations: {
readOnlyHint: true,
destructiveHint: false,
@@ -261,21 +281,13 @@ export function registerImageTools(server: McpServer, registry?: ToolRegistry):
},
},
toolHandler(async ({ environmentId }, client) => {
- const response = await client.post<{
- data: Array<{ image: string; hasUpdate: boolean }>;
- }>(`/environments/${environmentId}/image-updates/check-all`);
-
- const updates = response.data.filter(i => i.hasUpdate);
- if (updates.length === 0) {
- return "All images are up to date.";
- }
+ client.postInBackground(`/environments/${environmentId}/image-updates/check-all`, {});
- const lines = [`Found ${updates.length} images with updates:\n`];
- for (const img of updates) {
- lines.push(` - ${img.image}`);
- }
-
- return lines.join("\n");
+ return [
+ "Update check for all images started in the background (this can take several minutes).",
+ "Track progress with arcane_activity_list (it also appears in Arcane's Activity Center).",
+ "Once finished, read the results with arcane_image_get_update_summary.",
+ ].join("\n");
})
);
@@ -299,12 +311,14 @@ export function registerImageTools(server: McpServer, registry?: ToolRegistry):
const response = await client.get<{
data: {
totalImages: number;
- updatesAvailable: number;
- lastChecked?: string;
+ imagesWithUpdates: number;
+ digestUpdates: number;
+ errorsCount: number;
};
}>(`/environments/${environmentId}/image-updates/summary`);
- return `Update Summary:\n Total Images: ${response.data.totalImages}\n Updates Available: ${response.data.updatesAvailable}\n Last Checked: ${response.data.lastChecked || "Never"}`;
+ const s = response.data;
+ return `Update Summary:\n Total Images: ${s.totalImages}\n Updates Available: ${s.imagesWithUpdates}\n Digest Updates: ${s.digestUpdates}\n Check Errors: ${s.errorsCount}`;
})
);
diff --git a/src/tools/image-update-tools.ts b/src/tools/image-update-tools.ts
index 989ee0d..afe5119 100644
--- a/src/tools/image-update-tools.ts
+++ b/src/tools/image-update-tools.ts
@@ -8,6 +8,42 @@ import { toolHandler } from "../utils/tool-helpers.js";
import { moduleRegistrar, type ToolRegistry } from "./registry.js";
import type { ImageUpdateResponse, BatchImageUpdateResponse, ImageUpdateSummary } from "../types/arcane-types.js";
+function formatUpdateCheck(imageRef: string, u: ImageUpdateResponse): string {
+ if (u.error) {
+ return `Check failed for ${imageRef}: ${u.error}`;
+ }
+ if (u.hasUpdate) {
+ const current = u.currentVersion || u.currentDigest?.substring(0, 19) || "unknown";
+ const latest = u.latestVersion || u.latestDigest?.substring(0, 19) || "unknown";
+ const note = u.updateType === "digest"
+ ? " (digest update: the pinned tag points to new image content — Arcane does not resolve newer version tags)"
+ : ` (${u.updateType || "update"})`;
+ return `Update available for ${imageRef}!${note}\n Current: ${current}\n Latest: ${latest}`;
+ }
+ return `${imageRef} is up to date.`;
+}
+
+function formatBatchResults(batch: BatchImageUpdateResponse): string {
+ const entries = Object.entries(batch);
+ const updates = entries.filter(([, r]) => r.hasUpdate);
+ const errors = entries.filter(([, r]) => r.error);
+
+ const lines = [
+ `Checked ${entries.length} images: ${updates.length} updates available\n`,
+ ];
+
+ for (const [ref, result] of entries) {
+ const status = result.error ? "[ERROR]" : result.hasUpdate ? "[UPDATE]" : "[OK]";
+ lines.push(`${status} ${ref}${result.error ? `: ${result.error}` : ""}`);
+ }
+
+ if (updates.length === 0 && errors.length === 0) {
+ lines.push("\nAll images are up to date.");
+ }
+
+ return lines.join("\n");
+}
+
export function registerImageUpdateTools(server: McpServer, registry?: ToolRegistry): void {
const register = moduleRegistrar(server, registry, "image-update");
@@ -34,11 +70,7 @@ export function registerImageUpdateTools(server: McpServer, registry?: ToolRegis
{ imageRef }
);
- const u = response.data;
- if (u.updateAvailable) {
- return `Update available for ${u.imageRef}!\n Current: ${u.currentDigest?.substring(0, 12) || u.currentTag || "unknown"}\n Latest: ${u.latestDigest?.substring(0, 12) || u.latestTag || "unknown"}`;
- }
- return `${u.imageRef} is up to date.`;
+ return formatUpdateCheck(imageRef, response.data);
})
);
@@ -64,11 +96,7 @@ export function registerImageUpdateTools(server: McpServer, registry?: ToolRegis
`/environments/${environmentId}/image-updates/check/${imageId}`
);
- const u = response.data;
- if (u.updateAvailable) {
- return `Update available for ${u.imageRef}!\n Current: ${u.currentDigest?.substring(0, 12) || u.currentTag || "unknown"}\n Latest: ${u.latestDigest?.substring(0, 12) || u.latestTag || "unknown"}`;
- }
- return `${u.imageRef} is up to date.`;
+ return formatUpdateCheck(imageId, response.data);
})
);
@@ -77,7 +105,7 @@ export function registerImageUpdateTools(server: McpServer, registry?: ToolRegis
"arcane_image_update_check_multiple",
{
title: "Check multiple image updates",
- description: "Check for updates on multiple images at once",
+ description: "Check for updates on multiple images at once by image reference",
annotations: {
readOnlyHint: true,
destructiveHint: false,
@@ -86,26 +114,16 @@ export function registerImageUpdateTools(server: McpServer, registry?: ToolRegis
},
inputSchema: {
environmentId: z.string().describe("Environment ID"),
- imageIds: z.array(z.string()).describe("List of image IDs to check"),
+ imageRefs: z.array(z.string()).describe("List of image references to check (e.g., ['nginx:latest'])"),
},
},
- toolHandler(async ({ environmentId, imageIds }, client) => {
+ toolHandler(async ({ environmentId, imageRefs }, client) => {
const response = await client.post<{ data: BatchImageUpdateResponse }>(
- `/environments/${environmentId}/image-updates/check-multiple`,
- { imageIds }
+ `/environments/${environmentId}/image-updates/check-batch`,
+ { imageRefs }
);
- const batch = response.data;
- const lines = [
- `Checked ${batch.total} images: ${batch.updatesAvailable} updates available\n`,
- ];
-
- for (const result of batch.results) {
- const status = result.updateAvailable ? "[UPDATE]" : "[OK]";
- lines.push(`${status} ${result.imageRef} (${result.imageId})`);
- }
-
- return lines.join("\n");
+ return formatBatchResults(response.data || {});
})
);
@@ -114,7 +132,7 @@ export function registerImageUpdateTools(server: McpServer, registry?: ToolRegis
"arcane_image_update_check_all",
{
title: "Check all image updates",
- description: "Check all images in an environment for available updates",
+ description: "Start an update check for all images in an environment. The check runs in the background (can take several minutes) — track progress with arcane_activity_list and read the results with arcane_image_update_get_summary.",
annotations: {
readOnlyHint: true,
destructiveHint: false,
@@ -126,26 +144,13 @@ export function registerImageUpdateTools(server: McpServer, registry?: ToolRegis
},
},
toolHandler(async ({ environmentId }, client) => {
- const response = await client.post<{ data: BatchImageUpdateResponse }>(
- `/environments/${environmentId}/image-updates/check-all`
- );
-
- const batch = response.data;
- const lines = [
- `Checked ${batch.total} images: ${batch.updatesAvailable} updates available\n`,
- ];
-
- for (const result of batch.results) {
- if (result.updateAvailable) {
- lines.push(`[UPDATE] ${result.imageRef}`);
- }
- }
+ client.postInBackground(`/environments/${environmentId}/image-updates/check-all`, {});
- if (batch.updatesAvailable === 0) {
- lines.push("All images are up to date.");
- }
-
- return lines.join("\n");
+ return [
+ "Update check for all images started in the background (this can take several minutes).",
+ "Track progress with arcane_activity_list (it also appears in Arcane's Activity Center).",
+ "Once finished, read the results with arcane_image_update_get_summary or arcane_image_update_check_multiple for specific images.",
+ ].join("\n");
})
);
@@ -174,9 +179,9 @@ export function registerImageUpdateTools(server: McpServer, registry?: ToolRegis
const lines = [
`Image Update Summary:`,
` Total Images: ${s.totalImages}`,
- ` Checked: ${s.checkedImages}`,
- ` Updates Available: ${s.updatesAvailable}`,
- ` Last Checked: ${s.lastCheckedAt || "Never"}`,
+ ` Updates Available: ${s.imagesWithUpdates}`,
+ ` Digest Updates: ${s.digestUpdates}`,
+ ` Check Errors: ${s.errorsCount}`,
];
return lines.join("\n");
diff --git a/src/tools/index.ts b/src/tools/index.ts
index 1f6ee11..5d68d95 100644
--- a/src/tools/index.ts
+++ b/src/tools/index.ts
@@ -32,6 +32,7 @@ import { registerImageUpdateTools } from "./image-update-tools.js";
import { registerBuildTools } from "./build-tools.js";
import { registerNetworkTopologyTools } from "./network-topology-tools.js";
import { registerDashboardTools } from "./dashboard-tools.js";
+import { registerActivityTools } from "./activity-tools.js";
import { registerPortTools } from "./port-tools.js";
import { registerUpdaterTools } from "./updater-tools.js";
@@ -70,6 +71,7 @@ export function registerAllTools(server: McpServer, toolsConfig?: ToolsConfig):
registerBuildTools(server, registry);
registerNetworkTopologyTools(server, registry);
registerDashboardTools(server, registry);
+ registerActivityTools(server, registry);
registerPortTools(server, registry);
registerUpdaterTools(server, registry);
diff --git a/src/tools/job-tools.ts b/src/tools/job-tools.ts
index f88afed..039f336 100644
--- a/src/tools/job-tools.ts
+++ b/src/tools/job-tools.ts
@@ -27,23 +27,24 @@ export function registerJobTools(server: McpServer, registry?: ToolRegistry): vo
},
},
toolHandler(async ({ environmentId }, client) => {
- const response = await client.get<{ data: Job[] }>(
+ const response = await client.get<{ isAgent: boolean; jobs: Job[] | null }>(
`/environments/${environmentId}/jobs`
);
- if (!response.data || response.data.length === 0) {
+ if (!response.jobs || response.jobs.length === 0) {
return "No jobs found.";
}
const lines = [`Jobs:\n`];
- for (const job of response.data) {
+ for (const job of response.jobs) {
const status = job.enabled ? "[ENABLED]" : "[DISABLED]";
lines.push(`${status} ${job.name}`);
lines.push(` ID: ${job.id}`);
- lines.push(` Type: ${job.type}`);
- lines.push(` Schedule: ${job.schedule || "manual"}`);
- lines.push(` Last Run: ${job.lastRunAt || "never"}`);
- lines.push(` Next Run: ${job.nextRunAt || "N/A"}`);
+ lines.push(` Category: ${job.category}`);
+ if (job.description) lines.push(` Description: ${job.description}`);
+ lines.push(` Schedule: ${job.isContinuous ? "continuous" : job.schedule || "manual"}`);
+ lines.push(` Next Run: ${job.nextRun || "N/A"}`);
+ lines.push(` Can Run Manually: ${job.canRunManually ? "yes" : "no"}`);
lines.push("");
}
@@ -79,7 +80,7 @@ export function registerJobTools(server: McpServer, registry?: ToolRegistry): vo
"arcane_job_schedule_get",
{
title: "Get job schedules",
- description: "Get job schedules for an environment",
+ description: "Get the configured job schedule intervals for an environment",
annotations: {
readOnlyHint: true,
destructiveHint: false,
@@ -91,23 +92,21 @@ export function registerJobTools(server: McpServer, registry?: ToolRegistry): vo
},
},
toolHandler(async ({ environmentId }, client) => {
- const response = await client.get<{
- data: Array<{
- jobId: string;
- jobName: string;
- schedule: string;
- enabled: boolean;
- }>;
- }>(`/environments/${environmentId}/job-schedules`);
+ const config = await client.get>(
+ `/environments/${environmentId}/job-schedules`
+ );
+
+ const entries = Object.entries(config).filter(
+ ([key, value]) => key !== "$schema" && typeof value === "string"
+ );
- if (!response.data || response.data.length === 0) {
- return "No job schedules configured.";
+ if (entries.length === 0) {
+ return "No job schedule configuration found.";
}
- const lines = ["Job Schedules:\n"];
- for (const schedule of response.data) {
- const status = schedule.enabled ? "[ON]" : "[OFF]";
- lines.push(`${status} ${schedule.jobName}: ${schedule.schedule}`);
+ const lines = ["Job Schedule Intervals:\n"];
+ for (const [key, value] of entries) {
+ lines.push(` ${key}: ${value}`);
}
return lines.join("\n");
@@ -119,7 +118,7 @@ export function registerJobTools(server: McpServer, registry?: ToolRegistry): vo
"arcane_job_schedule_update",
{
title: "Update job schedules",
- description: "Update job schedules for an environment",
+ description: "Update job schedule intervals for an environment. Only the provided intervals are changed.",
annotations: {
readOnlyHint: false,
destructiveHint: false,
@@ -128,15 +127,28 @@ export function registerJobTools(server: McpServer, registry?: ToolRegistry): vo
},
inputSchema: {
environmentId: z.string().describe("Environment ID"),
- schedules: z.array(z.object({
- jobId: z.string().describe("Job ID"),
- schedule: z.string().optional().describe("Cron schedule expression"),
- enabled: z.boolean().optional().describe("Enable or disable"),
- })).describe("Schedule updates"),
+ autoHealInterval: z.string().optional().describe("Interval for the auto-heal job"),
+ autoUpdateInterval: z.string().optional().describe("Interval for the auto-update job"),
+ dockerClientRefreshInterval: z.string().optional().describe("Interval for refreshing the Docker client"),
+ environmentHealthInterval: z.string().optional().describe("Interval for environment health checks"),
+ eventCleanupInterval: z.string().optional().describe("Interval for event cleanup"),
+ expiredSessionsCleanupInterval: z.string().optional().describe("Interval for expired session cleanup"),
+ pollingInterval: z.string().optional().describe("Interval for polling"),
+ scheduledPruneInterval: z.string().optional().describe("Interval for scheduled prune"),
+ vulnerabilityScanInterval: z.string().optional().describe("Interval for vulnerability scans"),
},
},
- toolHandler(async ({ environmentId, schedules }, client) => {
- await client.put(`/environments/${environmentId}/job-schedules`, { schedules });
+ toolHandler(async ({ environmentId, ...intervals }, client) => {
+ const body: Record = {};
+ for (const [key, value] of Object.entries(intervals)) {
+ if (value !== undefined) body[key] = value;
+ }
+
+ if (Object.keys(body).length === 0) {
+ return "No intervals provided - nothing to update.";
+ }
+
+ await client.put(`/environments/${environmentId}/job-schedules`, body);
return "Job schedules updated.";
})
);
diff --git a/src/tools/network-tools.ts b/src/tools/network-tools.ts
index 5b991d9..2c949d1 100644
--- a/src/tools/network-tools.ts
+++ b/src/tools/network-tools.ts
@@ -36,21 +36,22 @@ export function registerNetworkTools(server: McpServer, registry?: ToolRegistry)
toolHandler(async ({ environmentId, search, sort, order, start, limit }, client) => {
const response = await client.get<{
data: Network[];
- pagination: { total: number; start: number; limit: number };
+ pagination: { totalItems: number };
}>(`/environments/${environmentId}/networks`, { search, sort, order, start, limit });
if (!response.data || response.data.length === 0) {
return "No networks found.";
}
- const lines = [`Found ${response.pagination.total} networks:\n`];
+ const lines = [`Found ${response.pagination.totalItems} networks:\n`];
for (const net of response.data) {
lines.push(`${net.name}`);
lines.push(` ID: ${net.id.substring(0, DOCKER_SHORT_ID_LENGTH)}`);
lines.push(` Driver: ${net.driver}`);
lines.push(` Scope: ${net.scope}`);
- if (net.ipam?.config?.[0]?.subnet) {
- lines.push(` Subnet: ${net.ipam.config[0].subnet}`);
+ lines.push(` In Use: ${net.inUse ? "Yes" : "No"}`);
+ if (net.isDefault) {
+ lines.push(` Default: Yes`);
}
lines.push("");
}
@@ -97,9 +98,9 @@ export function registerNetworkTools(server: McpServer, registry?: ToolRegistry)
if (config.gateway) lines.push(` Gateway: ${config.gateway}`);
}
- if (net.containers && Object.keys(net.containers).length > 0) {
+ if (net.containersList && net.containersList.length > 0) {
lines.push(" Connected Containers:");
- for (const [_id, container] of Object.entries(net.containers)) {
+ for (const container of net.containersList) {
lines.push(` - ${container.name} (${container.ipv4Address || "no IP"})`);
}
}
@@ -132,21 +133,25 @@ export function registerNetworkTools(server: McpServer, registry?: ToolRegistry)
},
},
toolHandler(async ({ environmentId, name, driver, internal, attachable, subnet, gateway, ipRange }, client) => {
- const body: Record = { name, driver, internal, attachable };
+ const options: Record = { driver, internal, attachable };
if (subnet || gateway || ipRange) {
- body.ipam = {
+ options.ipam = {
driver: "default",
config: [{ subnet, gateway, ipRange }],
};
}
- const response = await client.post<{ data: { id: string; name: string } }>(
+ const response = await client.post<{ data: { id: string; warning?: string } }>(
`/environments/${environmentId}/networks`,
- body
+ { name, options }
);
- return `Network created successfully!\n Name: ${response.data.name}\n ID: ${response.data.id}`;
+ const lines = [`Network created successfully!`, ` Name: ${name}`, ` ID: ${response.data.id}`];
+ if (response.data.warning) {
+ lines.push(` Warning: ${response.data.warning}`);
+ }
+ return lines.join("\n");
})
);
@@ -190,13 +195,13 @@ export function registerNetworkTools(server: McpServer, registry?: ToolRegistry)
},
},
toolHandler(async ({ environmentId }, client) => {
- const response = await client.post<{ networksDeleted?: string[] }>(
- `/environments/${environmentId}/networks/prune`
- );
+ const response = await client.post<{
+ data: { networksDeleted?: string[] | null; spaceReclaimed?: number };
+ }>(`/environments/${environmentId}/networks/prune`);
- const deleted = response.networksDeleted?.length || 0;
+ const deleted = response.data.networksDeleted?.length || 0;
return deleted > 0
- ? `Pruned ${deleted} unused networks: ${response.networksDeleted?.join(", ")}`
+ ? `Pruned ${deleted} unused networks: ${response.data.networksDeleted?.join(", ")}`
: "No unused networks to prune.";
})
);
@@ -219,13 +224,10 @@ export function registerNetworkTools(server: McpServer, registry?: ToolRegistry)
},
toolHandler(async ({ environmentId }, client) => {
const response = await client.get<{
- total: number;
- bridge: number;
- overlay: number;
- other: number;
+ data: { total: number; inuse: number; unused: number };
}>(`/environments/${environmentId}/networks/counts`);
- return `Network Counts:\n Total: ${response.total}\n Bridge: ${response.bridge || 0}\n Overlay: ${response.overlay || 0}\n Other: ${response.other || 0}`;
+ return `Network Counts:\n Total: ${response.data.total}\n In Use: ${response.data.inuse || 0}\n Unused: ${response.data.unused || 0}`;
})
);
diff --git a/src/tools/network-topology-tools.ts b/src/tools/network-topology-tools.ts
index c42ac89..e6a40b3 100644
--- a/src/tools/network-topology-tools.ts
+++ b/src/tools/network-topology-tools.ts
@@ -42,7 +42,7 @@ export function registerNetworkTopologyTools(server: McpServer, registry?: ToolR
];
for (const node of topology.nodes) {
- const status = node.status ? ` [${node.status.toUpperCase()}]` : "";
+ const status = node.metadata?.status ? ` [${node.metadata.status.toUpperCase()}]` : "";
lines.push(` [${node.type.toUpperCase()}] ${node.name}${status} (${node.id})`);
}
@@ -50,8 +50,8 @@ export function registerNetworkTopologyTools(server: McpServer, registry?: ToolR
lines.push("");
lines.push("Connections:");
for (const edge of topology.edges) {
- const type = edge.type ? ` (${edge.type})` : "";
- lines.push(` ${edge.source} -> ${edge.target}${type}`);
+ const ip = edge.ipv4Address ? ` (${edge.ipv4Address})` : "";
+ lines.push(` ${edge.source} -> ${edge.target}${ip}`);
}
}
diff --git a/src/tools/notification-tools.ts b/src/tools/notification-tools.ts
index 71b8478..22d24c7 100644
--- a/src/tools/notification-tools.ts
+++ b/src/tools/notification-tools.ts
@@ -7,14 +7,43 @@ import { z } from "zod";
import { toolHandler } from "../utils/tool-helpers.js";
import { moduleRegistrar, type ToolRegistry } from "./registry.js";
+const NOTIFICATION_PROVIDERS = [
+ "discord",
+ "email",
+ "telegram",
+ "signal",
+ "slack",
+ "ntfy",
+ "pushover",
+ "matrix",
+ "generic",
+] as const;
+
+interface NotificationSettings {
+ id: string;
+ provider: string;
+ enabled: boolean;
+ config: Record;
+}
+
+/** Mask likely-sensitive config values (tokens, webhook URLs with credentials) */
+function formatConfig(config: Record): string[] {
+ return Object.entries(config).map(([key, value]) => {
+ const sensitive = /token|secret|password|key|webhook/i.test(key);
+ const display = sensitive ? "*****" : String(value);
+ return ` ${key}: ${display}`;
+ });
+}
+
export function registerNotificationTools(server: McpServer, registry?: ToolRegistry): void {
const register = moduleRegistrar(server, registry, "notification");
+
// arcane_notification_get_settings
register(
"arcane_notification_get_settings",
{
title: "Get notification settings",
- description: "Get notification settings for an environment",
+ description: "List configured notification providers for an environment (Discord, email, Telegram, Slack, ntfy, etc.)",
annotations: {
readOnlyHint: true,
destructiveHint: false,
@@ -23,30 +52,34 @@ export function registerNotificationTools(server: McpServer, registry?: ToolRegi
},
inputSchema: {
environmentId: z.string().describe("Environment ID"),
+ provider: z.enum(NOTIFICATION_PROVIDERS).optional().describe("Only show a specific provider"),
},
},
- toolHandler(async ({ environmentId }, client) => {
- const response = await client.get<{
- data: {
- enabled: boolean;
- onContainerStart: boolean;
- onContainerStop: boolean;
- onContainerHealth: boolean;
- onImageUpdate: boolean;
- onBackupComplete: boolean;
- };
- }>(`/environments/${environmentId}/notifications/settings`);
+ toolHandler(async ({ environmentId, provider }, client) => {
+ if (provider) {
+ const settings = await client.get(
+ `/environments/${environmentId}/notifications/settings/${provider}`
+ );
+ const lines = [
+ `Notification Settings (${settings.provider}):`,
+ ` Enabled: ${settings.enabled ? "Yes" : "No"}`,
+ ...formatConfig(settings.config || {}),
+ ];
+ return lines.join("\n");
+ }
- const settings = response.data;
- const lines = [
- `Notification Settings:`,
- ` Enabled: ${settings.enabled ? "Yes" : "No"}`,
- ` Container Start: ${settings.onContainerStart ? "Yes" : "No"}`,
- ` Container Stop: ${settings.onContainerStop ? "Yes" : "No"}`,
- ` Container Health: ${settings.onContainerHealth ? "Yes" : "No"}`,
- ` Image Update: ${settings.onImageUpdate ? "Yes" : "No"}`,
- ` Backup Complete: ${settings.onBackupComplete ? "Yes" : "No"}`,
- ];
+ const settings = await client.get(
+ `/environments/${environmentId}/notifications/settings`
+ );
+
+ if (!settings || settings.length === 0) {
+ return "No notification providers configured.";
+ }
+
+ const lines = ["Notification Settings:"];
+ for (const s of settings) {
+ lines.push(` ${s.provider}: ${s.enabled ? "enabled" : "disabled"}`);
+ }
return lines.join("\n");
})
@@ -57,137 +90,59 @@ export function registerNotificationTools(server: McpServer, registry?: ToolRegi
"arcane_notification_update_settings",
{
title: "Update notification settings",
- description: "Update notification settings for an environment",
- annotations: {
- readOnlyHint: false,
- destructiveHint: false,
- idempotentHint: true,
- openWorldHint: false,
- },
- inputSchema: {
- environmentId: z.string().describe("Environment ID"),
- enabled: z.boolean().optional().describe("Enable/disable notifications"),
- onContainerStart: z.boolean().optional().describe("Notify on container start"),
- onContainerStop: z.boolean().optional().describe("Notify on container stop"),
- onContainerHealth: z.boolean().optional().describe("Notify on health check changes"),
- onImageUpdate: z.boolean().optional().describe("Notify when image updates available"),
- onBackupComplete: z.boolean().optional().describe("Notify on backup completion"),
- },
- },
- toolHandler(async ({ environmentId, enabled, onContainerStart, onContainerStop, onContainerHealth, onImageUpdate, onBackupComplete }, client) => {
- const body: Record = {};
- if (enabled !== undefined) body.enabled = enabled;
- if (onContainerStart !== undefined) body.onContainerStart = onContainerStart;
- if (onContainerStop !== undefined) body.onContainerStop = onContainerStop;
- if (onContainerHealth !== undefined) body.onContainerHealth = onContainerHealth;
- if (onImageUpdate !== undefined) body.onImageUpdate = onImageUpdate;
- if (onBackupComplete !== undefined) body.onBackupComplete = onBackupComplete;
-
- await client.put(`/environments/${environmentId}/notifications/settings`, body);
- return "Notification settings updated.";
- })
- );
-
- // arcane_notification_test
- register(
- "arcane_notification_test",
- {
- title: "Test notification",
- description: "Send a test notification to verify configuration",
+ description: "Create or update notification settings for a provider (Discord, email, Telegram, Slack, ntfy, etc.)",
annotations: {
readOnlyHint: false,
destructiveHint: false,
- idempotentHint: false,
- openWorldHint: false,
- },
- inputSchema: {
- environmentId: z.string().describe("Environment ID"),
- provider: z.string().optional().describe("Specific provider to test"),
- },
- },
- toolHandler(async ({ environmentId, provider }, client) => {
- await client.post(`/environments/${environmentId}/notifications/test/${provider || "all"}`);
- return "Test notification sent.";
- })
- );
-
- // arcane_notification_apprise_get
- register(
- "arcane_notification_apprise_get",
- {
- title: "Get Apprise config",
- description: "Get Apprise notification configuration",
- annotations: {
- readOnlyHint: true,
- destructiveHint: false,
idempotentHint: true,
openWorldHint: false,
},
inputSchema: {
environmentId: z.string().describe("Environment ID"),
+ provider: z.enum(NOTIFICATION_PROVIDERS).describe("Notification provider"),
+ enabled: z.boolean().describe("Enable/disable this provider"),
+ config: z.record(z.unknown()).optional().describe("Provider-specific configuration (e.g., webhookUrl for Discord, smtp settings for email)"),
},
},
- toolHandler(async ({ environmentId }, client) => {
- const response = await client.get<{
- data: {
- enabled: boolean;
- urls: string[];
- };
- }>(`/environments/${environmentId}/notifications/apprise`);
-
- const config = response.data;
- const lines = [
- `Apprise Configuration:`,
- ` Enabled: ${config.enabled ? "Yes" : "No"}`,
- ` URLs: ${config.urls?.length || 0}`,
- ];
-
- if (config.urls && config.urls.length > 0) {
- for (const url of config.urls) {
- // Mask sensitive parts of URLs
- const maskedUrl = url.replace(/:\/\/[^@]+@/, "://*****@");
- lines.push(` - ${maskedUrl}`);
- }
- }
-
- return lines.join("\n");
+ toolHandler(async ({ environmentId, provider, enabled, config }, client) => {
+ await client.post(`/environments/${environmentId}/notifications/settings`, {
+ provider,
+ enabled,
+ config: config || {},
+ });
+ return `Notification settings for ${provider} updated.`;
})
);
- // arcane_notification_apprise_update
+ // arcane_notification_delete_settings
register(
- "arcane_notification_apprise_update",
+ "arcane_notification_delete_settings",
{
- title: "Update Apprise config",
- description: "Update Apprise notification configuration",
+ title: "Delete notification settings",
+ description: "Delete the notification settings of a provider",
annotations: {
readOnlyHint: false,
- destructiveHint: false,
+ destructiveHint: true,
idempotentHint: true,
openWorldHint: false,
},
inputSchema: {
environmentId: z.string().describe("Environment ID"),
- enabled: z.boolean().optional().describe("Enable/disable Apprise"),
- urls: z.array(z.string()).optional().describe("Apprise notification URLs"),
+ provider: z.enum(NOTIFICATION_PROVIDERS).describe("Notification provider to delete"),
},
},
- toolHandler(async ({ environmentId, enabled, urls }, client) => {
- const body: Record = {};
- if (enabled !== undefined) body.enabled = enabled;
- if (urls !== undefined) body.urls = urls;
-
- await client.put(`/environments/${environmentId}/notifications/apprise`, body);
- return "Apprise configuration updated.";
+ toolHandler(async ({ environmentId, provider }, client) => {
+ await client.delete(`/environments/${environmentId}/notifications/settings/${provider}`);
+ return `Notification settings for ${provider} deleted.`;
})
);
- // arcane_notification_apprise_test
+ // arcane_notification_test
register(
- "arcane_notification_apprise_test",
+ "arcane_notification_test",
{
- title: "Test Apprise notification",
- description: "Send a test notification through Apprise",
+ title: "Test notification",
+ description: "Send a test notification to verify a provider's configuration",
annotations: {
readOnlyHint: false,
destructiveHint: false,
@@ -196,11 +151,17 @@ export function registerNotificationTools(server: McpServer, registry?: ToolRegi
},
inputSchema: {
environmentId: z.string().describe("Environment ID"),
+ provider: z.enum(NOTIFICATION_PROVIDERS).describe("Provider to test"),
},
},
- toolHandler(async ({ environmentId }, client) => {
- await client.post(`/environments/${environmentId}/notifications/apprise/test`);
- return "Apprise test notification sent.";
+ toolHandler(async ({ environmentId, provider }, client) => {
+ const response = await client.post<{ data?: { message?: string; warning?: string } }>(
+ `/environments/${environmentId}/notifications/test/${provider}`
+ );
+
+ let text = response.data?.message || "Test notification sent.";
+ if (response.data?.warning) text += `\nWarning: ${response.data.warning}`;
+ return text;
})
);
diff --git a/src/tools/port-tools.ts b/src/tools/port-tools.ts
index b4c09c3..98004ed 100644
--- a/src/tools/port-tools.ts
+++ b/src/tools/port-tools.ts
@@ -35,18 +35,18 @@ export function registerPortTools(server: McpServer, registry?: ToolRegistry): v
toolHandler(async ({ environmentId, search, sort, order, start, limit }, client) => {
const response = await client.get<{
data: PortMapping[];
- pagination: { total: number; start: number; limit: number };
+ pagination: { totalItems: number };
}>(`/environments/${environmentId}/ports`, { search, sort, order, start, limit });
if (!response.data || response.data.length === 0) {
return "No port mappings found.";
}
- const lines = [`Found ${response.pagination.total} port mappings:\n`];
+ const lines = [`Found ${response.pagination.totalItems} port mappings:\n`];
for (const port of response.data) {
- const binding = port.publicPort
- ? `${port.ip || "0.0.0.0"}:${port.publicPort} -> ${port.privatePort}/${port.protocol}`
- : `${port.privatePort}/${port.protocol} (not published)`;
+ const binding = port.isPublished && port.hostPort
+ ? `${port.hostIp || "0.0.0.0"}:${port.hostPort} -> ${port.containerPort}/${port.protocol}`
+ : `${port.containerPort}/${port.protocol} (not published)`;
lines.push(`${port.containerName}: ${binding}`);
}
diff --git a/src/tools/project-tools.ts b/src/tools/project-tools.ts
index 0eadd73..2be624d 100644
--- a/src/tools/project-tools.ts
+++ b/src/tools/project-tools.ts
@@ -6,7 +6,8 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";
import { toolHandler } from "../utils/tool-helpers.js";
import { moduleRegistrar, type ToolRegistry } from "./registry.js";
-import { MAX_DISPLAY_SERVICES } from "../constants.js";
+import { MAX_DISPLAY_SERVICES, DEFAULT_LOG_TAIL, MAX_LOG_LINES } from "../constants.js";
+import { formatLogResult } from "../utils/log-format.js";
import type { Project } from "../types/arcane-types.js";
export function registerProjectTools(server: McpServer, registry?: ToolRegistry): void {
@@ -17,7 +18,7 @@ export function registerProjectTools(server: McpServer, registry?: ToolRegistry)
"arcane_project_list",
{
title: "List projects",
- description: "List Docker Compose projects/stacks in an environment",
+ description: "List Docker Compose projects/stacks in an environment. Use the `updates` filter (e.g. 'has_update') to list projects with pending image updates, including which images are outdated.",
annotations: {
readOnlyHint: true,
destructiveHint: false,
@@ -27,36 +28,47 @@ export function registerProjectTools(server: McpServer, registry?: ToolRegistry)
inputSchema: {
environmentId: z.string().describe("Environment ID"),
search: z.string().optional().describe("Search query to filter projects"),
+ status: z.string().optional().describe("Filter by status (comma-separated: running,stopped,partially running)"),
+ updates: z.enum(["has_update", "up_to_date", "error", "unknown"]).optional().describe("Filter by image update status — 'has_update' lists only projects with pending updates"),
sort: z.string().optional().describe("Column to sort by"),
order: z.enum(["asc", "desc"]).optional().default("asc").describe("Sort direction"),
start: z.number().optional().default(0).describe("Pagination start index"),
- limit: z.number().optional().default(20).describe("Items per page"),
+ limit: z.number().optional().default(20).describe("Items per page (-1 for all)"),
},
},
- toolHandler(async ({ environmentId, search, sort, order, start, limit }, client) => {
+ toolHandler(async ({ environmentId, search, status, updates, sort, order, start, limit }, client) => {
const response = await client.get<{
data: Project[];
- pagination: { total: number; start: number; limit: number };
- }>(`/environments/${environmentId}/projects`, { search, sort, order, start, limit });
+ pagination: { totalItems: number };
+ }>(`/environments/${environmentId}/projects`, { search, status, updates, sort, order, start, limit });
if (!response.data || response.data.length === 0) {
- return "No projects found.";
+ return updates ? `No projects with update status "${updates}" found.` : "No projects found.";
}
- const lines = [`Found ${response.pagination.total} projects:\n`];
+ const lines = [`Found ${response.pagination.totalItems} projects:\n`];
for (const project of response.data) {
- const status = project.status === "running" ? "[RUNNING]" : "[STOPPED]";
- lines.push(`${status} ${project.name}`);
+ const projectStatus = project.status === "running" ? "[RUNNING]" : "[STOPPED]";
+ const updateFlag = project.updateInfo?.hasUpdate ? " [UPDATES AVAILABLE]" : "";
+ lines.push(`${projectStatus}${updateFlag} ${project.name}`);
lines.push(` ID: ${project.id}`);
- lines.push(` Services: ${project.services?.length || 0}`);
- if (project.services && project.services.length > 0) {
- for (const svc of project.services.slice(0, MAX_DISPLAY_SERVICES)) {
- lines.push(` - ${svc.name}: ${svc.status}`);
+ lines.push(` Services: ${project.serviceCount ?? project.runtimeServices?.length ?? 0}`);
+ if (project.runtimeServices && project.runtimeServices.length > 0) {
+ for (const svc of project.runtimeServices.slice(0, MAX_DISPLAY_SERVICES)) {
+ lines.push(` - ${svc.name}: ${svc.status}${svc.health ? ` (${svc.health})` : ""}`);
}
- if (project.services.length > MAX_DISPLAY_SERVICES) {
- lines.push(` ... and ${project.services.length - MAX_DISPLAY_SERVICES} more`);
+ if (project.runtimeServices.length > MAX_DISPLAY_SERVICES) {
+ lines.push(` ... and ${project.runtimeServices.length - MAX_DISPLAY_SERVICES} more`);
}
}
+ const u = project.updateInfo;
+ if (u?.hasUpdate) {
+ const refs = u.updatedImageRefs?.length ? u.updatedImageRefs.join(", ") : `${u.imagesWithUpdates ?? "?"} of ${u.imageCount ?? "?"} images`;
+ lines.push(` Updates: ${refs}`);
+ if (u.lastCheckedAt) lines.push(` Last checked: ${u.lastCheckedAt}`);
+ } else if (u?.status === "error" && u.errorMessage) {
+ lines.push(` Update check error: ${u.errorMessage}`);
+ }
lines.push("");
}
@@ -94,18 +106,57 @@ export function registerProjectTools(server: McpServer, registry?: ToolRegistry)
` Path: ${proj.path || "N/A"}`,
` Created: ${proj.createdAt || "N/A"}`,
` Updated: ${proj.updatedAt || "N/A"}`,
- "",
- "Services:",
];
- for (const svc of proj.services || []) {
- lines.push(` - ${svc.name}: ${svc.status} (${svc.containerCount || 0} containers)`);
+ const u = proj.updateInfo;
+ if (u?.hasUpdate) {
+ const refs = u.updatedImageRefs?.length ? u.updatedImageRefs.join(", ") : `${u.imagesWithUpdates ?? "?"} of ${u.imageCount ?? "?"} images`;
+ lines.push(` Image updates available: ${refs}`);
+ } else if (u) {
+ lines.push(` Image updates: ${u.status}${u.errorMessage ? ` (${u.errorMessage})` : ""}`);
+ }
+
+ lines.push("", "Services:");
+ for (const svc of proj.runtimeServices || []) {
+ lines.push(` - ${svc.name}: ${svc.status}${svc.health ? ` (${svc.health})` : ""}${svc.containerName ? ` [${svc.containerName}]` : ""}`);
}
return lines.join("\n");
})
);
+ // arcane_project_get_logs
+ register(
+ "arcane_project_get_logs",
+ {
+ title: "Get project logs",
+ description: "Fetch recent log lines of all services in a Compose project (lines are prefixed with the service name). For live following, call repeatedly with 'since' set to the newest timestamp seen — each call then returns only new lines.",
+ annotations: {
+ readOnlyHint: true,
+ destructiveHint: false,
+ idempotentHint: true,
+ openWorldHint: false,
+ },
+ inputSchema: {
+ environmentId: z.string().describe("Environment ID"),
+ projectId: z.string().describe("Project ID"),
+ tail: z.number().optional().default(DEFAULT_LOG_TAIL).describe("Number of most recent lines to return initially"),
+ since: z.string().optional().describe("Only return lines after this time — RFC3339 timestamp (from a previous call) or relative duration like '5m'"),
+ timestamps: z.boolean().optional().default(true).describe("Prefix each line with its timestamp (needed for incremental follow-up via 'since')"),
+ maxLines: z.number().optional().default(200).describe(`Hard cap on returned lines to protect the context window (max ${MAX_LOG_LINES})`),
+ },
+ },
+ toolHandler(async ({ environmentId, projectId, tail, since, timestamps, maxLines }, client) => {
+ const result = await client.fetchLogs(
+ `/environments/${environmentId}/ws/projects/${projectId}/logs`,
+ { follow: false, tail, since, timestamps },
+ Math.min(maxLines, MAX_LOG_LINES)
+ );
+
+ return formatLogResult(`project ${projectId}`, result, timestamps);
+ })
+ );
+
// arcane_project_create
register(
"arcane_project_create",
@@ -123,13 +174,12 @@ export function registerProjectTools(server: McpServer, registry?: ToolRegistry)
name: z.string().describe("Project name"),
composeContent: z.string().describe("Docker Compose YAML content"),
envContent: z.string().optional().describe("Environment variables content (.env format)"),
- directory: z.string().optional().describe("Project directory path (supports nested and symlinked directories)"),
},
},
- toolHandler(async ({ environmentId, name, composeContent, envContent, directory }, client) => {
+ toolHandler(async ({ environmentId, name, composeContent, envContent }, client) => {
const response = await client.post<{ data: { id: string; name: string } }>(
`/environments/${environmentId}/projects`,
- { name, composeContent, envContent, directory }
+ { name, composeContent, envContent }
);
return `Project created successfully!\n Name: ${response.data.name}\n ID: ${response.data.id}`;
@@ -257,6 +307,38 @@ export function registerProjectTools(server: McpServer, registry?: ToolRegistry)
})
);
+ // arcane_project_update_services
+ register(
+ "arcane_project_update_services",
+ {
+ title: "Update project services",
+ description: "Pull the latest images and recreate services of a Compose project (all services when none are given). This is the dedicated update action (permission projects:update) — prefer it over manual pull + redeploy. Runs in the background; track progress with arcane_activity_list.",
+ annotations: {
+ readOnlyHint: false,
+ destructiveHint: false,
+ idempotentHint: false,
+ openWorldHint: true,
+ },
+ inputSchema: {
+ environmentId: z.string().describe("Environment ID"),
+ projectId: z.string().describe("Project ID"),
+ services: z.array(z.string()).optional().describe("Service names to update; omit to update all services"),
+ },
+ },
+ toolHandler(async ({ environmentId, projectId, services }, client) => {
+ client.postInBackground(
+ `/environments/${environmentId}/projects/${projectId}/update-services`,
+ services && services.length > 0 ? { services } : {}
+ );
+
+ const scope = services && services.length > 0 ? `services ${services.join(", ")}` : "all services";
+ return [
+ `Update of ${scope} in project ${projectId} started in the background (pulls latest images and recreates the services).`,
+ "Track progress with arcane_activity_list / arcane_activity_get; verify afterwards with arcane_project_get.",
+ ].join("\n");
+ })
+ );
+
// arcane_project_destroy
register(
"arcane_project_destroy",
@@ -273,10 +355,15 @@ export function registerProjectTools(server: McpServer, registry?: ToolRegistry)
environmentId: z.string().describe("Environment ID"),
projectId: z.string().describe("Project ID"),
removeVolumes: z.boolean().optional().default(false).describe("Also remove volumes (DATA LOSS!)"),
+ removeFiles: z.boolean().optional().default(false).describe("Also remove the project files from disk"),
},
},
- toolHandler(async ({ environmentId, projectId, removeVolumes }, client) => {
- await client.delete(`/environments/${environmentId}/projects/${projectId}`, { removeVolumes });
+ toolHandler(async ({ environmentId, projectId, removeVolumes, removeFiles }, client) => {
+ await client.delete(
+ `/environments/${environmentId}/projects/${projectId}/destroy`,
+ undefined,
+ { removeVolumes, removeFiles }
+ );
return `Project ${projectId} destroyed.${removeVolumes ? " Volumes were also removed." : ""}`;
})
);
@@ -322,13 +409,16 @@ export function registerProjectTools(server: McpServer, registry?: ToolRegistry)
},
toolHandler(async ({ environmentId }, client) => {
const response = await client.get<{
- total: number;
- running: number;
- stopped: number;
- partial: number;
+ data: {
+ totalProjects: number;
+ runningProjects: number;
+ stoppedProjects: number;
+ archivedProjects?: number;
+ };
}>(`/environments/${environmentId}/projects/counts`);
- return `Project Counts:\n Total: ${response.total}\n Running: ${response.running || 0}\n Stopped: ${response.stopped || 0}\n Partial: ${response.partial || 0}`;
+ const c = response.data;
+ return `Project Counts:\n Total: ${c.totalProjects}\n Running: ${c.runningProjects || 0}\n Stopped: ${c.stoppedProjects || 0}\n Archived: ${c.archivedProjects || 0}`;
})
);
diff --git a/src/tools/registry-tools.ts b/src/tools/registry-tools.ts
index 9a9fe71..f974d5b 100644
--- a/src/tools/registry-tools.ts
+++ b/src/tools/registry-tools.ts
@@ -31,21 +31,20 @@ export function registerRegistryTools(server: McpServer, registry?: ToolRegistry
toolHandler(async ({ search, start, limit }, client) => {
const response = await client.get<{
data: ContainerRegistry[];
- pagination: { total: number };
+ pagination: { totalItems: number };
}>("/container-registries", { search, start, limit });
if (!response.data || response.data.length === 0) {
return "No container registries configured.";
}
- const lines = [`Found ${response.pagination.total} registries:\n`];
+ const lines = [`Found ${response.pagination.totalItems} registries:\n`];
for (const reg of response.data) {
- const status = reg.lastTestStatus || "untested";
- lines.push(`${reg.name}`);
+ lines.push(`${reg.description || reg.url}`);
lines.push(` ID: ${reg.id}`);
lines.push(` URL: ${reg.url}`);
- lines.push(` Type: ${reg.type}`);
- lines.push(` Status: ${status}`);
+ lines.push(` Type: ${reg.registryType}`);
+ lines.push(` Enabled: ${reg.enabled ? "Yes" : "No"}`);
lines.push("");
}
@@ -76,13 +75,14 @@ export function registerRegistryTools(server: McpServer, registry?: ToolRegistry
const reg = response.data;
const lines = [
- `Registry: ${reg.name}`,
+ `Registry: ${reg.description || reg.url}`,
` ID: ${reg.id}`,
` URL: ${reg.url}`,
- ` Type: ${reg.type}`,
+ ` Type: ${reg.registryType}`,
` Username: ${reg.username || "N/A"}`,
+ ` Enabled: ${reg.enabled ? "Yes" : "No"}`,
+ ` Insecure: ${reg.insecure ? "Yes" : "No"}`,
` Created: ${reg.createdAt || "N/A"}`,
- ` Last Test: ${reg.lastTestAt || "Never"} (${reg.lastTestStatus || "N/A"})`,
];
return lines.join("\n");
@@ -102,23 +102,36 @@ export function registerRegistryTools(server: McpServer, registry?: ToolRegistry
openWorldHint: false,
},
inputSchema: {
- name: z.string().describe("Registry name"),
+ description: z.string().describe("Registry description (display label)"),
url: z.string().describe("Registry URL (e.g., docker.io, ghcr.io)"),
- type: z.enum(["dockerhub", "gcr", "ecr", "acr", "ghcr", "custom"]).describe("Registry type"),
+ registryType: z.enum(["dockerhub", "gcr", "ecr", "acr", "ghcr", "custom"]).describe("Registry type"),
username: z.string().optional().describe("Username for authentication"),
- password: z.string().optional().describe("Password or token"),
+ token: z.string().optional().describe("Access token / password for authentication"),
+ insecure: z.boolean().optional().default(false).describe("Allow insecure (non-TLS) connections"),
+ enabled: z.boolean().optional().default(true).describe("Whether the registry is enabled"),
awsRegion: z.string().optional().describe("AWS region (required for ECR registries)"),
awsAccessKeyId: z.string().optional().describe("AWS access key ID (for ECR registries)"),
awsSecretAccessKey: z.string().optional().describe("AWS secret access key (for ECR registries)"),
},
},
- toolHandler(async ({ name, url, type, username, password, awsRegion, awsAccessKeyId, awsSecretAccessKey }, client) => {
- const response = await client.post<{ data: { id: string; name: string } }>(
+ toolHandler(async ({ description, url, registryType, username, token, insecure, enabled, awsRegion, awsAccessKeyId, awsSecretAccessKey }, client) => {
+ const response = await client.post<{ data: { id: string } }>(
"/container-registries",
- { name, url, type, username, password, awsRegion, awsAccessKeyId, awsSecretAccessKey }
+ {
+ description,
+ url,
+ registryType,
+ username: username ?? "",
+ token: token ?? "",
+ insecure,
+ enabled,
+ awsRegion: awsRegion ?? "",
+ awsAccessKeyId: awsAccessKeyId ?? "",
+ awsSecretAccessKey: awsSecretAccessKey ?? "",
+ }
);
- return `Registry created: ${response.data.name} (ID: ${response.data.id})`;
+ return `Registry created: ${description} (ID: ${response.data.id})`;
})
);
@@ -136,18 +149,18 @@ export function registerRegistryTools(server: McpServer, registry?: ToolRegistry
},
inputSchema: {
registryId: z.string().describe("Registry ID"),
- name: z.string().optional().describe("New name"),
+ description: z.string().optional().describe("New description (display label)"),
url: z.string().optional().describe("New URL"),
username: z.string().optional().describe("New username"),
- password: z.string().optional().describe("New password"),
+ token: z.string().optional().describe("New access token / password"),
},
},
- toolHandler(async ({ registryId, name, url, username, password }, client) => {
+ toolHandler(async ({ registryId, description, url, username, token }, client) => {
const body: Record = {};
- if (name) body.name = name;
+ if (description) body.description = description;
if (url) body.url = url;
if (username) body.username = username;
- if (password) body.password = password;
+ if (token) body.token = token;
await client.put(`/container-registries/${registryId}`, body);
return `Registry ${registryId} updated.`;
@@ -193,10 +206,10 @@ export function registerRegistryTools(server: McpServer, registry?: ToolRegistry
},
},
toolHandler(async ({ registryId }, client) => {
- const response = await client.post<{ message: string }>(
+ const response = await client.post<{ data: { message?: string } }>(
`/container-registries/${registryId}/test`
);
- return response.message || "Connection successful!";
+ return response.data?.message || "Connection successful!";
})
);
@@ -214,7 +227,7 @@ export function registerRegistryTools(server: McpServer, registry?: ToolRegistry
},
},
toolHandler(async (_params, client) => {
- await client.post("/container-registries/sync");
+ await client.post("/container-registries/sync", { registries: [] });
return "Registry sync initiated.";
})
);
diff --git a/src/tools/settings-tools.ts b/src/tools/settings-tools.ts
index f160c61..f84dbff 100644
--- a/src/tools/settings-tools.ts
+++ b/src/tools/settings-tools.ts
@@ -26,14 +26,17 @@ export function registerSettingsTools(server: McpServer, registry?: ToolRegistry
},
},
toolHandler(async ({ environmentId }, client) => {
- const response = await client.get<{
- data: Record;
- }>(`/environments/${environmentId}/settings`);
+ const settings = await client.get>(
+ `/environments/${environmentId}/settings`
+ );
+
+ if (!settings || settings.length === 0) {
+ return "No settings found.";
+ }
const lines = ["Environment Settings:\n"];
- for (const [key, value] of Object.entries(response.data)) {
- const displayValue = typeof value === "object" ? JSON.stringify(value) : String(value);
- lines.push(` ${key}: ${displayValue}`);
+ for (const setting of settings) {
+ lines.push(` ${setting.key}: ${setting.value}`);
}
return lines.join("\n");
@@ -54,7 +57,7 @@ export function registerSettingsTools(server: McpServer, registry?: ToolRegistry
},
inputSchema: {
environmentId: z.string().describe("Environment ID"),
- settings: z.record(z.unknown()).describe("Settings to update (key-value pairs)"),
+ settings: z.record(z.string()).describe("Settings to update (key-value pairs; all values must be strings, e.g. \"true\", \"30\")"),
},
},
toolHandler(async ({ environmentId, settings }, client) => {
@@ -75,16 +78,22 @@ export function registerSettingsTools(server: McpServer, registry?: ToolRegistry
idempotentHint: true,
openWorldHint: false,
},
+ inputSchema: {
+ environmentId: z.string().describe("Environment ID"),
},
- toolHandler(async (_params, client) => {
- const response = await client.get<{
- data: Record;
- }>("/settings/public");
+ },
+ toolHandler(async ({ environmentId }, client) => {
+ const settings = await client.get>(
+ `/environments/${environmentId}/settings/public`
+ );
+
+ if (!settings || settings.length === 0) {
+ return "No public settings found.";
+ }
const lines = ["Public Settings:\n"];
- for (const [key, value] of Object.entries(response.data)) {
- const displayValue = typeof value === "object" ? JSON.stringify(value) : String(value);
- lines.push(` ${key}: ${displayValue}`);
+ for (const setting of settings) {
+ lines.push(` ${setting.key}: ${setting.value}`);
}
return lines.join("\n");
@@ -105,17 +114,17 @@ export function registerSettingsTools(server: McpServer, registry?: ToolRegistry
},
},
toolHandler(async (_params, client) => {
- const response = await client.get<{
- data: Array<{ id: string; name: string; description?: string }>;
- }>("/customize/categories");
+ const categories = await client.get<
+ Array<{ id: string; title: string; description?: string }>
+ >("/customize/categories");
- if (!response.data || response.data.length === 0) {
+ if (!categories || categories.length === 0) {
return "No settings categories found.";
}
const lines = ["Settings Categories:\n"];
- for (const cat of response.data) {
- lines.push(`${cat.name} (${cat.id})`);
+ for (const cat of categories) {
+ lines.push(`${cat.title} (${cat.id})`);
if (cat.description) {
lines.push(` ${cat.description}`);
}
@@ -143,24 +152,35 @@ export function registerSettingsTools(server: McpServer, registry?: ToolRegistry
},
toolHandler(async ({ query }, client) => {
const response = await client.post<{
- data: Array<{
- category: string;
- key: string;
- value: unknown;
+ query: string;
+ count: number;
+ results: Array<{
+ id: string;
+ title: string;
description?: string;
- }>;
+ matchingSettings?: Array<{
+ key: string;
+ label: string;
+ type: string;
+ description?: string;
+ }> | null;
+ }> | null;
}>("/customize/search", { query });
- if (!response.data || response.data.length === 0) {
+ if (!response.results || response.results.length === 0) {
return `No settings matching "${query}" found.`;
}
- const lines = [`Search results for "${query}":\n`];
- for (const result of response.data) {
- lines.push(`${result.category}/${result.key}`);
- lines.push(` Value: ${JSON.stringify(result.value)}`);
- if (result.description) {
- lines.push(` Description: ${result.description}`);
+ const lines = [`Search results for "${query}" (${response.count} matches):\n`];
+ for (const result of response.results) {
+ lines.push(`${result.title}`);
+ if (result.matchingSettings && result.matchingSettings.length > 0) {
+ for (const setting of result.matchingSettings) {
+ lines.push(` ${setting.key}: ${setting.label}`);
+ if (setting.description) {
+ lines.push(` ${setting.description}`);
+ }
+ }
}
lines.push("");
}
@@ -196,14 +216,14 @@ export function registerSettingsTools(server: McpServer, registry?: ToolRegistry
lastUsedAt?: string;
expiresAt?: string;
}>;
- pagination: { total: number };
+ pagination: { totalItems: number };
}>("/api-keys", { start, limit });
if (!response.data || response.data.length === 0) {
return "No API keys found.";
}
- const lines = [`Found ${response.pagination.total} API keys:\n`];
+ const lines = [`Found ${response.pagination.totalItems} API keys:\n`];
for (const key of response.data) {
lines.push(`${key.name}`);
lines.push(` ID: ${key.id}`);
diff --git a/src/tools/swarm-tools.ts b/src/tools/swarm-tools.ts
index 60e2465..1bd84f6 100644
--- a/src/tools/swarm-tools.ts
+++ b/src/tools/swarm-tools.ts
@@ -6,6 +6,8 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";
import { toolHandler } from "../utils/tool-helpers.js";
import { moduleRegistrar, type ToolRegistry } from "./registry.js";
+import { DEFAULT_LOG_TAIL, MAX_LOG_LINES } from "../constants.js";
+import { formatLogResult } from "../utils/log-format.js";
import type { SwarmService, SwarmClusterInfo } from "../types/arcane-types.js";
export function registerSwarmTools(server: McpServer, registry?: ToolRegistry): void {
@@ -35,19 +37,19 @@ export function registerSwarmTools(server: McpServer, registry?: ToolRegistry):
toolHandler(async ({ environmentId, search, sort, order, start, limit }, client) => {
const response = await client.get<{
data: SwarmService[];
- pagination: { total: number; start: number; limit: number };
+ pagination: { totalItems: number };
}>(`/environments/${environmentId}/swarm/services`, { search, sort, order, start, limit });
if (!response.data || response.data.length === 0) {
return "No swarm services found.";
}
- const lines = [`Found ${response.pagination.total} swarm services:\n`];
+ const lines = [`Found ${response.pagination.totalItems} swarm services:\n`];
for (const svc of response.data) {
lines.push(`${svc.name}`);
lines.push(` ID: ${svc.id}`);
lines.push(` Image: ${svc.image}`);
- lines.push(` Replicas: ${svc.replicas}/${svc.desiredReplicas}`);
+ lines.push(` Replicas: ${svc.runningReplicas}/${svc.replicas}`);
if (svc.mode) lines.push(` Mode: ${svc.mode}`);
if (svc.ports && svc.ports.length > 0) {
const portStr = svc.ports.map(p => `${p.publishedPort}:${p.targetPort}/${p.protocol}`).join(", ");
@@ -78,31 +80,53 @@ export function registerSwarmTools(server: McpServer, registry?: ToolRegistry):
},
},
toolHandler(async ({ environmentId, serviceId }, client) => {
- const response = await client.get<{ data: SwarmService & { tasks?: Array<{ id: string; status: string; node?: string }> } }>(
- `/environments/${environmentId}/swarm/services/${serviceId}`
- );
+ // Detail endpoint returns the raw Docker service object (Docker-cased spec)
+ const response = await client.get<{
+ data: {
+ id: string;
+ updatedAt?: string;
+ version?: { Index?: number };
+ spec?: {
+ Name?: string;
+ Mode?: { Replicated?: { Replicas?: number }; Global?: object };
+ TaskTemplate?: { ContainerSpec?: { Image?: string } };
+ EndpointSpec?: { Ports?: Array<{ Protocol?: string; TargetPort?: number; PublishedPort?: number }> };
+ };
+ endpoint?: { Ports?: Array<{ Protocol?: string; TargetPort?: number; PublishedPort?: number }> };
+ };
+ }>(`/environments/${environmentId}/swarm/services/${serviceId}`);
const svc = response.data;
+ const spec = svc.spec || {};
+ const mode = spec.Mode?.Global ? "global" : "replicated";
+ const replicas = spec.Mode?.Replicated?.Replicas;
const lines = [
- `Swarm Service: ${svc.name}`,
+ `Swarm Service: ${spec.Name || svc.id}`,
` ID: ${svc.id}`,
- ` Image: ${svc.image}`,
- ` Replicas: ${svc.replicas}/${svc.desiredReplicas}`,
- ` Mode: ${svc.mode || "replicated"}`,
+ ` Image: ${spec.TaskTemplate?.ContainerSpec?.Image || "unknown"}`,
+ ` Mode: ${mode}${replicas !== undefined ? ` (${replicas} replicas)` : ""}`,
` Updated: ${svc.updatedAt || "N/A"}`,
];
- if (svc.ports && svc.ports.length > 0) {
+ const ports = svc.endpoint?.Ports || spec.EndpointSpec?.Ports;
+ if (ports && ports.length > 0) {
lines.push(" Ports:");
- for (const port of svc.ports) {
- lines.push(` - ${port.publishedPort}:${port.targetPort}/${port.protocol}`);
+ for (const port of ports) {
+ lines.push(` - ${port.PublishedPort}:${port.TargetPort}/${port.Protocol}`);
}
}
- if (svc.tasks && svc.tasks.length > 0) {
+ // Tasks live on their own endpoint
+ const tasks = await client
+ .get<{ data: Array<{ id: string; currentState: string; desiredState: string; nodeName?: string; error?: string }> }>(
+ `/environments/${environmentId}/swarm/services/${serviceId}/tasks`,
+ { limit: 20 }
+ )
+ .catch(() => undefined);
+ if (tasks?.data && tasks.data.length > 0) {
lines.push(" Tasks:");
- for (const task of svc.tasks) {
- lines.push(` - ${task.id}: ${task.status}${task.node ? ` (node: ${task.node})` : ""}`);
+ for (const task of tasks.data) {
+ lines.push(` - ${task.id}: ${task.currentState} (desired: ${task.desiredState})${task.nodeName ? ` on ${task.nodeName}` : ""}${task.error ? ` — ${task.error}` : ""}`);
}
}
@@ -138,12 +162,39 @@ export function registerSwarmTools(server: McpServer, registry?: ToolRegistry):
},
},
toolHandler(async ({ environmentId, name, image, replicas, ports, env, networks, command }, client) => {
- const response = await client.post<{ data: { id: string; name: string } }>(
+ // The API takes a raw Docker ServiceSpec
+ const spec: Record = {
+ Name: name,
+ Mode: { Replicated: { Replicas: replicas } },
+ TaskTemplate: {
+ ContainerSpec: {
+ Image: image,
+ ...(env ? { Env: Object.entries(env).map(([k, v]) => `${k}=${v}`) } : {}),
+ ...(command ? { Command: command } : {}),
+ },
+ ...(networks ? { Networks: networks.map((target) => ({ Target: target })) } : {}),
+ },
+ ...(ports
+ ? {
+ EndpointSpec: {
+ Ports: ports.map((p) => ({
+ Protocol: p.protocol,
+ TargetPort: p.targetPort,
+ PublishedPort: p.publishedPort,
+ })),
+ },
+ }
+ : {}),
+ };
+
+ const response = await client.post<{ data: { id: string; warnings?: string[] | null } }>(
`/environments/${environmentId}/swarm/services`,
- { name, image, replicas, ports, env, networks, command }
+ { spec }
);
- return `Swarm service created: ${response.data.name} (ID: ${response.data.id})`;
+ let text = `Swarm service created: ${name} (ID: ${response.data.id})`;
+ if (response.data.warnings?.length) text += `\nWarnings: ${response.data.warnings.join("; ")}`;
+ return text;
})
);
@@ -169,13 +220,36 @@ export function registerSwarmTools(server: McpServer, registry?: ToolRegistry):
},
},
toolHandler(async ({ environmentId, serviceId, image, replicas, env, command }, client) => {
- const body: Record = {};
- if (image) body.image = image;
- if (replicas !== undefined) body.replicas = replicas;
- if (env) body.env = env;
- if (command) body.command = command;
+ // Updates require the full current spec plus the swarm version index
+ const current = await client.get<{
+ data: {
+ version?: { Index?: number };
+ spec?: {
+ Mode?: { Replicated?: { Replicas?: number } };
+ TaskTemplate?: { ContainerSpec?: Record };
+ } & Record;
+ };
+ }>(`/environments/${environmentId}/swarm/services/${serviceId}`);
+
+ const spec = (current.data.spec || {}) as Record & {
+ Mode?: { Replicated?: { Replicas?: number } };
+ TaskTemplate?: { ContainerSpec?: Record };
+ };
+ const version = current.data.version?.Index;
+ if (version === undefined) {
+ throw new Error("Could not determine the service version required for updates.");
+ }
+
+ spec.TaskTemplate = spec.TaskTemplate || {};
+ spec.TaskTemplate.ContainerSpec = spec.TaskTemplate.ContainerSpec || {};
+ if (image) spec.TaskTemplate.ContainerSpec.Image = image;
+ if (env) spec.TaskTemplate.ContainerSpec.Env = Object.entries(env).map(([k, v]) => `${k}=${v}`);
+ if (command) spec.TaskTemplate.ContainerSpec.Command = command;
+ if (replicas !== undefined) {
+ spec.Mode = { Replicated: { Replicas: replicas } };
+ }
- await client.put(`/environments/${environmentId}/swarm/services/${serviceId}`, body);
+ await client.put(`/environments/${environmentId}/swarm/services/${serviceId}`, { spec, version });
return `Swarm service ${serviceId} updated.`;
})
);
@@ -232,7 +306,7 @@ export function registerSwarmTools(server: McpServer, registry?: ToolRegistry):
"arcane_swarm_get_service_logs",
{
title: "Get Swarm service logs",
- description: "Get logs from a Swarm service",
+ description: "Fetch recent log lines of a Swarm service. For live following, call repeatedly with 'since' set to the newest timestamp seen — each call then returns only new lines.",
annotations: {
readOnlyHint: true,
destructiveHint: false,
@@ -242,17 +316,20 @@ export function registerSwarmTools(server: McpServer, registry?: ToolRegistry):
inputSchema: {
environmentId: z.string().describe("Environment ID"),
serviceId: z.string().describe("Swarm service ID"),
- tail: z.number().optional().default(100).describe("Number of log lines to return"),
- timestamps: z.boolean().optional().default(false).describe("Include timestamps"),
+ tail: z.number().optional().default(DEFAULT_LOG_TAIL).describe("Number of most recent lines to return initially"),
+ since: z.string().optional().describe("Only return lines after this time — RFC3339 timestamp (from a previous call) or relative duration like '5m'"),
+ timestamps: z.boolean().optional().default(true).describe("Prefix each line with its timestamp (needed for incremental follow-up via 'since')"),
+ maxLines: z.number().optional().default(200).describe(`Hard cap on returned lines to protect the context window (max ${MAX_LOG_LINES})`),
},
},
- toolHandler(async ({ environmentId, serviceId, tail, timestamps }, client) => {
- const response = await client.get<{ data: string }>(
- `/environments/${environmentId}/swarm/services/${serviceId}/logs`,
- { tail, timestamps }
+ toolHandler(async ({ environmentId, serviceId, tail, since, timestamps, maxLines }, client) => {
+ const result = await client.fetchLogs(
+ `/environments/${environmentId}/ws/swarm/services/${serviceId}/logs`,
+ { follow: false, tail, since, timestamps },
+ Math.min(maxLines, MAX_LOG_LINES)
);
- return response.data || "No logs available.";
+ return formatLogResult(`service ${serviceId}`, result, timestamps);
})
);
@@ -276,20 +353,16 @@ export function registerSwarmTools(server: McpServer, registry?: ToolRegistry):
},
},
toolHandler(async ({ environmentId, advertiseAddr, listenAddr, forceNewCluster }, client) => {
- const response = await client.post<{ data: { nodeId: string; joinToken?: string } }>(
+ const response = await client.post<{ data: { nodeId: string } }>(
`/environments/${environmentId}/swarm/init`,
- { advertiseAddr, listenAddr, forceNewCluster }
+ { advertiseAddr, listenAddr, forceNewCluster, spec: {} }
);
- const lines = [
+ return [
"Swarm cluster initialized!",
` Node ID: ${response.data.nodeId}`,
- ];
- if (response.data.joinToken) {
- lines.push(` Join Token: ${response.data.joinToken}`);
- }
-
- return lines.join("\n");
+ "Use the join-tokens endpoint in Arcane to retrieve worker/manager join tokens.",
+ ].join("\n");
})
);
@@ -369,12 +442,23 @@ export function registerSwarmTools(server: McpServer, registry?: ToolRegistry):
const lines = [
`Swarm Cluster Info:`,
` Cluster ID: ${info.id}`,
- ` Version: ${info.version}`,
` Created: ${info.createdAt}`,
` Updated: ${info.updatedAt}`,
- ` Nodes: ${info.nodeCount} (${info.managerCount} managers, ${info.workerCount} workers)`,
];
+ // Node counts come from the nodes endpoint
+ const nodes = await client
+ .get<{ data: Array<{ role: string; status: string }> }>(
+ `/environments/${environmentId}/swarm/nodes`,
+ { limit: 100 }
+ )
+ .catch(() => undefined);
+ if (nodes?.data) {
+ const managers = nodes.data.filter((n) => n.role === "manager").length;
+ const workers = nodes.data.length - managers;
+ lines.push(` Nodes: ${nodes.data.length} (${managers} managers, ${workers} workers)`);
+ }
+
return lines.join("\n");
})
);
diff --git a/src/tools/system-tools.ts b/src/tools/system-tools.ts
index 8bc7923..d31c728 100644
--- a/src/tools/system-tools.ts
+++ b/src/tools/system-tools.ts
@@ -55,33 +55,29 @@ export function registerSystemTools(server: McpServer, registry?: ToolRegistry):
},
},
toolHandler(async ({ environmentId }, client) => {
- const response = await client.get<{
- data: {
- serverVersion: string;
- operatingSystem: string;
- architecture: string;
- containers: number;
- containersRunning: number;
- containersStopped: number;
- images: number;
- memTotal: number;
- ncpu: number;
- driver: string;
- };
- }>(`/environments/${environmentId}/system/docker-info`);
-
- const info = response.data;
+ const info = await client.get<{
+ ServerVersion: string;
+ OperatingSystem: string;
+ Architecture: string;
+ Containers: number;
+ ContainersRunning: number;
+ ContainersStopped: number;
+ Images: number;
+ MemTotal: number;
+ NCPU: number;
+ Driver: string;
+ }>(`/environments/${environmentId}/system/docker/info`);
const lines = [
"Docker System Information:",
- ` Version: ${info.serverVersion}`,
- ` OS: ${info.operatingSystem}`,
- ` Architecture: ${info.architecture}`,
- ` Storage Driver: ${info.driver}`,
- ` CPUs: ${info.ncpu}`,
- ` Memory: ${formatSizeGB(info.memTotal)}`,
- ` Containers: ${info.containers} (${info.containersRunning} running, ${info.containersStopped} stopped)`,
- ` Images: ${info.images}`,
+ ` Version: ${info.ServerVersion}`,
+ ` OS: ${info.OperatingSystem}`,
+ ` Architecture: ${info.Architecture}`,
+ ` Storage Driver: ${info.Driver}`,
+ ` CPUs: ${info.NCPU}`,
+ ` Memory: ${formatSizeGB(info.MemTotal)}`,
+ ` Containers: ${info.Containers} (${info.ContainersRunning} running, ${info.ContainersStopped} stopped)`,
+ ` Images: ${info.Images}`,
];
return lines.join("\n");
@@ -102,32 +98,43 @@ export function registerSystemTools(server: McpServer, registry?: ToolRegistry):
},
inputSchema: {
environmentId: z.string().describe("Environment ID"),
- volumes: z.boolean().optional().default(false).describe("Also prune volumes (DATA LOSS!)"),
+ volumes: z.boolean().optional().default(false).describe("Also prune all unused volumes (DATA LOSS!)"),
all: z.boolean().optional().default(false).describe("Remove all unused images, not just dangling"),
+ buildCache: z.boolean().optional().default(false).describe("Also prune unused build cache"),
},
},
- toolHandler(async ({ environmentId, volumes, all }, client) => {
+ toolHandler(async ({ environmentId, volumes, all, buildCache }, client) => {
const response = await client.post<{
- containersDeleted?: number;
- networksDeleted?: number;
- imagesDeleted?: number;
- volumesDeleted?: number;
- spaceReclaimed?: number;
- }>(`/environments/${environmentId}/system/prune`, { volumes, all });
-
- const spaceMB = response.spaceReclaimed
- ? formatSizeMB(response.spaceReclaimed)
- : "unknown";
+ data: {
+ containersPruned?: string[];
+ imagesDeleted?: string[];
+ networksDeleted?: string[];
+ volumesDeleted?: string[];
+ spaceReclaimed?: number;
+ errors?: string[];
+ };
+ }>(`/environments/${environmentId}/system/prune`, {
+ containers: { mode: "stopped" },
+ images: { mode: all ? "all" : "dangling" },
+ networks: { mode: "unused" },
+ volumes: { mode: volumes ? "all" : "none" },
+ buildCache: { mode: buildCache ? "unused" : "none" },
+ });
+ const r = response.data;
const lines = [
"System Prune Complete:",
- ` Containers removed: ${response.containersDeleted || 0}`,
- ` Networks removed: ${response.networksDeleted || 0}`,
- ` Images removed: ${response.imagesDeleted || 0}`,
- ` Volumes removed: ${response.volumesDeleted || 0}`,
- ` Space reclaimed: ${spaceMB}`,
+ ` Containers removed: ${r.containersPruned?.length || 0}`,
+ ` Networks removed: ${r.networksDeleted?.length || 0}`,
+ ` Images removed: ${r.imagesDeleted?.length || 0}`,
+ ` Volumes removed: ${r.volumesDeleted?.length || 0}`,
+ ` Space reclaimed: ${r.spaceReclaimed ? formatSizeMB(r.spaceReclaimed) : "unknown"}`,
];
+ if (r.errors && r.errors.length > 0) {
+ lines.push(` Errors: ${r.errors.join("; ")}`);
+ }
+
return lines.join("\n");
})
);
@@ -277,16 +284,18 @@ export function registerSystemTools(server: McpServer, registry?: ToolRegistry):
},
toolHandler(async (_params, client) => {
const response = await client.get<{
- version: string;
- buildTime?: string;
- gitCommit?: string;
+ currentVersion: string;
+ newestVersion?: string;
+ updateAvailable?: boolean;
+ releaseUrl?: string;
}>("/version");
- const lines = [
- `Arcane Version: ${response.version}`,
- ` Build Time: ${response.buildTime || "unknown"}`,
- ` Git Commit: ${response.gitCommit || "unknown"}`,
- ];
+ const lines = [`Arcane Version: ${response.currentVersion}`];
+ if (response.updateAvailable && response.newestVersion) {
+ lines.push(` Update available: ${response.newestVersion}${response.releaseUrl ? ` (${response.releaseUrl})` : ""}`);
+ } else {
+ lines.push(" Up to date.");
+ }
return lines.join("\n");
})
diff --git a/src/tools/template-tools.ts b/src/tools/template-tools.ts
index fb4f993..37d3b8f 100644
--- a/src/tools/template-tools.ts
+++ b/src/tools/template-tools.ts
@@ -24,26 +24,26 @@ export function registerTemplateTools(server: McpServer, registry?: ToolRegistry
},
inputSchema: {
search: z.string().optional().describe("Search query"),
- category: z.string().optional().describe("Filter by category"),
+ type: z.string().optional().describe("Filter by template type"),
start: z.number().optional().default(0).describe("Pagination start"),
limit: z.number().optional().default(20).describe("Items per page"),
},
},
- toolHandler(async ({ search, category, start, limit }, client) => {
+ toolHandler(async ({ search, type, start, limit }, client) => {
const response = await client.get<{
data: Template[];
- pagination: { total: number };
- }>("/templates", { search, category, start, limit });
+ pagination: { totalItems: number };
+ }>("/templates", { search, type, start, limit });
if (!response.data || response.data.length === 0) {
return "No templates found.";
}
- const lines = [`Found ${response.pagination.total} templates:\n`];
+ const lines = [`Found ${response.pagination.totalItems} templates:\n`];
for (const tmpl of response.data) {
lines.push(`${tmpl.name}`);
lines.push(` ID: ${tmpl.id}`);
- if (tmpl.category) lines.push(` Category: ${tmpl.category}`);
+ if (tmpl.registry?.name) lines.push(` Registry: ${tmpl.registry.name}`);
if (tmpl.description) lines.push(` Description: ${tmpl.description.substring(0, 80)}...`);
lines.push("");
}
@@ -75,8 +75,9 @@ export function registerTemplateTools(server: McpServer, registry?: ToolRegistry
const lines = [
`Template: ${tmpl.name}`,
` ID: ${tmpl.id}`,
- ` Category: ${tmpl.category || "N/A"}`,
- ` Source: ${tmpl.source || "N/A"}`,
+ ` Remote: ${tmpl.isRemote ? "Yes" : "No"}`,
+ ` Custom: ${tmpl.isCustom ? "Yes" : "No"}`,
+ ` Registry: ${tmpl.registry?.name || "N/A"}`,
` Description: ${tmpl.description || "N/A"}`,
];
@@ -124,14 +125,14 @@ export function registerTemplateTools(server: McpServer, registry?: ToolRegistry
inputSchema: {
name: z.string().describe("Template name"),
description: z.string().optional().describe("Template description"),
- category: z.string().optional().describe("Category"),
content: z.string().describe("Docker Compose YAML content"),
+ envContent: z.string().optional().describe("Environment file (.env) content"),
},
},
- toolHandler(async ({ name, description, category, content }, client) => {
+ toolHandler(async ({ name, description, content, envContent }, client) => {
const response = await client.post<{ data: { id: string; name: string } }>(
"/templates",
- { name, description, category, content }
+ { name, description: description ?? "", content, envContent: envContent ?? "" }
);
return `Template created: ${response.data.name} (ID: ${response.data.id})`;
@@ -154,16 +155,16 @@ export function registerTemplateTools(server: McpServer, registry?: ToolRegistry
templateId: z.string().describe("Template ID"),
name: z.string().optional().describe("New name"),
description: z.string().optional().describe("New description"),
- category: z.string().optional().describe("New category"),
content: z.string().optional().describe("New YAML content"),
+ envContent: z.string().optional().describe("New environment file (.env) content"),
},
},
- toolHandler(async ({ templateId, name, description, category, content }, client) => {
+ toolHandler(async ({ templateId, name, description, content, envContent }, client) => {
const body: Record = {};
if (name) body.name = name;
if (description) body.description = description;
- if (category) body.category = category;
if (content) body.content = content;
+ if (envContent) body.envContent = envContent;
await client.put(`/templates/${templateId}`, body);
return `Template ${templateId} updated.`;
@@ -204,17 +205,22 @@ export function registerTemplateTools(server: McpServer, registry?: ToolRegistry
idempotentHint: true,
openWorldHint: false,
},
+ inputSchema: {
+ environmentId: z.string().describe("Environment ID"),
+ },
},
- toolHandler(async (_params, client) => {
- const response = await client.get<{ data: Record }>("/templates/variables");
+ toolHandler(async ({ environmentId }, client) => {
+ const response = await client.get<{ data: Array<{ key: string; value: string }> }>(
+ `/environments/${environmentId}/templates/variables`
+ );
- if (!response.data || Object.keys(response.data).length === 0) {
+ if (!response.data || response.data.length === 0) {
return "No global variables configured.";
}
const lines = ["Global Template Variables:\n"];
- for (const [key, value] of Object.entries(response.data)) {
- lines.push(` ${key}: ${value}`);
+ for (const variable of response.data) {
+ lines.push(` ${variable.key}: ${variable.value}`);
}
return lines.join("\n");
@@ -234,11 +240,13 @@ export function registerTemplateTools(server: McpServer, registry?: ToolRegistry
openWorldHint: false,
},
inputSchema: {
+ environmentId: z.string().describe("Environment ID"),
variables: z.record(z.string()).describe("Variables to set (key-value pairs)"),
},
},
- toolHandler(async ({ variables }, client) => {
- await client.put("/templates/variables", { variables });
+ toolHandler(async ({ environmentId, variables }, client) => {
+ const variableList = Object.entries(variables).map(([key, value]) => ({ key, value }));
+ await client.put(`/environments/${environmentId}/templates/variables`, { variables: variableList });
return "Global variables updated.";
})
);
diff --git a/src/tools/updater-tools.ts b/src/tools/updater-tools.ts
index 7eb948a..a006dac 100644
--- a/src/tools/updater-tools.ts
+++ b/src/tools/updater-tools.ts
@@ -16,7 +16,7 @@ export function registerUpdaterTools(server: McpServer, registry?: ToolRegistry)
"arcane_updater_run",
{
title: "Run auto-updater",
- description: "Run the auto-updater to check and update all containers with available image updates",
+ description: "Run the auto-updater to check and update containers/projects with available image updates",
annotations: {
readOnlyHint: false,
destructiveHint: false,
@@ -26,27 +26,33 @@ export function registerUpdaterTools(server: McpServer, registry?: ToolRegistry)
inputSchema: {
environmentId: z.string().describe("Environment ID"),
dryRun: z.boolean().optional().default(false).describe("Simulate without actually updating"),
+ forceUpdate: z.boolean().optional().default(false).describe("Update even if no new image was detected"),
+ resourceIds: z.array(z.string()).optional().describe("Limit the run to specific container/project IDs"),
},
},
- toolHandler(async ({ environmentId, dryRun }, client) => {
+ toolHandler(async ({ environmentId, dryRun, forceUpdate, resourceIds }, client) => {
+ const body: Record = { dryRun, forceUpdate };
+ if (resourceIds && resourceIds.length > 0) body.resourceIds = resourceIds;
+
const response = await client.post<{ data: UpdaterResult }>(
`/environments/${environmentId}/updater/run`,
- { dryRun }
+ body
);
const r = response.data;
const mode = dryRun ? " (DRY RUN)" : "";
const lines = [
`Updater Run${mode}:`,
+ ` Checked: ${r.checked}`,
` Updated: ${r.updated}`,
` Failed: ${r.failed}`,
` Skipped: ${r.skipped}`,
];
- if (r.results && r.results.length > 0) {
+ if (r.items && r.items.length > 0) {
lines.push("");
- for (const result of r.results) {
- lines.push(` [${result.status.toUpperCase()}] ${result.containerName}${result.message ? `: ${result.message}` : ""}`);
+ for (const item of r.items) {
+ lines.push(` [${item.status.toUpperCase()}] ${item.resourceName || item.resourceId}${item.error ? `: ${item.error}` : ""}`);
}
}
@@ -54,43 +60,12 @@ export function registerUpdaterTools(server: McpServer, registry?: ToolRegistry)
})
);
- // arcane_updater_update_container
- register(
- "arcane_updater_update_container",
- {
- title: "Update single container",
- description: "Update a single container to the latest image version",
- annotations: {
- readOnlyHint: false,
- destructiveHint: false,
- idempotentHint: false,
- openWorldHint: false,
- },
- inputSchema: {
- environmentId: z.string().describe("Environment ID"),
- containerId: z.string().describe("Container ID to update"),
- },
- },
- toolHandler(async ({ environmentId, containerId }, client) => {
- const response = await client.post<{ data: UpdaterResult }>(
- `/environments/${environmentId}/updater/containers/${containerId}`
- );
-
- const r = response.data;
- if (r.results && r.results.length > 0) {
- const result = r.results[0];
- return `Container ${result.containerName}: ${result.status}${result.message ? ` — ${result.message}` : ""}`;
- }
- return `Update completed for container ${containerId}.`;
- })
- );
-
// arcane_updater_get_status
register(
"arcane_updater_get_status",
{
title: "Get updater status",
- description: "Get the current auto-updater status and schedule",
+ description: "Get the currently running auto-update operations (containers and projects being updated)",
annotations: {
readOnlyHint: true,
destructiveHint: false,
@@ -107,12 +82,15 @@ export function registerUpdaterTools(server: McpServer, registry?: ToolRegistry)
);
const s = response.data;
+ const busy = (s.updatingContainers || 0) + (s.updatingProjects || 0);
+ if (busy === 0) {
+ return "Updater Status: idle — no updates currently in progress.";
+ }
+
const lines = [
- `Updater Status:`,
- ` Running: ${s.running ? "Yes" : "No"}`,
- ` Schedule: ${s.schedule || "Not configured"}`,
- ` Last Run: ${s.lastRunAt || "Never"}`,
- ` Next Run: ${s.nextRunAt || "N/A"}`,
+ `Updater Status: ${busy} update(s) in progress`,
+ ` Containers updating: ${s.updatingContainers || 0}${s.containerIds?.length ? ` (${s.containerIds.join(", ")})` : ""}`,
+ ` Projects updating: ${s.updatingProjects || 0}${s.projectIds?.length ? ` (${s.projectIds.join(", ")})` : ""}`,
];
return lines.join("\n");
@@ -146,12 +124,20 @@ export function registerUpdaterTools(server: McpServer, registry?: ToolRegistry)
return "No update history found.";
}
+ const formatImages = (versions?: Record) =>
+ versions && Object.keys(versions).length > 0
+ ? Object.entries(versions).map(([k, v]) => `${k}: ${String(v)}`).join(", ")
+ : undefined;
+
const lines = [`Update History (${response.data.length} entries):\n`];
for (const record of response.data) {
- lines.push(`[${record.status.toUpperCase()}] ${record.containerName}`);
- lines.push(` Old: ${record.oldImage}`);
- lines.push(` New: ${record.newImage}`);
- lines.push(` Date: ${record.updatedAt}`);
+ lines.push(`[${record.status.toUpperCase()}] ${record.resourceName || record.resourceId} (${record.resourceType || "container"})`);
+ const oldImages = formatImages(record.oldImageVersions);
+ const newImages = formatImages(record.newImageVersions);
+ if (oldImages) lines.push(` Old: ${oldImages}`);
+ if (newImages) lines.push(` New: ${newImages}`);
+ if (record.error) lines.push(` Error: ${record.error}`);
+ lines.push(` Date: ${record.createdAt}`);
lines.push("");
}
diff --git a/src/tools/user-tools.ts b/src/tools/user-tools.ts
index aaaf634..5a48ab3 100644
--- a/src/tools/user-tools.ts
+++ b/src/tools/user-tools.ts
@@ -31,23 +31,20 @@ export function registerUserTools(server: McpServer, registry?: ToolRegistry): v
toolHandler(async ({ search, start, limit }, client) => {
const response = await client.get<{
data: User[];
- pagination: { total: number };
+ pagination: { totalItems: number };
}>("/users", { search, start, limit });
if (!response.data || response.data.length === 0) {
return "No users found.";
}
- const lines = [`Found ${response.pagination.total} users:\n`];
+ const lines = [`Found ${response.pagination.totalItems} users:\n`];
for (const user of response.data) {
- lines.push(`${user.username}`);
+ lines.push(`${user.username}${user.displayName ? ` (${user.displayName})` : ""}`);
lines.push(` ID: ${user.id}`);
- lines.push(` Role: ${user.role}`);
+ lines.push(` Global Admin: ${user.isGlobalAdmin ? "Yes" : "No"}`);
lines.push(` Created: ${user.createdAt}`);
- if (user.lastLoginAt) {
- lines.push(` Last Login: ${user.lastLoginAt}`);
- }
- if (user.oidcSubject) {
+ if (user.oidcSubjectId) {
lines.push(` OIDC: Yes`);
}
lines.push("");
@@ -80,10 +77,11 @@ export function registerUserTools(server: McpServer, registry?: ToolRegistry): v
const lines = [
`User: ${user.username}`,
` ID: ${user.id}`,
- ` Role: ${user.role}`,
+ ` Display Name: ${user.displayName || "N/A"}`,
+ ` Email: ${user.email || "N/A"}`,
+ ` Global Admin: ${user.isGlobalAdmin ? "Yes" : "No"}`,
` Created: ${user.createdAt}`,
- ` Last Login: ${user.lastLoginAt || "Never"}`,
- ` OIDC: ${user.oidcSubject ? "Yes" : "No"}`,
+ ` OIDC: ${user.oidcSubjectId ? "Yes" : "No"}`,
];
return lines.join("\n");
@@ -105,17 +103,19 @@ export function registerUserTools(server: McpServer, registry?: ToolRegistry): v
inputSchema: {
username: z.string().describe("Username"),
password: z.string().min(8).describe("Password (minimum 8 characters)"),
- role: z.enum(["admin", "user", "readonly"]).optional().default("user").describe("User role"),
+ displayName: z.string().optional().describe("Display name"),
+ email: z.string().optional().describe("Email address"),
},
},
- toolHandler(async ({ username, password, role }, client) => {
+ toolHandler(async ({ username, password, displayName, email }, client) => {
const response = await client.post<{ data: { id: string; username: string } }>("/users", {
username,
password,
- role,
+ displayName,
+ email,
});
- return `User created: ${response.data.username} (ID: ${response.data.id})`;
+ return `User created: ${response.data.username} (ID: ${response.data.id})\nNote: roles are managed via Arcane's role assignments (not supported by this tool).`;
})
);
@@ -134,13 +134,17 @@ export function registerUserTools(server: McpServer, registry?: ToolRegistry): v
inputSchema: {
userId: z.string().describe("User ID"),
username: z.string().optional().describe("New username"),
- role: z.enum(["admin", "user", "readonly"]).optional().describe("New role"),
+ displayName: z.string().optional().describe("New display name"),
+ email: z.string().optional().describe("New email address"),
+ password: z.string().min(8).optional().describe("New password (minimum 8 characters)"),
},
},
- toolHandler(async ({ userId, username, role }, client) => {
+ toolHandler(async ({ userId, username, displayName, email, password }, client) => {
const body: Record = {};
if (username) body.username = username;
- if (role) body.role = role;
+ if (displayName) body.displayName = displayName;
+ if (email) body.email = email;
+ if (password) body.password = password;
await client.put(`/users/${userId}`, body);
return `User ${userId} updated.`;
diff --git a/src/tools/volume-tools.ts b/src/tools/volume-tools.ts
index af8f603..8ab65a2 100644
--- a/src/tools/volume-tools.ts
+++ b/src/tools/volume-tools.ts
@@ -38,21 +38,21 @@ export function registerVolumeTools(server: McpServer, registry?: ToolRegistry):
toolHandler(async ({ environmentId, search, sort, order, start, limit }, client) => {
const response = await client.get<{
data: Volume[];
- pagination: { total: number; start: number; limit: number };
+ pagination: { totalItems: number };
}>(`/environments/${environmentId}/volumes`, { search, sort, order, start, limit });
if (!response.data || response.data.length === 0) {
return "No volumes found.";
}
- const lines = [`Found ${response.pagination.total} volumes:\n`];
+ const lines = [`Found ${response.pagination.totalItems} volumes:\n`];
for (const vol of response.data) {
lines.push(`${vol.name}`);
lines.push(` Driver: ${vol.driver}`);
lines.push(` Mountpoint: ${vol.mountpoint}`);
if (vol.usageData) {
- lines.push(` Size: ${formatSize(vol.usageData.size, true)}`);
- lines.push(` Containers: ${vol.usageData.refCount}`);
+ lines.push(` Size: ${formatSize(vol.usageData.Size, true)}`);
+ lines.push(` Containers: ${vol.usageData.RefCount}`);
}
lines.push("");
}
@@ -93,8 +93,8 @@ export function registerVolumeTools(server: McpServer, registry?: ToolRegistry):
];
if (vol.usageData) {
- lines.push(` Size: ${formatSizeMB(vol.usageData.size)}`);
- lines.push(` Container Refs: ${vol.usageData.refCount}`);
+ lines.push(` Size: ${formatSizeMB(vol.usageData.Size)}`);
+ lines.push(` Container Refs: ${vol.usageData.RefCount}`);
}
if (vol.labels && Object.keys(vol.labels).length > 0) {
@@ -179,13 +179,13 @@ export function registerVolumeTools(server: McpServer, registry?: ToolRegistry):
},
},
toolHandler(async ({ environmentId }, client) => {
- const response = await client.post<{ volumesDeleted?: string[]; spaceReclaimed?: number }>(
- `/environments/${environmentId}/volumes/prune`
- );
+ const response = await client.post<{
+ data: { volumesDeleted?: string[] | null; spaceReclaimed?: number };
+ }>(`/environments/${environmentId}/volumes/prune`);
- const deleted = response.volumesDeleted?.length || 0;
- const space = response.spaceReclaimed
- ? formatSize(response.spaceReclaimed)
+ const deleted = response.data.volumesDeleted?.length || 0;
+ const space = response.data.spaceReclaimed
+ ? formatSize(response.data.spaceReclaimed)
: "unknown";
return `Pruned ${deleted} volumes, reclaimed ${space} of disk space.`;
@@ -210,12 +210,10 @@ export function registerVolumeTools(server: McpServer, registry?: ToolRegistry):
},
toolHandler(async ({ environmentId }, client) => {
const response = await client.get<{
- total: number;
- inUse: number;
- unused: number;
+ data: { total: number; inuse: number; unused: number };
}>(`/environments/${environmentId}/volumes/counts`);
- return `Volume Counts:\n Total: ${response.total}\n In Use: ${response.inUse || 0}\n Unused: ${response.unused || 0}`;
+ return `Volume Counts:\n Total: ${response.data.total}\n In Use: ${response.data.inuse || 0}\n Unused: ${response.data.unused || 0}`;
})
);
@@ -253,8 +251,8 @@ export function registerVolumeTools(server: McpServer, registry?: ToolRegistry):
const lines = [`Contents of ${path}:\n`];
for (const entry of response.data) {
- const type = entry.isDir ? "DIR " : "FILE";
- const size = entry.isDir ? "-" : formatSizeCompact(entry.size);
+ const type = entry.isDirectory ? "DIR " : "FILE";
+ const size = entry.isDirectory ? "-" : formatSizeCompact(entry.size);
lines.push(`${type} ${size.padEnd(8)} ${entry.name}`);
}
@@ -313,7 +311,7 @@ export function registerVolumeTools(server: McpServer, registry?: ToolRegistry):
toolHandler(async ({ environmentId, volumeName, path }, client) => {
validatePath(path);
- await client.post(`/environments/${environmentId}/volumes/${volumeName}/browse/mkdir`, { path });
+ await client.post(`/environments/${environmentId}/volumes/${volumeName}/browse/mkdir`, undefined, { path });
return `Directory created: ${path}`;
})
);
@@ -348,8 +346,7 @@ export function registerVolumeTools(server: McpServer, registry?: ToolRegistry):
const lines = [`Backups for ${volumeName}:\n`];
for (const backup of response.data) {
- lines.push(`${backup.filename}`);
- lines.push(` ID: ${backup.id}`);
+ lines.push(`Backup ${backup.id}`);
lines.push(` Size: ${formatSizeMB(backup.size)}`);
lines.push(` Created: ${backup.createdAt}`);
lines.push("");
@@ -381,7 +378,7 @@ export function registerVolumeTools(server: McpServer, registry?: ToolRegistry):
`/environments/${environmentId}/volumes/${volumeName}/backups`
);
- return `Backup created: ${response.data.filename}\n ID: ${response.data.id}\n Size: ${formatSizeMB(response.data.size)}`;
+ return `Backup created for volume ${volumeName}.\n ID: ${response.data.id}\n Size: ${formatSizeMB(response.data.size)}`;
})
);
@@ -399,12 +396,11 @@ export function registerVolumeTools(server: McpServer, registry?: ToolRegistry):
},
inputSchema: {
environmentId: z.string().describe("Environment ID"),
- volumeName: z.string().describe("Volume name"),
backupId: z.string().describe("Backup ID to delete"),
},
},
- toolHandler(async ({ environmentId, volumeName, backupId }, client) => {
- await client.delete(`/environments/${environmentId}/volumes/${volumeName}/backups/${backupId}`);
+ toolHandler(async ({ environmentId, backupId }, client) => {
+ await client.delete(`/environments/${environmentId}/volumes/backups/${backupId}`);
return `Backup ${backupId} deleted.`;
})
);
@@ -447,27 +443,21 @@ export function registerVolumeTools(server: McpServer, registry?: ToolRegistry):
},
inputSchema: {
environmentId: z.string().describe("Environment ID"),
- volumeName: z.string().describe("Volume name"),
backupId: z.string().describe("Backup ID"),
- path: z.string().optional().default("/").describe("Path within the backup"),
},
},
- toolHandler(async ({ environmentId, volumeName, backupId, path }, client) => {
- if (path) validatePath(path);
-
- const response = await client.get<{ data: FileEntry[] }>(
- `/environments/${environmentId}/volumes/${volumeName}/backups/${backupId}/files`,
- { path }
+ toolHandler(async ({ environmentId, backupId }, client) => {
+ const response = await client.get<{ data: string[] }>(
+ `/environments/${environmentId}/volumes/backups/${backupId}/files`
);
if (!response.data || response.data.length === 0) {
- return `Path ${path} is empty or not found in backup.`;
+ return `Backup ${backupId} contains no files.`;
}
- const lines = [`Files in backup at ${path}:\n`];
- for (const entry of response.data) {
- const type = entry.isDir ? "DIR " : "FILE";
- lines.push(`${type} ${entry.name}`);
+ const lines = [`Files in backup ${backupId}:\n`];
+ for (const file of response.data) {
+ lines.push(` ${file}`);
}
return lines.join("\n");
diff --git a/src/tools/vulnerability-tools.ts b/src/tools/vulnerability-tools.ts
index 7493ea2..d46895b 100644
--- a/src/tools/vulnerability-tools.ts
+++ b/src/tools/vulnerability-tools.ts
@@ -6,7 +6,34 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";
import { toolHandler } from "../utils/tool-helpers.js";
import { moduleRegistrar, type ToolRegistry } from "./registry.js";
-import type { ScanResult, Vulnerability } from "../types/arcane-types.js";
+import { resolveImageId } from "../utils/image-resolver.js";
+import type { IgnoredVulnerability, ScanResult, SeveritySummary, Vulnerability } from "../types/arcane-types.js";
+
+function formatSummary(s?: SeveritySummary): string {
+ if (!s) return "no summary available";
+ return `${s.total} total (Critical: ${s.critical}, High: ${s.high}, Medium: ${s.medium}, Low: ${s.low})`;
+}
+
+function formatScanResult(scan: ScanResult): string {
+ const lines = [
+ `Scan Result for ${scan.imageName || scan.imageId}:`,
+ ` Status: ${scan.status}${scan.scanPhase ? ` (${scan.scanPhase})` : ""}`,
+ ` Scanned: ${scan.scanTime || "N/A"}`,
+ ` Vulnerabilities: ${formatSummary(scan.summary)}`,
+ ];
+ if (scan.error) lines.push(` Error: ${scan.error}`);
+ return lines.join("\n");
+}
+
+function formatVulnerability(vuln: Vulnerability): string[] {
+ const lines = [`[${vuln.severity.toUpperCase()}] ${vuln.vulnerabilityId}`];
+ lines.push(` Package: ${vuln.pkgName}${vuln.installedVersion ? ` (${vuln.installedVersion})` : ""}`);
+ if (vuln.imageName) lines.push(` Image: ${vuln.imageName}`);
+ if (vuln.fixedVersion) lines.push(` Fix: ${vuln.fixedVersion}`);
+ if (vuln.title) lines.push(` ${vuln.title}`);
+ lines.push("");
+ return lines;
+}
export function registerVulnerabilityTools(server: McpServer, registry?: ToolRegistry): void {
const register = moduleRegistrar(server, registry, "vulnerability");
@@ -25,23 +52,16 @@ export function registerVulnerabilityTools(server: McpServer, registry?: ToolReg
},
inputSchema: {
environmentId: z.string().describe("Environment ID"),
- imageId: z.string().describe("Image ID to scan"),
+ imageId: z.string().describe("Image ID or name:tag to scan (names are resolved via the image list)"),
},
},
toolHandler(async ({ environmentId, imageId }, client) => {
+ const resolvedId = await resolveImageId(client, environmentId, imageId);
const response = await client.post<{ data: ScanResult }>(
- `/environments/${environmentId}/images/${imageId}/vulnerabilities/scan`
+ `/environments/${environmentId}/images/${resolvedId}/vulnerabilities/scan`
);
- const scan = response.data;
- const lines = [
- `Vulnerability scan initiated for image ${scan.imageRef}`,
- ` Status: ${scan.status}`,
- ` Total: ${scan.totalVulnerabilities}`,
- ` Critical: ${scan.critical} | High: ${scan.high} | Medium: ${scan.medium} | Low: ${scan.low}`,
- ];
-
- return lines.join("\n");
+ return `Vulnerability scan initiated.\n${formatScanResult(response.data)}`;
})
);
@@ -50,7 +70,7 @@ export function registerVulnerabilityTools(server: McpServer, registry?: ToolReg
"arcane_vulnerability_get_scan_result",
{
title: "Get scan result",
- description: "Get the full vulnerability scan result for an image",
+ description: "Get the vulnerability scan result for an image",
annotations: {
readOnlyHint: true,
destructiveHint: false,
@@ -59,27 +79,16 @@ export function registerVulnerabilityTools(server: McpServer, registry?: ToolReg
},
inputSchema: {
environmentId: z.string().describe("Environment ID"),
- imageId: z.string().describe("Image ID"),
+ imageId: z.string().describe("Image ID or name:tag (names are resolved via the image list)"),
},
},
toolHandler(async ({ environmentId, imageId }, client) => {
+ const resolvedId = await resolveImageId(client, environmentId, imageId);
const response = await client.get<{ data: ScanResult }>(
- `/environments/${environmentId}/images/${imageId}/vulnerabilities/result`
+ `/environments/${environmentId}/images/${resolvedId}/vulnerabilities`
);
- const scan = response.data;
- const lines = [
- `Scan Result for ${scan.imageRef}:`,
- ` Scanned: ${scan.scannedAt}`,
- ` Status: ${scan.status}`,
- ` Total Vulnerabilities: ${scan.totalVulnerabilities}`,
- ` Critical: ${scan.critical}`,
- ` High: ${scan.high}`,
- ` Medium: ${scan.medium}`,
- ` Low: ${scan.low}`,
- ];
-
- return lines.join("\n");
+ return formatScanResult(response.data);
})
);
@@ -97,16 +106,17 @@ export function registerVulnerabilityTools(server: McpServer, registry?: ToolReg
},
inputSchema: {
environmentId: z.string().describe("Environment ID"),
- imageId: z.string().describe("Image ID"),
+ imageId: z.string().describe("Image ID or name:tag (names are resolved via the image list)"),
},
},
toolHandler(async ({ environmentId, imageId }, client) => {
- const response = await client.get<{ data: { total: number; critical: number; high: number; medium: number; low: number; scannedAt?: string } }>(
- `/environments/${environmentId}/images/${imageId}/vulnerabilities/summary`
- );
+ const resolvedId = await resolveImageId(client, environmentId, imageId);
+ const response = await client.get<{
+ data: { status: string; scanPhase?: string; scanTime?: string; summary?: SeveritySummary };
+ }>(`/environments/${environmentId}/images/${resolvedId}/vulnerabilities/summary`);
const s = response.data;
- return `Scan Summary: ${s.total} vulnerabilities (Critical: ${s.critical}, High: ${s.high}, Medium: ${s.medium}, Low: ${s.low})${s.scannedAt ? ` — Last scanned: ${s.scannedAt}` : ""}`;
+ return `Scan Summary: ${formatSummary(s.summary)}${s.scanTime ? ` — Last scanned: ${s.scanTime}` : ""}`;
})
);
@@ -128,15 +138,18 @@ export function registerVulnerabilityTools(server: McpServer, registry?: ToolReg
},
},
toolHandler(async ({ environmentId, imageIds }, client) => {
- const response = await client.post<{ data: Record }>(
- `/environments/${environmentId}/images/vulnerabilities/summaries`,
- { imageIds }
- );
+ const response = await client.post<{
+ data: { summaries: Record };
+ }>(`/environments/${environmentId}/images/vulnerabilities/summaries`, { imageIds });
+
+ const summaries = response.data?.summaries || {};
+ if (Object.keys(summaries).length === 0) {
+ return "No scan summaries available for the given images.";
+ }
- const summaries = response.data;
const lines = ["Vulnerability Summaries:\n"];
for (const [id, s] of Object.entries(summaries)) {
- lines.push(` ${id}: ${s.total} total (C:${s.critical} H:${s.high} M:${s.medium} L:${s.low})`);
+ lines.push(` ${id}: [${s.status}] ${formatSummary(s.summary)}`);
}
return lines.join("\n");
@@ -157,7 +170,7 @@ export function registerVulnerabilityTools(server: McpServer, registry?: ToolReg
},
inputSchema: {
environmentId: z.string().describe("Environment ID"),
- imageId: z.string().describe("Image ID"),
+ imageId: z.string().describe("Image ID or name:tag (names are resolved via the image list)"),
severity: z.string().optional().describe("Comma-separated severity filter (e.g., 'critical,high')"),
search: z.string().optional().describe("Search query"),
sort: z.string().optional().describe("Sort field"),
@@ -169,8 +182,8 @@ export function registerVulnerabilityTools(server: McpServer, registry?: ToolReg
toolHandler(async ({ environmentId, imageId, severity, search, sort, order, start, limit }, client) => {
const response = await client.get<{
data: Vulnerability[];
- pagination: { total: number; start: number; limit: number };
- }>(`/environments/${environmentId}/images/${imageId}/vulnerabilities`, {
+ pagination: { totalItems: number };
+ }>(`/environments/${environmentId}/images/${await resolveImageId(client, environmentId, imageId)}/vulnerabilities/list`, {
severity, search, sort, order, start, limit,
});
@@ -178,14 +191,9 @@ export function registerVulnerabilityTools(server: McpServer, registry?: ToolReg
return "No vulnerabilities found matching criteria.";
}
- const lines = [`Found ${response.pagination.total} vulnerabilities:\n`];
+ const lines = [`Found ${response.pagination.totalItems} vulnerabilities:\n`];
for (const vuln of response.data) {
- const ignored = vuln.ignored ? " [IGNORED]" : "";
- lines.push(`[${vuln.severity.toUpperCase()}]${ignored} ${vuln.id}`);
- lines.push(` Package: ${vuln.package} (${vuln.installedVersion})`);
- if (vuln.fixedVersion) lines.push(` Fix: ${vuln.fixedVersion}`);
- if (vuln.title) lines.push(` ${vuln.title}`);
- lines.push("");
+ lines.push(...formatVulnerability(vuln));
}
return lines.join("\n");
@@ -213,11 +221,7 @@ export function registerVulnerabilityTools(server: McpServer, registry?: ToolReg
data: {
totalImages: number;
scannedImages: number;
- totalVulnerabilities: number;
- critical: number;
- high: number;
- medium: number;
- low: number;
+ summary?: SeveritySummary;
};
}>(`/environments/${environmentId}/vulnerabilities/summary`);
@@ -225,11 +229,7 @@ export function registerVulnerabilityTools(server: McpServer, registry?: ToolReg
const lines = [
`Environment Vulnerability Summary:`,
` Images: ${s.scannedImages}/${s.totalImages} scanned`,
- ` Total Vulnerabilities: ${s.totalVulnerabilities}`,
- ` Critical: ${s.critical}`,
- ` High: ${s.high}`,
- ` Medium: ${s.medium}`,
- ` Low: ${s.low}`,
+ ` Vulnerabilities: ${formatSummary(s.summary)}`,
];
return lines.join("\n");
@@ -250,16 +250,22 @@ export function registerVulnerabilityTools(server: McpServer, registry?: ToolReg
},
inputSchema: {
environmentId: z.string().describe("Environment ID"),
- imageId: z.string().describe("Image ID"),
+ imageId: z.string().describe("Image ID or name:tag (names are resolved via the image list)"),
vulnerabilityId: z.string().describe("Vulnerability ID (e.g., CVE-2024-12345)"),
+ pkgName: z.string().describe("Affected package name (as reported by the scanner)"),
+ installedVersion: z.string().optional().describe("Installed version of the affected package"),
reason: z.string().optional().describe("Reason for ignoring"),
},
},
- toolHandler(async ({ environmentId, imageId, vulnerabilityId, reason }, client) => {
- await client.post(
- `/environments/${environmentId}/images/${imageId}/vulnerabilities/${vulnerabilityId}/ignore`,
- { reason }
- );
+ toolHandler(async ({ environmentId, imageId, vulnerabilityId, pkgName, installedVersion, reason }, client) => {
+ const resolvedId = await resolveImageId(client, environmentId, imageId);
+ await client.post(`/environments/${environmentId}/vulnerabilities/ignore`, {
+ imageId: resolvedId,
+ vulnerabilityId,
+ pkgName,
+ installedVersion,
+ reason,
+ });
return `Vulnerability ${vulnerabilityId} ignored.`;
})
);
@@ -269,7 +275,7 @@ export function registerVulnerabilityTools(server: McpServer, registry?: ToolReg
"arcane_vulnerability_unignore",
{
title: "Unignore vulnerability",
- description: "Unignore a previously ignored vulnerability",
+ description: "Unignore a previously ignored vulnerability (use the ignore entry ID from the ignored list)",
annotations: {
readOnlyHint: false,
destructiveHint: false,
@@ -278,15 +284,12 @@ export function registerVulnerabilityTools(server: McpServer, registry?: ToolReg
},
inputSchema: {
environmentId: z.string().describe("Environment ID"),
- imageId: z.string().describe("Image ID"),
- vulnerabilityId: z.string().describe("Vulnerability ID"),
+ ignoreId: z.string().describe("Ignore entry ID (from arcane_vulnerability_list_ignored)"),
},
},
- toolHandler(async ({ environmentId, imageId, vulnerabilityId }, client) => {
- await client.delete(
- `/environments/${environmentId}/images/${imageId}/vulnerabilities/${vulnerabilityId}/ignore`
- );
- return `Vulnerability ${vulnerabilityId} unignored.`;
+ toolHandler(async ({ environmentId, ignoreId }, client) => {
+ await client.delete(`/environments/${environmentId}/vulnerabilities/ignore/${ignoreId}`);
+ return `Ignore entry ${ignoreId} removed.`;
})
);
@@ -308,17 +311,15 @@ export function registerVulnerabilityTools(server: McpServer, registry?: ToolReg
},
toolHandler(async ({ environmentId }, client) => {
const response = await client.get<{
- data: { enabled: boolean; version?: string; lastUpdate?: string; status: string };
+ data: { available: boolean; version?: string };
}>(`/environments/${environmentId}/vulnerabilities/scanner-status`);
const s = response.data;
const lines = [
`Trivy Scanner Status:`,
- ` Enabled: ${s.enabled ? "Yes" : "No"}`,
- ` Status: ${s.status}`,
+ ` Available: ${s.available ? "Yes" : "No"}`,
];
if (s.version) lines.push(` Version: ${s.version}`);
- if (s.lastUpdate) lines.push(` Last DB Update: ${s.lastUpdate}`);
return lines.join("\n");
})
@@ -343,12 +344,12 @@ export function registerVulnerabilityTools(server: McpServer, registry?: ToolReg
search: z.string().optional().describe("Search query"),
start: z.number().optional().default(0).describe("Pagination start index"),
limit: z.number().optional().default(20).describe("Items per page"),
- },
+ },
},
toolHandler(async ({ environmentId, severity, imageName, search, start, limit }, client) => {
const response = await client.get<{
data: Vulnerability[];
- pagination: { total: number; start: number; limit: number };
+ pagination: { totalItems: number };
}>(`/environments/${environmentId}/vulnerabilities/all`, {
severity, imageName, search, start, limit,
});
@@ -357,14 +358,9 @@ export function registerVulnerabilityTools(server: McpServer, registry?: ToolReg
return "No vulnerabilities found matching criteria.";
}
- const lines = [`Found ${response.pagination.total} vulnerabilities across environment:\n`];
+ const lines = [`Found ${response.pagination.totalItems} vulnerabilities across environment:\n`];
for (const vuln of response.data) {
- const ignored = vuln.ignored ? " [IGNORED]" : "";
- lines.push(`[${vuln.severity.toUpperCase()}]${ignored} ${vuln.id}`);
- lines.push(` Package: ${vuln.package} (${vuln.installedVersion})`);
- if (vuln.fixedVersion) lines.push(` Fix: ${vuln.fixedVersion}`);
- if (vuln.title) lines.push(` ${vuln.title}`);
- lines.push("");
+ lines.push(...formatVulnerability(vuln));
}
return lines.join("\n");
@@ -376,7 +372,7 @@ export function registerVulnerabilityTools(server: McpServer, registry?: ToolReg
"arcane_vulnerability_list_ignored",
{
title: "List ignored vulnerabilities",
- description: "List all ignored vulnerabilities in an environment",
+ description: "List all ignored vulnerabilities in an environment (includes the ignore entry ID needed for unignoring)",
annotations: {
readOnlyHint: true,
destructiveHint: false,
@@ -388,7 +384,7 @@ export function registerVulnerabilityTools(server: McpServer, registry?: ToolReg
},
},
toolHandler(async ({ environmentId }, client) => {
- const response = await client.get<{ data: Vulnerability[] }>(
+ const response = await client.get<{ data: IgnoredVulnerability[] }>(
`/environments/${environmentId}/vulnerabilities/ignored`
);
@@ -398,10 +394,10 @@ export function registerVulnerabilityTools(server: McpServer, registry?: ToolReg
const lines = [`${response.data.length} ignored vulnerabilities:\n`];
for (const vuln of response.data) {
- lines.push(`[${vuln.severity.toUpperCase()}] ${vuln.id}`);
- lines.push(` Package: ${vuln.package} (${vuln.installedVersion})`);
- if (vuln.fixedVersion) lines.push(` Fix: ${vuln.fixedVersion}`);
- if (vuln.title) lines.push(` ${vuln.title}`);
+ lines.push(`${vuln.vulnerabilityId} (Ignore ID: ${vuln.id})`);
+ lines.push(` Package: ${vuln.pkgName || "unknown"}${vuln.installedVersion ? ` (${vuln.installedVersion})` : ""}`);
+ if (vuln.imageId) lines.push(` Image: ${vuln.imageId}`);
+ if (vuln.reason) lines.push(` Reason: ${vuln.reason}`);
lines.push("");
}
@@ -426,18 +422,17 @@ export function registerVulnerabilityTools(server: McpServer, registry?: ToolReg
},
},
toolHandler(async ({ environmentId }, client) => {
- const response = await client.get<{
- data: Array<{ id: string; name: string; tag?: string }>;
- }>(`/environments/${environmentId}/vulnerabilities/image-options`);
+ const response = await client.get<{ data: string[] }>(
+ `/environments/${environmentId}/vulnerabilities/image-options`
+ );
if (!response.data || response.data.length === 0) {
return "No scannable images found.";
}
const lines = [`${response.data.length} scannable images:\n`];
- for (const img of response.data) {
- const tag = img.tag ? `:${img.tag}` : "";
- lines.push(` ${img.name}${tag} (ID: ${img.id})`);
+ for (const imageRef of response.data) {
+ lines.push(` ${imageRef}`);
}
return lines.join("\n");
diff --git a/src/tools/webhook-tools.ts b/src/tools/webhook-tools.ts
index dad9699..e56e3c2 100644
--- a/src/tools/webhook-tools.ts
+++ b/src/tools/webhook-tools.ts
@@ -41,9 +41,9 @@ export function registerWebhookTools(server: McpServer, registry?: ToolRegistry)
const status = wh.enabled ? "[ENABLED]" : "[DISABLED]";
lines.push(`${status} ${wh.name}`);
lines.push(` ID: ${wh.id}`);
- if (wh.events && wh.events.length > 0) {
- lines.push(` Events: ${wh.events.join(", ")}`);
- }
+ lines.push(` Action: ${wh.actionType || "unknown"}`);
+ const target = wh.targetName || wh.targetId;
+ lines.push(` Target: ${wh.targetType || "unknown"}${target ? ` (${target})` : ""}`);
lines.push(` Last Triggered: ${wh.lastTriggeredAt || "Never"}`);
lines.push("");
}
@@ -67,27 +67,42 @@ export function registerWebhookTools(server: McpServer, registry?: ToolRegistry)
inputSchema: {
environmentId: z.string().describe("Environment ID"),
name: z.string().describe("Webhook name"),
- events: z.array(z.string()).optional().describe("Event types to trigger on"),
- enabled: z.boolean().optional().default(true).describe("Enable the webhook"),
+ actionType: z
+ .enum(["update", "start", "stop", "restart", "redeploy", "up", "down", "run", "sync"])
+ .describe(
+ "Action to run when triggered. Supported values depend on targetType (e.g. start/stop/restart for containers, up/down/redeploy for projects, run for updater, sync for gitops)"
+ ),
+ targetType: z
+ .enum(["container", "project", "updater", "gitops"])
+ .describe("Resource type this webhook targets: 'container', 'project', 'updater', or 'gitops'"),
+ targetId: z
+ .string()
+ .describe("Container ID, project ID, or GitOps sync ID to target. Use an empty string for 'updater' webhooks"),
},
},
- toolHandler(async ({ environmentId, name, events, enabled }, client) => {
- const response = await client.post<{ data: Webhook }>(
- `/environments/${environmentId}/webhooks`,
- { name, events, enabled }
- );
+ toolHandler(async ({ environmentId, name, actionType, targetType, targetId }, client) => {
+ const response = await client.post<{
+ data: {
+ id: string;
+ name: string;
+ actionType: string;
+ targetType: string;
+ targetId: string;
+ token: string;
+ createdAt: string;
+ };
+ }>(`/environments/${environmentId}/webhooks`, { name, actionType, targetType, targetId });
const wh = response.data;
const lines = [
`Webhook created: ${wh.name}`,
` ID: ${wh.id}`,
+ ` Action: ${wh.actionType}`,
+ ` Target: ${wh.targetType}${wh.targetId ? ` (${wh.targetId})` : ""}`,
+ ` Token: ${wh.token}`,
+ "",
+ "⚠️ Save this token now - it won't be shown again!",
];
- if (wh.token) {
- lines.push(` Token: ${wh.token}`);
- }
- if (wh.url) {
- lines.push(` URL: ${wh.url}`);
- }
return lines.join("\n");
})
@@ -98,7 +113,7 @@ export function registerWebhookTools(server: McpServer, registry?: ToolRegistry)
"arcane_webhook_update",
{
title: "Update webhook",
- description: "Update a webhook configuration",
+ description: "Enable or disable a webhook",
annotations: {
readOnlyHint: false,
destructiveHint: false,
@@ -108,19 +123,12 @@ export function registerWebhookTools(server: McpServer, registry?: ToolRegistry)
inputSchema: {
environmentId: z.string().describe("Environment ID"),
webhookId: z.string().describe("Webhook ID"),
- name: z.string().optional().describe("New name"),
- events: z.array(z.string()).optional().describe("Updated event types"),
- enabled: z.boolean().optional().describe("Enable/disable the webhook"),
+ enabled: z.boolean().describe("Enable (true) or disable (false) the webhook"),
},
},
- toolHandler(async ({ environmentId, webhookId, name, events, enabled }, client) => {
- const body: Record = {};
- if (name) body.name = name;
- if (events) body.events = events;
- if (enabled !== undefined) body.enabled = enabled;
-
- await client.patch(`/environments/${environmentId}/webhooks/${webhookId}`, body);
- return `Webhook ${webhookId} updated.`;
+ toolHandler(async ({ environmentId, webhookId, enabled }, client) => {
+ await client.patch(`/environments/${environmentId}/webhooks/${webhookId}`, { enabled });
+ return `Webhook ${webhookId} ${enabled ? "enabled" : "disabled"}.`;
})
);
diff --git a/src/types/arcane-types.ts b/src/types/arcane-types.ts
index 7becf7d..044e845 100644
--- a/src/types/arcane-types.ts
+++ b/src/types/arcane-types.ts
@@ -8,15 +8,18 @@
// === Containers ===
+/** Container list entry (Docker-style summary: `names` array, `state` string) */
export interface Container {
id: string;
- name: string;
+ names?: string[] | null;
image: string;
status: string;
state: string;
- created: string;
+ /** Unix timestamp (seconds) */
+ created: number;
ports?: Array<{ privatePort: number; publicPort?: number; type: string }>;
labels?: Record;
+ updateInfo?: { hasUpdate?: boolean };
}
// === Volumes ===
@@ -29,14 +32,15 @@ export interface Volume {
createdAt: string;
labels?: Record;
options?: Record;
- usageData?: { size: number; refCount: number };
+ /** Docker-cased keys (DockerVolumeUsageData) */
+ usageData?: { Size: number; RefCount: number };
}
export interface FileEntry {
name: string;
path: string;
size: number;
- isDir: boolean;
+ isDirectory: boolean;
modTime: string;
mode: string;
}
@@ -44,23 +48,40 @@ export interface FileEntry {
export interface Backup {
id: string;
volumeName: string;
- filename: string;
size: number;
createdAt: string;
}
// === Projects ===
+export interface ProjectUpdateInfo {
+ status: string;
+ hasUpdate: boolean;
+ imageCount?: number;
+ checkedImageCount?: number;
+ imagesWithUpdates?: number;
+ updatedImageRefs?: string[] | null;
+ errorCount?: number;
+ errorMessage?: string;
+ lastCheckedAt?: string;
+}
+
export interface Project {
id: string;
name: string;
status: string;
path?: string;
- services: Array<{
+ serviceCount?: number;
+ runningCount?: number;
+ /** Runtime state per service (the `services` field holds raw compose configs) */
+ runtimeServices?: Array<{
name: string;
status: string;
- containerCount?: number;
- }>;
+ health?: string;
+ image?: string;
+ containerName?: string;
+ }> | null;
+ updateInfo?: ProjectUpdateInfo;
createdAt?: string;
updatedAt?: string;
}
@@ -71,33 +92,34 @@ export interface Image {
id: string;
repoTags: string[];
repoDigests?: string[];
- created: string;
+ /** Unix timestamp (seconds) */
+ created: number;
size: number;
virtualSize?: number;
+ inUse?: boolean;
}
// === Image Updates ===
export interface ImageUpdateResponse {
- imageRef: string;
+ hasUpdate: boolean;
+ updateType?: string;
+ currentVersion?: string;
+ latestVersion?: string;
currentDigest?: string;
latestDigest?: string;
- updateAvailable: boolean;
- currentTag?: string;
- latestTag?: string;
+ checkTime?: string;
+ error?: string;
}
-export interface BatchImageUpdateResponse {
- results: Array;
- total: number;
- updatesAvailable: number;
-}
+/** Batch check result: image reference → per-image result */
+export type BatchImageUpdateResponse = Record;
export interface ImageUpdateSummary {
totalImages: number;
- checkedImages: number;
- updatesAvailable: number;
- lastCheckedAt?: string;
+ imagesWithUpdates: number;
+ digestUpdates: number;
+ errorsCount: number;
}
// === Networks ===
@@ -109,11 +131,13 @@ export interface Network {
scope: string;
internal: boolean;
attachable: boolean;
+ inUse?: boolean;
+ isDefault?: boolean;
ipam?: {
driver: string;
config?: Array<{ subnet?: string; gateway?: string }>;
};
- containers?: Record;
+ containersList?: Array<{ name: string; ipv4Address?: string; ipv6Address?: string }> | null;
created?: string;
}
@@ -123,13 +147,21 @@ export interface TopologyNode {
id: string;
type: string;
name: string;
- status?: string;
+ metadata?: {
+ status?: string;
+ driver?: string;
+ image?: string;
+ isDefault?: boolean;
+ scope?: string;
+ };
}
export interface TopologyEdge {
+ id?: string;
source: string;
target: string;
- type?: string;
+ ipv4Address?: string;
+ ipv6Address?: string;
}
export interface NetworkTopology {
@@ -144,8 +176,11 @@ export interface Environment {
name: string;
apiUrl?: string;
status?: string;
- createdAt?: string;
- updatedAt?: string;
+ enabled?: boolean;
+ connected?: boolean;
+ connectedAt?: string;
+ isEdge?: boolean;
+ lastSeen?: string;
}
// === Builds ===
@@ -153,19 +188,19 @@ export interface Environment {
export interface Build {
id: string;
status: string;
- tag?: string;
- platform?: string;
+ tags?: string[] | null;
+ platforms?: string[] | null;
provider?: string;
- startedAt?: string;
+ createdAt?: string;
completedAt?: string;
- error?: string;
+ errorMessage?: string;
}
export interface BuildDetails extends Build {
dockerfile?: string;
- gitUrl?: string;
buildArgs?: Record;
- logs?: string;
+ output?: string;
+ outputTruncated?: boolean;
}
export interface WorkspaceFile {
@@ -179,21 +214,23 @@ export interface WorkspaceFile {
// === Dashboard ===
export interface DashboardSnapshot {
- containers: { total: number; running: number; stopped: number };
- projects: { total: number; running: number; stopped: number };
- images: { total: number; updatesAvailable: number };
- volumes: { total: number; totalSize?: string };
- networks: { total: number };
- systemInfo?: { dockerVersion?: string; osType?: string; cpus?: number; memoryBytes?: number };
-}
-
-export interface ActionItem {
- type: string;
- severity: string;
- title: string;
- description?: string;
- resourceId?: string;
- resourceName?: string;
+ containers?: {
+ counts?: { totalContainers: number; runningContainers: number; stoppedContainers: number };
+ };
+ imageUsageCounts?: {
+ totalImages: number;
+ totalImageSize: number;
+ imagesInuse: number;
+ imagesUnused: number;
+ };
+ actionItems?: {
+ items?: Array<{ kind: string; severity?: string; count: number }> | null;
+ };
+ versionInfo?: {
+ currentVersion?: string;
+ newestVersion?: string;
+ releaseUrl?: string;
+ };
}
// === Events ===
@@ -201,7 +238,9 @@ export interface ActionItem {
export interface Event {
id: string;
type: string;
- message: string;
+ title: string;
+ description?: string;
+ severity: string;
resourceType?: string;
resourceId?: string;
resourceName?: string;
@@ -218,11 +257,15 @@ export interface GitOpsSync {
name: string;
repositoryId: string;
branch: string;
- path: string;
- targetProjectId?: string;
+ composePath: string;
+ projectId?: string;
+ projectName?: string;
lastSyncAt?: string;
lastSyncStatus?: string;
+ lastSyncCommit?: string;
+ lastSyncError?: string;
autoSync: boolean;
+ syncDirectory?: boolean;
syncInterval?: number;
}
@@ -230,10 +273,12 @@ export interface GitRepository {
id: string;
name: string;
url: string;
- branch: string;
authType: string;
- lastTestAt?: string;
- lastTestStatus?: string;
+ description?: string;
+ username?: string;
+ enabled?: boolean;
+ createdAt?: string;
+ updatedAt?: string;
}
// === Jobs ===
@@ -241,36 +286,42 @@ export interface GitRepository {
export interface Job {
id: string;
name: string;
- type: string;
- status: string;
- lastRunAt?: string;
- nextRunAt?: string;
- schedule?: string;
+ description?: string;
+ category: string;
enabled: boolean;
+ schedule?: string;
+ nextRun?: string;
+ canRunManually?: boolean;
+ isContinuous?: boolean;
}
// === Ports ===
export interface PortMapping {
+ id: string;
containerName: string;
containerId: string;
- privatePort: number;
- publicPort?: number;
+ containerPort: number;
+ hostPort?: number;
+ hostIp?: string;
protocol: string;
- ip?: string;
+ isPublished?: boolean;
}
// === Registries ===
export interface ContainerRegistry {
id: string;
- name: string;
url: string;
- type: string;
+ registryType: string;
+ description?: string;
username?: string;
+ insecure?: boolean;
+ enabled?: boolean;
+ awsAccessKeyId?: string;
+ awsRegion?: string;
createdAt?: string;
- lastTestAt?: string;
- lastTestStatus?: string;
+ updatedAt?: string;
}
// === Swarm ===
@@ -279,21 +330,22 @@ export interface SwarmService {
id: string;
name: string;
image: string;
+ mode?: string;
+ /** Desired replica count */
replicas: number;
- desiredReplicas: number;
- ports?: Array<{ publishedPort: number; targetPort: number; protocol: string }>;
+ /** Currently running replicas */
+ runningReplicas: number;
+ ports?: Array<{ publishedPort: number; targetPort: number; protocol: string }> | null;
+ stackName?: string;
+ createdAt?: string;
updatedAt?: string;
- mode?: string;
}
export interface SwarmClusterInfo {
id: string;
- version: string;
createdAt: string;
updatedAt: string;
- nodeCount: number;
- managerCount: number;
- workerCount: number;
+ rootRotationInProgress?: boolean;
}
// === Templates ===
@@ -302,40 +354,57 @@ export interface Template {
id: string;
name: string;
description?: string;
- category?: string;
- logo?: string;
- source?: string;
- createdAt?: string;
+ content?: string;
+ envContent?: string;
+ isCustom?: boolean;
+ isRemote?: boolean;
+ registryId?: string;
+ registry?: { id: string; name: string; url?: string; description?: string; enabled?: boolean };
+ metadata?: Record;
}
// === Updater ===
+export interface UpdaterResourceResult {
+ resourceId?: string;
+ resourceName?: string;
+ resourceType?: string;
+ status: string;
+ updateAvailable?: boolean;
+ updateApplied?: boolean;
+ oldImages?: Record;
+ newImages?: Record;
+ error?: string;
+}
+
export interface UpdaterResult {
+ checked: number;
updated: number;
failed: number;
skipped: number;
- results: Array<{
- containerId: string;
- containerName: string;
- status: string;
- message?: string;
- }>;
+ items: UpdaterResourceResult[];
}
export interface UpdaterStatus {
- running: boolean;
- lastRunAt?: string;
- nextRunAt?: string;
- schedule?: string;
+ containerIds: string[];
+ projectIds: string[];
+ updatingContainers: number;
+ updatingProjects: number;
}
export interface UpdateRecord {
id: string;
- containerName: string;
- oldImage: string;
- newImage: string;
+ resourceId?: string;
+ resourceName?: string;
+ resourceType?: string;
status: string;
- updatedAt: string;
+ updateApplied?: boolean;
+ oldImageVersions?: Record;
+ newImageVersions?: Record;
+ startTime?: string;
+ endTime?: string;
+ createdAt: string;
+ error?: string;
}
// === Users ===
@@ -343,35 +412,55 @@ export interface UpdateRecord {
export interface User {
id: string;
username: string;
- role: string;
+ displayName?: string;
+ email?: string;
+ isGlobalAdmin?: boolean;
createdAt: string;
- lastLoginAt?: string;
- oidcSubject?: string;
+ oidcSubjectId?: string;
}
// === Vulnerabilities ===
-export interface ScanResult {
- imageId: string;
- imageRef: string;
- scannedAt: string;
- status: string;
- totalVulnerabilities: number;
+export interface SeveritySummary {
+ total: number;
critical: number;
high: number;
medium: number;
low: number;
+ unknown?: number;
+}
+
+export interface ScanResult {
+ imageId: string;
+ imageName?: string;
+ status: string;
+ scanPhase?: string;
+ scanTime?: string;
+ duration?: number;
+ error?: string;
+ summary?: SeveritySummary;
}
export interface Vulnerability {
- id: string;
- package: string;
- installedVersion: string;
+ vulnerabilityId: string;
+ pkgName: string;
+ installedVersion?: string;
fixedVersion?: string;
severity: string;
title?: string;
description?: string;
- ignored?: boolean;
+ imageName?: string;
+}
+
+export interface IgnoredVulnerability {
+ id: string;
+ vulnerabilityId: string;
+ pkgName?: string;
+ installedVersion?: string;
+ imageId?: string;
+ reason?: string;
+ createdBy?: string;
+ createdAt?: string;
}
// === Webhooks ===
@@ -379,10 +468,13 @@ export interface Vulnerability {
export interface Webhook {
id: string;
name: string;
- url?: string;
- token?: string;
enabled: boolean;
- events?: string[];
+ actionType?: string;
+ targetType?: string;
+ targetId?: string;
+ targetName?: string;
+ tokenPrefix?: string;
+ environmentId?: string;
createdAt?: string;
lastTriggeredAt?: string;
}
diff --git a/src/types/generated/arcane-api.ts b/src/types/generated/arcane-api.ts
index 4b08cee..3d19a0e 100644
--- a/src/types/generated/arcane-api.ts
+++ b/src/types/generated/arcane-api.ts
@@ -4,6 +4,26 @@
*/
export interface paths {
+ "/activities/stream": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ /**
+ * Stream background activities across all environments
+ * @description Stream background activity updates for the local environment and all enabled remote environments as JSON lines
+ */
+ get: operations["stream-all-activities"];
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
"/api-keys": {
parameters: {
query?: never;
@@ -236,6 +256,94 @@ export interface paths {
patch?: never;
trace?: never;
};
+ "/auth/me/api-keys": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ /**
+ * List my API keys
+ * @description List API keys owned by the current user
+ */
+ get: operations["list-my-api-keys"];
+ put?: never;
+ /**
+ * Create my API key
+ * @description Create a new personal API key owned by the current user. Personal keys inherit the owner's role permissions.
+ */
+ post: operations["create-my-api-key"];
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/auth/me/api-keys/{id}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ post?: never;
+ /**
+ * Delete my API key
+ * @description Delete one of the current user's own API keys
+ */
+ delete: operations["delete-my-api-key"];
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/auth/me/avatar": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /**
+ * Upload own avatar
+ * @description Upload a custom profile picture (PNG, JPEG or WebP). Replaces any existing avatar.
+ */
+ post: operations["upload-my-avatar"];
+ /**
+ * Delete own avatar
+ * @description Remove the current user's custom profile picture, reverting to the default avatar.
+ */
+ delete: operations["delete-my-avatar"];
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/auth/me/profile": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get?: never;
+ /**
+ * Update own profile
+ * @description Update the current user's display name and email. Forbidden for OIDC-managed accounts.
+ */
+ put: operations["update-my-profile"];
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
"/auth/password": {
parameters: {
query?: never;
@@ -276,6 +384,26 @@ export interface paths {
patch?: never;
trace?: never;
};
+ "/auth/sessions/logout-all": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /**
+ * Logout all other sessions
+ * @description Revoke every session for the current user except the one making this request
+ */
+ post: operations["logout-all-other-sessions"];
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
"/container-registries": {
parameters: {
query?: never;
@@ -300,6 +428,26 @@ export interface paths {
patch?: never;
trace?: never;
};
+ "/container-registries/pull-usage": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ /**
+ * Get container registry pull usage
+ * @description Get configured registry pull usage and rate limit visibility
+ */
+ get: operations["getContainerRegistryPullUsage"];
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
"/container-registries/sync": {
parameters: {
query?: never;
@@ -520,6 +668,86 @@ export interface paths {
patch?: never;
trace?: never;
};
+ "/dashboard/stream": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ /**
+ * Stream dashboard snapshots across all environments
+ * @description Stream dashboard snapshot updates for the local environment and all enabled remote environments as JSON lines
+ */
+ get: operations["stream-all-dashboards"];
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/diagnostics": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ /**
+ * Get runtime diagnostics
+ * @description Returns Go runtime, memory, garbage-collector, and WebSocket connection statistics.
+ */
+ get: operations["get-diagnostics"];
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/diagnostics/logs": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ /**
+ * Get recent backend logs
+ * @description Returns the most recent buffered backend log entries (oldest first).
+ */
+ get: operations["get-diagnostics-logs"];
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/edge-mtls/ca": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ /**
+ * Download Arcane-generated edge mTLS CA
+ * @description Download the Arcane-managed certificate authority used for generated edge mTLS client certificates
+ */
+ get: operations["downloadEdgeMTLSCA"];
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
"/environments": {
parameters: {
query?: never;
@@ -592,6 +820,86 @@ export interface paths {
patch?: never;
trace?: never;
};
+ "/environments/{id}/activities": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ /**
+ * List background activities
+ * @description Get current and recent background activities for an environment
+ */
+ get: operations["list-activities"];
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/environments/{id}/activities/history": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ post?: never;
+ /**
+ * Clear background activity history
+ * @description Delete completed background activity history for an environment
+ */
+ delete: operations["clear-activity-history"];
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/environments/{id}/activities/{activityId}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ /**
+ * Get background activity
+ * @description Get a background activity with its recent output messages
+ */
+ get: operations["get-activity"];
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/environments/{id}/activities/{activityId}/cancel": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /**
+ * Cancel a background activity
+ * @description Request cancellation of a running or queued background activity
+ */
+ post: operations["cancel-activity"];
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
"/environments/{id}/agent/pair": {
parameters: {
query?: never;
@@ -792,7 +1100,7 @@ export interface paths {
patch?: never;
trace?: never;
};
- "/environments/{id}/containers/{containerId}/redeploy": {
+ "/environments/{id}/containers/{containerId}/commit": {
parameters: {
query?: never;
header?: never;
@@ -802,17 +1110,17 @@ export interface paths {
get?: never;
put?: never;
/**
- * Redeploy container
- * @description Pull latest image and recreate container
+ * Commit container
+ * @description Create an image from a container
*/
- post: operations["redeploy-container"];
+ post: operations["commit-container"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
- "/environments/{id}/containers/{containerId}/restart": {
+ "/environments/{id}/containers/{containerId}/kill": {
parameters: {
query?: never;
header?: never;
@@ -821,15 +1129,18 @@ export interface paths {
};
get?: never;
put?: never;
- /** Restart container */
- post: operations["restart-container"];
+ /**
+ * Kill container
+ * @description Send a signal to the container's main process (default SIGKILL)
+ */
+ post: operations["kill-container"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
- "/environments/{id}/containers/{containerId}/start": {
+ "/environments/{id}/containers/{containerId}/pause": {
parameters: {
query?: never;
header?: never;
@@ -838,15 +1149,69 @@ export interface paths {
};
get?: never;
put?: never;
- /** Start container */
- post: operations["start-container"];
+ /** Pause container */
+ post: operations["pause-container"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
- "/environments/{id}/containers/{containerId}/stop": {
+ "/environments/{id}/containers/{containerId}/redeploy": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /**
+ * Redeploy container
+ * @description Pull latest image and recreate container
+ */
+ post: operations["redeploy-container"];
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/environments/{id}/containers/{containerId}/restart": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /** Restart container */
+ post: operations["restart-container"];
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/environments/{id}/containers/{containerId}/start": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /** Start container */
+ post: operations["start-container"];
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/environments/{id}/containers/{containerId}/stop": {
parameters: {
query?: never;
header?: never;
@@ -863,6 +1228,23 @@ export interface paths {
patch?: never;
trace?: never;
};
+ "/environments/{id}/containers/{containerId}/unpause": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /** Unpause container */
+ post: operations["unpause-container"];
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
"/environments/{id}/containers/{containerId}/update": {
parameters: {
query?: never;
@@ -903,7 +1285,7 @@ export interface paths {
patch?: never;
trace?: never;
};
- "/environments/{id}/dashboard/action-items": {
+ "/environments/{id}/deployment": {
parameters: {
query?: never;
header?: never;
@@ -911,10 +1293,10 @@ export interface paths {
cookie?: never;
};
/**
- * Get dashboard action items
- * @description Returns only dashboard action items that currently need attention
+ * Get deployment snippets
+ * @description Get Docker run and compose snippets for environment deployment
*/
- get: operations["get-dashboard-action-items"];
+ get: operations["getDeploymentSnippets"];
put?: never;
post?: never;
delete?: never;
@@ -923,7 +1305,7 @@ export interface paths {
patch?: never;
trace?: never;
};
- "/environments/{id}/deployment": {
+ "/environments/{id}/deployment/mtls/bundle": {
parameters: {
query?: never;
header?: never;
@@ -931,10 +1313,30 @@ export interface paths {
cookie?: never;
};
/**
- * Get deployment snippets
- * @description Get Docker run and compose snippets for environment deployment
+ * Download environment mTLS bundle
+ * @description Download the generated mTLS client certificate bundle for an edge environment
*/
- get: operations["getDeploymentSnippets"];
+ get: operations["downloadEnvironmentMTLSBundle"];
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/environments/{id}/deployment/mtls/{fileName}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ /**
+ * Download environment mTLS asset
+ * @description Download an individual generated mTLS client certificate asset for an edge environment
+ */
+ get: operations["downloadEnvironmentMTLSFile"];
put?: never;
post?: never;
delete?: never;
@@ -1095,6 +1497,23 @@ export interface paths {
patch?: never;
trace?: never;
};
+ "/environments/{id}/image-updates/by-refs": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ /** Get persisted update info for image references */
+ get: operations["get-update-info-by-refs"];
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
"/environments/{id}/image-updates/check": {
parameters: {
query?: never;
@@ -1321,6 +1740,26 @@ export interface paths {
patch?: never;
trace?: never;
};
+ "/environments/{id}/images/search": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ /**
+ * Search images
+ * @description Search Docker Hub images
+ */
+ get: operations["search-images"];
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
"/environments/{id}/images/upload": {
parameters: {
query?: never;
@@ -1465,6 +1904,86 @@ export interface paths {
patch?: never;
trace?: never;
};
+ "/environments/{id}/images/{name}/attestations": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ /**
+ * Get image attestations
+ * @description Get in-toto attestation statements attached to a Docker image
+ */
+ get: operations["get-image-attestations"];
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/environments/{id}/images/{name}/export": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ /**
+ * Export image
+ * @description Download a Docker image as a tar archive
+ */
+ get: operations["export-image"];
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/environments/{id}/images/{name}/history": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ /**
+ * Get image history
+ * @description Get Docker image layer history
+ */
+ get: operations["get-image-history"];
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/environments/{id}/images/{name}/tag": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /**
+ * Tag image
+ * @description Add a repository tag to an image
+ */
+ post: operations["tag-image"];
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
"/environments/{id}/job-schedules": {
parameters: {
query?: never;
@@ -1616,41 +2135,6 @@ export interface paths {
patch?: never;
trace?: never;
};
- "/environments/{id}/notifications/apprise": {
- parameters: {
- query?: never;
- header?: never;
- path?: never;
- cookie?: never;
- };
- /** Get Apprise settings */
- get: operations["get-apprise-settings"];
- put?: never;
- /** Create or update Apprise settings */
- post: operations["create-or-update-apprise-settings"];
- delete?: never;
- options?: never;
- head?: never;
- patch?: never;
- trace?: never;
- };
- "/environments/{id}/notifications/apprise/test": {
- parameters: {
- query?: never;
- header?: never;
- path?: never;
- cookie?: never;
- };
- get?: never;
- put?: never;
- /** Test Apprise notification */
- post: operations["test-apprise-notification"];
- delete?: never;
- options?: never;
- head?: never;
- patch?: never;
- trace?: never;
- };
"/environments/{id}/notifications/settings": {
parameters: {
query?: never;
@@ -1789,6 +2273,26 @@ export interface paths {
patch?: never;
trace?: never;
};
+ "/environments/{id}/projects/{projectId}/archive": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /**
+ * Archive a project
+ * @description Archive a stopped Docker Compose project
+ */
+ post: operations["archive-project"];
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
"/environments/{id}/projects/{projectId}/build": {
parameters: {
query?: never;
@@ -1809,6 +2313,26 @@ export interface paths {
patch?: never;
trace?: never;
};
+ "/environments/{id}/projects/{projectId}/compose": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ /**
+ * Get project compose details
+ * @description Get compose content, includes, and service configs for a project
+ */
+ get: operations["get-project-compose"];
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
"/environments/{id}/projects/{projectId}/destroy": {
parameters: {
query?: never;
@@ -1849,19 +2373,19 @@ export interface paths {
patch?: never;
trace?: never;
};
- "/environments/{id}/projects/{projectId}/includes": {
+ "/environments/{id}/projects/{projectId}/file": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
- get?: never;
/**
- * Update project include file
- * @description Update an include file within a Docker Compose project
+ * Get a project file
+ * @description Get the contents of a single project-related file by relative path
*/
- put: operations["update-project-include"];
+ get: operations["get-project-file"];
+ put?: never;
post?: never;
delete?: never;
options?: never;
@@ -1869,18 +2393,58 @@ export interface paths {
patch?: never;
trace?: never;
};
- "/environments/{id}/projects/{projectId}/pull": {
+ "/environments/{id}/projects/{projectId}/files": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
- get?: never;
- put?: never;
/**
- * Pull project images
- * @description Pull all images for a Docker Compose project with streaming progress output
+ * Get project files
+ * @description Get directory files for a project
+ */
+ get: operations["get-project-files"];
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/environments/{id}/projects/{projectId}/includes": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get?: never;
+ /**
+ * Update project include file
+ * @description Update an include file within a Docker Compose project
+ */
+ put: operations["update-project-include"];
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/environments/{id}/projects/{projectId}/pull": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /**
+ * Pull project images
+ * @description Pull all images for a Docker Compose project with streaming progress output
*/
post: operations["pull-project-images"];
delete?: never;
@@ -1929,6 +2493,46 @@ export interface paths {
patch?: never;
trace?: never;
};
+ "/environments/{id}/projects/{projectId}/runtime": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ /**
+ * Get project runtime
+ * @description Get runtime service state for a project
+ */
+ get: operations["get-project-runtime"];
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/environments/{id}/projects/{projectId}/unarchive": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /**
+ * Unarchive a project
+ * @description Unarchive a Docker Compose project
+ */
+ post: operations["unarchive-project"];
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
"/environments/{id}/projects/{projectId}/up": {
parameters: {
query?: never;
@@ -1949,6 +2553,46 @@ export interface paths {
patch?: never;
trace?: never;
};
+ "/environments/{id}/projects/{projectId}/update-services": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /**
+ * Update project services
+ * @description Pull latest images and recreate the given services (all services when none are specified)
+ */
+ post: operations["update-project-services"];
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/environments/{id}/projects/{projectId}/updates": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ /**
+ * Get project updates
+ * @description Get image update summary for a project
+ */
+ get: operations["get-project-updates"];
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
"/environments/{id}/settings": {
parameters: {
query?: never;
@@ -2457,7 +3101,8 @@ export interface paths {
};
/** Get swarm stack source */
get: operations["get-swarm-stack-source"];
- put?: never;
+ /** Update swarm stack source */
+ put: operations["update-swarm-stack-source"];
post?: never;
delete?: never;
options?: never;
@@ -2730,6 +3375,46 @@ export interface paths {
patch?: never;
trace?: never;
};
+ "/environments/{id}/system/upgrade/all": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /**
+ * Update all environments
+ * @description Upgrade every Arcane environment, starting with the manager
+ */
+ post: operations["trigger-update-all"];
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/environments/{id}/system/upgrade/all/status": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ /**
+ * Get update-all status
+ * @description Get the status of the latest update-all-environments job
+ */
+ get: operations["update-all-status"];
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
"/environments/{id}/system/upgrade/check": {
parameters: {
query?: never;
@@ -3426,11 +4111,7 @@ export interface paths {
*/
get: operations["listEvents"];
put?: never;
- /**
- * Create an event
- * @description Create a new system event
- */
- post: operations["createEvent"];
+ post?: never;
delete?: never;
options?: never;
head?: never;
@@ -3477,7 +4158,7 @@ export interface paths {
patch?: never;
trace?: never;
};
- "/fonts/mono": {
+ "/federated-credentials": {
parameters: {
query?: never;
header?: never;
@@ -3485,39 +4166,23 @@ export interface paths {
cookie?: never;
};
/**
- * Get monospace font
- * @description Get the application monospace font (Geist Mono)
+ * List federated credentials
+ * @description Get a paginated list of workload identity federation trust rules
*/
- get: operations["get-mono-font"];
+ get: operations["list-federated-credentials"];
put?: never;
- post?: never;
- delete?: never;
- options?: never;
- head?: never;
- patch?: never;
- trace?: never;
- };
- "/fonts/sans": {
- parameters: {
- query?: never;
- header?: never;
- path?: never;
- cookie?: never;
- };
/**
- * Get sans-serif font
- * @description Get the application sans-serif font (Geist)
+ * Create a federated credential
+ * @description Create a workload identity federation trust rule
*/
- get: operations["get-sans-font"];
- put?: never;
- post?: never;
+ post: operations["create-federated-credential"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
- "/fonts/serif": {
+ "/federated-credentials/{id}": {
parameters: {
query?: never;
header?: never;
@@ -3525,13 +4190,21 @@ export interface paths {
cookie?: never;
};
/**
- * Get serif font
- * @description Get the application serif font (Calistoga)
+ * Get a federated credential
+ * @description Get details of a workload identity federation trust rule
*/
- get: operations["get-serif-font"];
- put?: never;
+ get: operations["get-federated-credential"];
+ /**
+ * Update a federated credential
+ * @description Update a workload identity federation trust rule
+ */
+ put: operations["update-federated-credential"];
post?: never;
- delete?: never;
+ /**
+ * Delete a federated credential
+ * @description Delete a workload identity federation trust rule and its service user
+ */
+ delete: operations["delete-federated-credential"];
options?: never;
head?: never;
patch?: never;
@@ -3678,6 +4351,45 @@ export interface paths {
patch?: never;
trace?: never;
};
+ "/oidc/role-mappings": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ /**
+ * List OIDC group → role mappings
+ * @description Returns every mapping. On each OIDC login the user's group claim is matched against ClaimValue and matching rows become source='oidc' role assignments.
+ */
+ get: operations["list-oidc-role-mappings"];
+ put?: never;
+ /** Create an OIDC role mapping */
+ post: operations["create-oidc-role-mapping"];
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/oidc/role-mappings/{id}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get?: never;
+ /** Update an OIDC role mapping */
+ put: operations["update-oidc-role-mapping"];
+ post?: never;
+ /** Delete an OIDC role mapping */
+ delete: operations["delete-oidc-role-mapping"];
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
"/oidc/status": {
parameters: {
query?: never;
@@ -3718,6 +4430,75 @@ export interface paths {
patch?: never;
trace?: never;
};
+ "/roles": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ /**
+ * List roles
+ * @description Get a paginated list of roles (built-in + custom)
+ */
+ get: operations["list-roles"];
+ put?: never;
+ /**
+ * Create a custom role
+ * @description Built-in roles cannot be created via this endpoint; only custom roles are accepted. Reserved for global admins.
+ */
+ post: operations["create-role"];
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/roles/available-permissions": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ /**
+ * Get the permission manifest
+ * @description Returns every permission the server recognizes, grouped by resource. Used by permission-picking UIs.
+ */
+ get: operations["get-permissions-manifest"];
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/roles/{id}": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ /** Get a role */
+ get: operations["get-role"];
+ /**
+ * Update a custom role
+ * @description Built-in roles are read-only and return 403 on update. Reserved for global admins.
+ */
+ put: operations["update-role"];
+ post?: never;
+ /**
+ * Delete a custom role
+ * @description Built-in roles are protected; deleting cascades all user assignments. Reserved for global admins.
+ */
+ delete: operations["delete-role"];
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
"/settings/categories": {
parameters: {
query?: never;
@@ -4031,7 +4812,7 @@ export interface paths {
patch?: never;
trace?: never;
};
- "/version": {
+ "/users/{userId}/avatar": {
parameters: {
query?: never;
header?: never;
@@ -4039,10 +4820,10 @@ export interface paths {
cookie?: never;
};
/**
- * Get version information
- * @description Get application version information and check for updates
+ * Get user avatar
+ * @description Get the custom profile picture for a user
*/
- get: operations["getVersion"];
+ get: operations["getUserAvatar"];
put?: never;
post?: never;
delete?: never;
@@ -4051,19 +4832,117 @@ export interface paths {
patch?: never;
trace?: never;
};
-}
-export type webhooks = Record;
-export interface components {
- schemas: {
- ApiKeyPaginatedResponse: {
- /**
- * Format: uri
- * @description A URL to the JSON Schema for this object.
- * @example https://arcane.randomsynergy.xyz:3552/api/schemas/ApiKeyPaginatedResponse.json
- */
- readonly $schema?: string;
- data: components["schemas"]["ApikeyApiKey"][] | null;
- pagination: components["schemas"]["BasePaginationResponse"];
+ "/users/{userId}/role-assignments": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ /**
+ * List a user's role assignments
+ * @description Reserved for global admins.
+ */
+ get: operations["list-user-role-assignments"];
+ /**
+ * Replace a user's manual role assignments
+ * @description Replaces every source='manual' assignment for the user. source='oidc' assignments are not touched. Reserved for global admins; enforces the last-admin guard.
+ */
+ put: operations["set-user-role-assignments"];
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ "/version": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ /**
+ * Get version information
+ * @description Get application version information and check for updates
+ */
+ get: operations["getVersion"];
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+}
+export type webhooks = Record;
+export interface components {
+ schemas: {
+ ActivityActivity: {
+ /** Format: date-time */
+ createdAt: string;
+ /** Format: int64 */
+ durationMs?: number;
+ /** Format: date-time */
+ endedAt?: string;
+ environmentId: string;
+ error?: string;
+ id: string;
+ latestMessage?: string;
+ metadata?: {
+ [key: string]: unknown;
+ };
+ /** Format: int64 */
+ progress?: number;
+ resourceId?: string;
+ resourceName?: string;
+ resourceType?: string;
+ sourceEnvironmentId?: string;
+ sourceEnvironmentName?: string;
+ /** Format: date-time */
+ startedAt: string;
+ startedBy?: components["schemas"]["ActivityStartedBy"];
+ status: string;
+ step?: string;
+ type: string;
+ /** Format: date-time */
+ updatedAt?: string;
+ };
+ ActivityClearHistoryResult: {
+ /** Format: int64 */
+ deleted: number;
+ };
+ ActivityDetail: {
+ activity: components["schemas"]["ActivityActivity"];
+ messages: components["schemas"]["ActivityMessage"][] | null;
+ };
+ ActivityMessage: {
+ activityId: string;
+ /** Format: date-time */
+ createdAt: string;
+ id: string;
+ level: string;
+ message: string;
+ payload?: {
+ [key: string]: unknown;
+ };
+ };
+ ActivityStartedBy: {
+ displayName?: string;
+ userId?: string;
+ username: string;
+ };
+ ApiKeyPaginatedResponse: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/ApiKeyPaginatedResponse.json
+ */
+ readonly $schema?: string;
+ data: components["schemas"]["ApikeyApiKey"][] | null;
+ pagination: components["schemas"]["BasePaginationResponse"];
success: boolean;
};
"ApiResponseStruct {}DataStruct": Record;
@@ -4082,10 +4961,14 @@ export interface components {
expiresAt?: string;
/** @description Unique identifier of the API key */
id: string;
+ /** @description Whether the API key is an auto-generated environment bootstrap key (locked from manual edit / delete) */
+ isBootstrap: boolean;
/** @description Whether the API key is environment-managed and protected from deletion */
isStatic: boolean;
/** @description Prefix of the API key for identification */
keyPrefix: string;
+ /** @description Key kind: 'scoped' keys use their own permission grants, 'personal' keys inherit the owner's role permissions */
+ kind: string;
/**
* Format: date-time
* @description Last time the API key was used
@@ -4093,13 +4976,15 @@ export interface components {
lastUsedAt?: string;
/** @description Name of the API key */
name: string;
+ /** @description Permissions held by this key */
+ permissions: components["schemas"]["ApikeyPermissionGrant"][] | null;
/**
* Format: date-time
* @description Last update timestamp
*/
updatedAt?: string;
/** @description ID of the user who owns the API key */
- userId: string;
+ userId?: string;
};
ApikeyApiKeyCreatedDto: {
/**
@@ -4116,12 +5001,16 @@ export interface components {
expiresAt?: string;
/** @description Unique identifier of the API key */
id: string;
+ /** @description Whether the API key is an auto-generated environment bootstrap key (locked from manual edit / delete) */
+ isBootstrap: boolean;
/** @description Whether the API key is environment-managed and protected from deletion */
isStatic: boolean;
/** @description The full API key secret (only shown once) */
key: string;
/** @description Prefix of the API key for identification */
keyPrefix: string;
+ /** @description Key kind: 'scoped' keys use their own permission grants, 'personal' keys inherit the owner's role permissions */
+ kind: string;
/**
* Format: date-time
* @description Last time the API key was used
@@ -4129,13 +5018,15 @@ export interface components {
lastUsedAt?: string;
/** @description Name of the API key */
name: string;
+ /** @description Permissions held by this key */
+ permissions: components["schemas"]["ApikeyPermissionGrant"][] | null;
/**
* Format: date-time
* @description Last update timestamp
*/
updatedAt?: string;
/** @description ID of the user who owns the API key */
- userId: string;
+ userId?: string;
};
ApikeyCreateApiKey: {
/**
@@ -4156,6 +5047,37 @@ export interface components {
* @example My API Key
*/
name: string;
+ /** @description Permissions granted to this key. Cannot exceed the creator's own permissions. */
+ permissions: components["schemas"]["ApikeyPermissionGrant"][] | null;
+ };
+ ApikeyCreateUserApiKey: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/ApikeyCreateUserApiKey.json
+ */
+ readonly $schema?: string;
+ /** @description Optional description of the API key */
+ description?: string;
+ /**
+ * Format: date-time
+ * @description Optional expiration date for the API key
+ */
+ expiresAt?: string;
+ /**
+ * @description Name of the API key
+ * @example My API Key
+ */
+ name: string;
+ };
+ ApikeyPermissionGrant: {
+ /** @description Environment ID to scope the grant to; omit for a global grant */
+ environmentId?: string;
+ /**
+ * @description Permission string
+ * @example containers:list
+ */
+ permission: string;
};
ApikeyUpdateApiKey: {
/**
@@ -4173,6 +5095,8 @@ export interface components {
expiresAt?: string;
/** @description New name for the API key */
name?: string;
+ /** @description Replace the key's permission grants. Omit to leave unchanged. Cannot exceed the updater's own permissions. */
+ permissions?: components["schemas"]["ApikeyPermissionGrant"][] | null;
};
AuthLogin: {
/**
@@ -4209,6 +5133,7 @@ export interface components {
* @example https://arcane.randomsynergy.xyz:3552/api/schemas/AuthOidcAuthUrlRequest.json
*/
readonly $schema?: string;
+ mobileRedirectUri?: string;
redirectUri: string;
};
AuthOidcAuthUrlResponse: {
@@ -4228,6 +5153,7 @@ export interface components {
*/
readonly $schema?: string;
code: string;
+ mobileRedirectUri?: string;
state: string;
};
AuthOidcCallbackResponse: {
@@ -4375,27 +5301,27 @@ export interface components {
BackupHasPathResponse: {
exists: boolean;
};
- BaseApiResponseActionItems: {
+ BaseApiResponseActionResult: {
/**
* Format: uri
* @description A URL to the JSON Schema for this object.
- * @example https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseActionItems.json
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseActionResult.json
*/
readonly $schema?: string;
/** @description Response data */
- data: components["schemas"]["DashboardActionItems"];
+ data: components["schemas"]["ContainerActionResult"];
/** @description Whether the request was successful */
success: boolean;
};
- BaseApiResponseActionResult: {
+ BaseApiResponseActivity: {
/**
* Format: uri
* @description A URL to the JSON Schema for this object.
- * @example https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseActionResult.json
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseActivity.json
*/
readonly $schema?: string;
/** @description Response data */
- data: components["schemas"]["ContainerActionResult"];
+ data: components["schemas"]["ActivityActivity"];
/** @description Whether the request was successful */
success: boolean;
};
@@ -4435,6 +5361,18 @@ export interface components {
/** @description Whether the request was successful */
success: boolean;
};
+ BaseApiResponseAttestationList: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseAttestationList.json
+ */
+ readonly $schema?: string;
+ /** @description Response data */
+ data: components["schemas"]["ImageAttestationList"];
+ /** @description Whether the request was successful */
+ success: boolean;
+ };
BaseApiResponseBackupHasPathResponse: {
/**
* Format: uri
@@ -4509,6 +5447,30 @@ export interface components {
/** @description Whether the request was successful */
success: boolean;
};
+ BaseApiResponseClearHistoryResult: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseClearHistoryResult.json
+ */
+ readonly $schema?: string;
+ /** @description Response data */
+ data: components["schemas"]["ActivityClearHistoryResult"];
+ /** @description Whether the request was successful */
+ success: boolean;
+ };
+ BaseApiResponseCommitResult: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseCommitResult.json
+ */
+ readonly $schema?: string;
+ /** @description Response data */
+ data: components["schemas"]["ContainerCommitResult"];
+ /** @description Whether the request was successful */
+ success: boolean;
+ };
BaseApiResponseConfig: {
/**
* Format: uri
@@ -4593,6 +5555,18 @@ export interface components {
/** @description Whether the request was successful */
success: boolean;
};
+ BaseApiResponseDetail: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseDetail.json
+ */
+ readonly $schema?: string;
+ /** @description Response data */
+ data: components["schemas"]["ActivityDetail"];
+ /** @description Whether the request was successful */
+ success: boolean;
+ };
BaseApiResponseDetailSummary: {
/**
* Format: uri
@@ -4617,6 +5591,18 @@ export interface components {
/** @description Whether the request was successful */
success: boolean;
};
+ BaseApiResponseDispatchResponse: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseDispatchResponse.json
+ */
+ readonly $schema?: string;
+ /** @description Response data */
+ data: components["schemas"]["NotificationDispatchResponse"];
+ /** @description Whether the request was successful */
+ success: boolean;
+ };
BaseApiResponseEnvironment: {
/**
* Format: uri
@@ -4629,6 +5615,18 @@ export interface components {
/** @description Whether the request was successful */
success: boolean;
};
+ BaseApiResponseEnvironmentUpdateJob: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseEnvironmentUpdateJob.json
+ */
+ readonly $schema?: string;
+ /** @description Response data */
+ data: components["schemas"]["EnvironmentUpdateJob"];
+ /** @description Whether the request was successful */
+ success: boolean;
+ };
BaseApiResponseEnvironmentVulnerabilitySummary: {
/**
* Format: uri
@@ -4653,15 +5651,15 @@ export interface components {
/** @description Whether the request was successful */
success: boolean;
};
- BaseApiResponseEvent: {
+ BaseApiResponseFederatedCredential: {
/**
* Format: uri
* @description A URL to the JSON Schema for this object.
- * @example https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseEvent.json
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseFederatedCredential.json
*/
readonly $schema?: string;
/** @description Response data */
- data: components["schemas"]["EventEvent"];
+ data: components["schemas"]["FederatedFederatedCredential"];
/** @description Whether the request was successful */
success: boolean;
};
@@ -4725,6 +5723,18 @@ export interface components {
/** @description Whether the request was successful */
success: boolean;
};
+ BaseApiResponseIncludeFile: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseIncludeFile.json
+ */
+ readonly $schema?: string;
+ /** @description Response data */
+ data: components["schemas"]["ProjectIncludeFile"];
+ /** @description Whether the request was successful */
+ success: boolean;
+ };
BaseApiResponseInfo: {
/**
* Format: uri
@@ -4749,6 +5759,18 @@ export interface components {
/** @description Whether the request was successful */
success: boolean;
};
+ BaseApiResponseListApiKey: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListApiKey.json
+ */
+ readonly $schema?: string;
+ /** @description Response data */
+ data: components["schemas"]["ApikeyApiKey"][] | null;
+ /** @description Whether the request was successful */
+ success: boolean;
+ };
BaseApiResponseListAutoUpdateRecord: {
/**
* Format: uri
@@ -4785,6 +5807,42 @@ export interface components {
/** @description Whether the request was successful */
success: boolean;
};
+ BaseApiResponseListHistoryItem: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListHistoryItem.json
+ */
+ readonly $schema?: string;
+ /** @description Response data */
+ data: components["schemas"]["ImageHistoryItem"][] | null;
+ /** @description Whether the request was successful */
+ success: boolean;
+ };
+ BaseApiResponseListRoleAssignment: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListRoleAssignment.json
+ */
+ readonly $schema?: string;
+ /** @description Response data */
+ data: components["schemas"]["RoleRoleAssignment"][] | null;
+ /** @description Whether the request was successful */
+ success: boolean;
+ };
+ BaseApiResponseListSearchResult: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseListSearchResult.json
+ */
+ readonly $schema?: string;
+ /** @description Response data */
+ data: components["schemas"]["ImageSearchResult"][] | null;
+ /** @description Whether the request was successful */
+ success: boolean;
+ };
BaseApiResponseListSecretSummary: {
/**
* Format: uri
@@ -4905,6 +5963,20 @@ export interface components {
/** @description Whether the request was successful */
success: boolean;
};
+ BaseApiResponseMapStringUpdateInfo: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseMapStringUpdateInfo.json
+ */
+ readonly $schema?: string;
+ /** @description Response data */
+ data: {
+ [key: string]: components["schemas"]["ImageUpdateInfo"];
+ };
+ /** @description Whether the request was successful */
+ success: boolean;
+ };
BaseApiResponseMessageResponse: {
/**
* Format: uri
@@ -4929,6 +6001,18 @@ export interface components {
/** @description Whether the request was successful */
success: boolean;
};
+ BaseApiResponsePermissionsManifest: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponsePermissionsManifest.json
+ */
+ readonly $schema?: string;
+ /** @description Response data */
+ data: components["schemas"]["RolePermissionsManifest"];
+ /** @description Whether the request was successful */
+ success: boolean;
+ };
BaseApiResponsePruneAllResult: {
/**
* Format: uri
@@ -4953,6 +6037,18 @@ export interface components {
/** @description Whether the request was successful */
success: boolean;
};
+ BaseApiResponsePullUsageResponse: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponsePullUsageResponse.json
+ */
+ readonly $schema?: string;
+ /** @description Response data */
+ data: components["schemas"]["ContainerregistryPullUsageResponse"];
+ /** @description Whether the request was successful */
+ success: boolean;
+ };
BaseApiResponseRemoteRegistry: {
/**
* Format: uri
@@ -4989,27 +6085,39 @@ export interface components {
/** @description Whether the request was successful */
success: boolean;
};
- BaseApiResponseRuntimeStatus: {
+ BaseApiResponseRole: {
/**
* Format: uri
* @description A URL to the JSON Schema for this object.
- * @example https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseRuntimeStatus.json
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseRole.json
*/
readonly $schema?: string;
/** @description Response data */
- data: components["schemas"]["SwarmRuntimeStatus"];
+ data: components["schemas"]["RoleRole"];
/** @description Whether the request was successful */
success: boolean;
};
- BaseApiResponseScanResult: {
+ BaseApiResponseRuntimeStatus: {
/**
* Format: uri
* @description A URL to the JSON Schema for this object.
- * @example https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseScanResult.json
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseRuntimeStatus.json
*/
readonly $schema?: string;
/** @description Response data */
- data: components["schemas"]["VulnerabilityScanResult"];
+ data: components["schemas"]["SwarmRuntimeStatus"];
+ /** @description Whether the request was successful */
+ success: boolean;
+ };
+ BaseApiResponseScanResult: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseScanResult.json
+ */
+ readonly $schema?: string;
+ /** @description Response data */
+ data: components["schemas"]["VulnerabilityScanResult"];
/** @description Whether the request was successful */
success: boolean;
};
@@ -5349,6 +6457,18 @@ export interface components {
/** @description Whether the request was successful */
success: boolean;
};
+ BaseApiResponseTestResponse: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/BaseApiResponseTestResponse.json
+ */
+ readonly $schema?: string;
+ /** @description Response data */
+ data: components["schemas"]["NotificationTestResponse"];
+ /** @description Whether the request was successful */
+ success: boolean;
+ };
BaseApiResponseTokenRefreshResponse: {
/**
* Format: uri
@@ -5434,9 +6554,39 @@ export interface components {
success: boolean;
};
BaseMessageResponse: {
+ /** @description Background activity ID tracking this action */
+ activityId?: string;
/** @description Response message */
message: string;
};
+ BasePaginatedActivity: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/BasePaginatedActivity.json
+ */
+ readonly $schema?: string;
+ /** @description Array of items for the current page */
+ data: components["schemas"]["ActivityActivity"][] | null;
+ /** @description Pagination metadata */
+ pagination: components["schemas"]["BasePaginationResponse"];
+ /** @description Whether the request was successful */
+ success: boolean;
+ };
+ BasePaginatedFederatedCredential: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/BasePaginatedFederatedCredential.json
+ */
+ readonly $schema?: string;
+ /** @description Array of items for the current page */
+ data: components["schemas"]["FederatedFederatedCredential"][] | null;
+ /** @description Pagination metadata */
+ pagination: components["schemas"]["BasePaginationResponse"];
+ /** @description Whether the request was successful */
+ success: boolean;
+ };
BasePaginatedIgnoredVulnerability: {
/**
* Format: uri
@@ -5596,12 +6746,36 @@ export interface components {
success: boolean;
};
ContainerActionResult: {
+ activityId?: string;
errors?: string[] | null;
failed?: string[] | null;
started?: string[] | null;
stopped?: string[] | null;
success: boolean;
};
+ ContainerCommitRequest: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/ContainerCommitRequest.json
+ */
+ readonly $schema?: string;
+ /** @description Commit author */
+ author?: string;
+ /** @description Dockerfile changes to apply */
+ changes?: string[] | null;
+ /** @description Commit comment */
+ comment?: string;
+ /** @description Do not pause the container during commit */
+ noPause?: boolean;
+ /** @description Target image repository */
+ repository?: string;
+ /** @description Target image tag */
+ tag?: string;
+ };
+ ContainerCommitResult: {
+ id: string;
+ };
ContainerComposeInfo: {
configFiles?: string;
projectName: string;
@@ -5612,6 +6786,7 @@ export interface components {
cmd?: string[] | null;
entrypoint?: string[] | null;
env?: string[] | null;
+ healthcheck?: components["schemas"]["ContainerHealthcheck"];
user?: string;
workingDir?: string;
};
@@ -5680,10 +6855,13 @@ export interface components {
success: boolean;
};
ContainerDetails: {
+ activityId?: string;
composeInfo?: components["schemas"]["ContainerComposeInfo"];
config: components["schemas"]["ContainerConfig"];
created: string;
hostConfig: components["schemas"]["ContainerHostConfig"];
+ iconDarkUrl?: string;
+ iconLightUrl?: string;
id: string;
image: string;
imageId: string;
@@ -5694,6 +6872,7 @@ export interface components {
name: string;
networkSettings: components["schemas"]["ContainerNetworkSettings"];
ports: components["schemas"]["ContainerPort"][] | null;
+ redeployDisabled?: boolean;
state: components["schemas"]["ContainerState"];
};
ContainerDetailsResponse: {
@@ -5709,6 +6888,32 @@ export interface components {
ContainerEndpointSettingsCreate: {
aliases?: string[] | null;
};
+ ContainerHealth: {
+ /** Format: int64 */
+ failingStreak: number;
+ log?: components["schemas"]["ContainerHealthLogEntry"][] | null;
+ status: string;
+ };
+ ContainerHealthLogEntry: {
+ end?: string;
+ /** Format: int64 */
+ exitCode: number;
+ output?: string;
+ start?: string;
+ };
+ ContainerHealthcheck: {
+ /** Format: int64 */
+ interval?: number;
+ /** Format: int64 */
+ retries?: number;
+ /** Format: int64 */
+ startInterval?: number;
+ /** Format: int64 */
+ startPeriod?: number;
+ test?: string[] | null;
+ /** Format: int64 */
+ timeout?: number;
+ };
ContainerHostConfig: {
autoRemove?: boolean;
/** Format: int64 */
@@ -5826,6 +7031,7 @@ export interface components {
/** Format: int64 */
exitCode?: number;
finishedAt?: string;
+ health?: components["schemas"]["ContainerHealth"];
running: boolean;
startedAt?: string;
status: string;
@@ -5853,6 +7059,8 @@ export interface components {
/** Format: int64 */
created: number;
hostConfig: components["schemas"]["ContainerHostConfig"];
+ iconDarkUrl?: string;
+ iconLightUrl?: string;
id: string;
image: string;
imageId: string;
@@ -5863,6 +7071,7 @@ export interface components {
names: string[] | null;
networkSettings: components["schemas"]["ContainerNetworkSettings"];
ports: components["schemas"]["ContainerPort"][] | null;
+ redeployDisabled?: boolean;
state: string;
status: string;
updateInfo?: components["schemas"]["ImageUpdateInfo"];
@@ -5892,6 +7101,32 @@ export interface components {
url: string;
username: string;
};
+ ContainerregistryPullUsage: {
+ authMethod: string;
+ authUsername?: string;
+ /** Format: date-time */
+ checkedAt: string;
+ displayName: string;
+ error?: string;
+ /** Format: int64 */
+ limit?: number;
+ /** Format: int64 */
+ observedPulls: number;
+ provider: string;
+ registry: string;
+ registryId: string;
+ /** Format: int64 */
+ remaining?: number;
+ repository?: string;
+ source?: string;
+ /** Format: int64 */
+ used?: number;
+ /** Format: int64 */
+ windowSeconds?: number;
+ };
+ ContainerregistryPullUsageResponse: {
+ registries: components["schemas"]["ContainerregistryPullUsage"][] | null;
+ };
ContainerregistrySync: {
awsAccessKeyId?: string;
awsRegion?: string;
@@ -5953,6 +7188,16 @@ export interface components {
url: string;
username?: string;
};
+ CreateOidcRoleMappingOutputBody: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/CreateOidcRoleMappingOutputBody.json
+ */
+ readonly $schema?: string;
+ data: components["schemas"]["RoleOidcRoleMapping"];
+ success: boolean;
+ };
CredentialSpecConfig: {
config?: string;
file?: string;
@@ -5973,6 +7218,7 @@ export interface components {
imageUsageCounts: components["schemas"]["ImageUsageCounts"];
images: components["schemas"]["DashboardSnapshotImages"];
settings: components["schemas"]["DashboardSnapshotSettings"];
+ versionInfo?: components["schemas"]["VersionInfo"];
};
DashboardSnapshotContainers: {
counts: components["schemas"]["ContainerStatusCounts"];
@@ -5983,8 +7229,16 @@ export interface components {
data: components["schemas"]["ImageSummary"][] | null;
pagination: components["schemas"]["BasePaginationResponse"];
};
- DashboardSnapshotSettings: {
- dockerPruneMode: string;
+ DashboardSnapshotSettings: Record;
+ DeleteOidcRoleMappingOutputBody: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/DeleteOidcRoleMappingOutputBody.json
+ */
+ readonly $schema?: string;
+ message: string;
+ success: boolean;
};
DeployConfig: {
endpoint_mode?: string;
@@ -6005,6 +7259,32 @@ export interface components {
dockerCompose: string;
/** @description Docker run command snippet */
dockerRun: string;
+ /** @description Optional Arcane-generated mTLS deployment assets for edge agents */
+ mtls?: components["schemas"]["DeploymentSnippetMTLS"];
+ };
+ DeploymentSnippetFile: {
+ /** @description Container mount path expected by the mTLS snippet */
+ containerPath: string;
+ /** @description PEM file contents. Omitted for sensitive files such as private keys; use downloadUrl instead. */
+ content?: string;
+ /** @description Pairing-permission endpoint to download this file when content is withheld */
+ downloadUrl?: string;
+ /** @description Suggested filename */
+ name: string;
+ /** @description Suggested file mode */
+ permissions: string;
+ /** @description True when this file is sensitive and must be fetched via downloadUrl */
+ sensitive?: boolean;
+ };
+ DeploymentSnippetMTLS: {
+ /** @description Docker compose snippet using Arcane-generated mTLS assets */
+ dockerCompose: string;
+ /** @description Docker run snippet using Arcane-generated mTLS assets */
+ dockerRun: string;
+ /** @description Generated PEM files to place on the edge host */
+ files: components["schemas"]["DeploymentSnippetFile"][] | null;
+ /** @description Suggested host directory containing the generated PEM files */
+ hostDirHint: string;
};
DetailSummaryConfigStruct: {
argsEscaped?: boolean;
@@ -6558,6 +7838,67 @@ export interface components {
[key: string]: string;
};
};
+ DockerTypesBuildRequest: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/DockerTypesBuildRequest.json
+ */
+ readonly $schema?: string;
+ /** @description Build arguments */
+ buildArgs?: {
+ [key: string]: string;
+ };
+ /** @description Build cache sources */
+ cacheFrom?: string[] | null;
+ /** @description Build cache targets */
+ cacheTo?: string[] | null;
+ /** @description Build context directory or Git URL */
+ contextDir: string;
+ /** @description Dockerfile path */
+ dockerfile?: string;
+ /** @description Inline Dockerfile content */
+ dockerfileInline?: string;
+ /** @description Build entitlements */
+ entitlements?: string[] | null;
+ /** @description Build extra host mappings */
+ extraHosts?: string[] | null;
+ /** @description Build isolation mode */
+ isolation?: string;
+ /** @description Build labels */
+ labels?: {
+ [key: string]: string;
+ };
+ /** @description Load image into local Docker */
+ load?: boolean;
+ /** @description Build network mode */
+ network?: string;
+ /** @description Disable build cache */
+ noCache?: boolean;
+ /** @description Target platforms */
+ platforms?: string[] | null;
+ /** @description Enable privileged build */
+ privileged?: boolean;
+ /** @description Build provider override */
+ provider?: string;
+ /** @description Always pull referenced base images */
+ pull?: boolean;
+ /** @description Push image */
+ push?: boolean;
+ /**
+ * Format: int64
+ * @description Build shared memory size in bytes
+ */
+ shmSize?: number;
+ /** @description Image tags */
+ tags?: string[] | null;
+ /** @description Target stage */
+ target?: string;
+ /** @description Build ulimits */
+ ulimits?: {
+ [key: string]: string;
+ };
+ };
DockerTypesDeviceMapping: {
permissions?: string;
source?: string;
@@ -6697,6 +8038,7 @@ export interface components {
platform?: string;
ports?: components["schemas"]["DockerTypesServicePortConfig"][] | null;
post_start?: components["schemas"]["DockerTypesServiceHook"][] | null;
+ pre_start?: components["schemas"]["DockerTypesServiceHook"][] | null;
pre_stop?: components["schemas"]["DockerTypesServiceHook"][] | null;
privileged?: boolean;
profiles?: string[] | null;
@@ -6753,6 +8095,8 @@ export interface components {
environment?: {
[key: string]: string | null;
};
+ image?: string;
+ per_replica?: boolean;
privileged?: boolean;
user?: string;
working_dir?: string;
@@ -6935,26 +8279,42 @@ export interface components {
readonly $schema?: string;
accessToken?: string;
apiUrl: string;
- bootstrapToken?: string;
enabled?: boolean;
isEdge?: boolean;
name?: string;
useApiKey?: boolean;
};
+ EnvironmentEdgeMTLSCertificate: {
+ commonName?: string;
+ /** Format: int64 */
+ daysRemaining?: number;
+ expired: boolean;
+ /** Format: date-time */
+ expiresAt?: string;
+ expiringSoon: boolean;
+ };
EnvironmentEnvironment: {
apiKey?: string;
apiUrl: string;
connected?: boolean;
/** Format: date-time */
connectedAt?: string;
+ edgeAgentInstance?: string;
+ edgeCapabilities?: string[] | null;
+ edgeMTLSCertificate?: components["schemas"]["EnvironmentEdgeMTLSCertificate"];
+ edgeSecurityMode?: string;
+ edgeSessionId?: string;
edgeTransport?: string;
enabled: boolean;
id: string;
isEdge: boolean;
+ lastEdgeTransport?: string;
/** Format: date-time */
lastHeartbeat?: string;
/** Format: date-time */
lastPollAt?: string;
+ /** Format: date-time */
+ lastSeen?: string;
name?: string;
status: string;
};
@@ -6991,11 +8351,35 @@ export interface components {
readonly $schema?: string;
accessToken?: string;
apiUrl?: string;
- bootstrapToken?: string;
enabled?: boolean;
name?: string;
regenerateApiKey?: boolean;
};
+ EnvironmentUpdateJob: {
+ /** Format: date-time */
+ completedAt?: string;
+ /** Format: date-time */
+ createdAt: string;
+ error?: string;
+ id: string;
+ managerDigestAtStart: string;
+ managerTargetVersion: string;
+ managerVersionAtStart: string;
+ results?: components["schemas"]["EnvironmentUpdateResult"][] | null;
+ status: string;
+ /** Format: date-time */
+ updatedAt?: string;
+ userId: string;
+ username: string;
+ };
+ EnvironmentUpdateResult: {
+ environmentId: string;
+ environmentName: string;
+ error?: string;
+ fromVersion?: string;
+ status: string;
+ toVersion?: string;
+ };
EnvironmentWithApiKey: {
/** @description API key for pairing (only shown once during creation) */
apiKey?: string;
@@ -7003,14 +8387,22 @@ export interface components {
connected?: boolean;
/** Format: date-time */
connectedAt?: string;
+ edgeAgentInstance?: string;
+ edgeCapabilities?: string[] | null;
+ edgeMTLSCertificate?: components["schemas"]["EnvironmentEdgeMTLSCertificate"];
+ edgeSecurityMode?: string;
+ edgeSessionId?: string;
edgeTransport?: string;
enabled: boolean;
id: string;
isEdge: boolean;
+ lastEdgeTransport?: string;
/** Format: date-time */
lastHeartbeat?: string;
/** Format: date-time */
lastPollAt?: string;
+ /** Format: date-time */
+ lastSeen?: string;
name?: string;
status: string;
};
@@ -7061,27 +8453,6 @@ export interface components {
*/
type: string;
};
- EventCreateEvent: {
- /**
- * Format: uri
- * @description A URL to the JSON Schema for this object.
- * @example https://arcane.randomsynergy.xyz:3552/api/schemas/EventCreateEvent.json
- */
- readonly $schema?: string;
- description?: string;
- environmentId?: string;
- metadata?: {
- [key: string]: unknown;
- };
- resourceId?: string;
- resourceName?: string;
- resourceType?: string;
- severity?: string;
- title: string;
- type: string;
- userId?: string;
- username?: string;
- };
EventEvent: {
/** Format: date-time */
createdAt: string;
@@ -7119,62 +8490,210 @@ export interface components {
file?: string;
service?: string;
};
- FileContentResponse: {
- content: string;
- mimeType: string;
- };
- GetSwarmNodeAgentDeploymentInputBody: {
+ FederatedCreateFederatedCredential: {
/**
* Format: uri
* @description A URL to the JSON Schema for this object.
- * @example https://arcane.randomsynergy.xyz:3552/api/schemas/GetSwarmNodeAgentDeploymentInputBody.json
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/FederatedCreateFederatedCredential.json
*/
readonly $schema?: string;
- /** @description Rotate the environment token before generating snippets */
- rotate?: boolean;
- };
- GitOpsSyncPaginatedResponse: {
+ /** @description Allowed external token audiences */
+ audiences: string[] | null;
+ /** @description Optional description */
+ description?: string;
+ /** @description Whether exchanges are allowed */
+ enabled: boolean;
+ /** @description Optional environment scope for the role assignment */
+ environmentId?: string;
/**
- * Format: uri
- * @description A URL to the JSON Schema for this object.
- * @example https://arcane.randomsynergy.xyz:3552/api/schemas/GitOpsSyncPaginatedResponse.json
+ * Format: date-time
+ * @description Optional credential expiration
*/
- readonly $schema?: string;
- counts: components["schemas"]["GitopsSyncCounts"];
- data: components["schemas"]["GitopsGitOpsSync"][] | null;
- pagination: components["schemas"]["BasePaginationResponse"];
- success: boolean;
- };
- GitRepositoryPaginatedResponse: {
+ expiresAt?: string;
/**
* Format: uri
- * @description A URL to the JSON Schema for this object.
- * @example https://arcane.randomsynergy.xyz:3552/api/schemas/GitRepositoryPaginatedResponse.json
+ * @description Trusted external OIDC issuer URL
*/
- readonly $schema?: string;
- data: components["schemas"]["GitopsGitRepository"][] | null;
- pagination: components["schemas"]["BasePaginationResponse"];
- success: boolean;
- };
- GitopsBranchInfo: {
- isDefault: boolean;
+ issuerUrl: string;
+ /**
+ * @description Subject match strategy
+ * @enum {string}
+ */
+ matchType?: "exact" | "glob";
+ /** @description Display name */
name: string;
+ /** @description Mapped role ID */
+ roleId: string;
+ /** @description Claim path to match against; defaults to sub */
+ subjectClaim?: string;
+ /** @description Exact subject or anchored glob pattern */
+ subjectMatch: string;
+ /**
+ * Format: int64
+ * @description Issued token lifetime in seconds
+ */
+ tokenTtlSeconds?: number;
};
- GitopsBranchesResponse: {
- branches: components["schemas"]["GitopsBranchInfo"][] | null;
- };
- GitopsBrowseResponse: {
- files: components["schemas"]["GitopsFileTreeNode"][] | null;
- path: string;
- };
- GitopsCreateSyncRequest: {
+ FederatedFederatedCredential: {
+ /** @description Allowed external token audiences */
+ audiences: string[] | null;
/**
- * Format: uri
- * @description A URL to the JSON Schema for this object.
- * @example https://arcane.randomsynergy.xyz:3552/api/schemas/GitopsCreateSyncRequest.json
+ * Format: date-time
+ * @description Creation timestamp
*/
- readonly $schema?: string;
- autoSync?: boolean;
+ createdAt: string;
+ /** @description Optional description */
+ description?: string;
+ /** @description Whether exchanges are allowed */
+ enabled: boolean;
+ /** @description Optional environment scope for the role assignment */
+ environmentId?: string;
+ /** @description Mapped environment name when scoped */
+ environmentName?: string;
+ /**
+ * Format: date-time
+ * @description Optional credential expiration
+ */
+ expiresAt?: string;
+ /** @description Unique identifier of the federated credential */
+ id: string;
+ /** @description Dedicated service user ID backing issued tokens */
+ identityUserId: string;
+ /** @description Trusted external OIDC issuer URL */
+ issuerUrl: string;
+ /**
+ * Format: date-time
+ * @description Last successful token exchange
+ */
+ lastUsedAt?: string;
+ /**
+ * @description Subject match strategy
+ * @enum {string}
+ */
+ matchType: "exact" | "glob";
+ /** @description Display name */
+ name: string;
+ /** @description Mapped role ID */
+ roleId: string;
+ /** @description Mapped role name */
+ roleName?: string;
+ /** @description Dedicated service account username */
+ serviceUsername?: string;
+ /** @description Claim path to match against */
+ subjectClaim: string;
+ /** @description Exact subject or anchored glob pattern */
+ subjectMatch: string;
+ /**
+ * Format: int64
+ * @description Issued token lifetime in seconds
+ */
+ tokenTtlSeconds: number;
+ /**
+ * Format: date-time
+ * @description Last update timestamp
+ */
+ updatedAt?: string;
+ };
+ FederatedUpdateFederatedCredential: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/FederatedUpdateFederatedCredential.json
+ */
+ readonly $schema?: string;
+ /** @description Allowed external token audiences */
+ audiences?: string[] | null;
+ /** @description Optional description */
+ description?: string;
+ /** @description Whether exchanges are allowed */
+ enabled?: boolean;
+ /** @description Optional environment scope for the role assignment */
+ environmentId?: string;
+ /**
+ * Format: date-time
+ * @description Optional credential expiration
+ */
+ expiresAt?: string;
+ /**
+ * Format: uri
+ * @description Trusted external OIDC issuer URL
+ */
+ issuerUrl?: string;
+ /**
+ * @description Subject match strategy
+ * @enum {string}
+ */
+ matchType?: "exact" | "glob";
+ /** @description Display name */
+ name?: string;
+ /** @description Mapped role ID */
+ roleId?: string;
+ /** @description Claim path to match against */
+ subjectClaim?: string;
+ /** @description Exact subject or anchored glob pattern */
+ subjectMatch?: string;
+ /**
+ * Format: int64
+ * @description Issued token lifetime in seconds
+ */
+ tokenTtlSeconds?: number;
+ };
+ FileContentResponse: {
+ content: string;
+ mimeType: string;
+ };
+ GetSwarmNodeAgentDeploymentInputBody: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/GetSwarmNodeAgentDeploymentInputBody.json
+ */
+ readonly $schema?: string;
+ /** @description Rotate the environment token before generating snippets */
+ rotate?: boolean;
+ };
+ GitOpsSyncPaginatedResponse: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/GitOpsSyncPaginatedResponse.json
+ */
+ readonly $schema?: string;
+ counts: components["schemas"]["GitopsSyncCounts"];
+ data: components["schemas"]["GitopsGitOpsSync"][] | null;
+ pagination: components["schemas"]["BasePaginationResponse"];
+ success: boolean;
+ };
+ GitRepositoryPaginatedResponse: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/GitRepositoryPaginatedResponse.json
+ */
+ readonly $schema?: string;
+ data: components["schemas"]["GitopsGitRepository"][] | null;
+ pagination: components["schemas"]["BasePaginationResponse"];
+ success: boolean;
+ };
+ GitopsBranchInfo: {
+ isDefault: boolean;
+ name: string;
+ };
+ GitopsBranchesResponse: {
+ branches: components["schemas"]["GitopsBranchInfo"][] | null;
+ };
+ GitopsBrowseResponse: {
+ files: components["schemas"]["GitopsFileTreeNode"][] | null;
+ path: string;
+ };
+ GitopsCreateSyncRequest: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/GitopsCreateSyncRequest.json
+ */
+ readonly $schema?: string;
+ autoSync?: boolean;
branch: string;
composePath: string;
/** Format: int64 */
@@ -7184,11 +8703,19 @@ export interface components {
/** Format: int64 */
maxSyncTotalSize?: number;
name: string;
+ preDeployEnv?: string;
+ preDeployExtraMounts?: string;
+ preDeployNetworkMode?: string;
+ preDeployRunnerImage?: string;
+ preDeployScriptPath?: string;
+ /** Format: int64 */
+ preDeployTimeoutSec?: number;
projectName?: string;
repositoryId: string;
syncDirectory?: boolean;
/** Format: int64 */
syncInterval?: number;
+ targetType?: string;
};
GitopsFileTreeNode: {
children?: components["schemas"]["GitopsFileTreeNode"][] | null;
@@ -7218,6 +8745,17 @@ export interface components {
/** Format: int64 */
maxSyncTotalSize: number;
name: string;
+ preDeployEnv?: string;
+ preDeployExtraMounts?: string;
+ /** Format: date-time */
+ preDeployLastRunAt?: string;
+ preDeployLastRunOutput?: string;
+ preDeployLastRunStatus?: string;
+ preDeployNetworkMode: string;
+ preDeployRunnerImage?: string;
+ preDeployScriptPath?: string;
+ /** Format: int64 */
+ preDeployTimeoutSec: number;
projectId?: string;
projectName: string;
repository?: components["schemas"]["GitopsGitRepository"];
@@ -7226,6 +8764,7 @@ export interface components {
/** Format: int64 */
syncInterval: number;
syncedFiles?: string;
+ targetType: string;
/** Format: date-time */
updatedAt: string;
};
@@ -7334,11 +8873,19 @@ export interface components {
/** Format: int64 */
maxSyncTotalSize?: number;
name?: string;
+ preDeployEnv?: string;
+ preDeployExtraMounts?: string;
+ preDeployNetworkMode?: string;
+ preDeployRunnerImage?: string;
+ preDeployScriptPath?: string;
+ /** Format: int64 */
+ preDeployTimeoutSec?: number;
projectName?: string;
repositoryId?: string;
syncDirectory?: boolean;
/** Format: int64 */
syncInterval?: number;
+ targetType?: string;
};
HealthCheckConfig: {
disable?: boolean;
@@ -7367,6 +8914,30 @@ export interface components {
/** Format: int64 */
Timeout?: number;
};
+ ImageAttestation: {
+ artifactType?: string;
+ digest: string;
+ mediaType: string;
+ platform?: string;
+ predicateType: string;
+ /** Format: int64 */
+ size: number;
+ statement?: unknown;
+ statementType?: string;
+ subject: components["schemas"]["ImageAttestationSubject"][] | null;
+ };
+ ImageAttestationList: {
+ attestations: components["schemas"]["ImageAttestation"][] | null;
+ imageRef: string;
+ platform?: string;
+ subjectDigest: string;
+ };
+ ImageAttestationSubject: {
+ digest: {
+ [key: string]: string;
+ };
+ name: string;
+ };
ImageBuildPaginatedResponse: {
/**
* Format: uri
@@ -7423,67 +8994,6 @@ export interface components {
userId?: string;
username?: string;
};
- ImageBuildRequest: {
- /**
- * Format: uri
- * @description A URL to the JSON Schema for this object.
- * @example https://arcane.randomsynergy.xyz:3552/api/schemas/ImageBuildRequest.json
- */
- readonly $schema?: string;
- /** @description Build arguments */
- buildArgs?: {
- [key: string]: string;
- };
- /** @description Build cache sources */
- cacheFrom?: string[] | null;
- /** @description Build cache targets */
- cacheTo?: string[] | null;
- /** @description Build context directory or Git URL */
- contextDir: string;
- /** @description Dockerfile path */
- dockerfile?: string;
- /** @description Inline Dockerfile content */
- dockerfileInline?: string;
- /** @description Build entitlements */
- entitlements?: string[] | null;
- /** @description Build extra host mappings */
- extraHosts?: string[] | null;
- /** @description Build isolation mode */
- isolation?: string;
- /** @description Build labels */
- labels?: {
- [key: string]: string;
- };
- /** @description Load image into local Docker */
- load?: boolean;
- /** @description Build network mode */
- network?: string;
- /** @description Disable build cache */
- noCache?: boolean;
- /** @description Target platforms */
- platforms?: string[] | null;
- /** @description Enable privileged build */
- privileged?: boolean;
- /** @description Build provider override */
- provider?: string;
- /** @description Always pull referenced base images */
- pull?: boolean;
- /** @description Push image */
- push?: boolean;
- /**
- * Format: int64
- * @description Build shared memory size in bytes
- */
- shmSize?: number;
- /** @description Image tags */
- tags?: string[] | null;
- /** @description Target stage */
- target?: string;
- /** @description Build ulimits */
- ulimits?: {
- [key: string]: string;
- };
- };
ImageDetailSummary: {
architecture: string;
author: string;
@@ -7501,6 +9011,16 @@ export interface components {
/** Format: int64 */
size: number;
};
+ ImageHistoryItem: {
+ comment: string;
+ /** Format: int64 */
+ created: number;
+ createdBy: string;
+ id: string;
+ /** Format: int64 */
+ size: number;
+ tags: string[] | null;
+ };
ImageLoadResult: {
stream: string;
};
@@ -7534,6 +9054,14 @@ export interface components {
/** @description Tag of the image to pull (e.g., latest) */
tag?: string;
};
+ ImageSearchResult: {
+ automated: boolean;
+ description: string;
+ name: string;
+ official: boolean;
+ /** Format: int64 */
+ starCount: number;
+ };
ImageSummary: {
/** Format: int64 */
created: number;
@@ -7554,6 +9082,18 @@ export interface components {
virtualSize: number;
vulnerabilityScan?: components["schemas"]["VulnerabilityScanSummary"];
};
+ ImageTagRequest: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/ImageTagRequest.json
+ */
+ readonly $schema?: string;
+ /** @description Target repository name */
+ repository: string;
+ /** @description Target tag */
+ tag?: string;
+ };
ImageUpdateInfo: {
authMethod?: string;
authRegistry?: string;
@@ -7616,6 +9156,7 @@ export interface components {
credentials?: components["schemas"]["ContainerregistryCredential"][] | null;
};
ImageupdateResponse: {
+ activityId?: string;
authMethod?: string;
authRegistry?: string;
authUsername?: string;
@@ -7651,9 +9192,10 @@ export interface components {
readonly $schema?: string;
autoHealInterval: string;
autoUpdateInterval: string;
+ dockerClientRefreshInterval: string;
environmentHealthInterval: string;
eventCleanupInterval: string;
- gitopsSyncInterval: string;
+ expiredSessionsCleanupInterval: string;
pollingInterval: string;
scheduledPruneInterval: string;
vulnerabilityScanInterval: string;
@@ -7708,13 +9250,24 @@ export interface components {
readonly $schema?: string;
autoHealInterval?: string;
autoUpdateInterval?: string;
+ dockerClientRefreshInterval?: string;
environmentHealthInterval?: string;
eventCleanupInterval?: string;
- gitopsSyncInterval?: string;
+ expiredSessionsCleanupInterval?: string;
pollingInterval?: string;
scheduledPruneInterval?: string;
vulnerabilityScanInterval?: string;
};
+ ListOidcRoleMappingsOutputBody: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/ListOidcRoleMappingsOutputBody.json
+ */
+ readonly $schema?: string;
+ data: components["schemas"]["RoleOidcRoleMapping"][] | null;
+ success: boolean;
+ };
LoggingConfig: {
driver?: string;
options?: {
@@ -7793,6 +9346,7 @@ export interface components {
options: components["schemas"]["NetworkCreateOptions"];
};
NetworkCreateResponse: {
+ activityId?: string;
id: string;
warning?: string;
};
@@ -7884,6 +9438,7 @@ export interface components {
success: boolean;
};
NetworkPruneReport: {
+ activityId?: string;
networksDeleted: string[] | null;
/** Format: int64 */
spaceReclaimed: number;
@@ -7956,32 +9511,6 @@ export interface components {
/** Format: int64 */
unused: number;
};
- NotificationAppriseResponse: {
- /**
- * Format: uri
- * @description A URL to the JSON Schema for this object.
- * @example https://arcane.randomsynergy.xyz:3552/api/schemas/NotificationAppriseResponse.json
- */
- readonly $schema?: string;
- apiUrl: string;
- containerUpdateTag: string;
- enabled: boolean;
- /** Format: int64 */
- id: number;
- imageUpdateTag: string;
- };
- NotificationAppriseUpdate: {
- /**
- * Format: uri
- * @description A URL to the JSON Schema for this object.
- * @example https://arcane.randomsynergy.xyz:3552/api/schemas/NotificationAppriseUpdate.json
- */
- readonly $schema?: string;
- apiUrl: string;
- containerUpdateTag: string;
- enabled: boolean;
- imageUpdateTag: string;
- };
NotificationDispatchAutoHeal: {
containerId: string;
containerName: string;
@@ -8019,6 +9548,11 @@ export interface components {
pruneReport?: components["schemas"]["NotificationDispatchPruneReport"];
vulnerabilityFound?: components["schemas"]["NotificationDispatchVulnerabilityFound"];
};
+ NotificationDispatchResponse: {
+ /** Format: int64 */
+ delivered: number;
+ message: string;
+ };
NotificationDispatchVulnerabilityFound: {
cveId: string;
cveLink: string;
@@ -8043,6 +9577,10 @@ export interface components {
id: number;
provider: string;
};
+ NotificationTestResponse: {
+ message: string;
+ warning?: string;
+ };
NotificationUpdate: {
/**
* Format: uri
@@ -8089,12 +9627,17 @@ export interface components {
composeContent: string;
envContent?: string;
name: string;
+ projectFiles?: components["schemas"]["ProjectProjectFileDraft"][] | null;
};
ProjectCreateReponse: {
+ activityId?: string;
+ /** Format: date-time */
+ archivedAt?: string;
createdAt: string;
dirName?: string;
gitOpsManagedBy?: string;
id: string;
+ isArchived: boolean;
name: string;
path: string;
relativePath?: string;
@@ -8115,6 +9658,7 @@ export interface components {
readonly $schema?: string;
forceRecreate?: boolean;
pullPolicy?: string;
+ removeOrphans?: boolean;
};
ProjectDestroy: {
/**
@@ -8127,20 +9671,30 @@ export interface components {
removeVolumes?: boolean;
};
ProjectDetails: {
+ activityId?: string;
+ /** Format: date-time */
+ archivedAt?: string;
composeContent?: string;
+ composeFileName?: string;
createdAt: string;
dirName?: string;
directoryFiles?: components["schemas"]["ProjectIncludeFile"][] | null;
envContent?: string;
+ fileTreeRevision?: string;
gitOpsManagedBy?: string;
gitRepositoryURL?: string;
hasBuildDirective?: boolean;
- iconUrl?: string;
+ iconDarkUrl?: string;
+ iconLightUrl?: string;
id: string;
includeFiles?: components["schemas"]["ProjectIncludeFile"][] | null;
+ isArchived: boolean;
+ isDiscovered?: boolean;
lastSyncCommit?: string;
name: string;
path: string;
+ projectFiles?: components["schemas"]["ProjectProjectFile"][] | null;
+ redeployDisabled?: boolean;
relativePath?: string;
/** Format: int64 */
runningCount: number;
@@ -8150,11 +9704,12 @@ export interface components {
services?: components["schemas"]["DockerTypesServiceConfig"][] | null;
status: string;
statusReason?: string;
+ updateInfo?: components["schemas"]["ProjectUpdateInfo"];
updatedAt: string;
urls?: string[] | null;
};
ProjectIncludeFile: {
- content: string;
+ content?: string;
path: string;
relativePath: string;
};
@@ -8169,18 +9724,48 @@ export interface components {
pagination: components["schemas"]["BasePaginationResponse"];
success: boolean;
};
+ ProjectProjectFile: {
+ content?: string;
+ isDirectory: boolean;
+ /** Format: date-time */
+ modTime: string;
+ name: string;
+ path: string;
+ protected?: boolean;
+ relativePath: string;
+ /** Format: int64 */
+ size: number;
+ };
+ ProjectProjectFileChange: {
+ content?: string;
+ newName?: string;
+ newParentPath?: string;
+ /** @enum {string} */
+ operation: "create_file" | "create_folder" | "update_file" | "rename" | "move" | "delete";
+ recursive?: boolean;
+ relativePath: string;
+ };
+ ProjectProjectFileDraft: {
+ content?: string;
+ isDirectory: boolean;
+ relativePath: string;
+ };
ProjectRuntimeService: {
containerId?: string;
containerName?: string;
health?: string;
- iconUrl?: string;
+ iconDarkUrl?: string;
+ iconLightUrl?: string;
image: string;
name: string;
ports?: string[] | null;
+ redeployDisabled?: boolean;
serviceConfig?: components["schemas"]["ServiceConfig"];
status: string;
};
ProjectStatusCounts: {
+ /** Format: int64 */
+ archivedProjects: number;
/** Format: int64 */
runningProjects: number;
/** Format: int64 */
@@ -8198,8 +9783,25 @@ export interface components {
content: string;
relativePath: string;
};
- ProjectUpdateProject: {
- /**
+ ProjectUpdateInfo: {
+ /** Format: int64 */
+ checkedImageCount: number;
+ /** Format: int64 */
+ errorCount: number;
+ errorMessage?: string;
+ hasUpdate: boolean;
+ /** Format: int64 */
+ imageCount: number;
+ imageRefs?: string[] | null;
+ /** Format: int64 */
+ imagesWithUpdates: number;
+ /** Format: date-time */
+ lastCheckedAt?: string;
+ status: string;
+ updatedImageRefs?: string[] | null;
+ };
+ ProjectUpdateProject: {
+ /**
* Format: uri
* @description A URL to the JSON Schema for this object.
* @example https://arcane.randomsynergy.xyz:3552/api/schemas/ProjectUpdateProject.json
@@ -8207,6 +9809,8 @@ export interface components {
readonly $schema?: string;
composeContent?: string;
envContent?: string;
+ fileChanges?: components["schemas"]["ProjectProjectFileChange"][] | null;
+ fileTreeRevision?: string;
name?: string;
};
PruneImagesInputBody: {
@@ -8220,6 +9824,8 @@ export interface components {
filters?: {
[key: string]: string[] | null;
};
+ mode?: string;
+ until?: string;
};
Resource: {
/** Format: float */
@@ -8250,6 +9856,280 @@ export interface components {
/** @description Paths to restore from backup */
paths: string[] | null;
};
+ RoleAccessSurface: {
+ /**
+ * @description How reachability is evaluated
+ * @enum {string}
+ */
+ accessMode: "permissions" | "any-child";
+ /** @description Child surface IDs used by aggregate landing surfaces */
+ children?: string[] | null;
+ /**
+ * Format: int64
+ * @description Positive ordering hint for route fallback selection
+ */
+ fallbackOrder?: number;
+ /**
+ * @description Stable surface identifier
+ * @example settings.category.webhooks
+ */
+ id: string;
+ /**
+ * @description Surface type
+ * @enum {string}
+ */
+ kind: "route" | "settings-category" | "customize-category" | "landing";
+ /**
+ * @description Human-readable surface label
+ * @example Webhooks
+ */
+ label: string;
+ /**
+ * @description How permissions are combined when accessMode is permissions
+ * @enum {string}
+ */
+ matchMode: "any-of" | "all-of";
+ /** @description Permissions used by permission-based surfaces */
+ permissions?: string[] | null;
+ /**
+ * @description Which effective permission scope is considered
+ * @enum {string}
+ */
+ scopeMode: "global-only" | "selected-env-plus-global" | "any-effective-scope";
+ /**
+ * @description Route URL or prefix represented by this surface
+ * @example /settings/webhooks
+ */
+ url?: string;
+ };
+ RoleCreateOidcRoleMapping: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/RoleCreateOidcRoleMapping.json
+ */
+ readonly $schema?: string;
+ /** @description OIDC claim value to match */
+ claimValue: string;
+ /** @description Environment ID to scope the assignment to; omit for a global assignment */
+ environmentId?: string;
+ /** @description Role to grant */
+ roleId: string;
+ };
+ RoleCreateRole: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/RoleCreateRole.json
+ */
+ readonly $schema?: string;
+ /** @description Optional human description */
+ description?: string;
+ /**
+ * @description Display name of the role
+ * @example Deploy Bot
+ */
+ name: string;
+ /** @description Permission strings granted by this role */
+ permissions: string[] | null;
+ };
+ RoleOidcRoleMapping: {
+ /**
+ * @description OIDC claim value that triggers this mapping
+ * @example docker-admins
+ */
+ claimValue: string;
+ /** Format: date-time */
+ createdAt: string;
+ /** @description Environment ID to scope the assignment to; omit for a global assignment */
+ environmentId?: string;
+ /** @description Unique identifier of the mapping */
+ id: string;
+ /** @description Role to assign when the claim matches */
+ roleId: string;
+ /**
+ * @description How this mapping was created. 'manual' rows are UI/API-managed and freely editable; 'env' rows are declared via OIDC_ROLE_MAPPINGS and are read-only at runtime.
+ * @enum {string}
+ */
+ source: "manual" | "env";
+ /** Format: date-time */
+ updatedAt?: string;
+ };
+ RolePaginatedResponse: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/RolePaginatedResponse.json
+ */
+ readonly $schema?: string;
+ data: components["schemas"]["RoleRole"][] | null;
+ pagination: components["schemas"]["BasePaginationResponse"];
+ success: boolean;
+ };
+ RolePermissionAction: {
+ /** @description Optional longer description */
+ description?: string;
+ /**
+ * @description Action verb
+ * @example start
+ */
+ key: string;
+ /**
+ * @description Human-readable label
+ * @example Start
+ */
+ label: string;
+ /**
+ * @description Fully-qualified permission string used in role definitions
+ * @example containers:start
+ */
+ permission: string;
+ /** @description Permissions that should be auto-selected when this permission is chosen in the UI */
+ requires?: string[] | null;
+ };
+ RolePermissionPreset: {
+ /** @description Optional longer description for the preset */
+ description?: string;
+ /**
+ * @description Stable preset key
+ * @example editor
+ */
+ key: string;
+ /**
+ * @description Human-readable preset label
+ * @example All permissions (non-admin)
+ */
+ label: string;
+ /** @description Permissions included when the preset is selected */
+ permissions: string[] | null;
+ };
+ RolePermissionResource: {
+ /** @description Actions available on this resource */
+ actions: components["schemas"]["RolePermissionAction"][] | null;
+ /**
+ * @description Stable resource key
+ * @example containers
+ */
+ key: string;
+ /**
+ * @description Human-readable label
+ * @example Containers
+ */
+ label: string;
+ /**
+ * @description 'global' for org-level perms; 'env' for per-environment perms
+ * @enum {string}
+ */
+ scope: "global" | "env";
+ };
+ RolePermissionsManifest: {
+ /** @description Backend-owned route, landing, and category access metadata for frontend UX gating */
+ accessSurfaces?: components["schemas"]["RoleAccessSurface"][] | null;
+ /** @description Optional preset permission bundles for bulk selection in the UI */
+ presets?: components["schemas"]["RolePermissionPreset"][] | null;
+ /** @description Resource groups, in display order */
+ resources: components["schemas"]["RolePermissionResource"][] | null;
+ };
+ RoleRole: {
+ /**
+ * Format: int64
+ * @description How many users currently hold an assignment to this role
+ */
+ assignedUserCount: number;
+ /** @description True for built-in roles (Admin/Editor/Deployer/Viewer); built-ins cannot be edited or deleted */
+ builtIn: boolean;
+ /**
+ * Format: date-time
+ * @description Creation timestamp
+ */
+ createdAt: string;
+ /** @description Optional human description */
+ description?: string;
+ /**
+ * @description Unique identifier of the role
+ * @example role_admin
+ */
+ id: string;
+ /**
+ * @description Display name of the role
+ * @example Admin
+ */
+ name: string;
+ /**
+ * @description Permission strings granted by this role
+ * @example [
+ * "containers:start",
+ * "projects:deploy"
+ * ]
+ */
+ permissions: string[] | null;
+ /**
+ * Format: date-time
+ * @description Last update timestamp
+ */
+ updatedAt?: string;
+ };
+ RoleRoleAssignment: {
+ /**
+ * Format: date-time
+ * @description Creation timestamp
+ */
+ createdAt: string;
+ /** @description Environment ID this assignment is scoped to; omit for a global assignment */
+ environmentId?: string;
+ /** @description Unique identifier of the assignment */
+ id: string;
+ /** @description ID of the granted role */
+ roleId: string;
+ /**
+ * @description How the assignment was created
+ * @enum {string}
+ */
+ source: "manual" | "oidc";
+ /** @description ID of the user holding this assignment */
+ userId: string;
+ };
+ RoleSetUserAssignments: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/RoleSetUserAssignments.json
+ */
+ readonly $schema?: string;
+ /** @description Desired manual role assignments for the user */
+ assignments: components["schemas"]["RoleUserAssignmentInput"][] | null;
+ };
+ RoleUpdateOidcRoleMapping: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/RoleUpdateOidcRoleMapping.json
+ */
+ readonly $schema?: string;
+ claimValue: string;
+ environmentId?: string;
+ roleId: string;
+ };
+ RoleUpdateRole: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/RoleUpdateRole.json
+ */
+ readonly $schema?: string;
+ /** @description Optional human description */
+ description?: string;
+ /** @description Display name of the role */
+ name: string;
+ /** @description Permission strings granted by this role */
+ permissions: string[] | null;
+ };
+ RoleUserAssignmentInput: {
+ /** @description Environment ID to scope the assignment to; omit for a global assignment */
+ environmentId?: string;
+ /** @description ID of the role to grant */
+ roleId: string;
+ };
ScannerStatus: {
available: boolean;
version?: string;
@@ -8374,6 +10254,7 @@ export interface components {
platform?: string;
ports?: components["schemas"]["DockerTypesServicePortConfig"][] | null;
post_start?: components["schemas"]["DockerTypesServiceHook"][] | null;
+ pre_start?: components["schemas"]["DockerTypesServiceHook"][] | null;
pre_stop?: components["schemas"]["DockerTypesServiceHook"][] | null;
privileged?: boolean;
profiles?: string[] | null;
@@ -8488,9 +10369,11 @@ export interface components {
*/
readonly $schema?: string;
accentColor?: string;
+ activityHistoryMaxEntries?: string;
+ activityHistoryRetentionDays?: string;
+ animationsEnabled?: string;
applicationTheme?: string;
authLocalEnabled?: string;
- authOidcConfig?: string;
authPasswordPolicy?: string;
authSessionTimeout?: string;
autoHealEnabled?: string;
@@ -8502,6 +10385,7 @@ export interface components {
autoUpdate?: string;
autoUpdateExcludedContainers?: string;
autoUpdateInterval?: string;
+ avatarMaxUploadSizeMb?: string;
baseServerUrl?: string;
buildProvider?: string;
buildTimeout?: string;
@@ -8512,9 +10396,9 @@ export interface components {
depotToken?: string;
diskUsagePath?: string;
dockerApiTimeout?: string;
+ dockerClientRefreshInterval?: string;
dockerHost?: string;
dockerImagePullTimeout?: string;
- dockerPruneMode?: string;
enableGravatar?: string;
environmentHealthInterval?: string;
followProjectSymlinks?: string;
@@ -8522,17 +10406,21 @@ export interface components {
gitSyncMaxBinarySizeMb?: string;
gitSyncMaxFiles?: string;
gitSyncMaxTotalSizeMb?: string;
+ glassEffectsEnabled?: string;
httpClientTimeout?: string;
+ iconCatalog?: string;
keyboardShortcutsEnabled?: string;
+ lifecycleDefaultRunnerImage?: string;
+ lifecycleEnabled?: string;
+ lifecycleMaxTimeoutSec?: string;
maxImageUploadSize?: string;
mobileNavigationMode?: string;
mobileNavigationShowLabels?: string;
- oidcAdminClaim?: string;
- oidcAdminValue?: string;
oidcAutoRedirectToProvider?: string;
oidcClientId?: string;
oidcClientSecret?: string;
oidcEnabled?: string;
+ oidcGroupsClaim?: string;
oidcIssuerUrl?: string;
oidcMergeAccounts?: string;
oidcProviderLogoUrl?: string;
@@ -8544,18 +10432,24 @@ export interface components {
pollingInterval?: string;
projectsDirectory?: string;
proxyRequestTimeout?: string;
+ pruneBuildCacheMode?: string;
+ pruneBuildCacheUntil?: string;
+ pruneContainerMode?: string;
+ pruneContainerUntil?: string;
+ pruneImageMode?: string;
+ pruneImageUntil?: string;
+ pruneNetworkMode?: string;
+ pruneNetworkUntil?: string;
+ pruneVolumeMode?: string;
registryTimeout?: string;
- scheduledPruneBuildCache?: string;
- scheduledPruneContainers?: string;
scheduledPruneEnabled?: string;
- scheduledPruneImages?: string;
scheduledPruneInterval?: string;
- scheduledPruneNetworks?: string;
- scheduledPruneVolumes?: string;
sidebarHoverExpansion?: string;
swarmStackSourcesDirectory?: string;
+ templatesDirectory?: string;
trivyConcurrentScanContainers?: string;
trivyCpuLimit?: string;
+ trivyIgnoreUnfixed?: string;
trivyImage?: string;
trivyMemoryLimitMb?: string;
trivyNetwork?: string;
@@ -8564,6 +10458,10 @@ export interface components {
trivyResourceLimitsEnabled?: string;
trivyScanTimeout?: string;
trivySecurityOpts?: string;
+ trivyServerEnabled?: string;
+ trivyServerToken?: string;
+ trivyServerUrl?: string;
+ volumeBrowserHelperIdleTimeout?: string;
vulnerabilityScanEnabled?: string;
vulnerabilityScanInterval?: string;
};
@@ -8605,6 +10503,8 @@ export interface components {
/** @description Docker run command snippet */
dockerRun: string;
environmentId: string;
+ /** @description Optional Arcane-generated mTLS deployment assets for edge agents */
+ mtls?: components["schemas"]["DeploymentSnippetMTLS"];
};
SwarmNodeAgentStatus: {
connected?: boolean;
@@ -8641,6 +10541,9 @@ export interface components {
reachability?: string;
role: string;
status: string;
+ systemLabels?: {
+ [key: string]: string;
+ };
/** Format: date-time */
updatedAt: string;
};
@@ -8890,10 +10793,12 @@ export interface components {
readonly $schema?: string;
composeContent: string;
envContent?: string;
+ files?: components["schemas"]["SwarmSyncFile"][] | null;
name: string;
prune?: boolean;
resolveImage?: string;
withRegistryAuth?: boolean;
+ workingDir?: string;
};
SwarmStackDeployResponse: {
name: string;
@@ -8932,8 +10837,20 @@ export interface components {
SwarmStackSource: {
composeContent: string;
envContent?: string;
+ files?: components["schemas"]["SwarmSyncFile"][] | null;
name: string;
};
+ SwarmStackSourceUpdateRequest: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/SwarmStackSourceUpdateRequest.json
+ */
+ readonly $schema?: string;
+ composeContent: string;
+ envContent?: string;
+ files?: components["schemas"]["SwarmSyncFile"][] | null;
+ };
SwarmStackSummary: {
/** Format: date-time */
createdAt: string;
@@ -8970,7 +10887,8 @@ export interface components {
defaultAddrPool?: string[] | null;
forceNewCluster?: boolean;
listenAddr?: string;
- spec: components["schemas"]["DockerSwarmSpec"];
+ /** @description Swarm specification */
+ spec: unknown;
/** Format: int32 */
subnetSize?: number;
};
@@ -9036,10 +10954,15 @@ export interface components {
rotateManagerToken?: boolean;
rotateManagerUnlockKey?: boolean;
rotateWorkerToken?: boolean;
- spec: components["schemas"]["DockerSwarmSpec"];
+ /** @description Updated swarm specification */
+ spec: unknown;
/** Format: int64 */
version?: number;
};
+ SwarmSyncFile: {
+ content: string;
+ relativePath: string;
+ };
SwarmTaskSummary: {
containerId?: string;
/** Format: date-time */
@@ -9080,6 +11003,29 @@ export interface components {
serviceName: string;
success: boolean;
};
+ SystemDiagnostics: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/SystemDiagnostics.json
+ */
+ readonly $schema?: string;
+ gc: components["schemas"]["SystemGCInfo"];
+ memory: components["schemas"]["SystemMemoryInfo"];
+ runtime: components["schemas"]["SystemRuntimeInfo"];
+ /** Format: date-time */
+ timestamp: string;
+ websocket: components["schemas"]["SystemWebSocketDiagnostics"];
+ };
+ SystemGCInfo: {
+ /** Format: date-time */
+ lastGc: string;
+ /** Format: int64 */
+ numGc: number;
+ /** Format: int64 */
+ pauseTotalNs: number;
+ recentPausesNs: number[] | null;
+ };
SystemHealthResponse: {
/**
* Format: uri
@@ -9089,6 +11035,51 @@ export interface components {
readonly $schema?: string;
status: string;
};
+ SystemLogEntry: {
+ attrs?: {
+ [key: string]: unknown;
+ };
+ level: string;
+ message: string;
+ /** Format: date-time */
+ time: string;
+ };
+ SystemMemoryInfo: {
+ /** Format: int64 */
+ alloc: number;
+ /** Format: double */
+ gcCpuFraction: number;
+ /** Format: int64 */
+ heapAlloc: number;
+ /** Format: int64 */
+ heapIdle: number;
+ /** Format: int64 */
+ heapInuse: number;
+ /** Format: int64 */
+ heapObjects: number;
+ /** Format: int64 */
+ heapReleased: number;
+ /** Format: int64 */
+ heapSys: number;
+ /** Format: int64 */
+ mcacheInuse: number;
+ /** Format: int64 */
+ mspanInuse: number;
+ /** Format: int64 */
+ nextGc: number;
+ /** Format: int32 */
+ numForcedGc: number;
+ /** Format: int32 */
+ numGc: number;
+ /** Format: int64 */
+ stackInuse: number;
+ /** Format: int64 */
+ stackSys: number;
+ /** Format: int64 */
+ sys: number;
+ /** Format: int64 */
+ totalAlloc: number;
+ };
SystemPruneAllRequest: {
/**
* Format: uri
@@ -9096,14 +11087,14 @@ export interface components {
* @example https://arcane.randomsynergy.xyz:3552/api/schemas/SystemPruneAllRequest.json
*/
readonly $schema?: string;
- buildCache: boolean;
- containers: boolean;
- dangling: boolean;
- images: boolean;
- networks: boolean;
- volumes: boolean;
+ buildCache?: components["schemas"]["SystemPruneBuildCacheOptions"];
+ containers?: components["schemas"]["SystemPruneContainersOptions"];
+ images?: components["schemas"]["SystemPruneImagesOptions"];
+ networks?: components["schemas"]["SystemPruneNetworksOptions"];
+ volumes?: components["schemas"]["SystemPruneVolumesOptions"];
};
SystemPruneAllResult: {
+ activityId?: string;
/** Format: int64 */
buildCacheSpaceReclaimed?: number;
/** Format: int64 */
@@ -9121,6 +11112,71 @@ export interface components {
volumeSpaceReclaimed?: number;
volumesDeleted?: string[] | null;
};
+ SystemPruneBuildCacheOptions: {
+ mode: string;
+ until?: string;
+ };
+ SystemPruneContainersOptions: {
+ mode: string;
+ until?: string;
+ };
+ SystemPruneImagesOptions: {
+ mode: string;
+ until?: string;
+ };
+ SystemPruneNetworksOptions: {
+ mode: string;
+ until?: string;
+ };
+ SystemPruneVolumesOptions: {
+ mode: string;
+ };
+ SystemRuntimeInfo: {
+ arch: string;
+ goVersion: string;
+ /** Format: int64 */
+ gomaxprocs: number;
+ /** Format: int64 */
+ goroutines: number;
+ /** Format: int64 */
+ numCgoCall: number;
+ /** Format: int64 */
+ numCpu: number;
+ os: string;
+ /** Format: int64 */
+ uptimeSeconds: number;
+ /** Format: int64 */
+ wsWorkerGoroutines: number;
+ };
+ SystemWebSocketConnectionInfo: {
+ clientIp?: string;
+ envId?: string;
+ id: string;
+ kind: string;
+ resourceId?: string;
+ /** Format: date-time */
+ startedAt: string;
+ userAgent?: string;
+ userId?: string;
+ };
+ SystemWebSocketDiagnostics: {
+ connections: components["schemas"]["SystemWebSocketConnectionInfo"][] | null;
+ snapshot: components["schemas"]["SystemWebSocketMetricsSnapshot"];
+ };
+ SystemWebSocketMetricsSnapshot: {
+ /** Format: int64 */
+ containerExec: number;
+ /** Format: int64 */
+ containerLogsActive: number;
+ /** Format: int64 */
+ containerStats: number;
+ /** Format: int64 */
+ projectLogsActive: number;
+ /** Format: int64 */
+ serviceLogsActive: number;
+ /** Format: int64 */
+ systemStats: number;
+ };
TemplateCreateRegistryRequest: {
/**
* Format: uri
@@ -9215,6 +11271,7 @@ export interface components {
description: string;
enabled: boolean;
id: string;
+ lastFetchError?: string;
name: string;
url: string;
};
@@ -9304,16 +11361,49 @@ export interface components {
url?: string;
username?: string;
};
- UpdaterOptions: {
+ UpdateMyProfileInputBody: {
/**
* Format: uri
* @description A URL to the JSON Schema for this object.
- * @example https://arcane.randomsynergy.xyz:3552/api/schemas/UpdaterOptions.json
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/UpdateMyProfileInputBody.json
*/
readonly $schema?: string;
- dryRun?: boolean;
- forceUpdate?: boolean;
- resourceIds?: string[] | null;
+ displayName?: string;
+ email?: string;
+ /** Format: int64 */
+ fontSize?: number;
+ locale?: string;
+ };
+ UpdateOidcRoleMappingOutputBody: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/UpdateOidcRoleMappingOutputBody.json
+ */
+ readonly $schema?: string;
+ data: components["schemas"]["RoleOidcRoleMapping"];
+ success: boolean;
+ };
+ UpdateProjectServicesInputBody: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/UpdateProjectServicesInputBody.json
+ */
+ readonly $schema?: string;
+ /** @description Service names to update; empty updates all services */
+ services?: string[] | null;
+ };
+ UpdaterOptions: {
+ /**
+ * Format: uri
+ * @description A URL to the JSON Schema for this object.
+ * @example https://arcane.randomsynergy.xyz:3552/api/schemas/UpdaterOptions.json
+ */
+ readonly $schema?: string;
+ dryRun?: boolean;
+ forceUpdate?: boolean;
+ resourceIds?: string[] | null;
type?: string;
};
UpdaterResourceResult: {
@@ -9335,6 +11425,7 @@ export interface components {
updateAvailable?: boolean;
};
UpdaterResult: {
+ activityId?: string;
/** Format: int64 */
checked: number;
duration: string;
@@ -9343,6 +11434,8 @@ export interface components {
failed: number;
items: components["schemas"]["UpdaterResourceResult"][] | null;
/** Format: int64 */
+ restarted?: number;
+ /** Format: int64 */
skipped: number;
startTime?: string;
success?: boolean;
@@ -9392,13 +11485,6 @@ export interface components {
locale?: string;
/** @description Password of the user */
password: string;
- /**
- * @description Roles assigned to the user
- * @example [
- * "user"
- * ]
- */
- roles?: string[] | null;
/**
* @description Username of the user
* @example johndoe
@@ -9416,6 +11502,17 @@ export interface components {
pagination: components["schemas"]["BasePaginationResponse"];
success: boolean;
};
+ UserRoleAssignmentSummary: {
+ /** @description Environment ID this assignment is scoped to; omit for a global assignment */
+ environmentId?: string;
+ /** @description Role ID granted by this assignment */
+ roleId: string;
+ /**
+ * @description How the assignment was created
+ * @enum {string}
+ */
+ source: "manual" | "oidc";
+ };
UserUpdateUser: {
/**
* Format: uri
@@ -9431,12 +11528,12 @@ export interface components {
locale?: string;
/** @description New password for the user */
password?: string;
- /** @description Roles assigned to the user */
- roles?: string[] | null;
/** @description Username of the user */
username?: string;
};
UserUser: {
+ /** @description URL to the user's custom avatar image; omitted when using the default profile picture */
+ avatarUrl?: string;
/** @description Whether the user can currently be deleted */
canDelete: boolean;
/** @description Date and time when the user was created */
@@ -9451,11 +11548,19 @@ export interface components {
* @example john@example.com
*/
email?: string;
+ /**
+ * Format: int64
+ * @description Preferred root UI font size in px
+ * @example 14
+ */
+ fontSize?: number;
/**
* @description Unique identifier of the user
* @example 550e8400-e29b-41d4-a716-446655440000
*/
id: string;
+ /** @description Whether the user effectively holds global administrator access */
+ isGlobalAdmin: boolean;
/**
* @description Locale preference of the user
* @example en-US
@@ -9463,16 +11568,14 @@ export interface components {
locale?: string;
/** @description OIDC subject identifier for SSO users */
oidcSubjectId?: string;
+ /** @description Permissions the user effectively holds, keyed by environment ID. The 'global' key holds permissions that apply across every environment (and to org-level endpoints). */
+ permissionsByEnv: {
+ [key: string]: string[] | null;
+ };
/** @description Whether the user must change their password */
requiresPasswordChange: boolean;
- /**
- * @description Roles assigned to the user
- * @example [
- * "user",
- * "admin"
- * ]
- */
- roles: string[] | null;
+ /** @description Role assignments held by the user */
+ roleAssignments: components["schemas"]["UserRoleAssignmentSummary"][] | null;
/** @description Date and time when the user was last updated */
updatedAt?: string;
/**
@@ -9511,12 +11614,17 @@ export interface components {
isSemverVersion: boolean;
newestDigest?: string;
newestVersion?: string;
+ nodeVersion: string;
+ releaseNotes?: string;
releaseUrl?: string;
+ releasedAt?: string;
revision: string;
shortRevision: string;
+ svelteKitVersion: string;
updateAvailable: boolean;
};
VolumeBackup: {
+ activityId?: string;
/** Format: date-time */
createdAt: string;
id: string;
@@ -9595,6 +11703,7 @@ export interface components {
success: boolean;
};
VolumePruneReportData: {
+ activityId?: string;
/** Format: int64 */
spaceReclaimed: number;
volumesDeleted?: string[] | null;
@@ -9619,6 +11728,7 @@ export interface components {
inUse: boolean;
};
VolumeVolume: {
+ activityId?: string;
containers: string[] | null;
createdAt: string;
driver: string;
@@ -9685,6 +11795,7 @@ export interface components {
vulnerabilityId: string;
};
VulnerabilityScanResult: {
+ activityId?: string;
/** Format: int64 */
duration?: number;
error?: string;
@@ -9857,6 +11968,36 @@ export interface components {
}
export type $defs = Record;
export interface operations {
+ "stream-all-activities": {
+ parameters: {
+ query?: {
+ /** @description Snapshot limit per environment */
+ limit?: number;
+ };
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
"list-api-keys": {
parameters: {
query?: {
@@ -10044,6 +12185,7 @@ export interface operations {
headers: {
"Cache-Control"?: string;
"Content-Type"?: string;
+ "X-Content-Type-Options"?: string;
[name: string]: unknown;
};
content: {
@@ -10080,6 +12222,7 @@ export interface operations {
headers: {
"Cache-Control"?: string;
"Content-Type"?: string;
+ "X-Content-Type-Options"?: string;
[name: string]: unknown;
};
content: {
@@ -10111,6 +12254,7 @@ export interface operations {
headers: {
"Cache-Control"?: string;
"Content-Type"?: string;
+ "X-Content-Type-Options"?: string;
[name: string]: unknown;
};
content: {
@@ -10142,6 +12286,7 @@ export interface operations {
headers: {
"Cache-Control"?: string;
"Content-Type"?: string;
+ "X-Content-Type-Options"?: string;
[name: string]: unknown;
};
content: {
@@ -10176,6 +12321,7 @@ export interface operations {
headers: {
"Cache-Control"?: string;
"Content-Type"?: string;
+ "X-Content-Type-Options"?: string;
[name: string]: unknown;
};
content: {
@@ -10225,7 +12371,9 @@ export interface operations {
login: {
parameters: {
query?: never;
- header?: never;
+ header?: {
+ "User-Agent"?: string;
+ };
path?: never;
cookie?: never;
};
@@ -10315,18 +12463,14 @@ export interface operations {
};
};
};
- "change-password": {
+ "list-my-api-keys": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
- requestBody: {
- content: {
- "application/json": components["schemas"]["AuthPasswordChange"];
- };
- };
+ requestBody?: never;
responses: {
/** @description OK */
200: {
@@ -10334,7 +12478,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ "application/json": components["schemas"]["BaseApiResponseListApiKey"];
};
};
/** @description Error */
@@ -10348,7 +12492,7 @@ export interface operations {
};
};
};
- "refresh-token": {
+ "create-my-api-key": {
parameters: {
query?: never;
header?: never;
@@ -10357,18 +12501,17 @@ export interface operations {
};
requestBody: {
content: {
- "application/json": components["schemas"]["AuthRefresh"];
+ "application/json": components["schemas"]["ApikeyCreateUserApiKey"];
};
};
responses: {
/** @description OK */
200: {
headers: {
- "Set-Cookie"?: string;
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseTokenRefreshResponse"];
+ "application/json": components["schemas"]["BaseApiResponseApiKeyCreatedDto"];
};
};
/** @description Error */
@@ -10382,22 +12525,14 @@ export interface operations {
};
};
};
- listContainerRegistries: {
+ "delete-my-api-key": {
parameters: {
- query?: {
- /** @description Search query */
- search?: string;
- /** @description Column to sort by */
- sort?: string;
- /** @description Sort direction */
- order?: string;
- /** @description Start index */
- start?: number;
- /** @description Items per page */
- limit?: number;
- };
+ query?: never;
header?: never;
- path?: never;
+ path: {
+ /** @description API key ID */
+ id: string;
+ };
cookie?: never;
};
requestBody?: never;
@@ -10408,7 +12543,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["ContainerRegistryPaginatedResponse"];
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
};
};
/** @description Error */
@@ -10422,7 +12557,7 @@ export interface operations {
};
};
};
- createContainerRegistry: {
+ "upload-my-avatar": {
parameters: {
query?: never;
header?: never;
@@ -10431,42 +12566,12 @@ export interface operations {
};
requestBody: {
content: {
- "application/json": components["schemas"]["CreateContainerRegistryRequest"];
- };
- };
- responses: {
- /** @description OK */
- 200: {
- headers: {
- [name: string]: unknown;
- };
- content: {
- "application/json": components["schemas"]["BaseApiResponseContainerRegistry"];
- };
- };
- /** @description Error */
- default: {
- headers: {
- [name: string]: unknown;
- };
- content: {
- "application/problem+json": components["schemas"]["ErrorModel"];
+ "multipart/form-data": {
+ /** Format: binary */
+ file?: string;
};
};
};
- };
- syncContainerRegistries: {
- parameters: {
- query?: never;
- header?: never;
- path?: never;
- cookie?: never;
- };
- requestBody: {
- content: {
- "application/json": components["schemas"]["ContainerregistrySyncRequest"];
- };
- };
responses: {
/** @description OK */
200: {
@@ -10474,7 +12579,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ "application/json": components["schemas"]["BaseApiResponseUser"];
};
};
/** @description Error */
@@ -10488,14 +12593,11 @@ export interface operations {
};
};
};
- getContainerRegistry: {
+ "delete-my-avatar": {
parameters: {
query?: never;
header?: never;
- path: {
- /** @description Registry ID */
- id: string;
- };
+ path?: never;
cookie?: never;
};
requestBody?: never;
@@ -10506,7 +12608,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseContainerRegistry"];
+ "application/json": components["schemas"]["BaseApiResponseUser"];
};
};
/** @description Error */
@@ -10520,19 +12622,16 @@ export interface operations {
};
};
};
- updateContainerRegistry: {
+ "update-my-profile": {
parameters: {
query?: never;
header?: never;
- path: {
- /** @description Registry ID */
- id: string;
- };
+ path?: never;
cookie?: never;
};
requestBody: {
content: {
- "application/json": components["schemas"]["UpdateContainerRegistryRequest"];
+ "application/json": components["schemas"]["UpdateMyProfileInputBody"];
};
};
responses: {
@@ -10542,7 +12641,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseContainerRegistry"];
+ "application/json": components["schemas"]["BaseApiResponseUser"];
};
};
/** @description Error */
@@ -10556,17 +12655,18 @@ export interface operations {
};
};
};
- deleteContainerRegistry: {
+ "change-password": {
parameters: {
query?: never;
header?: never;
- path: {
- /** @description Registry ID */
- id: string;
- };
+ path?: never;
cookie?: never;
};
- requestBody?: never;
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["AuthPasswordChange"];
+ };
+ };
responses: {
/** @description OK */
200: {
@@ -10588,25 +12688,29 @@ export interface operations {
};
};
};
- testContainerRegistry: {
+ "refresh-token": {
parameters: {
query?: never;
- header?: never;
- path: {
- /** @description Registry ID */
- id: string;
+ header?: {
+ "User-Agent"?: string;
};
+ path?: never;
cookie?: never;
};
- requestBody?: never;
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["AuthRefresh"];
+ };
+ };
responses: {
/** @description OK */
200: {
headers: {
+ "Set-Cookie"?: string;
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ "application/json": components["schemas"]["BaseApiResponseTokenRefreshResponse"];
};
};
/** @description Error */
@@ -10620,7 +12724,7 @@ export interface operations {
};
};
};
- "get-customize-categories": {
+ "logout-all-other-sessions": {
parameters: {
query?: never;
header?: never;
@@ -10635,7 +12739,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["CategoryCategory"][] | null;
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
};
};
/** @description Error */
@@ -10649,7 +12753,7 @@ export interface operations {
};
};
};
- listGitRepositories: {
+ listContainerRegistries: {
parameters: {
query?: {
/** @description Search query */
@@ -10675,7 +12779,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["GitRepositoryPaginatedResponse"];
+ "application/json": components["schemas"]["ContainerRegistryPaginatedResponse"];
};
};
/** @description Error */
@@ -10689,7 +12793,7 @@ export interface operations {
};
};
};
- createGitRepository: {
+ createContainerRegistry: {
parameters: {
query?: never;
header?: never;
@@ -10698,7 +12802,7 @@ export interface operations {
};
requestBody: {
content: {
- "application/json": components["schemas"]["CreateGitRepositoryRequest"];
+ "application/json": components["schemas"]["CreateContainerRegistryRequest"];
};
};
responses: {
@@ -10708,7 +12812,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseGitRepository"];
+ "application/json": components["schemas"]["BaseApiResponseContainerRegistry"];
};
};
/** @description Error */
@@ -10722,14 +12826,11 @@ export interface operations {
};
};
};
- getGitRepository: {
+ getContainerRegistryPullUsage: {
parameters: {
query?: never;
header?: never;
- path: {
- /** @description Repository ID */
- id: string;
- };
+ path?: never;
cookie?: never;
};
requestBody?: never;
@@ -10740,7 +12841,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseGitRepository"];
+ "application/json": components["schemas"]["BaseApiResponsePullUsageResponse"];
};
};
/** @description Error */
@@ -10754,19 +12855,16 @@ export interface operations {
};
};
};
- updateGitRepository: {
+ syncContainerRegistries: {
parameters: {
query?: never;
header?: never;
- path: {
- /** @description Repository ID */
- id: string;
- };
+ path?: never;
cookie?: never;
};
requestBody: {
content: {
- "application/json": components["schemas"]["UpdateGitRepositoryRequest"];
+ "application/json": components["schemas"]["ContainerregistrySyncRequest"];
};
};
responses: {
@@ -10776,7 +12874,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseGitRepository"];
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
};
};
/** @description Error */
@@ -10790,12 +12888,12 @@ export interface operations {
};
};
};
- deleteGitRepository: {
+ getContainerRegistry: {
parameters: {
query?: never;
header?: never;
path: {
- /** @description Repository ID */
+ /** @description Registry ID */
id: string;
};
cookie?: never;
@@ -10808,7 +12906,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ "application/json": components["schemas"]["BaseApiResponseContainerRegistry"];
};
};
/** @description Error */
@@ -10822,17 +12920,21 @@ export interface operations {
};
};
};
- listGitRepositoryBranches: {
+ updateContainerRegistry: {
parameters: {
query?: never;
header?: never;
path: {
- /** @description Repository ID */
+ /** @description Registry ID */
id: string;
};
cookie?: never;
};
- requestBody?: never;
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["UpdateContainerRegistryRequest"];
+ };
+ };
responses: {
/** @description OK */
200: {
@@ -10840,7 +12942,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseBranchesResponse"];
+ "application/json": components["schemas"]["BaseApiResponseContainerRegistry"];
};
};
/** @description Error */
@@ -10854,17 +12956,12 @@ export interface operations {
};
};
};
- browseGitRepositoryFiles: {
+ deleteContainerRegistry: {
parameters: {
- query?: {
- /** @description Branch to browse */
- branch?: string;
- /** @description Path within repository (optional) */
- path?: string;
- };
+ query?: never;
header?: never;
path: {
- /** @description Repository ID */
+ /** @description Registry ID */
id: string;
};
cookie?: never;
@@ -10877,7 +12974,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseBrowseResponse"];
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
};
};
/** @description Error */
@@ -10891,15 +12988,12 @@ export interface operations {
};
};
};
- testGitRepository: {
+ testContainerRegistry: {
parameters: {
- query?: {
- /** @description Branch to test (optional, uses repository default branch when omitted) */
- branch?: string;
- };
+ query?: never;
header?: never;
path: {
- /** @description Repository ID */
+ /** @description Registry ID */
id: string;
};
cookie?: never;
@@ -10926,18 +13020,14 @@ export interface operations {
};
};
};
- "search-customize": {
+ "get-customize-categories": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
- requestBody: {
- content: {
- "application/json": components["schemas"]["SearchRequest"];
- };
- };
+ requestBody?: never;
responses: {
/** @description OK */
200: {
@@ -10945,7 +13035,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["SearchResponse"];
+ "application/json": components["schemas"]["CategoryCategory"][] | null;
};
};
/** @description Error */
@@ -10959,16 +13049,16 @@ export interface operations {
};
};
};
- listEnvironments: {
+ listGitRepositories: {
parameters: {
query?: {
- /** @description Search query for filtering by name or API URL */
+ /** @description Search query */
search?: string;
/** @description Column to sort by */
sort?: string;
- /** @description Sort direction (asc or desc) */
+ /** @description Sort direction */
order?: string;
- /** @description Start index for pagination */
+ /** @description Start index */
start?: number;
/** @description Items per page */
limit?: number;
@@ -10985,7 +13075,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["EnvironmentPaginatedResponse"];
+ "application/json": components["schemas"]["GitRepositoryPaginatedResponse"];
};
};
/** @description Error */
@@ -10999,7 +13089,7 @@ export interface operations {
};
};
};
- createEnvironment: {
+ createGitRepository: {
parameters: {
query?: never;
header?: never;
@@ -11008,7 +13098,7 @@ export interface operations {
};
requestBody: {
content: {
- "application/json": components["schemas"]["EnvironmentCreate"];
+ "application/json": components["schemas"]["CreateGitRepositoryRequest"];
};
};
responses: {
@@ -11018,7 +13108,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseEnvironmentWithApiKey"];
+ "application/json": components["schemas"]["BaseApiResponseGitRepository"];
};
};
/** @description Error */
@@ -11032,14 +13122,14 @@ export interface operations {
};
};
};
- pairEnvironment: {
+ getGitRepository: {
parameters: {
query?: never;
- header?: {
- /** @description API key for environment pairing */
- "X-API-Key"?: string;
+ header?: never;
+ path: {
+ /** @description Repository ID */
+ id: string;
};
- path?: never;
cookie?: never;
};
requestBody?: never;
@@ -11050,7 +13140,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ "application/json": components["schemas"]["BaseApiResponseGitRepository"];
};
};
/** @description Error */
@@ -11064,17 +13154,21 @@ export interface operations {
};
};
};
- getEnvironment: {
+ updateGitRepository: {
parameters: {
query?: never;
header?: never;
path: {
- /** @description Environment ID */
+ /** @description Repository ID */
id: string;
};
cookie?: never;
};
- requestBody?: never;
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["UpdateGitRepositoryRequest"];
+ };
+ };
responses: {
/** @description OK */
200: {
@@ -11082,7 +13176,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseEnvironment"];
+ "application/json": components["schemas"]["BaseApiResponseGitRepository"];
};
};
/** @description Error */
@@ -11096,21 +13190,17 @@ export interface operations {
};
};
};
- updateEnvironment: {
+ deleteGitRepository: {
parameters: {
query?: never;
header?: never;
path: {
- /** @description Environment ID */
+ /** @description Repository ID */
id: string;
};
cookie?: never;
};
- requestBody: {
- content: {
- "application/json": components["schemas"]["EnvironmentUpdate"];
- };
- };
+ requestBody?: never;
responses: {
/** @description OK */
200: {
@@ -11118,7 +13208,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseEnvironment"];
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
};
};
/** @description Error */
@@ -11132,12 +13222,12 @@ export interface operations {
};
};
};
- deleteEnvironment: {
+ listGitRepositoryBranches: {
parameters: {
query?: never;
header?: never;
path: {
- /** @description Environment ID */
+ /** @description Repository ID */
id: string;
};
cookie?: never;
@@ -11150,7 +13240,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ "application/json": components["schemas"]["BaseApiResponseBranchesResponse"];
};
};
/** @description Error */
@@ -11164,21 +13254,22 @@ export interface operations {
};
};
};
- pairAgent: {
+ browseGitRepositoryFiles: {
parameters: {
- query?: never;
+ query?: {
+ /** @description Branch to browse */
+ branch?: string;
+ /** @description Path within repository (optional) */
+ path?: string;
+ };
header?: never;
path: {
- /** @description Environment ID (must be 0 for local) */
+ /** @description Repository ID */
id: string;
};
cookie?: never;
};
- requestBody?: {
- content: {
- "application/json": components["schemas"]["EnvironmentAgentPairRequest"];
- };
- };
+ requestBody?: never;
responses: {
/** @description OK */
200: {
@@ -11186,7 +13277,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseAgentPairResponse"];
+ "application/json": components["schemas"]["BaseApiResponseBrowseResponse"];
};
};
/** @description Error */
@@ -11200,15 +13291,15 @@ export interface operations {
};
};
};
- "builds-browse": {
+ testGitRepository: {
parameters: {
query?: {
- /** @description Directory path to browse */
- path?: string;
+ /** @description Branch to test (optional, uses repository default branch when omitted) */
+ branch?: string;
};
header?: never;
path: {
- /** @description Environment ID */
+ /** @description Repository ID */
id: string;
};
cookie?: never;
@@ -11221,7 +13312,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseListFileEntry"];
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
};
};
/** @description Error */
@@ -11235,29 +13326,27 @@ export interface operations {
};
};
};
- "builds-browse-delete": {
+ "search-customize": {
parameters: {
- query?: {
- /** @description File or directory path to delete */
- path?: string;
- };
+ query?: never;
header?: never;
- path: {
- /** @description Environment ID */
- id: string;
- };
+ path?: never;
cookie?: never;
};
- requestBody?: never;
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["SearchRequest"];
+ };
+ };
responses: {
- /** @description No Content */
- 204: {
+ /** @description OK */
+ 200: {
headers: {
- Data?: components["schemas"]["BaseMessageResponse"];
- Success?: boolean;
[name: string]: unknown;
};
- content?: never;
+ content: {
+ "application/json": components["schemas"]["SearchResponse"];
+ };
};
/** @description Error */
default: {
@@ -11270,19 +13359,14 @@ export interface operations {
};
};
};
- "builds-browse-content": {
+ "stream-all-dashboards": {
parameters: {
query?: {
- /** @description File path */
- path?: string;
- /** @description Maximum bytes to read (default 1MB) */
- maxBytes?: number;
+ /** @description Debug mode: force an empty action item list */
+ debugAllGood?: boolean;
};
header?: never;
- path: {
- /** @description Environment ID */
- id: string;
- };
+ path?: never;
cookie?: never;
};
requestBody?: never;
@@ -11292,9 +13376,7 @@ export interface operations {
headers: {
[name: string]: unknown;
};
- content: {
- "application/json": components["schemas"]["BaseApiResponseBuildFileContentResponse"];
- };
+ content?: never;
};
/** @description Error */
default: {
@@ -11307,17 +13389,11 @@ export interface operations {
};
};
};
- "builds-browse-download": {
+ "get-diagnostics": {
parameters: {
- query?: {
- /** @description File path */
- path?: string;
- };
+ query?: never;
header?: never;
- path: {
- /** @description Environment ID */
- id: string;
- };
+ path?: never;
cookie?: never;
};
requestBody?: never;
@@ -11325,13 +13401,10 @@ export interface operations {
/** @description OK */
200: {
headers: {
- "Content-Disposition"?: string;
- "Content-Length"?: number;
- "Content-Type"?: string;
[name: string]: unknown;
};
content: {
- "application/json": unknown;
+ "application/json": components["schemas"]["SystemDiagnostics"];
};
};
/** @description Error */
@@ -11345,29 +13418,23 @@ export interface operations {
};
};
};
- "builds-browse-mkdir": {
+ "get-diagnostics-logs": {
parameters: {
- query?: {
- /** @description Directory path to create */
- path?: string;
- };
+ query?: never;
header?: never;
- path: {
- /** @description Environment ID */
- id: string;
- };
+ path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
- /** @description No Content */
- 204: {
+ /** @description OK */
+ 200: {
headers: {
- Data?: components["schemas"]["BaseMessageResponse"];
- Success?: boolean;
[name: string]: unknown;
};
- content?: never;
+ content: {
+ "application/json": components["schemas"]["SystemLogEntry"][] | null;
+ };
};
/** @description Error */
default: {
@@ -11380,36 +13447,18 @@ export interface operations {
};
};
};
- "builds-browse-upload": {
+ downloadEdgeMTLSCA: {
parameters: {
- query?: {
- /** @description Destination path */
- path?: string;
- };
+ query?: never;
header?: never;
- path: {
- /** @description Environment ID */
- id: string;
- };
+ path?: never;
cookie?: never;
};
- requestBody: {
- content: {
- "multipart/form-data": {
- /**
- * Format: binary
- * @description File to upload
- */
- file: string;
- };
- };
- };
+ requestBody?: never;
responses: {
- /** @description No Content */
- 204: {
+ /** @description OK */
+ 200: {
headers: {
- Data?: components["schemas"]["BaseMessageResponse"];
- Success?: boolean;
[name: string]: unknown;
};
content?: never;
@@ -11425,31 +13474,24 @@ export interface operations {
};
};
};
- "list-containers": {
+ listEnvironments: {
parameters: {
query?: {
- /** @description Search query */
+ /** @description Search query for filtering by name or API URL */
search?: string;
/** @description Column to sort by */
sort?: string;
- /** @description Sort direction */
+ /** @description Sort direction (asc or desc) */
order?: string;
- /** @description Start index */
+ /** @description Start index for pagination */
start?: number;
- /** @description Limit */
+ /** @description Items per page */
limit?: number;
- /** @description Optional grouping mode (for example: project) */
- groupBy?: string;
- /** @description Include internal containers */
- includeInternal?: boolean;
- /** @description Filter by update status (has_update, up_to_date, error, unknown) */
- updates?: string;
+ /** @description Filter by environment type (comma-separated: http,edge,websocket,grpc,polling) */
+ type?: string;
};
header?: never;
- path: {
- /** @description Environment ID */
- id: string;
- };
+ path?: never;
cookie?: never;
};
requestBody?: never;
@@ -11460,7 +13502,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["ContainerPaginatedResponse"];
+ "application/json": components["schemas"]["EnvironmentPaginatedResponse"];
};
};
/** @description Error */
@@ -11474,19 +13516,16 @@ export interface operations {
};
};
};
- "create-container": {
+ createEnvironment: {
parameters: {
query?: never;
header?: never;
- path: {
- /** @description Environment ID */
- id: string;
- };
+ path?: never;
cookie?: never;
};
requestBody: {
content: {
- "application/json": components["schemas"]["ContainerCreate"];
+ "application/json": components["schemas"]["EnvironmentCreate"];
};
};
responses: {
@@ -11496,7 +13535,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["ContainerCreatedResponse"];
+ "application/json": components["schemas"]["BaseApiResponseEnvironmentWithApiKey"];
};
};
/** @description Error */
@@ -11510,17 +13549,14 @@ export interface operations {
};
};
};
- "container-status-counts": {
+ pairEnvironment: {
parameters: {
- query?: {
- /** @description Include internal containers */
- includeInternal?: boolean;
- };
- header?: never;
- path: {
- /** @description Environment ID */
- id: string;
+ query?: never;
+ header?: {
+ /** @description API key for environment pairing */
+ "X-API-Key"?: string;
};
+ path?: never;
cookie?: never;
};
requestBody?: never;
@@ -11531,7 +13567,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["ContainerStatusCountsResponse"];
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
};
};
/** @description Error */
@@ -11545,15 +13581,13 @@ export interface operations {
};
};
};
- "get-container": {
+ getEnvironment: {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Container ID */
- containerId: string;
};
cookie?: never;
};
@@ -11565,7 +13599,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["ContainerDetailsResponse"];
+ "application/json": components["schemas"]["BaseApiResponseEnvironment"];
};
};
/** @description Error */
@@ -11579,24 +13613,21 @@ export interface operations {
};
};
};
- "delete-container": {
+ updateEnvironment: {
parameters: {
- query?: {
- /** @description Force delete running container */
- force?: boolean;
- /** @description Remove associated volumes */
- volumes?: boolean;
- };
+ query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Container ID */
- containerId: string;
};
cookie?: never;
};
- requestBody?: never;
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["EnvironmentUpdate"];
+ };
+ };
responses: {
/** @description OK */
200: {
@@ -11604,7 +13635,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["ContainerActionResponse"];
+ "application/json": components["schemas"]["BaseApiResponseEnvironment"];
};
};
/** @description Error */
@@ -11618,23 +13649,17 @@ export interface operations {
};
};
};
- "set-container-auto-update": {
+ deleteEnvironment: {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Container ID */
- containerId: string;
};
cookie?: never;
};
- requestBody: {
- content: {
- "application/json": components["schemas"]["SetAutoUpdateInputBody"];
- };
- };
+ requestBody?: never;
responses: {
/** @description OK */
200: {
@@ -11642,7 +13667,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["ContainerActionResponse"];
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
};
};
/** @description Error */
@@ -11656,15 +13681,30 @@ export interface operations {
};
};
};
- "redeploy-container": {
+ "list-activities": {
parameters: {
- query?: never;
+ query?: {
+ /** @description Search query */
+ search?: string;
+ /** @description Column to sort by */
+ sort?: string;
+ /** @description Sort direction */
+ order?: string;
+ /** @description Start index */
+ start?: number;
+ /** @description Limit */
+ limit?: number;
+ /** @description Filter by activity status */
+ status?: string;
+ /** @description Filter by activity type */
+ type?: string;
+ /** @description Filter by resource type */
+ resourceType?: string;
+ };
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Container ID */
- containerId: string;
};
cookie?: never;
};
@@ -11676,7 +13716,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["ContainerDetailsResponse"];
+ "application/json": components["schemas"]["BasePaginatedActivity"];
};
};
/** @description Error */
@@ -11690,15 +13730,13 @@ export interface operations {
};
};
};
- "restart-container": {
+ "clear-activity-history": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Container ID */
- containerId: string;
};
cookie?: never;
};
@@ -11710,7 +13748,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["ContainerActionResponse"];
+ "application/json": components["schemas"]["BaseApiResponseClearHistoryResult"];
};
};
/** @description Error */
@@ -11724,15 +13762,18 @@ export interface operations {
};
};
};
- "start-container": {
+ "get-activity": {
parameters: {
- query?: never;
+ query?: {
+ /** @description Maximum messages to return */
+ limit?: number;
+ };
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Container ID */
- containerId: string;
+ /** @description Activity ID */
+ activityId: string;
};
cookie?: never;
};
@@ -11744,7 +13785,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["ContainerActionResponse"];
+ "application/json": components["schemas"]["BaseApiResponseDetail"];
};
};
/** @description Error */
@@ -11758,15 +13799,18 @@ export interface operations {
};
};
};
- "stop-container": {
+ "cancel-activity": {
parameters: {
- query?: never;
+ query?: {
+ /** @description Display name to attribute the cancellation to (used when proxying to a remote environment) */
+ requestedBy?: string;
+ };
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Container ID */
- containerId: string;
+ /** @description Activity ID */
+ activityId: string;
};
cookie?: never;
};
@@ -11778,7 +13822,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["ContainerActionResponse"];
+ "application/json": components["schemas"]["BaseApiResponseActivity"];
};
};
/** @description Error */
@@ -11792,19 +13836,21 @@ export interface operations {
};
};
};
- "update-container": {
+ pairAgent: {
parameters: {
query?: never;
header?: never;
path: {
- /** @description Environment ID */
+ /** @description Environment ID (must be 0 for local) */
id: string;
- /** @description Container ID to update */
- containerId: string;
};
cookie?: never;
};
- requestBody?: never;
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["EnvironmentAgentPairRequest"];
+ };
+ };
responses: {
/** @description OK */
200: {
@@ -11812,7 +13858,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseResult"];
+ "application/json": components["schemas"]["BaseApiResponseAgentPairResponse"];
};
};
/** @description Error */
@@ -11826,11 +13872,11 @@ export interface operations {
};
};
};
- "get-dashboard": {
+ "builds-browse": {
parameters: {
query?: {
- /** @description Debug mode: force an empty action item list */
- debugAllGood?: boolean;
+ /** @description Directory path to browse */
+ path?: string;
};
header?: never;
path: {
@@ -11847,7 +13893,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseSnapshot"];
+ "application/json": components["schemas"]["BaseApiResponseListFileEntry"];
};
};
/** @description Error */
@@ -11861,11 +13907,11 @@ export interface operations {
};
};
};
- "get-dashboard-action-items": {
+ "builds-browse-delete": {
parameters: {
query?: {
- /** @description Debug mode: force an empty action item list */
- debugAllGood?: boolean;
+ /** @description File or directory path to delete */
+ path?: string;
};
header?: never;
path: {
@@ -11876,14 +13922,14 @@ export interface operations {
};
requestBody?: never;
responses: {
- /** @description OK */
- 200: {
+ /** @description No Content */
+ 204: {
headers: {
+ Data?: components["schemas"]["BaseMessageResponse"];
+ Success?: boolean;
[name: string]: unknown;
};
- content: {
- "application/json": components["schemas"]["BaseApiResponseActionItems"];
- };
+ content?: never;
};
/** @description Error */
default: {
@@ -11896,9 +13942,14 @@ export interface operations {
};
};
};
- getDeploymentSnippets: {
+ "builds-browse-content": {
parameters: {
- query?: never;
+ query?: {
+ /** @description File path */
+ path?: string;
+ /** @description Maximum bytes to read (default 1MB) */
+ maxBytes?: number;
+ };
header?: never;
path: {
/** @description Environment ID */
@@ -11914,7 +13965,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseDeploymentSnippet"];
+ "application/json": components["schemas"]["BaseApiResponseBuildFileContentResponse"];
};
};
/** @description Error */
@@ -11928,19 +13979,11 @@ export interface operations {
};
};
};
- listGitOpsSyncs: {
+ "builds-browse-download": {
parameters: {
query?: {
- /** @description Search query */
- search?: string;
- /** @description Column to sort by */
- sort?: string;
- /** @description Sort direction */
- order?: string;
- /** @description Start index */
- start?: number;
- /** @description Items per page */
- limit?: number;
+ /** @description File path */
+ path?: string;
};
header?: never;
path: {
@@ -11954,10 +13997,13 @@ export interface operations {
/** @description OK */
200: {
headers: {
+ "Content-Disposition"?: string;
+ "Content-Length"?: number;
+ "Content-Type"?: string;
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["GitOpsSyncPaginatedResponse"];
+ "application/json": unknown;
};
};
/** @description Error */
@@ -11971,9 +14017,12 @@ export interface operations {
};
};
};
- createGitOpsSync: {
+ "builds-browse-mkdir": {
parameters: {
- query?: never;
+ query?: {
+ /** @description Directory path to create */
+ path?: string;
+ };
header?: never;
path: {
/** @description Environment ID */
@@ -11981,20 +14030,16 @@ export interface operations {
};
cookie?: never;
};
- requestBody: {
- content: {
- "application/json": components["schemas"]["GitopsCreateSyncRequest"];
- };
- };
+ requestBody?: never;
responses: {
- /** @description OK */
- 200: {
+ /** @description No Content */
+ 204: {
headers: {
+ Data?: components["schemas"]["BaseMessageResponse"];
+ Success?: boolean;
[name: string]: unknown;
};
- content: {
- "application/json": components["schemas"]["BaseApiResponseGitOpsSync"];
- };
+ content?: never;
};
/** @description Error */
default: {
@@ -12007,9 +14052,12 @@ export interface operations {
};
};
};
- importGitOpsSyncs: {
+ "builds-browse-upload": {
parameters: {
- query?: never;
+ query?: {
+ /** @description Destination path */
+ path?: string;
+ };
header?: never;
path: {
/** @description Environment ID */
@@ -12019,18 +14067,24 @@ export interface operations {
};
requestBody: {
content: {
- "application/json": components["schemas"]["GitopsImportGitOpsSyncRequest"][] | null;
+ "multipart/form-data": {
+ /**
+ * Format: binary
+ * @description File to upload
+ */
+ file: string;
+ };
};
};
responses: {
- /** @description OK */
- 200: {
+ /** @description No Content */
+ 204: {
headers: {
+ Data?: components["schemas"]["BaseMessageResponse"];
+ Success?: boolean;
[name: string]: unknown;
};
- content: {
- "application/json": components["schemas"]["BaseApiResponseImportGitOpsSyncResponse"];
- };
+ content?: never;
};
/** @description Error */
default: {
@@ -12043,15 +14097,32 @@ export interface operations {
};
};
};
- getGitOpsSync: {
+ "list-containers": {
parameters: {
- query?: never;
+ query?: {
+ /** @description Search query */
+ search?: string;
+ /** @description Column to sort by */
+ sort?: string;
+ /** @description Sort direction */
+ order?: string;
+ /** @description Start index */
+ start?: number;
+ /** @description Limit */
+ limit?: number;
+ /** @description Optional grouping mode (for example: project) */
+ groupBy?: string;
+ /** @description Include internal containers */
+ includeInternal?: boolean;
+ /** @description Filter by update status (has_update, up_to_date, error, unknown) */
+ updates?: string;
+ /** @description Filter standalone containers only (true/false) */
+ standalone?: string;
+ };
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Sync ID */
- syncId: string;
};
cookie?: never;
};
@@ -12063,7 +14134,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseGitOpsSync"];
+ "application/json": components["schemas"]["ContainerPaginatedResponse"];
};
};
/** @description Error */
@@ -12077,21 +14148,19 @@ export interface operations {
};
};
};
- updateGitOpsSync: {
+ "create-container": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Sync ID */
- syncId: string;
};
cookie?: never;
};
requestBody: {
content: {
- "application/json": components["schemas"]["GitopsUpdateSyncRequest"];
+ "application/json": components["schemas"]["ContainerCreate"];
};
};
responses: {
@@ -12101,7 +14170,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseGitOpsSync"];
+ "application/json": components["schemas"]["ContainerCreatedResponse"];
};
};
/** @description Error */
@@ -12115,15 +14184,16 @@ export interface operations {
};
};
};
- deleteGitOpsSync: {
+ "container-status-counts": {
parameters: {
- query?: never;
+ query?: {
+ /** @description Include internal containers */
+ includeInternal?: boolean;
+ };
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Sync ID */
- syncId: string;
};
cookie?: never;
};
@@ -12135,7 +14205,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ "application/json": components["schemas"]["ContainerStatusCountsResponse"];
};
};
/** @description Error */
@@ -12149,19 +14219,16 @@ export interface operations {
};
};
};
- browseGitOpsSyncFiles: {
+ "get-container": {
parameters: {
- query?: {
- /** @description Path to browse (optional) */
- path?: string;
- };
+ query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Sync ID */
- syncId: string;
- };
+ /** @description Container ID */
+ containerId: string;
+ };
cookie?: never;
};
requestBody?: never;
@@ -12172,7 +14239,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseBrowseResponse"];
+ "application/json": components["schemas"]["ContainerDetailsResponse"];
};
};
/** @description Error */
@@ -12186,15 +14253,20 @@ export interface operations {
};
};
};
- getGitOpsSyncStatus: {
+ "delete-container": {
parameters: {
- query?: never;
+ query?: {
+ /** @description Force delete running container */
+ force?: boolean;
+ /** @description Remove associated volumes */
+ volumes?: boolean;
+ };
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Sync ID */
- syncId: string;
+ /** @description Container ID */
+ containerId: string;
};
cookie?: never;
};
@@ -12206,7 +14278,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseSyncStatus"];
+ "application/json": components["schemas"]["ContainerActionResponse"];
};
};
/** @description Error */
@@ -12220,19 +14292,23 @@ export interface operations {
};
};
};
- performGitOpsSync: {
+ "set-container-auto-update": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Sync ID */
- syncId: string;
+ /** @description Container ID */
+ containerId: string;
};
cookie?: never;
};
- requestBody?: never;
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["SetAutoUpdateInputBody"];
+ };
+ };
responses: {
/** @description OK */
200: {
@@ -12240,7 +14316,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseSyncResult"];
+ "application/json": components["schemas"]["ContainerActionResponse"];
};
};
/** @description Error */
@@ -12254,17 +14330,23 @@ export interface operations {
};
};
};
- updateHeartbeat: {
+ "commit-container": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
+ /** @description Container ID */
+ containerId: string;
};
cookie?: never;
};
- requestBody?: never;
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["ContainerCommitRequest"];
+ };
+ };
responses: {
/** @description OK */
200: {
@@ -12272,7 +14354,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ "application/json": components["schemas"]["BaseApiResponseCommitResult"];
};
};
/** @description Error */
@@ -12286,16 +14368,18 @@ export interface operations {
};
};
};
- "check-image-update": {
+ "kill-container": {
parameters: {
query?: {
- /** @description Image reference */
- imageRef?: string;
+ /** @description Signal to send (for example SIGTERM, SIGKILL). Defaults to SIGKILL. */
+ signal?: string;
};
header?: never;
path: {
/** @description Environment ID */
id: string;
+ /** @description Container ID */
+ containerId: string;
};
cookie?: never;
};
@@ -12307,7 +14391,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseResponse"];
+ "application/json": components["schemas"]["ContainerActionResponse"];
};
};
/** @description Error */
@@ -12321,21 +14405,19 @@ export interface operations {
};
};
};
- "check-all-images": {
+ "pause-container": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
+ /** @description Container ID */
+ containerId: string;
};
cookie?: never;
};
- requestBody: {
- content: {
- "application/json": components["schemas"]["ImageupdateCheckAllImagesRequest"];
- };
- };
+ requestBody?: never;
responses: {
/** @description OK */
200: {
@@ -12343,7 +14425,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseBatchResponse"];
+ "application/json": components["schemas"]["ContainerActionResponse"];
};
};
/** @description Error */
@@ -12357,21 +14439,19 @@ export interface operations {
};
};
};
- "check-multiple-images": {
+ "redeploy-container": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
+ /** @description Container ID */
+ containerId: string;
};
cookie?: never;
};
- requestBody: {
- content: {
- "application/json": components["schemas"]["ImageupdateBatchImageUpdateRequest"];
- };
- };
+ requestBody?: never;
responses: {
/** @description OK */
200: {
@@ -12379,7 +14459,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseBatchResponse"];
+ "application/json": components["schemas"]["ContainerDetailsResponse"];
};
};
/** @description Error */
@@ -12393,15 +14473,15 @@ export interface operations {
};
};
};
- "check-image-update-by-id": {
+ "restart-container": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Image ID */
- imageId: string;
+ /** @description Container ID */
+ containerId: string;
};
cookie?: never;
};
@@ -12413,7 +14493,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseResponse"];
+ "application/json": components["schemas"]["ContainerActionResponse"];
};
};
/** @description Error */
@@ -12427,15 +14507,15 @@ export interface operations {
};
};
};
- "check-image-update-by-id-post": {
+ "start-container": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Image ID */
- imageId: string;
+ /** @description Container ID */
+ containerId: string;
};
cookie?: never;
};
@@ -12447,7 +14527,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseResponse"];
+ "application/json": components["schemas"]["ContainerActionResponse"];
};
};
/** @description Error */
@@ -12461,13 +14541,15 @@ export interface operations {
};
};
};
- "get-update-summary": {
+ "stop-container": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
+ /** @description Container ID */
+ containerId: string;
};
cookie?: never;
};
@@ -12479,7 +14561,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseSummary"];
+ "application/json": components["schemas"]["ContainerActionResponse"];
};
};
/** @description Error */
@@ -12493,28 +14575,15 @@ export interface operations {
};
};
};
- "list-images": {
+ "unpause-container": {
parameters: {
- query?: {
- /** @description Search query */
- search?: string;
- /** @description Column to sort by */
- sort?: string;
- /** @description Sort direction (asc or desc) */
- order?: string;
- /** @description Start index for pagination */
- start?: number;
- /** @description Number of items per page */
- limit?: number;
- /** @description Filter by in-use status (true/false) */
- inUse?: string;
- /** @description Filter by update availability (true/false) */
- updates?: string;
- };
+ query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
+ /** @description Container ID */
+ containerId: string;
};
cookie?: never;
};
@@ -12526,7 +14595,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["ImagePaginatedResponse"];
+ "application/json": components["schemas"]["ContainerActionResponse"];
};
};
/** @description Error */
@@ -12540,28 +14609,28 @@ export interface operations {
};
};
};
- "build-image": {
+ "update-container": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
+ /** @description Container ID to update */
+ containerId: string;
};
cookie?: never;
};
- requestBody: {
- content: {
- "application/json": components["schemas"]["ImageBuildRequest"];
- };
- };
+ requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
- content?: never;
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseResult"];
+ };
};
/** @description Error */
default: {
@@ -12574,23 +14643,11 @@ export interface operations {
};
};
};
- "list-image-builds": {
+ "get-dashboard": {
parameters: {
query?: {
- /** @description Search query */
- search?: string;
- /** @description Column to sort by */
- sort?: string;
- /** @description Sort direction (asc or desc) */
- order?: string;
- /** @description Start index for pagination */
- start?: number;
- /** @description Number of items per page */
- limit?: number;
- /** @description Filter by status */
- status?: string;
- /** @description Filter by provider */
- provider?: string;
+ /** @description Debug mode: force an empty action item list */
+ debugAllGood?: boolean;
};
header?: never;
path: {
@@ -12607,7 +14664,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["ImageBuildPaginatedResponse"];
+ "application/json": components["schemas"]["BaseApiResponseSnapshot"];
};
};
/** @description Error */
@@ -12621,15 +14678,13 @@ export interface operations {
};
};
};
- "get-image-build": {
+ getDeploymentSnippets: {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Build ID */
- buildId: string;
};
cookie?: never;
};
@@ -12641,7 +14696,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseBuildRecord"];
+ "application/json": components["schemas"]["BaseApiResponseDeploymentSnippet"];
};
};
/** @description Error */
@@ -12655,7 +14710,7 @@ export interface operations {
};
};
};
- "get-image-usage-counts": {
+ downloadEnvironmentMTLSBundle: {
parameters: {
query?: never;
header?: never;
@@ -12672,9 +14727,7 @@ export interface operations {
headers: {
[name: string]: unknown;
};
- content: {
- "application/json": components["schemas"]["ImageUsageCountsResponse"];
- };
+ content?: never;
};
/** @description Error */
default: {
@@ -12687,33 +14740,26 @@ export interface operations {
};
};
};
- "prune-images": {
+ downloadEnvironmentMTLSFile: {
parameters: {
- query?: {
- /** @description Only remove dangling images */
- dangling?: boolean;
- };
+ query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
+ /** @description mTLS asset filename */
+ fileName: string;
};
cookie?: never;
};
- requestBody?: {
- content: {
- "application/json": components["schemas"]["PruneImagesInputBody"];
- };
- };
+ requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
- content: {
- "application/json": components["schemas"]["BaseApiResponsePruneReport"];
- };
+ content?: never;
};
/** @description Error */
default: {
@@ -12726,9 +14772,20 @@ export interface operations {
};
};
};
- "pull-image": {
+ listGitOpsSyncs: {
parameters: {
- query?: never;
+ query?: {
+ /** @description Search query */
+ search?: string;
+ /** @description Column to sort by */
+ sort?: string;
+ /** @description Sort direction */
+ order?: string;
+ /** @description Start index */
+ start?: number;
+ /** @description Items per page */
+ limit?: number;
+ };
header?: never;
path: {
/** @description Environment ID */
@@ -12736,18 +14793,16 @@ export interface operations {
};
cookie?: never;
};
- requestBody: {
- content: {
- "application/json": components["schemas"]["ImagePullOptions"];
- };
- };
+ requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
- content?: never;
+ content: {
+ "application/json": components["schemas"]["GitOpsSyncPaginatedResponse"];
+ };
};
/** @description Error */
default: {
@@ -12760,7 +14815,7 @@ export interface operations {
};
};
};
- "upload-image": {
+ createGitOpsSync: {
parameters: {
query?: never;
header?: never;
@@ -12772,13 +14827,7 @@ export interface operations {
};
requestBody: {
content: {
- "multipart/form-data": {
- /**
- * Format: binary
- * @description Docker image tar archive
- */
- file: string;
- };
+ "application/json": components["schemas"]["GitopsCreateSyncRequest"];
};
};
responses: {
@@ -12788,7 +14837,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseLoadResult"];
+ "application/json": components["schemas"]["BaseApiResponseGitOpsSync"];
};
};
/** @description Error */
@@ -12802,7 +14851,7 @@ export interface operations {
};
};
};
- "get-image-vulnerability-summaries": {
+ importGitOpsSyncs: {
parameters: {
query?: never;
header?: never;
@@ -12814,7 +14863,7 @@ export interface operations {
};
requestBody: {
content: {
- "application/json": components["schemas"]["VulnerabilityScanSummariesRequest"];
+ "application/json": components["schemas"]["GitopsImportGitOpsSyncRequest"][] | null;
};
};
responses: {
@@ -12824,7 +14873,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseScanSummariesResponse"];
+ "application/json": components["schemas"]["BaseApiResponseImportGitOpsSyncResponse"];
};
};
/** @description Error */
@@ -12838,15 +14887,15 @@ export interface operations {
};
};
};
- "get-image": {
+ getGitOpsSync: {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Image ID */
- imageId: string;
+ /** @description Sync ID */
+ syncId: string;
};
cookie?: never;
};
@@ -12858,7 +14907,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseDetailSummary"];
+ "application/json": components["schemas"]["BaseApiResponseGitOpsSync"];
};
};
/** @description Error */
@@ -12872,22 +14921,23 @@ export interface operations {
};
};
};
- "remove-image": {
+ updateGitOpsSync: {
parameters: {
- query?: {
- /** @description Force removal */
- force?: boolean;
- };
+ query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Image ID */
- imageId: string;
+ /** @description Sync ID */
+ syncId: string;
};
cookie?: never;
};
- requestBody?: never;
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["GitopsUpdateSyncRequest"];
+ };
+ };
responses: {
/** @description OK */
200: {
@@ -12895,7 +14945,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ "application/json": components["schemas"]["BaseApiResponseGitOpsSync"];
};
};
/** @description Error */
@@ -12909,15 +14959,15 @@ export interface operations {
};
};
};
- "get-image-vulnerabilities": {
+ deleteGitOpsSync: {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Image ID */
- imageId: string;
+ /** @description Sync ID */
+ syncId: string;
};
cookie?: never;
};
@@ -12929,7 +14979,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseScanResult"];
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
};
};
/** @description Error */
@@ -12943,30 +14993,18 @@ export interface operations {
};
};
};
- "list-image-vulnerabilities": {
+ browseGitOpsSyncFiles: {
parameters: {
query?: {
- /** @description Search query */
- search?: string;
- /** @description Sort field */
- sort?: string;
- /** @description Sort order */
- order?: string;
- /** @description Start offset */
- start?: number;
- /** @description Limit */
- limit?: number;
- /** @description Page number */
- page?: number;
- /** @description Comma-separated severity filter */
- severity?: string;
+ /** @description Path to browse (optional) */
+ path?: string;
};
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Image ID */
- imageId: string;
+ /** @description Sync ID */
+ syncId: string;
};
cookie?: never;
};
@@ -12978,7 +15016,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BasePaginatedVulnerability"];
+ "application/json": components["schemas"]["BaseApiResponseBrowseResponse"];
};
};
/** @description Error */
@@ -12992,15 +15030,15 @@ export interface operations {
};
};
};
- "scan-image-vulnerabilities": {
+ getGitOpsSyncStatus: {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Image ID to scan */
- imageId: string;
+ /** @description Sync ID */
+ syncId: string;
};
cookie?: never;
};
@@ -13012,7 +15050,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseScanResult"];
+ "application/json": components["schemas"]["BaseApiResponseSyncStatus"];
};
};
/** @description Error */
@@ -13026,15 +15064,15 @@ export interface operations {
};
};
};
- "get-image-vulnerability-summary": {
+ performGitOpsSync: {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Image ID */
- imageId: string;
+ /** @description Sync ID */
+ syncId: string;
};
cookie?: never;
};
@@ -13046,7 +15084,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseScanSummary"];
+ "application/json": components["schemas"]["BaseApiResponseSyncResult"];
};
};
/** @description Error */
@@ -13060,7 +15098,7 @@ export interface operations {
};
};
};
- "get-job-schedules": {
+ updateHeartbeat: {
parameters: {
query?: never;
header?: never;
@@ -13078,7 +15116,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["JobscheduleConfig"];
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
};
};
/** @description Error */
@@ -13092,9 +15130,12 @@ export interface operations {
};
};
};
- "update-job-schedules": {
+ "get-update-info-by-refs": {
parameters: {
- query?: never;
+ query?: {
+ /** @description Comma-separated image references */
+ imageRefs?: string;
+ };
header?: never;
path: {
/** @description Environment ID */
@@ -13102,11 +15143,7 @@ export interface operations {
};
cookie?: never;
};
- requestBody: {
- content: {
- "application/json": components["schemas"]["JobscheduleUpdate"];
- };
- };
+ requestBody?: never;
responses: {
/** @description OK */
200: {
@@ -13114,7 +15151,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseConfig"];
+ "application/json": components["schemas"]["BaseApiResponseMapStringUpdateInfo"];
};
};
/** @description Error */
@@ -13128,9 +15165,12 @@ export interface operations {
};
};
};
- "list-jobs": {
+ "check-image-update": {
parameters: {
- query?: never;
+ query?: {
+ /** @description Image reference */
+ imageRef?: string;
+ };
header?: never;
path: {
/** @description Environment ID */
@@ -13146,7 +15186,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["JobscheduleJobListResponse"];
+ "application/json": components["schemas"]["BaseApiResponseResponse"];
};
};
/** @description Error */
@@ -13160,64 +15200,21 @@ export interface operations {
};
};
};
- "run-job": {
+ "check-all-images": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Job ID to run */
- jobId: string;
};
cookie?: never;
};
- requestBody?: never;
- responses: {
- /** @description OK */
- 200: {
- headers: {
- [name: string]: unknown;
- };
- content: {
- "application/json": components["schemas"]["JobscheduleJobRunResponse"];
- };
- };
- /** @description Error */
- default: {
- headers: {
- [name: string]: unknown;
- };
- content: {
- "application/problem+json": components["schemas"]["ErrorModel"];
- };
- };
- };
- };
- "list-networks": {
- parameters: {
- query?: {
- /** @description Search query */
- search?: string;
- /** @description Column to sort by */
- sort?: string;
- /** @description Sort direction (asc or desc) */
- order?: string;
- /** @description Start index for pagination */
- start?: number;
- /** @description Number of items per page */
- limit?: number;
- /** @description Filter by in-use status (true/false) */
- inUse?: string;
- };
- header?: never;
- path: {
- /** @description Environment ID */
- id: string;
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["ImageupdateCheckAllImagesRequest"];
};
- cookie?: never;
};
- requestBody?: never;
responses: {
/** @description OK */
200: {
@@ -13225,7 +15222,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["NetworkPaginatedResponse"];
+ "application/json": components["schemas"]["BaseApiResponseBatchResponse"];
};
};
/** @description Error */
@@ -13239,7 +15236,7 @@ export interface operations {
};
};
};
- "create-network": {
+ "check-multiple-images": {
parameters: {
query?: never;
header?: never;
@@ -13251,7 +15248,7 @@ export interface operations {
};
requestBody: {
content: {
- "application/json": components["schemas"]["NetworkCreateRequest"];
+ "application/json": components["schemas"]["ImageupdateBatchImageUpdateRequest"];
};
};
responses: {
@@ -13261,7 +15258,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["NetworkCreatedApiResponse"];
+ "application/json": components["schemas"]["BaseApiResponseBatchResponse"];
};
};
/** @description Error */
@@ -13275,13 +15272,15 @@ export interface operations {
};
};
};
- "network-counts": {
+ "check-image-update-by-id": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
+ /** @description Image ID */
+ imageId: string;
};
cookie?: never;
};
@@ -13293,7 +15292,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["NetworkCountsApiResponse"];
+ "application/json": components["schemas"]["BaseApiResponseResponse"];
};
};
/** @description Error */
@@ -13307,13 +15306,15 @@ export interface operations {
};
};
};
- "prune-networks": {
+ "check-image-update-by-id-post": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
+ /** @description Image ID */
+ imageId: string;
};
cookie?: never;
};
@@ -13325,7 +15326,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["NetworkPruneResponse"];
+ "application/json": components["schemas"]["BaseApiResponseResponse"];
};
};
/** @description Error */
@@ -13339,7 +15340,7 @@ export interface operations {
};
};
};
- "get-network-topology": {
+ "get-update-summary": {
parameters: {
query?: never;
header?: never;
@@ -13357,7 +15358,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["NetworkTopologyApiResponse"];
+ "application/json": components["schemas"]["BaseApiResponseSummary"];
};
};
/** @description Error */
@@ -13371,18 +15372,28 @@ export interface operations {
};
};
};
- "get-network": {
+ "list-images": {
parameters: {
query?: {
+ /** @description Search query */
+ search?: string;
+ /** @description Column to sort by */
sort?: string;
+ /** @description Sort direction (asc or desc) */
order?: string;
+ /** @description Start index for pagination */
+ start?: number;
+ /** @description Number of items per page */
+ limit?: number;
+ /** @description Filter by in-use status (true/false) */
+ inUse?: string;
+ /** @description Filter by update availability (true/false) */
+ updates?: string;
};
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Network ID */
- networkId: string;
};
cookie?: never;
};
@@ -13394,7 +15405,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["NetworkInspectApiResponse"];
+ "application/json": components["schemas"]["ImagePaginatedResponse"];
};
};
/** @description Error */
@@ -13408,28 +15419,28 @@ export interface operations {
};
};
};
- "delete-network": {
+ "build-image": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Network ID */
- networkId: string;
};
cookie?: never;
};
- requestBody?: never;
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["DockerTypesBuildRequest"];
+ };
+ };
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
- content: {
- "application/json": components["schemas"]["NetworkMessageApiResponse"];
- };
+ content?: never;
};
/** @description Error */
default: {
@@ -13442,9 +15453,24 @@ export interface operations {
};
};
};
- "get-apprise-settings": {
+ "list-image-builds": {
parameters: {
- query?: never;
+ query?: {
+ /** @description Search query */
+ search?: string;
+ /** @description Column to sort by */
+ sort?: string;
+ /** @description Sort direction (asc or desc) */
+ order?: string;
+ /** @description Start index for pagination */
+ start?: number;
+ /** @description Number of items per page */
+ limit?: number;
+ /** @description Filter by status */
+ status?: string;
+ /** @description Filter by provider */
+ provider?: string;
+ };
header?: never;
path: {
/** @description Environment ID */
@@ -13460,7 +15486,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["NotificationAppriseResponse"];
+ "application/json": components["schemas"]["ImageBuildPaginatedResponse"];
};
};
/** @description Error */
@@ -13474,21 +15500,19 @@ export interface operations {
};
};
};
- "create-or-update-apprise-settings": {
+ "get-image-build": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
+ /** @description Build ID */
+ buildId: string;
};
cookie?: never;
};
- requestBody: {
- content: {
- "application/json": components["schemas"]["NotificationAppriseUpdate"];
- };
- };
+ requestBody?: never;
responses: {
/** @description OK */
200: {
@@ -13496,7 +15520,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["NotificationAppriseResponse"];
+ "application/json": components["schemas"]["BaseApiResponseBuildRecord"];
};
};
/** @description Error */
@@ -13510,11 +15534,9 @@ export interface operations {
};
};
};
- "test-apprise-notification": {
+ "get-image-usage-counts": {
parameters: {
- query?: {
- type?: string;
- };
+ query?: never;
header?: never;
path: {
/** @description Environment ID */
@@ -13530,7 +15552,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ "application/json": components["schemas"]["ImageUsageCountsResponse"];
};
};
/** @description Error */
@@ -13544,9 +15566,12 @@ export interface operations {
};
};
};
- "get-all-notification-settings": {
+ "prune-images": {
parameters: {
- query?: never;
+ query?: {
+ /** @description Only remove dangling images */
+ dangling?: boolean;
+ };
header?: never;
path: {
/** @description Environment ID */
@@ -13554,7 +15579,11 @@ export interface operations {
};
cookie?: never;
};
- requestBody?: never;
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["PruneImagesInputBody"];
+ };
+ };
responses: {
/** @description OK */
200: {
@@ -13562,7 +15591,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["NotificationResponse"][] | null;
+ "application/json": components["schemas"]["BaseApiResponsePruneReport"];
};
};
/** @description Error */
@@ -13576,7 +15605,7 @@ export interface operations {
};
};
};
- "create-or-update-notification-settings": {
+ "pull-image": {
parameters: {
query?: never;
header?: never;
@@ -13588,7 +15617,7 @@ export interface operations {
};
requestBody: {
content: {
- "application/json": components["schemas"]["NotificationUpdate"];
+ "application/json": components["schemas"]["ImagePullOptions"];
};
};
responses: {
@@ -13597,9 +15626,7 @@ export interface operations {
headers: {
[name: string]: unknown;
};
- content: {
- "application/json": components["schemas"]["NotificationResponse"];
- };
+ content?: never;
};
/** @description Error */
default: {
@@ -13612,15 +15639,16 @@ export interface operations {
};
};
};
- "get-notification-settings": {
+ "search-images": {
parameters: {
- query?: never;
+ query?: {
+ /** @description Search term */
+ term?: string;
+ };
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Provider */
- provider: string;
};
cookie?: never;
};
@@ -13632,7 +15660,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["NotificationResponse"];
+ "application/json": components["schemas"]["BaseApiResponseListSearchResult"];
};
};
/** @description Error */
@@ -13646,19 +15674,27 @@ export interface operations {
};
};
};
- "delete-notification-settings": {
+ "upload-image": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Provider */
- provider: string;
};
cookie?: never;
};
- requestBody?: never;
+ requestBody: {
+ content: {
+ "multipart/form-data": {
+ /**
+ * Format: binary
+ * @description Docker image tar archive
+ */
+ file: string;
+ };
+ };
+ };
responses: {
/** @description OK */
200: {
@@ -13666,7 +15702,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ "application/json": components["schemas"]["BaseApiResponseLoadResult"];
};
};
/** @description Error */
@@ -13680,21 +15716,21 @@ export interface operations {
};
};
};
- "test-notification": {
+ "get-image-vulnerability-summaries": {
parameters: {
- query?: {
- type?: string;
- };
+ query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Provider */
- provider: string;
};
cookie?: never;
};
- requestBody?: never;
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["VulnerabilityScanSummariesRequest"];
+ };
+ };
responses: {
/** @description OK */
200: {
@@ -13702,7 +15738,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ "application/json": components["schemas"]["BaseApiResponseScanSummariesResponse"];
};
};
/** @description Error */
@@ -13716,24 +15752,15 @@ export interface operations {
};
};
};
- "list-ports": {
+ "get-image": {
parameters: {
- query?: {
- /** @description Search query */
- search?: string;
- /** @description Column to sort by */
- sort?: string;
- /** @description Sort direction (asc or desc) */
- order?: string;
- /** @description Start index for pagination */
- start?: number;
- /** @description Number of items per page */
- limit?: number;
- };
+ query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
+ /** @description Image ID */
+ imageId: string;
};
cookie?: never;
};
@@ -13745,7 +15772,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["PortPaginatedResponse"];
+ "application/json": components["schemas"]["BaseApiResponseDetailSummary"];
};
};
/** @description Error */
@@ -13759,26 +15786,18 @@ export interface operations {
};
};
};
- "list-projects": {
+ "remove-image": {
parameters: {
query?: {
- /** @description Search query */
- search?: string;
- /** @description Column to sort by */
- sort?: string;
- /** @description Sort direction (asc or desc) */
- order?: string;
- /** @description Start index for pagination */
- start?: number;
- /** @description Number of items per page */
- limit?: number;
- /** @description Filter by status (comma-separated: running,stopped,partially running) */
- status?: string;
+ /** @description Force removal */
+ force?: boolean;
};
header?: never;
path: {
/** @description Environment ID */
id: string;
+ /** @description Image ID */
+ imageId: string;
};
cookie?: never;
};
@@ -13790,7 +15809,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["ProjectPaginatedResponse"];
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
};
};
/** @description Error */
@@ -13804,21 +15823,19 @@ export interface operations {
};
};
};
- "create-project": {
+ "get-image-vulnerabilities": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
+ /** @description Image ID */
+ imageId: string;
};
cookie?: never;
};
- requestBody: {
- content: {
- "application/json": components["schemas"]["ProjectCreateProject"];
- };
- };
+ requestBody?: never;
responses: {
/** @description OK */
200: {
@@ -13826,7 +15843,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseCreateReponse"];
+ "application/json": components["schemas"]["BaseApiResponseScanResult"];
};
};
/** @description Error */
@@ -13840,13 +15857,28 @@ export interface operations {
};
};
};
- "get-project-status-counts": {
+ "list-image-vulnerabilities": {
parameters: {
- query?: never;
+ query?: {
+ /** @description Search query */
+ search?: string;
+ /** @description Sort field */
+ sort?: string;
+ /** @description Sort order */
+ order?: string;
+ /** @description Start offset */
+ start?: number;
+ /** @description Limit */
+ limit?: number;
+ /** @description Comma-separated severity filter */
+ severity?: string;
+ };
header?: never;
path: {
/** @description Environment ID */
id: string;
+ /** @description Image ID */
+ imageId: string;
};
cookie?: never;
};
@@ -13858,7 +15890,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseStatusCounts"];
+ "application/json": components["schemas"]["BasePaginatedVulnerability"];
};
};
/** @description Error */
@@ -13872,15 +15904,15 @@ export interface operations {
};
};
};
- "get-project": {
+ "scan-image-vulnerabilities": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Project ID */
- projectId: string;
+ /** @description Image ID to scan */
+ imageId: string;
};
cookie?: never;
};
@@ -13892,7 +15924,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseDetails"];
+ "application/json": components["schemas"]["BaseApiResponseScanResult"];
};
};
/** @description Error */
@@ -13906,23 +15938,19 @@ export interface operations {
};
};
};
- "update-project": {
+ "get-image-vulnerability-summary": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Project ID */
- projectId: string;
+ /** @description Image ID */
+ imageId: string;
};
cookie?: never;
};
- requestBody: {
- content: {
- "application/json": components["schemas"]["ProjectUpdateProject"];
- };
- };
+ requestBody?: never;
responses: {
/** @description OK */
200: {
@@ -13930,7 +15958,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseDetails"];
+ "application/json": components["schemas"]["BaseApiResponseScanSummary"];
};
};
/** @description Error */
@@ -13944,30 +15972,35 @@ export interface operations {
};
};
};
- "build-project-images": {
+ "get-image-attestations": {
parameters: {
- query?: never;
+ query?: {
+ /** @description OCI platform selector, for example linux/amd64 */
+ platform?: string;
+ /** @description Exact in-toto predicate type URI to include */
+ predicateType?: string;
+ /** @description Include verbatim statement JSON bodies */
+ statement?: boolean;
+ };
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Project ID */
- projectId: string;
+ /** @description Image ID or image reference */
+ name: string;
};
cookie?: never;
};
- requestBody?: {
- content: {
- "application/json": components["schemas"]["BuildProjectInputBody"];
- };
- };
+ requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
- content?: never;
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseAttestationList"];
+ };
};
/** @description Error */
default: {
@@ -13980,32 +16013,26 @@ export interface operations {
};
};
};
- "destroy-project": {
+ "export-image": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Project ID */
- projectId: string;
+ /** @description Image ID or image reference */
+ name: string;
};
cookie?: never;
};
- requestBody?: {
- content: {
- "application/json": components["schemas"]["ProjectDestroy"];
- };
- };
+ requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
- content: {
- "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
- };
+ content?: never;
};
/** @description Error */
default: {
@@ -14018,15 +16045,15 @@ export interface operations {
};
};
};
- "down-project": {
+ "get-image-history": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Project ID */
- projectId: string;
+ /** @description Image ID or image reference */
+ name: string;
};
cookie?: never;
};
@@ -14038,7 +16065,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ "application/json": components["schemas"]["BaseApiResponseListHistoryItem"];
};
};
/** @description Error */
@@ -14052,21 +16079,21 @@ export interface operations {
};
};
};
- "update-project-include": {
+ "tag-image": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Project ID */
- projectId: string;
+ /** @description Image ID or image reference */
+ name: string;
};
cookie?: never;
};
requestBody: {
content: {
- "application/json": components["schemas"]["ProjectUpdateIncludeFile"];
+ "application/json": components["schemas"]["ImageTagRequest"];
};
};
responses: {
@@ -14076,7 +16103,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseDetails"];
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
};
};
/** @description Error */
@@ -14090,15 +16117,13 @@ export interface operations {
};
};
};
- "pull-project-images": {
+ "get-job-schedules": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Project ID */
- projectId: string;
};
cookie?: never;
};
@@ -14109,7 +16134,9 @@ export interface operations {
headers: {
[name: string]: unknown;
};
- content?: never;
+ content: {
+ "application/json": components["schemas"]["JobscheduleConfig"];
+ };
};
/** @description Error */
default: {
@@ -14122,19 +16149,21 @@ export interface operations {
};
};
};
- "redeploy-project": {
+ "update-job-schedules": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Project ID */
- projectId: string;
};
cookie?: never;
};
- requestBody?: never;
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["JobscheduleUpdate"];
+ };
+ };
responses: {
/** @description OK */
200: {
@@ -14142,7 +16171,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ "application/json": components["schemas"]["BaseApiResponseConfig"];
};
};
/** @description Error */
@@ -14156,15 +16185,13 @@ export interface operations {
};
};
};
- "restart-project": {
+ "list-jobs": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Project ID */
- projectId: string;
};
cookie?: never;
};
@@ -14176,7 +16203,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ "application/json": components["schemas"]["JobscheduleJobListResponse"];
};
};
/** @description Error */
@@ -14190,30 +16217,28 @@ export interface operations {
};
};
};
- "deploy-project": {
+ "run-job": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Project ID */
- projectId: string;
+ /** @description Job ID to run */
+ jobId: string;
};
cookie?: never;
};
- requestBody?: {
- content: {
- "application/json": components["schemas"]["ProjectDeployOptions"];
- };
- };
+ requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
- content?: never;
+ content: {
+ "application/json": components["schemas"]["JobscheduleJobRunResponse"];
+ };
};
/** @description Error */
default: {
@@ -14226,9 +16251,22 @@ export interface operations {
};
};
};
- "get-settings": {
+ "list-networks": {
parameters: {
- query?: never;
+ query?: {
+ /** @description Search query */
+ search?: string;
+ /** @description Column to sort by */
+ sort?: string;
+ /** @description Sort direction (asc or desc) */
+ order?: string;
+ /** @description Start index for pagination */
+ start?: number;
+ /** @description Number of items per page */
+ limit?: number;
+ /** @description Filter by in-use status (true/false) */
+ inUse?: string;
+ };
header?: never;
path: {
/** @description Environment ID */
@@ -14244,7 +16282,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["SettingsPublicSetting"][] | null;
+ "application/json": components["schemas"]["NetworkPaginatedResponse"];
};
};
/** @description Error */
@@ -14258,7 +16296,7 @@ export interface operations {
};
};
};
- "update-settings": {
+ "create-network": {
parameters: {
query?: never;
header?: never;
@@ -14270,7 +16308,7 @@ export interface operations {
};
requestBody: {
content: {
- "application/json": components["schemas"]["SettingsUpdate"];
+ "application/json": components["schemas"]["NetworkCreateRequest"];
};
};
responses: {
@@ -14280,7 +16318,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseListSettingDto"];
+ "application/json": components["schemas"]["NetworkCreatedApiResponse"];
};
};
/** @description Error */
@@ -14294,7 +16332,7 @@ export interface operations {
};
};
};
- "get-public-settings": {
+ "network-counts": {
parameters: {
query?: never;
header?: never;
@@ -14312,7 +16350,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["SettingsPublicSetting"][] | null;
+ "application/json": components["schemas"]["NetworkCountsApiResponse"];
};
};
/** @description Error */
@@ -14326,7 +16364,7 @@ export interface operations {
};
};
};
- "list-swarm-configs": {
+ "prune-networks": {
parameters: {
query?: never;
header?: never;
@@ -14344,7 +16382,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseListConfigSummary"];
+ "application/json": components["schemas"]["NetworkPruneResponse"];
};
};
/** @description Error */
@@ -14358,7 +16396,7 @@ export interface operations {
};
};
};
- "create-swarm-config": {
+ "get-network-topology": {
parameters: {
query?: never;
header?: never;
@@ -14368,11 +16406,7 @@ export interface operations {
};
cookie?: never;
};
- requestBody: {
- content: {
- "application/json": components["schemas"]["SwarmConfigCreateRequest"];
- };
- };
+ requestBody?: never;
responses: {
/** @description OK */
200: {
@@ -14380,7 +16414,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseConfigSummary"];
+ "application/json": components["schemas"]["NetworkTopologyApiResponse"];
};
};
/** @description Error */
@@ -14394,15 +16428,18 @@ export interface operations {
};
};
};
- "get-swarm-config": {
+ "get-network": {
parameters: {
- query?: never;
+ query?: {
+ sort?: string;
+ order?: string;
+ };
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Config ID */
- configId: string;
+ /** @description Network ID */
+ networkId: string;
};
cookie?: never;
};
@@ -14414,7 +16451,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseConfigSummary"];
+ "application/json": components["schemas"]["NetworkInspectApiResponse"];
};
};
/** @description Error */
@@ -14428,23 +16465,19 @@ export interface operations {
};
};
};
- "update-swarm-config": {
+ "delete-network": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Config ID */
- configId: string;
+ /** @description Network ID */
+ networkId: string;
};
cookie?: never;
};
- requestBody: {
- content: {
- "application/json": components["schemas"]["SwarmConfigUpdateRequest"];
- };
- };
+ requestBody?: never;
responses: {
/** @description OK */
200: {
@@ -14452,7 +16485,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseConfigSummary"];
+ "application/json": components["schemas"]["NetworkMessageApiResponse"];
};
};
/** @description Error */
@@ -14466,15 +16499,13 @@ export interface operations {
};
};
};
- "delete-swarm-config": {
+ "get-all-notification-settings": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Config ID */
- configId: string;
};
cookie?: never;
};
@@ -14486,7 +16517,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ "application/json": components["schemas"]["NotificationResponse"][] | null;
};
};
/** @description Error */
@@ -14500,7 +16531,7 @@ export interface operations {
};
};
};
- "get-swarm-info": {
+ "create-or-update-notification-settings": {
parameters: {
query?: never;
header?: never;
@@ -14510,7 +16541,11 @@ export interface operations {
};
cookie?: never;
};
- requestBody?: never;
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["NotificationUpdate"];
+ };
+ };
responses: {
/** @description OK */
200: {
@@ -14518,7 +16553,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseSwarmInfo"];
+ "application/json": components["schemas"]["NotificationResponse"];
};
};
/** @description Error */
@@ -14532,21 +16567,19 @@ export interface operations {
};
};
};
- "init-swarm": {
+ "get-notification-settings": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
+ /** @description Provider */
+ provider: string;
};
cookie?: never;
};
- requestBody: {
- content: {
- "application/json": components["schemas"]["SwarmSwarmInitRequest"];
- };
- };
+ requestBody?: never;
responses: {
/** @description OK */
200: {
@@ -14554,7 +16587,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseSwarmInitResponse"];
+ "application/json": components["schemas"]["NotificationResponse"];
};
};
/** @description Error */
@@ -14568,21 +16601,19 @@ export interface operations {
};
};
};
- "join-swarm": {
+ "delete-notification-settings": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
+ /** @description Provider */
+ provider: string;
};
cookie?: never;
};
- requestBody: {
- content: {
- "application/json": components["schemas"]["SwarmSwarmJoinRequest"];
- };
- };
+ requestBody?: never;
responses: {
/** @description OK */
200: {
@@ -14604,13 +16635,17 @@ export interface operations {
};
};
};
- "get-swarm-join-tokens": {
+ "test-notification": {
parameters: {
- query?: never;
+ query?: {
+ type?: string;
+ };
header?: never;
path: {
/** @description Environment ID */
id: string;
+ /** @description Provider */
+ provider: string;
};
cookie?: never;
};
@@ -14622,7 +16657,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseSwarmJoinTokensResponse"];
+ "application/json": components["schemas"]["BaseApiResponseTestResponse"];
};
};
/** @description Error */
@@ -14636,9 +16671,20 @@ export interface operations {
};
};
};
- "rotate-swarm-join-tokens": {
+ "list-ports": {
parameters: {
- query?: never;
+ query?: {
+ /** @description Search query */
+ search?: string;
+ /** @description Column to sort by */
+ sort?: string;
+ /** @description Sort direction (asc or desc) */
+ order?: string;
+ /** @description Start index for pagination */
+ start?: number;
+ /** @description Number of items per page */
+ limit?: number;
+ };
header?: never;
path: {
/** @description Environment ID */
@@ -14646,11 +16692,7 @@ export interface operations {
};
cookie?: never;
};
- requestBody: {
- content: {
- "application/json": components["schemas"]["SwarmSwarmRotateJoinTokensRequest"];
- };
- };
+ requestBody?: never;
responses: {
/** @description OK */
200: {
@@ -14658,7 +16700,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ "application/json": components["schemas"]["PortPaginatedResponse"];
};
};
/** @description Error */
@@ -14672,9 +16714,26 @@ export interface operations {
};
};
};
- "leave-swarm": {
+ "list-projects": {
parameters: {
- query?: never;
+ query?: {
+ /** @description Search query */
+ search?: string;
+ /** @description Column to sort by */
+ sort?: string;
+ /** @description Sort direction (asc or desc) */
+ order?: string;
+ /** @description Start index for pagination */
+ start?: number;
+ /** @description Number of items per page */
+ limit?: number;
+ /** @description Filter by status (comma-separated: running,stopped,partially running) */
+ status?: string;
+ /** @description Filter by update status (has_update, up_to_date, error, unknown) */
+ updates?: string;
+ /** @description Archived filter: 'true' (only archived), 'all' (include archived). Default excludes archived. */
+ archived?: string;
+ };
header?: never;
path: {
/** @description Environment ID */
@@ -14682,11 +16741,7 @@ export interface operations {
};
cookie?: never;
};
- requestBody: {
- content: {
- "application/json": components["schemas"]["SwarmSwarmLeaveRequest"];
- };
- };
+ requestBody?: never;
responses: {
/** @description OK */
200: {
@@ -14694,7 +16749,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ "application/json": components["schemas"]["ProjectPaginatedResponse"];
};
};
/** @description Error */
@@ -14708,20 +16763,9 @@ export interface operations {
};
};
};
- "list-swarm-nodes": {
+ "create-project": {
parameters: {
- query?: {
- /** @description Search query */
- search?: string;
- /** @description Column to sort by */
- sort?: string;
- /** @description Sort direction (asc or desc) */
- order?: string;
- /** @description Start index for pagination */
- start?: number;
- /** @description Number of items per page */
- limit?: number;
- };
+ query?: never;
header?: never;
path: {
/** @description Environment ID */
@@ -14729,7 +16773,11 @@ export interface operations {
};
cookie?: never;
};
- requestBody?: never;
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["ProjectCreateProject"];
+ };
+ };
responses: {
/** @description OK */
200: {
@@ -14737,7 +16785,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["SwarmPaginatedResponseNodeSummary"];
+ "application/json": components["schemas"]["BaseApiResponseCreateReponse"];
};
};
/** @description Error */
@@ -14751,15 +16799,13 @@ export interface operations {
};
};
};
- "get-swarm-node": {
+ "get-project-status-counts": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Node ID */
- nodeId: string;
};
cookie?: never;
};
@@ -14771,7 +16817,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseNodeSummary"];
+ "application/json": components["schemas"]["BaseApiResponseStatusCounts"];
};
};
/** @description Error */
@@ -14785,18 +16831,15 @@ export interface operations {
};
};
};
- "delete-swarm-node": {
+ "get-project": {
parameters: {
- query?: {
- /** @description Force node removal */
- force?: boolean;
- };
+ query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Node ID */
- nodeId: string;
+ /** @description Project ID */
+ projectId: string;
};
cookie?: never;
};
@@ -14808,7 +16851,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ "application/json": components["schemas"]["BaseApiResponseDetails"];
};
};
/** @description Error */
@@ -14822,21 +16865,21 @@ export interface operations {
};
};
};
- "update-swarm-node": {
+ "update-project": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Node ID */
- nodeId: string;
+ /** @description Project ID */
+ projectId: string;
};
cookie?: never;
};
requestBody: {
content: {
- "application/json": components["schemas"]["SwarmNodeUpdateRequest"];
+ "application/json": components["schemas"]["ProjectUpdateProject"];
};
};
responses: {
@@ -14846,7 +16889,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ "application/json": components["schemas"]["BaseApiResponseDetails"];
};
};
/** @description Error */
@@ -14860,23 +16903,19 @@ export interface operations {
};
};
};
- "get-swarm-node-agent-deployment": {
+ "archive-project": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Node ID */
- nodeId: string;
+ /** @description Project ID */
+ projectId: string;
};
cookie?: never;
};
- requestBody: {
- content: {
- "application/json": components["schemas"]["GetSwarmNodeAgentDeploymentInputBody"];
- };
- };
+ requestBody?: never;
responses: {
/** @description OK */
200: {
@@ -14884,7 +16923,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseSwarmNodeAgentDeployment"];
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
};
};
/** @description Error */
@@ -14898,28 +16937,30 @@ export interface operations {
};
};
};
- "demote-swarm-node": {
+ "build-project-images": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Node ID */
- nodeId: string;
+ /** @description Project ID */
+ projectId: string;
};
cookie?: never;
};
- requestBody?: never;
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["BuildProjectInputBody"];
+ };
+ };
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
- content: {
- "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
- };
+ content?: never;
};
/** @description Error */
default: {
@@ -14932,15 +16973,15 @@ export interface operations {
};
};
};
- "promote-swarm-node": {
+ "get-project-compose": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Node ID */
- nodeId: string;
+ /** @description Project ID */
+ projectId: string;
};
cookie?: never;
};
@@ -14952,7 +16993,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ "application/json": components["schemas"]["BaseApiResponseDetails"];
};
};
/** @description Error */
@@ -14966,30 +17007,23 @@ export interface operations {
};
};
};
- "list-swarm-node-tasks": {
+ "destroy-project": {
parameters: {
- query?: {
- /** @description Search query */
- search?: string;
- /** @description Column to sort by */
- sort?: string;
- /** @description Sort direction (asc or desc) */
- order?: string;
- /** @description Start index for pagination */
- start?: number;
- /** @description Number of items per page */
- limit?: number;
- };
+ query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Node ID */
- nodeId: string;
+ /** @description Project ID */
+ projectId: string;
};
cookie?: never;
};
- requestBody?: never;
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["ProjectDestroy"];
+ };
+ };
responses: {
/** @description OK */
200: {
@@ -14997,7 +17031,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["SwarmPaginatedResponseTaskSummary"];
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
};
};
/** @description Error */
@@ -15011,13 +17045,15 @@ export interface operations {
};
};
};
- "list-swarm-secrets": {
+ "down-project": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
+ /** @description Project ID */
+ projectId: string;
};
cookie?: never;
};
@@ -15029,7 +17065,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseListSecretSummary"];
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
};
};
/** @description Error */
@@ -15043,21 +17079,22 @@ export interface operations {
};
};
};
- "create-swarm-secret": {
+ "get-project-file": {
parameters: {
- query?: never;
+ query?: {
+ /** @description Path to the file relative to the project */
+ relativePath?: string;
+ };
header?: never;
path: {
/** @description Environment ID */
id: string;
+ /** @description Project ID */
+ projectId: string;
};
cookie?: never;
};
- requestBody: {
- content: {
- "application/json": components["schemas"]["SwarmSecretCreateRequest"];
- };
- };
+ requestBody?: never;
responses: {
/** @description OK */
200: {
@@ -15065,7 +17102,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseSecretSummary"];
+ "application/json": components["schemas"]["BaseApiResponseIncludeFile"];
};
};
/** @description Error */
@@ -15079,15 +17116,15 @@ export interface operations {
};
};
};
- "get-swarm-secret": {
+ "get-project-files": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Secret ID */
- secretId: string;
+ /** @description Project ID */
+ projectId: string;
};
cookie?: never;
};
@@ -15099,7 +17136,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseSecretSummary"];
+ "application/json": components["schemas"]["BaseApiResponseDetails"];
};
};
/** @description Error */
@@ -15113,21 +17150,21 @@ export interface operations {
};
};
};
- "update-swarm-secret": {
+ "update-project-include": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Secret ID */
- secretId: string;
+ /** @description Project ID */
+ projectId: string;
};
cookie?: never;
};
requestBody: {
content: {
- "application/json": components["schemas"]["SwarmSecretUpdateRequest"];
+ "application/json": components["schemas"]["ProjectUpdateIncludeFile"];
};
};
responses: {
@@ -15137,7 +17174,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseSecretSummary"];
+ "application/json": components["schemas"]["BaseApiResponseDetails"];
};
};
/** @description Error */
@@ -15151,15 +17188,15 @@ export interface operations {
};
};
};
- "delete-swarm-secret": {
+ "pull-project-images": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Secret ID */
- secretId: string;
+ /** @description Project ID */
+ projectId: string;
};
cookie?: never;
};
@@ -15170,9 +17207,7 @@ export interface operations {
headers: {
[name: string]: unknown;
};
- content: {
- "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
- };
+ content?: never;
};
/** @description Error */
default: {
@@ -15185,28 +17220,23 @@ export interface operations {
};
};
};
- "list-swarm-services": {
+ "redeploy-project": {
parameters: {
- query?: {
- /** @description Search query */
- search?: string;
- /** @description Column to sort by */
- sort?: string;
- /** @description Sort direction (asc or desc) */
- order?: string;
- /** @description Start index for pagination */
- start?: number;
- /** @description Number of items per page */
- limit?: number;
- };
+ query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
+ /** @description Project ID */
+ projectId: string;
};
cookie?: never;
};
- requestBody?: never;
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["ProjectDeployOptions"];
+ };
+ };
responses: {
/** @description OK */
200: {
@@ -15214,7 +17244,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["SwarmPaginatedResponseServiceSummary"];
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
};
};
/** @description Error */
@@ -15228,21 +17258,19 @@ export interface operations {
};
};
};
- "create-swarm-service": {
+ "restart-project": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
+ /** @description Project ID */
+ projectId: string;
};
cookie?: never;
};
- requestBody: {
- content: {
- "application/json": components["schemas"]["SwarmServiceCreateRequest"];
- };
- };
+ requestBody?: never;
responses: {
/** @description OK */
200: {
@@ -15250,7 +17278,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseServiceCreateResponse"];
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
};
};
/** @description Error */
@@ -15264,15 +17292,15 @@ export interface operations {
};
};
};
- "get-swarm-service": {
+ "get-project-runtime": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Service ID */
- serviceId: string;
+ /** @description Project ID */
+ projectId: string;
};
cookie?: never;
};
@@ -15284,7 +17312,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseServiceInspect"];
+ "application/json": components["schemas"]["BaseApiResponseDetails"];
};
};
/** @description Error */
@@ -15298,23 +17326,19 @@ export interface operations {
};
};
};
- "update-swarm-service": {
+ "unarchive-project": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Service ID */
- serviceId: string;
+ /** @description Project ID */
+ projectId: string;
};
cookie?: never;
};
- requestBody: {
- content: {
- "application/json": components["schemas"]["SwarmServiceUpdateRequest"];
- };
- };
+ requestBody?: never;
responses: {
/** @description OK */
200: {
@@ -15322,7 +17346,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseServiceUpdateResponse"];
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
};
};
/** @description Error */
@@ -15336,28 +17360,30 @@ export interface operations {
};
};
};
- "delete-swarm-service": {
+ "deploy-project": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Service ID */
- serviceId: string;
+ /** @description Project ID */
+ projectId: string;
};
cookie?: never;
};
- requestBody?: never;
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["ProjectDeployOptions"];
+ };
+ };
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
- content: {
- "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
- };
+ content?: never;
};
/** @description Error */
default: {
@@ -15370,19 +17396,23 @@ export interface operations {
};
};
};
- "rollback-swarm-service": {
+ "update-project-services": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Service ID */
- serviceId: string;
+ /** @description Project ID */
+ projectId: string;
};
cookie?: never;
};
- requestBody?: never;
+ requestBody?: {
+ content: {
+ "application/json": components["schemas"]["UpdateProjectServicesInputBody"];
+ };
+ };
responses: {
/** @description OK */
200: {
@@ -15390,7 +17420,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseServiceUpdateResponse"];
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
};
};
/** @description Error */
@@ -15404,23 +17434,19 @@ export interface operations {
};
};
};
- "scale-swarm-service": {
+ "get-project-updates": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Service ID */
- serviceId: string;
+ /** @description Project ID */
+ projectId: string;
};
cookie?: never;
};
- requestBody: {
- content: {
- "application/json": components["schemas"]["SwarmServiceScaleRequest"];
- };
- };
+ requestBody?: never;
responses: {
/** @description OK */
200: {
@@ -15428,7 +17454,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseServiceUpdateResponse"];
+ "application/json": components["schemas"]["BaseApiResponseDetails"];
};
};
/** @description Error */
@@ -15442,26 +17468,13 @@ export interface operations {
};
};
};
- "list-swarm-service-tasks": {
+ "get-settings": {
parameters: {
- query?: {
- /** @description Search query */
- search?: string;
- /** @description Column to sort by */
- sort?: string;
- /** @description Sort direction (asc or desc) */
- order?: string;
- /** @description Start index for pagination */
- start?: number;
- /** @description Number of items per page */
- limit?: number;
- };
+ query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Service ID */
- serviceId: string;
};
cookie?: never;
};
@@ -15473,7 +17486,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["SwarmPaginatedResponseTaskSummary"];
+ "application/json": components["schemas"]["SettingsPublicSetting"][] | null;
};
};
/** @description Error */
@@ -15487,7 +17500,7 @@ export interface operations {
};
};
};
- "update-swarm-spec": {
+ "update-settings": {
parameters: {
query?: never;
header?: never;
@@ -15499,7 +17512,7 @@ export interface operations {
};
requestBody: {
content: {
- "application/json": components["schemas"]["SwarmSwarmUpdateRequest"];
+ "application/json": components["schemas"]["SettingsUpdate"];
};
};
responses: {
@@ -15509,7 +17522,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ "application/json": components["schemas"]["BaseApiResponseListSettingDto"];
};
};
/** @description Error */
@@ -15523,20 +17536,9 @@ export interface operations {
};
};
};
- "list-swarm-stacks": {
+ "get-public-settings": {
parameters: {
- query?: {
- /** @description Search query */
- search?: string;
- /** @description Column to sort by */
- sort?: string;
- /** @description Sort direction (asc or desc) */
- order?: string;
- /** @description Start index for pagination */
- start?: number;
- /** @description Number of items per page */
- limit?: number;
- };
+ query?: never;
header?: never;
path: {
/** @description Environment ID */
@@ -15552,7 +17554,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["SwarmPaginatedResponseStackSummary"];
+ "application/json": components["schemas"]["SettingsPublicSetting"][] | null;
};
};
/** @description Error */
@@ -15566,7 +17568,7 @@ export interface operations {
};
};
};
- "deploy-swarm-stack": {
+ "list-swarm-configs": {
parameters: {
query?: never;
header?: never;
@@ -15576,11 +17578,7 @@ export interface operations {
};
cookie?: never;
};
- requestBody: {
- content: {
- "application/json": components["schemas"]["SwarmStackDeployRequest"];
- };
- };
+ requestBody?: never;
responses: {
/** @description OK */
200: {
@@ -15588,7 +17586,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseStackDeployResponse"];
+ "application/json": components["schemas"]["BaseApiResponseListConfigSummary"];
};
};
/** @description Error */
@@ -15602,7 +17600,7 @@ export interface operations {
};
};
};
- "render-swarm-stack-config": {
+ "create-swarm-config": {
parameters: {
query?: never;
header?: never;
@@ -15614,7 +17612,7 @@ export interface operations {
};
requestBody: {
content: {
- "application/json": components["schemas"]["SwarmStackRenderConfigRequest"];
+ "application/json": components["schemas"]["SwarmConfigCreateRequest"];
};
};
responses: {
@@ -15624,7 +17622,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseStackRenderConfigResponse"];
+ "application/json": components["schemas"]["BaseApiResponseConfigSummary"];
};
};
/** @description Error */
@@ -15638,15 +17636,15 @@ export interface operations {
};
};
};
- "get-swarm-stack": {
+ "get-swarm-config": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Stack name */
- name: string;
+ /** @description Config ID */
+ configId: string;
};
cookie?: never;
};
@@ -15658,7 +17656,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseStackInspect"];
+ "application/json": components["schemas"]["BaseApiResponseConfigSummary"];
};
};
/** @description Error */
@@ -15672,28 +17670,30 @@ export interface operations {
};
};
};
- "delete-swarm-stack": {
+ "update-swarm-config": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Stack name */
- name: string;
+ /** @description Config ID */
+ configId: string;
};
cookie?: never;
};
- requestBody?: never;
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["SwarmConfigUpdateRequest"];
+ };
+ };
responses: {
- /** @description OK */
- 200: {
+ /** @description No Content */
+ 204: {
headers: {
[name: string]: unknown;
};
- content: {
- "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
- };
+ content?: never;
};
/** @description Error */
default: {
@@ -15706,26 +17706,15 @@ export interface operations {
};
};
};
- "list-swarm-stack-services": {
+ "delete-swarm-config": {
parameters: {
- query?: {
- /** @description Search query */
- search?: string;
- /** @description Column to sort by */
- sort?: string;
- /** @description Sort direction (asc or desc) */
- order?: string;
- /** @description Start index for pagination */
- start?: number;
- /** @description Number of items per page */
- limit?: number;
- };
+ query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Stack name */
- name: string;
+ /** @description Config ID */
+ configId: string;
};
cookie?: never;
};
@@ -15737,7 +17726,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["SwarmPaginatedResponseServiceSummary"];
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
};
};
/** @description Error */
@@ -15751,15 +17740,13 @@ export interface operations {
};
};
};
- "get-swarm-stack-source": {
+ "get-swarm-info": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Stack name */
- name: string;
};
cookie?: never;
};
@@ -15771,7 +17758,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseStackSource"];
+ "application/json": components["schemas"]["BaseApiResponseSwarmInfo"];
};
};
/** @description Error */
@@ -15785,30 +17772,21 @@ export interface operations {
};
};
};
- "list-swarm-stack-tasks": {
+ "init-swarm": {
parameters: {
- query?: {
- /** @description Search query */
- search?: string;
- /** @description Column to sort by */
- sort?: string;
- /** @description Sort direction (asc or desc) */
- order?: string;
- /** @description Start index for pagination */
- start?: number;
- /** @description Number of items per page */
- limit?: number;
- };
+ query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Stack name */
- name: string;
};
cookie?: never;
};
- requestBody?: never;
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["SwarmSwarmInitRequest"];
+ };
+ };
responses: {
/** @description OK */
200: {
@@ -15816,7 +17794,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["SwarmPaginatedResponseTaskSummary"];
+ "application/json": components["schemas"]["BaseApiResponseSwarmInitResponse"];
};
};
/** @description Error */
@@ -15830,7 +17808,7 @@ export interface operations {
};
};
};
- "get-swarm-status": {
+ "join-swarm": {
parameters: {
query?: never;
header?: never;
@@ -15840,7 +17818,11 @@ export interface operations {
};
cookie?: never;
};
- requestBody?: never;
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["SwarmSwarmJoinRequest"];
+ };
+ };
responses: {
/** @description OK */
200: {
@@ -15848,7 +17830,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseRuntimeStatus"];
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
};
};
/** @description Error */
@@ -15862,20 +17844,9 @@ export interface operations {
};
};
};
- "list-swarm-tasks": {
+ "get-swarm-join-tokens": {
parameters: {
- query?: {
- /** @description Search query */
- search?: string;
- /** @description Column to sort by */
- sort?: string;
- /** @description Sort direction (asc or desc) */
- order?: string;
- /** @description Start index for pagination */
- start?: number;
- /** @description Number of items per page */
- limit?: number;
- };
+ query?: never;
header?: never;
path: {
/** @description Environment ID */
@@ -15891,7 +17862,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["SwarmPaginatedResponseTaskSummary"];
+ "application/json": components["schemas"]["BaseApiResponseSwarmJoinTokensResponse"];
};
};
/** @description Error */
@@ -15905,7 +17876,7 @@ export interface operations {
};
};
};
- "unlock-swarm": {
+ "rotate-swarm-join-tokens": {
parameters: {
query?: never;
header?: never;
@@ -15917,7 +17888,7 @@ export interface operations {
};
requestBody: {
content: {
- "application/json": components["schemas"]["SwarmSwarmUnlockRequest"];
+ "application/json": components["schemas"]["SwarmSwarmRotateJoinTokensRequest"];
};
};
responses: {
@@ -15941,7 +17912,7 @@ export interface operations {
};
};
};
- "get-swarm-unlock-key": {
+ "leave-swarm": {
parameters: {
query?: never;
header?: never;
@@ -15951,7 +17922,11 @@ export interface operations {
};
cookie?: never;
};
- requestBody?: never;
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["SwarmSwarmLeaveRequest"];
+ };
+ };
responses: {
/** @description OK */
200: {
@@ -15959,7 +17934,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseSwarmUnlockKeyResponse"];
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
};
};
/** @description Error */
@@ -15973,9 +17948,20 @@ export interface operations {
};
};
};
- syncEnvironment: {
+ "list-swarm-nodes": {
parameters: {
- query?: never;
+ query?: {
+ /** @description Search query */
+ search?: string;
+ /** @description Column to sort by */
+ sort?: string;
+ /** @description Sort direction (asc or desc) */
+ order?: string;
+ /** @description Start index for pagination */
+ start?: number;
+ /** @description Number of items per page */
+ limit?: number;
+ };
header?: never;
path: {
/** @description Environment ID */
@@ -15991,7 +17977,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ "application/json": components["schemas"]["SwarmPaginatedResponseNodeSummary"];
};
};
/** @description Error */
@@ -16005,13 +17991,15 @@ export interface operations {
};
};
};
- "start-all-containers": {
+ "get-swarm-node": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
+ /** @description Node ID */
+ nodeId: string;
};
cookie?: never;
};
@@ -16023,7 +18011,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseActionResult"];
+ "application/json": components["schemas"]["BaseApiResponseNodeSummary"];
};
};
/** @description Error */
@@ -16037,13 +18025,18 @@ export interface operations {
};
};
};
- "start-all-stopped-containers": {
+ "delete-swarm-node": {
parameters: {
- query?: never;
+ query?: {
+ /** @description Force node removal */
+ force?: boolean;
+ };
header?: never;
path: {
/** @description Environment ID */
id: string;
+ /** @description Node ID */
+ nodeId: string;
};
cookie?: never;
};
@@ -16055,7 +18048,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseActionResult"];
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
};
};
/** @description Error */
@@ -16069,17 +18062,23 @@ export interface operations {
};
};
};
- "stop-all-containers": {
+ "update-swarm-node": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
+ /** @description Node ID */
+ nodeId: string;
};
cookie?: never;
};
- requestBody?: never;
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["SwarmNodeUpdateRequest"];
+ };
+ };
responses: {
/** @description OK */
200: {
@@ -16087,7 +18086,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseActionResult"];
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
};
};
/** @description Error */
@@ -16101,19 +18100,21 @@ export interface operations {
};
};
};
- "convert-docker-run": {
+ "get-swarm-node-agent-deployment": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
+ /** @description Node ID */
+ nodeId: string;
};
cookie?: never;
};
requestBody: {
content: {
- "application/json": components["schemas"]["SystemConvertDockerRunRequest"];
+ "application/json": components["schemas"]["GetSwarmNodeAgentDeploymentInputBody"];
};
};
responses: {
@@ -16123,7 +18124,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["SystemConvertDockerRunResponse"];
+ "application/json": components["schemas"]["BaseApiResponseSwarmNodeAgentDeployment"];
};
};
/** @description Error */
@@ -16137,13 +18138,15 @@ export interface operations {
};
};
};
- "get-docker-info": {
+ "demote-swarm-node": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
+ /** @description Node ID */
+ nodeId: string;
};
cookie?: never;
};
@@ -16155,7 +18158,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["DockerinfoInfo"];
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
};
};
/** @description Error */
@@ -16169,13 +18172,15 @@ export interface operations {
};
};
};
- "system-health": {
+ "promote-swarm-node": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
+ /** @description Node ID */
+ nodeId: string;
};
cookie?: never;
};
@@ -16186,7 +18191,9 @@ export interface operations {
headers: {
[name: string]: unknown;
};
- content?: never;
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ };
};
/** @description Error */
default: {
@@ -16199,21 +18206,30 @@ export interface operations {
};
};
};
- "prune-all": {
+ "list-swarm-node-tasks": {
parameters: {
- query?: never;
+ query?: {
+ /** @description Search query */
+ search?: string;
+ /** @description Column to sort by */
+ sort?: string;
+ /** @description Sort direction (asc or desc) */
+ order?: string;
+ /** @description Start index for pagination */
+ start?: number;
+ /** @description Number of items per page */
+ limit?: number;
+ };
header?: never;
path: {
/** @description Environment ID */
id: string;
+ /** @description Node ID */
+ nodeId: string;
};
cookie?: never;
};
- requestBody: {
- content: {
- "application/json": components["schemas"]["SystemPruneAllRequest"];
- };
- };
+ requestBody?: never;
responses: {
/** @description OK */
200: {
@@ -16221,7 +18237,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponsePruneAllResult"];
+ "application/json": components["schemas"]["SwarmPaginatedResponseTaskSummary"];
};
};
/** @description Error */
@@ -16235,7 +18251,7 @@ export interface operations {
};
};
};
- "trigger-upgrade": {
+ "list-swarm-secrets": {
parameters: {
query?: never;
header?: never;
@@ -16247,13 +18263,13 @@ export interface operations {
};
requestBody?: never;
responses: {
- /** @description Accepted */
- 202: {
+ /** @description OK */
+ 200: {
headers: {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ "application/json": components["schemas"]["BaseApiResponseListSecretSummary"];
};
};
/** @description Error */
@@ -16267,7 +18283,7 @@ export interface operations {
};
};
};
- "check-upgrade": {
+ "create-swarm-secret": {
parameters: {
query?: never;
header?: never;
@@ -16277,7 +18293,11 @@ export interface operations {
};
cookie?: never;
};
- requestBody?: never;
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["SwarmSecretCreateRequest"];
+ };
+ };
responses: {
/** @description OK */
200: {
@@ -16285,7 +18305,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["UpgradeCheckResultData"];
+ "application/json": components["schemas"]["BaseApiResponseSecretSummary"];
};
};
/** @description Error */
@@ -16299,13 +18319,15 @@ export interface operations {
};
};
};
- getGlobalVariables: {
+ "get-swarm-secret": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
+ /** @description Secret ID */
+ secretId: string;
};
cookie?: never;
};
@@ -16317,7 +18339,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseListVariable"];
+ "application/json": components["schemas"]["BaseApiResponseSecretSummary"];
};
};
/** @description Error */
@@ -16331,30 +18353,30 @@ export interface operations {
};
};
};
- updateGlobalVariables: {
+ "update-swarm-secret": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
+ /** @description Secret ID */
+ secretId: string;
};
cookie?: never;
};
requestBody: {
content: {
- "application/json": components["schemas"]["EnvSummary"];
+ "application/json": components["schemas"]["SwarmSecretUpdateRequest"];
};
};
responses: {
- /** @description OK */
- 200: {
+ /** @description No Content */
+ 204: {
headers: {
[name: string]: unknown;
};
- content: {
- "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
- };
+ content?: never;
};
/** @description Error */
default: {
@@ -16367,21 +18389,19 @@ export interface operations {
};
};
};
- testConnection: {
+ "delete-swarm-secret": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
+ /** @description Secret ID */
+ secretId: string;
};
cookie?: never;
};
- requestBody?: {
- content: {
- "application/json": components["schemas"]["EnvironmentTestConnectionRequest"];
- };
- };
+ requestBody?: never;
responses: {
/** @description OK */
200: {
@@ -16389,7 +18409,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseTest"];
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
};
};
/** @description Error */
@@ -16403,10 +18423,18 @@ export interface operations {
};
};
};
- "get-updater-history": {
+ "list-swarm-services": {
parameters: {
query?: {
- /** @description Number of history entries to return */
+ /** @description Search query */
+ search?: string;
+ /** @description Column to sort by */
+ sort?: string;
+ /** @description Sort direction (asc or desc) */
+ order?: string;
+ /** @description Start index for pagination */
+ start?: number;
+ /** @description Number of items per page */
limit?: number;
};
header?: never;
@@ -16424,7 +18452,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseListAutoUpdateRecord"];
+ "application/json": components["schemas"]["SwarmPaginatedResponseServiceSummary"];
};
};
/** @description Error */
@@ -16438,7 +18466,7 @@ export interface operations {
};
};
};
- "run-updater": {
+ "create-swarm-service": {
parameters: {
query?: never;
header?: never;
@@ -16448,9 +18476,9 @@ export interface operations {
};
cookie?: never;
};
- requestBody?: {
+ requestBody: {
content: {
- "application/json": components["schemas"]["UpdaterOptions"];
+ "application/json": components["schemas"]["SwarmServiceCreateRequest"];
};
};
responses: {
@@ -16460,7 +18488,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseResult"];
+ "application/json": components["schemas"]["BaseApiResponseServiceCreateResponse"];
};
};
/** @description Error */
@@ -16474,13 +18502,15 @@ export interface operations {
};
};
};
- "get-updater-status": {
+ "get-swarm-service": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
+ /** @description Service ID */
+ serviceId: string;
};
cookie?: never;
};
@@ -16492,7 +18522,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseStatus"];
+ "application/json": components["schemas"]["BaseApiResponseServiceInspect"];
};
};
/** @description Error */
@@ -16506,17 +18536,23 @@ export interface operations {
};
};
};
- getEnvironmentVersion: {
+ "update-swarm-service": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
+ /** @description Service ID */
+ serviceId: string;
};
cookie?: never;
};
- requestBody?: never;
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["SwarmServiceUpdateRequest"];
+ };
+ };
responses: {
/** @description OK */
200: {
@@ -16524,7 +18560,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseInfo"];
+ "application/json": components["schemas"]["BaseApiResponseServiceUpdateResponse"];
};
};
/** @description Error */
@@ -16538,28 +18574,15 @@ export interface operations {
};
};
};
- "list-volumes": {
+ "delete-swarm-service": {
parameters: {
- query?: {
- /** @description Search query */
- search?: string;
- /** @description Column to sort by */
- sort?: string;
- /** @description Sort direction (asc or desc) */
- order?: string;
- /** @description Start index for pagination */
- start?: number;
- /** @description Number of items per page */
- limit?: number;
- /** @description Filter by in-use status (true/false) */
- inUse?: string;
- /** @description Include internal volumes */
- includeInternal?: boolean;
- };
+ query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
+ /** @description Service ID */
+ serviceId: string;
};
cookie?: never;
};
@@ -16571,7 +18594,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["VolumePaginatedResponse"];
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
};
};
/** @description Error */
@@ -16585,21 +18608,19 @@ export interface operations {
};
};
};
- "create-volume": {
+ "rollback-swarm-service": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
+ /** @description Service ID */
+ serviceId: string;
};
cookie?: never;
};
- requestBody: {
- content: {
- "application/json": components["schemas"]["VolumeCreate"];
- };
- };
+ requestBody?: never;
responses: {
/** @description OK */
200: {
@@ -16607,7 +18628,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseVolume"];
+ "application/json": components["schemas"]["BaseApiResponseServiceUpdateResponse"];
};
};
/** @description Error */
@@ -16621,19 +18642,23 @@ export interface operations {
};
};
};
- "delete-volume-backup": {
+ "scale-swarm-service": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Backup ID */
- backupId: string;
+ /** @description Service ID */
+ serviceId: string;
};
cookie?: never;
};
- requestBody?: never;
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["SwarmServiceScaleRequest"];
+ };
+ };
responses: {
/** @description OK */
200: {
@@ -16641,7 +18666,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ "application/json": components["schemas"]["BaseApiResponseServiceUpdateResponse"];
};
};
/** @description Error */
@@ -16655,47 +18680,26 @@ export interface operations {
};
};
};
- "download-volume-backup": {
+ "list-swarm-service-tasks": {
parameters: {
- query?: never;
- header?: never;
- path: {
- /** @description Environment ID */
- id: string;
- /** @description Backup ID */
- backupId: string;
- };
- cookie?: never;
- };
- requestBody?: never;
- responses: {
- /** @description OK */
- 200: {
- headers: {
- [name: string]: unknown;
- };
- content?: never;
- };
- /** @description Error */
- default: {
- headers: {
- [name: string]: unknown;
- };
- content: {
- "application/problem+json": components["schemas"]["ErrorModel"];
- };
+ query?: {
+ /** @description Search query */
+ search?: string;
+ /** @description Column to sort by */
+ sort?: string;
+ /** @description Sort direction (asc or desc) */
+ order?: string;
+ /** @description Start index for pagination */
+ start?: number;
+ /** @description Number of items per page */
+ limit?: number;
};
- };
- };
- "list-backup-files": {
- parameters: {
- query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Backup ID */
- backupId: string;
+ /** @description Service ID */
+ serviceId: string;
};
cookie?: never;
};
@@ -16707,7 +18711,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseListString"];
+ "application/json": components["schemas"]["SwarmPaginatedResponseTaskSummary"];
};
};
/** @description Error */
@@ -16721,22 +18725,21 @@ export interface operations {
};
};
};
- "backup-has-path": {
+ "update-swarm-spec": {
parameters: {
- query?: {
- /** @description Path to check */
- path?: string;
- };
+ query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Backup ID */
- backupId: string;
};
cookie?: never;
};
- requestBody?: never;
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["SwarmSwarmUpdateRequest"];
+ };
+ };
responses: {
/** @description OK */
200: {
@@ -16744,7 +18747,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseBackupHasPathResponse"];
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
};
};
/** @description Error */
@@ -16758,11 +18761,19 @@ export interface operations {
};
};
};
- "get-volume-usage-counts": {
+ "list-swarm-stacks": {
parameters: {
query?: {
- /** @description Include internal volumes */
- includeInternal?: boolean;
+ /** @description Search query */
+ search?: string;
+ /** @description Column to sort by */
+ sort?: string;
+ /** @description Sort direction (asc or desc) */
+ order?: string;
+ /** @description Start index for pagination */
+ start?: number;
+ /** @description Number of items per page */
+ limit?: number;
};
header?: never;
path: {
@@ -16779,7 +18790,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseVolumeUsageCountsData"];
+ "application/json": components["schemas"]["SwarmPaginatedResponseStackSummary"];
};
};
/** @description Error */
@@ -16793,7 +18804,7 @@ export interface operations {
};
};
};
- "prune-volumes": {
+ "deploy-swarm-stack": {
parameters: {
query?: never;
header?: never;
@@ -16803,7 +18814,11 @@ export interface operations {
};
cookie?: never;
};
- requestBody?: never;
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["SwarmStackDeployRequest"];
+ };
+ };
responses: {
/** @description OK */
200: {
@@ -16811,7 +18826,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseVolumePruneReportData"];
+ "application/json": components["schemas"]["BaseApiResponseStackDeployResponse"];
};
};
/** @description Error */
@@ -16825,7 +18840,7 @@ export interface operations {
};
};
};
- "get-volume-sizes": {
+ "render-swarm-stack-config": {
parameters: {
query?: never;
header?: never;
@@ -16835,7 +18850,11 @@ export interface operations {
};
cookie?: never;
};
- requestBody?: never;
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["SwarmStackRenderConfigRequest"];
+ };
+ };
responses: {
/** @description OK */
200: {
@@ -16843,7 +18862,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseListVolumeSizeInfo"];
+ "application/json": components["schemas"]["BaseApiResponseStackRenderConfigResponse"];
};
};
/** @description Error */
@@ -16857,15 +18876,15 @@ export interface operations {
};
};
};
- "get-volume": {
+ "get-swarm-stack": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Volume name */
- volumeName: string;
+ /** @description Stack name */
+ name: string;
};
cookie?: never;
};
@@ -16877,7 +18896,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseVolume"];
+ "application/json": components["schemas"]["BaseApiResponseStackInspect"];
};
};
/** @description Error */
@@ -16891,18 +18910,15 @@ export interface operations {
};
};
};
- "remove-volume": {
+ "delete-swarm-stack": {
parameters: {
- query?: {
- /** @description Force removal */
- force?: boolean;
- };
+ query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Volume name */
- volumeName: string;
+ /** @description Stack name */
+ name: string;
};
cookie?: never;
};
@@ -16928,26 +18944,26 @@ export interface operations {
};
};
};
- "list-volume-backups": {
+ "list-swarm-stack-services": {
parameters: {
query?: {
/** @description Search query */
search?: string;
/** @description Column to sort by */
sort?: string;
- /** @description Sort direction */
+ /** @description Sort direction (asc or desc) */
order?: string;
- /** @description Start index */
+ /** @description Start index for pagination */
start?: number;
- /** @description Limit */
+ /** @description Number of items per page */
limit?: number;
};
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Volume name */
- volumeName: string;
+ /** @description Stack name */
+ name: string;
};
cookie?: never;
};
@@ -16959,7 +18975,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["VolumeBackupPaginatedResponse"];
+ "application/json": components["schemas"]["SwarmPaginatedResponseServiceSummary"];
};
};
/** @description Error */
@@ -16973,15 +18989,15 @@ export interface operations {
};
};
};
- "create-volume-backup": {
+ "get-swarm-stack-source": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Volume name */
- volumeName: string;
+ /** @description Stack name */
+ name: string;
};
cookie?: never;
};
@@ -16993,7 +19009,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseVolumeBackup"];
+ "application/json": components["schemas"]["BaseApiResponseStackSource"];
};
};
/** @description Error */
@@ -17007,27 +19023,21 @@ export interface operations {
};
};
};
- "upload-volume-backup": {
+ "update-swarm-stack-source": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Volume name */
- volumeName: string;
+ /** @description Stack name */
+ name: string;
};
cookie?: never;
};
requestBody: {
content: {
- "multipart/form-data": {
- /**
- * Format: binary
- * @description Backup archive (tar.gz)
- */
- file: string;
- };
+ "application/json": components["schemas"]["SwarmStackSourceUpdateRequest"];
};
};
responses: {
@@ -17037,7 +19047,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ "application/json": components["schemas"]["BaseApiResponseStackSource"];
};
};
/** @description Error */
@@ -17051,17 +19061,26 @@ export interface operations {
};
};
};
- "restore-volume-backup": {
+ "list-swarm-stack-tasks": {
parameters: {
- query?: never;
+ query?: {
+ /** @description Search query */
+ search?: string;
+ /** @description Column to sort by */
+ sort?: string;
+ /** @description Sort direction (asc or desc) */
+ order?: string;
+ /** @description Start index for pagination */
+ start?: number;
+ /** @description Number of items per page */
+ limit?: number;
+ };
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Volume name */
- volumeName: string;
- /** @description Backup ID */
- backupId: string;
+ /** @description Stack name */
+ name: string;
};
cookie?: never;
};
@@ -17073,7 +19092,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ "application/json": components["schemas"]["SwarmPaginatedResponseTaskSummary"];
};
};
/** @description Error */
@@ -17087,25 +19106,17 @@ export interface operations {
};
};
};
- "restore-volume-backup-files": {
+ "get-swarm-status": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Volume name */
- volumeName: string;
- /** @description Backup ID */
- backupId: string;
};
cookie?: never;
};
- requestBody: {
- content: {
- "application/json": components["schemas"]["RestoreBackupFilesInputBody"];
- };
- };
+ requestBody?: never;
responses: {
/** @description OK */
200: {
@@ -17113,7 +19124,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ "application/json": components["schemas"]["BaseApiResponseRuntimeStatus"];
};
};
/** @description Error */
@@ -17127,18 +19138,24 @@ export interface operations {
};
};
};
- "browse-volume-directory": {
+ "list-swarm-tasks": {
parameters: {
query?: {
- /** @description Directory path to browse */
- path?: string;
+ /** @description Search query */
+ search?: string;
+ /** @description Column to sort by */
+ sort?: string;
+ /** @description Sort direction (asc or desc) */
+ order?: string;
+ /** @description Start index for pagination */
+ start?: number;
+ /** @description Number of items per page */
+ limit?: number;
};
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Volume name */
- volumeName: string;
};
cookie?: never;
};
@@ -17150,7 +19167,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseListFileEntry"];
+ "application/json": components["schemas"]["SwarmPaginatedResponseTaskSummary"];
};
};
/** @description Error */
@@ -17164,31 +19181,30 @@ export interface operations {
};
};
};
- "delete-volume-file": {
+ "unlock-swarm": {
parameters: {
- query?: {
- /** @description File or directory path to delete */
- path?: string;
- };
+ query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Volume name */
- volumeName: string;
};
cookie?: never;
};
- requestBody?: never;
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["SwarmSwarmUnlockRequest"];
+ };
+ };
responses: {
- /** @description No Content */
- 204: {
+ /** @description OK */
+ 200: {
headers: {
- Data?: components["schemas"]["BaseMessageResponse"];
- Success?: boolean;
[name: string]: unknown;
};
- content?: never;
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ };
};
/** @description Error */
default: {
@@ -17201,20 +19217,13 @@ export interface operations {
};
};
};
- "get-volume-file-content": {
+ "get-swarm-unlock-key": {
parameters: {
- query?: {
- /** @description File path */
- path?: string;
- /** @description Maximum bytes to read (default 1MB) */
- maxBytes?: number;
- };
+ query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Volume name */
- volumeName: string;
};
cookie?: never;
};
@@ -17226,7 +19235,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseFileContentResponse"];
+ "application/json": components["schemas"]["BaseApiResponseSwarmUnlockKeyResponse"];
};
};
/** @description Error */
@@ -17240,18 +19249,13 @@ export interface operations {
};
};
};
- "download-volume-file": {
+ syncEnvironment: {
parameters: {
- query?: {
- /** @description File path */
- path?: string;
- };
+ query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Volume name */
- volumeName: string;
};
cookie?: never;
};
@@ -17262,7 +19266,9 @@ export interface operations {
headers: {
[name: string]: unknown;
};
- content?: never;
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ };
};
/** @description Error */
default: {
@@ -17275,31 +19281,26 @@ export interface operations {
};
};
};
- "create-volume-directory": {
+ "start-all-containers": {
parameters: {
- query?: {
- /** @description Directory path to create */
- path?: string;
- };
+ query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Volume name */
- volumeName: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
- /** @description No Content */
- 204: {
+ /** @description OK */
+ 200: {
headers: {
- Data?: components["schemas"]["BaseMessageResponse"];
- Success?: boolean;
[name: string]: unknown;
};
- content?: never;
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseActionResult"];
+ };
};
/** @description Error */
default: {
@@ -17312,41 +19313,26 @@ export interface operations {
};
};
};
- "upload-volume-file": {
+ "start-all-stopped-containers": {
parameters: {
- query?: {
- /** @description Destination path */
- path?: string;
- };
+ query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Volume name */
- volumeName: string;
};
cookie?: never;
};
- requestBody: {
- content: {
- "multipart/form-data": {
- /**
- * Format: binary
- * @description File to upload
- */
- file: string;
- };
- };
- };
+ requestBody?: never;
responses: {
- /** @description No Content */
- 204: {
+ /** @description OK */
+ 200: {
headers: {
- Data?: components["schemas"]["BaseMessageResponse"];
- Success?: boolean;
[name: string]: unknown;
};
- content?: never;
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseActionResult"];
+ };
};
/** @description Error */
default: {
@@ -17359,15 +19345,13 @@ export interface operations {
};
};
};
- "get-volume-usage": {
+ "stop-all-containers": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Volume name */
- volumeName: string;
};
cookie?: never;
};
@@ -17379,7 +19363,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseVolumeUsageResponse"];
+ "application/json": components["schemas"]["BaseApiResponseActionResult"];
};
};
/** @description Error */
@@ -17393,26 +19377,9 @@ export interface operations {
};
};
};
- "list-environment-vulnerabilities": {
+ "convert-docker-run": {
parameters: {
- query?: {
- /** @description Search query */
- search?: string;
- /** @description Sort field */
- sort?: string;
- /** @description Sort order */
- order?: string;
- /** @description Start offset */
- start?: number;
- /** @description Limit */
- limit?: number;
- /** @description Page number */
- page?: number;
- /** @description Comma-separated severity filter */
- severity?: string;
- /** @description Filter by image/repo name (substring) */
- imageName?: string;
- };
+ query?: never;
header?: never;
path: {
/** @description Environment ID */
@@ -17420,7 +19387,11 @@ export interface operations {
};
cookie?: never;
};
- requestBody?: never;
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["SystemConvertDockerRunRequest"];
+ };
+ };
responses: {
/** @description OK */
200: {
@@ -17428,7 +19399,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BasePaginatedVulnerabilityWithImage"];
+ "application/json": components["schemas"]["SystemConvertDockerRunResponse"];
};
};
/** @description Error */
@@ -17442,7 +19413,7 @@ export interface operations {
};
};
};
- "ignore-vulnerability": {
+ "get-docker-info": {
parameters: {
query?: never;
header?: never;
@@ -17452,11 +19423,7 @@ export interface operations {
};
cookie?: never;
};
- requestBody: {
- content: {
- "application/json": components["schemas"]["VulnerabilityIgnorePayload"];
- };
- };
+ requestBody?: never;
responses: {
/** @description OK */
200: {
@@ -17464,7 +19431,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseIgnoredVulnerability"];
+ "application/json": components["schemas"]["DockerinfoInfo"];
};
};
/** @description Error */
@@ -17478,15 +19445,13 @@ export interface operations {
};
};
};
- "unignore-vulnerability": {
+ "system-health": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Ignore record ID */
- ignoreId: string;
};
cookie?: never;
};
@@ -17497,9 +19462,7 @@ export interface operations {
headers: {
[name: string]: unknown;
};
- content: {
- "application/json": components["schemas"]["BaseApiResponseStruct {}"];
- };
+ content?: never;
};
/** @description Error */
default: {
@@ -17512,22 +19475,9 @@ export interface operations {
};
};
};
- "list-ignored-vulnerabilities": {
+ "prune-all": {
parameters: {
- query?: {
- /** @description Search query */
- search?: string;
- /** @description Sort field */
- sort?: string;
- /** @description Sort order */
- order?: string;
- /** @description Start offset */
- start?: number;
- /** @description Limit */
- limit?: number;
- /** @description Page number */
- page?: number;
- };
+ query?: never;
header?: never;
path: {
/** @description Environment ID */
@@ -17535,7 +19485,11 @@ export interface operations {
};
cookie?: never;
};
- requestBody?: never;
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["SystemPruneAllRequest"];
+ };
+ };
responses: {
/** @description OK */
200: {
@@ -17543,7 +19497,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BasePaginatedIgnoredVulnerability"];
+ "application/json": components["schemas"]["BaseApiResponsePruneAllResult"];
};
};
/** @description Error */
@@ -17557,12 +19511,9 @@ export interface operations {
};
};
};
- "list-environment-vulnerability-image-options": {
+ "trigger-upgrade": {
parameters: {
- query?: {
- /** @description Comma-separated severity filter */
- severity?: string;
- };
+ query?: never;
header?: never;
path: {
/** @description Environment ID */
@@ -17572,13 +19523,13 @@ export interface operations {
};
requestBody?: never;
responses: {
- /** @description OK */
- 200: {
+ /** @description Accepted */
+ 202: {
headers: {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseListString"];
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
};
};
/** @description Error */
@@ -17592,7 +19543,7 @@ export interface operations {
};
};
};
- "get-vulnerability-scanner-status": {
+ "trigger-update-all": {
parameters: {
query?: never;
header?: never;
@@ -17604,13 +19555,13 @@ export interface operations {
};
requestBody?: never;
responses: {
- /** @description OK */
- 200: {
+ /** @description Accepted */
+ 202: {
headers: {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseScannerStatus"];
+ "application/json": components["schemas"]["BaseApiResponseEnvironmentUpdateJob"];
};
};
/** @description Error */
@@ -17624,7 +19575,7 @@ export interface operations {
};
};
};
- "get-environment-vulnerability-summary": {
+ "update-all-status": {
parameters: {
query?: never;
header?: never;
@@ -17642,7 +19593,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseEnvironmentVulnerabilitySummary"];
+ "application/json": components["schemas"]["BaseApiResponseEnvironmentUpdateJob"];
};
};
/** @description Error */
@@ -17656,7 +19607,7 @@ export interface operations {
};
};
};
- "list-webhooks": {
+ "check-upgrade": {
parameters: {
query?: never;
header?: never;
@@ -17674,7 +19625,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseListSummary"];
+ "application/json": components["schemas"]["UpgradeCheckResultData"];
};
};
/** @description Error */
@@ -17688,7 +19639,7 @@ export interface operations {
};
};
};
- "create-webhook": {
+ getGlobalVariables: {
parameters: {
query?: never;
header?: never;
@@ -17698,11 +19649,7 @@ export interface operations {
};
cookie?: never;
};
- requestBody: {
- content: {
- "application/json": components["schemas"]["WebhookCreateInput"];
- };
- };
+ requestBody?: never;
responses: {
/** @description OK */
200: {
@@ -17710,7 +19657,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseCreated"];
+ "application/json": components["schemas"]["BaseApiResponseListVariable"];
};
};
/** @description Error */
@@ -17724,19 +19671,21 @@ export interface operations {
};
};
};
- "delete-webhook": {
+ updateGlobalVariables: {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Webhook ID */
- webhookId: string;
};
cookie?: never;
};
- requestBody?: never;
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["EnvSummary"];
+ };
+ };
responses: {
/** @description OK */
200: {
@@ -17744,7 +19693,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseInterface {}"];
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
};
};
/** @description Error */
@@ -17758,21 +19707,19 @@ export interface operations {
};
};
};
- "update-webhook": {
+ testConnection: {
parameters: {
query?: never;
header?: never;
path: {
/** @description Environment ID */
id: string;
- /** @description Webhook ID */
- webhookId: string;
};
cookie?: never;
};
- requestBody: {
+ requestBody?: {
content: {
- "application/json": components["schemas"]["WebhookUpdateInput"];
+ "application/json": components["schemas"]["EnvironmentTestConnectionRequest"];
};
};
responses: {
@@ -17782,7 +19729,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseInterface {}"];
+ "application/json": components["schemas"]["BaseApiResponseTest"];
};
};
/** @description Error */
@@ -17796,26 +19743,17 @@ export interface operations {
};
};
};
- listEvents: {
+ "get-updater-history": {
parameters: {
query?: {
- /** @description Search query */
- search?: string;
- /** @description Column to sort by */
- sort?: string;
- /** @description Sort direction */
- order?: string;
- /** @description Start index */
- start?: number;
- /** @description Limit */
+ /** @description Number of history entries to return */
limit?: number;
- /** @description Filter by severity */
- severity?: string;
- /** @description Filter by event type */
- type?: string;
};
header?: never;
- path?: never;
+ path: {
+ /** @description Environment ID */
+ id: string;
+ };
cookie?: never;
};
requestBody?: never;
@@ -17826,7 +19764,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["EventPaginatedResponse"];
+ "application/json": components["schemas"]["BaseApiResponseListAutoUpdateRecord"];
};
};
/** @description Error */
@@ -17840,19 +19778,19 @@ export interface operations {
};
};
};
- createEvent: {
+ "run-updater": {
parameters: {
query?: never;
- header?: {
- /** @description API key for environment-scoped event forwarding */
- "X-API-Key"?: string;
+ header?: never;
+ path: {
+ /** @description Environment ID */
+ id: string;
};
- path?: never;
cookie?: never;
};
- requestBody: {
+ requestBody?: {
content: {
- "application/json": components["schemas"]["EventCreateEvent"];
+ "application/json": components["schemas"]["UpdaterOptions"];
};
};
responses: {
@@ -17862,7 +19800,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseEvent"];
+ "application/json": components["schemas"]["BaseApiResponseResult"];
};
};
/** @description Error */
@@ -17876,28 +19814,13 @@ export interface operations {
};
};
};
- getEventsByEnvironment: {
+ "get-updater-status": {
parameters: {
- query?: {
- /** @description Search query */
- search?: string;
- /** @description Column to sort by */
- sort?: string;
- /** @description Sort direction */
- order?: string;
- /** @description Start index */
- start?: number;
- /** @description Limit */
- limit?: number;
- /** @description Filter by severity */
- severity?: string;
- /** @description Filter by event type */
- type?: string;
- };
+ query?: never;
header?: never;
path: {
/** @description Environment ID */
- environmentId: string;
+ id: string;
};
cookie?: never;
};
@@ -17909,7 +19832,1792 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["EventPaginatedResponse"];
+ "application/json": components["schemas"]["BaseApiResponseStatus"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ getEnvironmentVersion: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description Environment ID */
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseInfo"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "list-volumes": {
+ parameters: {
+ query?: {
+ /** @description Search query */
+ search?: string;
+ /** @description Column to sort by */
+ sort?: string;
+ /** @description Sort direction (asc or desc) */
+ order?: string;
+ /** @description Start index for pagination */
+ start?: number;
+ /** @description Number of items per page */
+ limit?: number;
+ /** @description Filter by in-use status (true/false) */
+ inUse?: string;
+ /** @description Include internal volumes */
+ includeInternal?: boolean;
+ };
+ header?: never;
+ path: {
+ /** @description Environment ID */
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["VolumePaginatedResponse"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "create-volume": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description Environment ID */
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["VolumeCreate"];
+ };
+ };
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseVolume"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "delete-volume-backup": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description Environment ID */
+ id: string;
+ /** @description Backup ID */
+ backupId: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "download-volume-backup": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description Environment ID */
+ id: string;
+ /** @description Backup ID */
+ backupId: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "list-backup-files": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description Environment ID */
+ id: string;
+ /** @description Backup ID */
+ backupId: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseListString"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "backup-has-path": {
+ parameters: {
+ query?: {
+ /** @description Path to check */
+ path?: string;
+ };
+ header?: never;
+ path: {
+ /** @description Environment ID */
+ id: string;
+ /** @description Backup ID */
+ backupId: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseBackupHasPathResponse"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "get-volume-usage-counts": {
+ parameters: {
+ query?: {
+ /** @description Include internal volumes */
+ includeInternal?: boolean;
+ };
+ header?: never;
+ path: {
+ /** @description Environment ID */
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseVolumeUsageCountsData"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "prune-volumes": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description Environment ID */
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseVolumePruneReportData"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "get-volume-sizes": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description Environment ID */
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseListVolumeSizeInfo"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "get-volume": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description Environment ID */
+ id: string;
+ /** @description Volume name */
+ volumeName: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseVolume"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "remove-volume": {
+ parameters: {
+ query?: {
+ /** @description Force removal */
+ force?: boolean;
+ };
+ header?: never;
+ path: {
+ /** @description Environment ID */
+ id: string;
+ /** @description Volume name */
+ volumeName: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "list-volume-backups": {
+ parameters: {
+ query?: {
+ /** @description Search query */
+ search?: string;
+ /** @description Column to sort by */
+ sort?: string;
+ /** @description Sort direction */
+ order?: string;
+ /** @description Start index */
+ start?: number;
+ /** @description Limit */
+ limit?: number;
+ };
+ header?: never;
+ path: {
+ /** @description Environment ID */
+ id: string;
+ /** @description Volume name */
+ volumeName: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["VolumeBackupPaginatedResponse"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "create-volume-backup": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description Environment ID */
+ id: string;
+ /** @description Volume name */
+ volumeName: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseVolumeBackup"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "upload-volume-backup": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description Environment ID */
+ id: string;
+ /** @description Volume name */
+ volumeName: string;
+ };
+ cookie?: never;
+ };
+ requestBody: {
+ content: {
+ "multipart/form-data": {
+ /**
+ * Format: binary
+ * @description Backup archive (tar.gz)
+ */
+ file: string;
+ };
+ };
+ };
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "restore-volume-backup": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description Environment ID */
+ id: string;
+ /** @description Volume name */
+ volumeName: string;
+ /** @description Backup ID */
+ backupId: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "restore-volume-backup-files": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description Environment ID */
+ id: string;
+ /** @description Volume name */
+ volumeName: string;
+ /** @description Backup ID */
+ backupId: string;
+ };
+ cookie?: never;
+ };
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["RestoreBackupFilesInputBody"];
+ };
+ };
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "browse-volume-directory": {
+ parameters: {
+ query?: {
+ /** @description Directory path to browse */
+ path?: string;
+ };
+ header?: never;
+ path: {
+ /** @description Environment ID */
+ id: string;
+ /** @description Volume name */
+ volumeName: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseListFileEntry"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "delete-volume-file": {
+ parameters: {
+ query?: {
+ /** @description File or directory path to delete */
+ path?: string;
+ };
+ header?: never;
+ path: {
+ /** @description Environment ID */
+ id: string;
+ /** @description Volume name */
+ volumeName: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ Data?: components["schemas"]["BaseMessageResponse"];
+ Success?: boolean;
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "get-volume-file-content": {
+ parameters: {
+ query?: {
+ /** @description File path */
+ path?: string;
+ /** @description Maximum bytes to read (default 1MB) */
+ maxBytes?: number;
+ };
+ header?: never;
+ path: {
+ /** @description Environment ID */
+ id: string;
+ /** @description Volume name */
+ volumeName: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseFileContentResponse"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "download-volume-file": {
+ parameters: {
+ query?: {
+ /** @description File path */
+ path?: string;
+ };
+ header?: never;
+ path: {
+ /** @description Environment ID */
+ id: string;
+ /** @description Volume name */
+ volumeName: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "create-volume-directory": {
+ parameters: {
+ query?: {
+ /** @description Directory path to create */
+ path?: string;
+ };
+ header?: never;
+ path: {
+ /** @description Environment ID */
+ id: string;
+ /** @description Volume name */
+ volumeName: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ Data?: components["schemas"]["BaseMessageResponse"];
+ Success?: boolean;
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "upload-volume-file": {
+ parameters: {
+ query?: {
+ /** @description Destination path */
+ path?: string;
+ };
+ header?: never;
+ path: {
+ /** @description Environment ID */
+ id: string;
+ /** @description Volume name */
+ volumeName: string;
+ };
+ cookie?: never;
+ };
+ requestBody: {
+ content: {
+ "multipart/form-data": {
+ /**
+ * Format: binary
+ * @description File to upload
+ */
+ file: string;
+ };
+ };
+ };
+ responses: {
+ /** @description No Content */
+ 204: {
+ headers: {
+ Data?: components["schemas"]["BaseMessageResponse"];
+ Success?: boolean;
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "get-volume-usage": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description Environment ID */
+ id: string;
+ /** @description Volume name */
+ volumeName: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseVolumeUsageResponse"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "list-environment-vulnerabilities": {
+ parameters: {
+ query?: {
+ /** @description Search query */
+ search?: string;
+ /** @description Sort field */
+ sort?: string;
+ /** @description Sort order */
+ order?: string;
+ /** @description Start offset */
+ start?: number;
+ /** @description Limit */
+ limit?: number;
+ /** @description Comma-separated severity filter */
+ severity?: string;
+ /** @description Filter by image/repo name (substring) */
+ imageName?: string;
+ };
+ header?: never;
+ path: {
+ /** @description Environment ID */
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BasePaginatedVulnerabilityWithImage"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "ignore-vulnerability": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description Environment ID */
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["VulnerabilityIgnorePayload"];
+ };
+ };
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseIgnoredVulnerability"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "unignore-vulnerability": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description Environment ID */
+ id: string;
+ /** @description Ignore record ID */
+ ignoreId: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseStruct {}"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "list-ignored-vulnerabilities": {
+ parameters: {
+ query?: {
+ /** @description Search query */
+ search?: string;
+ /** @description Sort field */
+ sort?: string;
+ /** @description Sort order */
+ order?: string;
+ /** @description Start offset */
+ start?: number;
+ /** @description Limit */
+ limit?: number;
+ };
+ header?: never;
+ path: {
+ /** @description Environment ID */
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BasePaginatedIgnoredVulnerability"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "list-environment-vulnerability-image-options": {
+ parameters: {
+ query?: {
+ /** @description Comma-separated severity filter */
+ severity?: string;
+ };
+ header?: never;
+ path: {
+ /** @description Environment ID */
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseListString"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "get-vulnerability-scanner-status": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description Environment ID */
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseScannerStatus"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "get-environment-vulnerability-summary": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description Environment ID */
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseEnvironmentVulnerabilitySummary"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "list-webhooks": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description Environment ID */
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseListSummary"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "create-webhook": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description Environment ID */
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["WebhookCreateInput"];
+ };
+ };
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseCreated"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "delete-webhook": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description Environment ID */
+ id: string;
+ /** @description Webhook ID */
+ webhookId: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseInterface {}"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "update-webhook": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description Environment ID */
+ id: string;
+ /** @description Webhook ID */
+ webhookId: string;
+ };
+ cookie?: never;
+ };
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["WebhookUpdateInput"];
+ };
+ };
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseInterface {}"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ listEvents: {
+ parameters: {
+ query?: {
+ /** @description Search query */
+ search?: string;
+ /** @description Column to sort by */
+ sort?: string;
+ /** @description Sort direction */
+ order?: string;
+ /** @description Start index */
+ start?: number;
+ /** @description Limit */
+ limit?: number;
+ /** @description Filter by severity */
+ severity?: string;
+ /** @description Filter by event type */
+ type?: string;
+ };
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["EventPaginatedResponse"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ getEventsByEnvironment: {
+ parameters: {
+ query?: {
+ /** @description Search query */
+ search?: string;
+ /** @description Column to sort by */
+ sort?: string;
+ /** @description Sort direction */
+ order?: string;
+ /** @description Start index */
+ start?: number;
+ /** @description Limit */
+ limit?: number;
+ /** @description Filter by severity */
+ severity?: string;
+ /** @description Filter by event type */
+ type?: string;
+ };
+ header?: never;
+ path: {
+ /** @description Environment ID */
+ environmentId: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["EventPaginatedResponse"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ deleteEvent: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description Event ID */
+ eventId: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "list-federated-credentials": {
+ parameters: {
+ query?: {
+ /** @description Search query for filtering by name, issuer, or subject */
+ search?: string;
+ /** @description Column to sort by */
+ sort?: string;
+ /** @description Sort direction (asc or desc) */
+ order?: string;
+ /** @description Start index for pagination */
+ start?: number;
+ /** @description Number of items per page */
+ limit?: number;
+ };
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BasePaginatedFederatedCredential"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "create-federated-credential": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["FederatedCreateFederatedCredential"];
+ };
+ };
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseFederatedCredential"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "get-federated-credential": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description Federated credential ID */
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseFederatedCredential"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "update-federated-credential": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description Federated credential ID */
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["FederatedUpdateFederatedCredential"];
+ };
+ };
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseFederatedCredential"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "delete-federated-credential": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description Federated credential ID */
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ syncGitRepositories: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["GitopsRepositorySyncRequest"];
+ };
+ };
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "health-check": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["SystemHealthResponse"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "health-check-head": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "dispatch-notification": {
+ parameters: {
+ query?: never;
+ header?: {
+ /** @description Remote environment access token */
+ "X-API-Key"?: string;
+ };
+ path?: never;
+ cookie?: never;
+ };
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["NotificationDispatchRequest"];
+ };
+ };
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseDispatchResponse"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "handle-oidc-callback": {
+ parameters: {
+ query?: never;
+ header?: {
+ Origin?: string;
+ "X-Forwarded-Host"?: string;
+ "X-Forwarded-Proto"?: string;
+ Host?: string;
+ "User-Agent"?: string;
+ };
+ path?: never;
+ cookie?: {
+ /** @description OIDC state cookie from auth URL request */
+ oidc_state?: string;
+ };
+ };
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["AuthOidcCallbackRequest"];
+ };
+ };
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ "Set-Cookie"?: string;
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["AuthOidcCallbackResponse"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "get-oidc-config": {
+ parameters: {
+ query?: never;
+ header?: {
+ Origin?: string;
+ "X-Forwarded-Host"?: string;
+ "X-Forwarded-Proto"?: string;
+ Host?: string;
+ "User-Agent"?: string;
+ };
+ path?: never;
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["AuthOidcConfigResponse"];
};
};
/** @description Error */
@@ -17923,14 +21631,11 @@ export interface operations {
};
};
};
- deleteEvent: {
+ "initiate-oidc-device-auth": {
parameters: {
query?: never;
header?: never;
- path: {
- /** @description Event ID */
- eventId: string;
- };
+ path?: never;
cookie?: never;
};
requestBody?: never;
@@ -17941,7 +21646,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ "application/json": components["schemas"]["AuthOidcDeviceAuthResponse"];
};
};
/** @description Error */
@@ -17955,24 +21660,29 @@ export interface operations {
};
};
};
- "get-mono-font": {
+ "exchange-oidc-device-token": {
parameters: {
query?: never;
- header?: never;
+ header?: {
+ "User-Agent"?: string;
+ };
path?: never;
cookie?: never;
};
- requestBody?: never;
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["AuthOidcDeviceTokenRequest"];
+ };
+ };
responses: {
/** @description OK */
200: {
headers: {
- "Cache-Control"?: string;
- "Content-Type"?: string;
+ "Set-Cookie"?: string;
[name: string]: unknown;
};
content: {
- "application/json": string;
+ "application/json": components["schemas"]["AuthOidcDeviceTokenResponse"];
};
};
/** @description Error */
@@ -17986,7 +21696,7 @@ export interface operations {
};
};
};
- "get-sans-font": {
+ "list-oidc-role-mappings": {
parameters: {
query?: never;
header?: never;
@@ -17998,12 +21708,10 @@ export interface operations {
/** @description OK */
200: {
headers: {
- "Cache-Control"?: string;
- "Content-Type"?: string;
[name: string]: unknown;
};
content: {
- "application/json": string;
+ "application/json": components["schemas"]["ListOidcRoleMappingsOutputBody"];
};
};
/** @description Error */
@@ -18017,24 +21725,26 @@ export interface operations {
};
};
};
- "get-serif-font": {
+ "create-oidc-role-mapping": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
- requestBody?: never;
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["RoleCreateOidcRoleMapping"];
+ };
+ };
responses: {
/** @description OK */
200: {
headers: {
- "Cache-Control"?: string;
- "Content-Type"?: string;
[name: string]: unknown;
};
content: {
- "application/json": string;
+ "application/json": components["schemas"]["CreateOidcRoleMappingOutputBody"];
};
};
/** @description Error */
@@ -18048,16 +21758,19 @@ export interface operations {
};
};
};
- syncGitRepositories: {
+ "update-oidc-role-mapping": {
parameters: {
query?: never;
header?: never;
- path?: never;
+ path: {
+ /** @description Mapping ID */
+ id: string;
+ };
cookie?: never;
};
requestBody: {
content: {
- "application/json": components["schemas"]["GitopsRepositorySyncRequest"];
+ "application/json": components["schemas"]["RoleUpdateOidcRoleMapping"];
};
};
responses: {
@@ -18067,7 +21780,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ "application/json": components["schemas"]["UpdateOidcRoleMappingOutputBody"];
};
};
/** @description Error */
@@ -18081,11 +21794,14 @@ export interface operations {
};
};
};
- "health-check": {
+ "delete-oidc-role-mapping": {
parameters: {
query?: never;
header?: never;
- path?: never;
+ path: {
+ /** @description Mapping ID */
+ id: string;
+ };
cookie?: never;
};
requestBody?: never;
@@ -18096,7 +21812,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["SystemHealthResponse"];
+ "application/json": components["schemas"]["DeleteOidcRoleMappingOutputBody"];
};
};
/** @description Error */
@@ -18110,7 +21826,7 @@ export interface operations {
};
};
};
- "health-check-head": {
+ "get-oidc-status": {
parameters: {
query?: never;
header?: never;
@@ -18124,7 +21840,9 @@ export interface operations {
headers: {
[name: string]: unknown;
};
- content?: never;
+ content: {
+ "application/json": components["schemas"]["AuthOidcStatusInfo"];
+ };
};
/** @description Error */
default: {
@@ -18137,29 +21855,33 @@ export interface operations {
};
};
};
- "dispatch-notification": {
+ "get-oidc-auth-url": {
parameters: {
query?: never;
header?: {
- /** @description Remote environment access token */
- "X-API-Key"?: string;
+ Origin?: string;
+ "X-Forwarded-Host"?: string;
+ "X-Forwarded-Proto"?: string;
+ Host?: string;
+ "User-Agent"?: string;
};
path?: never;
cookie?: never;
};
requestBody: {
content: {
- "application/json": components["schemas"]["NotificationDispatchRequest"];
+ "application/json": components["schemas"]["AuthOidcAuthUrlRequest"];
};
};
responses: {
/** @description OK */
200: {
headers: {
+ "Set-Cookie"?: string;
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
+ "application/json": components["schemas"]["AuthOidcAuthUrlResponse"];
};
};
/** @description Error */
@@ -18173,35 +21895,33 @@ export interface operations {
};
};
};
- "handle-oidc-callback": {
+ "list-roles": {
parameters: {
- query?: never;
- header?: {
- Origin?: string;
- "X-Forwarded-Host"?: string;
- "X-Forwarded-Proto"?: string;
- Host?: string;
+ query?: {
+ /** @description Search by role name or description */
+ search?: string;
+ /** @description Column to sort by */
+ sort?: string;
+ /** @description Sort direction (asc or desc) */
+ order?: string;
+ /** @description Start index for pagination */
+ start?: number;
+ /** @description Items per page */
+ limit?: number;
};
+ header?: never;
path?: never;
- cookie?: {
- /** @description OIDC state cookie from auth URL request */
- oidc_state?: string;
- };
- };
- requestBody: {
- content: {
- "application/json": components["schemas"]["AuthOidcCallbackRequest"];
- };
+ cookie?: never;
};
+ requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
- "Set-Cookie"?: string;
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["AuthOidcCallbackResponse"];
+ "application/json": components["schemas"]["RolePaginatedResponse"];
};
};
/** @description Error */
@@ -18215,19 +21935,18 @@ export interface operations {
};
};
};
- "get-oidc-config": {
+ "create-role": {
parameters: {
query?: never;
- header?: {
- Origin?: string;
- "X-Forwarded-Host"?: string;
- "X-Forwarded-Proto"?: string;
- Host?: string;
- };
+ header?: never;
path?: never;
cookie?: never;
};
- requestBody?: never;
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["RoleCreateRole"];
+ };
+ };
responses: {
/** @description OK */
200: {
@@ -18235,7 +21954,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["AuthOidcConfigResponse"];
+ "application/json": components["schemas"]["BaseApiResponseRole"];
};
};
/** @description Error */
@@ -18249,7 +21968,7 @@ export interface operations {
};
};
};
- "initiate-oidc-device-auth": {
+ "get-permissions-manifest": {
parameters: {
query?: never;
header?: never;
@@ -18264,7 +21983,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["AuthOidcDeviceAuthResponse"];
+ "application/json": components["schemas"]["BaseApiResponsePermissionsManifest"];
};
};
/** @description Error */
@@ -18278,27 +21997,25 @@ export interface operations {
};
};
};
- "exchange-oidc-device-token": {
+ "get-role": {
parameters: {
query?: never;
header?: never;
- path?: never;
- cookie?: never;
- };
- requestBody: {
- content: {
- "application/json": components["schemas"]["AuthOidcDeviceTokenRequest"];
+ path: {
+ /** @description Role ID */
+ id: string;
};
+ cookie?: never;
};
+ requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
- "Set-Cookie"?: string;
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["AuthOidcDeviceTokenResponse"];
+ "application/json": components["schemas"]["BaseApiResponseRole"];
};
};
/** @description Error */
@@ -18312,14 +22029,21 @@ export interface operations {
};
};
};
- "get-oidc-status": {
+ "update-role": {
parameters: {
query?: never;
header?: never;
- path?: never;
+ path: {
+ /** @description Role ID */
+ id: string;
+ };
cookie?: never;
};
- requestBody?: never;
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["RoleUpdateRole"];
+ };
+ };
responses: {
/** @description OK */
200: {
@@ -18327,7 +22051,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["AuthOidcStatusInfo"];
+ "application/json": components["schemas"]["BaseApiResponseRole"];
};
};
/** @description Error */
@@ -18341,32 +22065,25 @@ export interface operations {
};
};
};
- "get-oidc-auth-url": {
+ "delete-role": {
parameters: {
query?: never;
- header?: {
- Origin?: string;
- "X-Forwarded-Host"?: string;
- "X-Forwarded-Proto"?: string;
- Host?: string;
+ header?: never;
+ path: {
+ /** @description Role ID */
+ id: string;
};
- path?: never;
cookie?: never;
};
- requestBody: {
- content: {
- "application/json": components["schemas"]["AuthOidcAuthUrlRequest"];
- };
- };
+ requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
- "Set-Cookie"?: string;
[name: string]: unknown;
};
content: {
- "application/json": components["schemas"]["AuthOidcAuthUrlResponse"];
+ "application/json": components["schemas"]["BaseApiResponseMessageResponse"];
};
};
/** @description Error */
@@ -18484,6 +22201,8 @@ export interface operations {
start?: number;
/** @description Items per page */
limit?: number;
+ /** @description Filter by template type (comma-separated: false,true) */
+ type?: string;
};
header?: never;
path?: never;
@@ -19134,6 +22853,109 @@ export interface operations {
};
};
};
+ getUserAvatar: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description User ID */
+ userId: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ "Cache-Control"?: string;
+ "Content-Type"?: string;
+ "X-Content-Type-Options"?: string;
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": string;
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "list-user-role-assignments": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description User ID */
+ userId: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseListRoleAssignment"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
+ "set-user-role-assignments": {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ /** @description User ID */
+ userId: string;
+ };
+ cookie?: never;
+ };
+ requestBody: {
+ content: {
+ "application/json": components["schemas"]["RoleSetUserAssignments"];
+ };
+ };
+ responses: {
+ /** @description OK */
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/json": components["schemas"]["BaseApiResponseListRoleAssignment"];
+ };
+ };
+ /** @description Error */
+ default: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content: {
+ "application/problem+json": components["schemas"]["ErrorModel"];
+ };
+ };
+ };
+ };
getVersion: {
parameters: {
query?: {
diff --git a/src/utils/format.ts b/src/utils/format.ts
index 25b1172..5720a92 100644
--- a/src/utils/format.ts
+++ b/src/utils/format.ts
@@ -50,6 +50,16 @@ export function formatSizeGB(bytes: number): string {
return `${(bytes / BYTES_PER_GB).toFixed(2)} GB`;
}
+/**
+ * Format a Unix timestamp (seconds) as an ISO date string.
+ *
+ * Example: "2026-07-11T19:03:39.000Z"
+ */
+export function formatUnixTimestamp(seconds: number | undefined | null): string {
+ if (!seconds || !Number.isFinite(seconds)) return "unknown";
+ return new Date(seconds * 1000).toISOString();
+}
+
/**
* Validate a file path parameter to prevent path traversal attacks.
* Rejects paths containing ".." sequences.
diff --git a/src/utils/image-resolver.ts b/src/utils/image-resolver.ts
new file mode 100644
index 0000000..888794a
--- /dev/null
+++ b/src/utils/image-resolver.ts
@@ -0,0 +1,53 @@
+/**
+ * Resolve image references (name:tag) to image IDs.
+ *
+ * The Arcane v2 API only accepts image IDs in path parameters — a name like
+ * "amir20/dozzle:latest" 404s (the slash breaks the route). Clients often
+ * pass names anyway, so tools resolve them via the image list first.
+ */
+
+import type { ArcaneClient } from "../client/arcane-client.js";
+
+const IMAGE_ID_PATTERN = /^(sha256:)?[0-9a-fA-F]{12,64}$/;
+
+interface ImageListEntry {
+ id: string;
+ repoTags?: string[] | null;
+}
+
+/**
+ * Return the image ID for an ID or name reference.
+ * IDs pass through untouched; names are looked up in the environment's
+ * image list ("name" without a tag matches "name:latest" first, then any tag).
+ */
+export async function resolveImageId(
+ client: ArcaneClient,
+ environmentId: string,
+ imageIdOrName: string
+): Promise {
+ if (IMAGE_ID_PATTERN.test(imageIdOrName)) {
+ return imageIdOrName;
+ }
+
+ const searchTerm = imageIdOrName.split(":")[0];
+ const response = await client.get<{ data: ImageListEntry[] }>(
+ `/environments/${environmentId}/images`,
+ { search: searchTerm, limit: 100 }
+ );
+
+ const images = response.data || [];
+ const hasTag = imageIdOrName.includes(":");
+ const exactRef = hasTag ? imageIdOrName : `${imageIdOrName}:latest`;
+
+ const match =
+ images.find((img) => img.repoTags?.includes(exactRef)) ??
+ (hasTag ? undefined : images.find((img) => img.repoTags?.some((t) => t.startsWith(`${imageIdOrName}:`))));
+
+ if (!match) {
+ throw new Error(
+ `No image found matching "${imageIdOrName}". Use arcane_image_list to look up the image ID.`
+ );
+ }
+
+ return match.id;
+}
diff --git a/src/utils/log-format.ts b/src/utils/log-format.ts
new file mode 100644
index 0000000..a9c9a3f
--- /dev/null
+++ b/src/utils/log-format.ts
@@ -0,0 +1,30 @@
+/**
+ * Shared formatting for the WebSocket-based log tools.
+ */
+
+/** Zod-independent shape shared by all log tools */
+export interface LogFetchResult {
+ lines: string[];
+ truncated: boolean;
+}
+
+export function formatLogResult(label: string, result: LogFetchResult, timestamps: boolean): string {
+ if (result.lines.length === 0) {
+ return `No log output for ${label}. (Try a larger "tail" or an earlier "since".)`;
+ }
+
+ const out = [
+ `Logs for ${label} (${result.lines.length} lines${result.truncated ? ", truncated at the line limit" : ""}):`,
+ "",
+ ...result.lines,
+ "",
+ ];
+
+ if (timestamps) {
+ out.push('To follow the logs, call again with "since" set to the timestamp of the newest line — only newer lines are returned.');
+ } else {
+ out.push('Tip: set timestamps=true to enable incremental follow-up calls via "since".');
+ }
+
+ return out.join("\n");
+}