{"info":{"title":"Miget API","description":"API for managing cloud applications, resources, and services on the Miget platform.","contact":{"name":"Miget Support","email":"hello@miget.com","url":"https://miget.com/join-discord"},"version":"0.0.1"},"swagger":"2.0","produces":["application/json"],"securityDefinitions":{"bearer":{"type":"apiKey","name":"Authorization","in":"header","description":"Bearer token for authentication. Format: 'Bearer {token}'"}},"security":[{"bearer":[]}],"host":"app.miget.com","tags":[{"name":"apps","description":"Operations about apps"},{"name":"Authentication","description":"User authentication and token management"},{"name":"Apps","description":"Application lifecycle management"},{"name":"App Domains","description":"Custom domain configuration for applications"},{"name":"App Add-ons","description":"Application add-ons (databases, caches, storage)"},{"name":"App Environment Variables","description":"Application environment variable management"},{"name":"App Cron Jobs","description":"Scheduled task management for applications"},{"name":"App Deployments","description":"Deployment history and build logs"},{"name":"Buckets","description":"S3-compatible object storage bucket management"},{"name":"Bucket Objects","description":"File and folder operations within storage buckets"},{"name":"Container Registry Credentials","description":"Stored credentials for pulling images from private container registries (Docker Hub, GitHub, GitLab, AWS ECR, Azure, DigitalOcean, Quay, generic)"},{"name":"Projects","description":"Project organization and management"},{"name":"Project Environment Variables","description":"Shared environment variables across project applications"},{"name":"Services","description":"Standalone services (shared databases, storage)"},{"name":"Resources","description":"Compute resource (Miget) provisioning and management"},{"name":"Plans","description":"Available pricing plans"},{"name":"Regions","description":"Deployment regions"},{"name":"Components","description":"Purchasable resource add-ons (extra RAM, CPU, disk)"},{"name":"Users","description":"User profile management"},{"name":"Users - SSH Keys","description":"SSH key management for Git access"},{"name":"Users - Credits","description":"Referral credit balance and history"}],"paths":{"/api/v1/apps":{"get":{"summary":"List all applications","description":"Returns a list of all applications in the current workspace. Each application includes its configuration, status, assigned resource, and associated add-ons.","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false}],"responses":{"200":{"description":"List all applications","schema":{"type":"array","items":{"$ref":"#/definitions/Api_V1_Entities_App"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"}},"tags":["Apps"],"operationId":"listApps"},"post":{"summary":"Create a new application","description":"Creates a new application in the specified project. You can choose between auto detection (Miget Buildpacks) for automatic build detection, Dockerfile for custom container builds, or custom builder for language-specific build detection.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"name":"createApp","in":"body","required":true,"schema":{"$ref":"#/definitions/createApp"}}],"responses":{"201":{"description":"Create a new application","schema":{"$ref":"#/definitions/Api_V1_Entities_App"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"422":{"description":"Validation error"}},"tags":["Apps"],"operationId":"createApp"}},"/api/v1/apps/{uuid}":{"get":{"summary":"Get application details","description":"Retrieves detailed information about a specific application, including its configuration, status, resource allocation, add-ons, and cron jobs.","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true}],"responses":{"200":{"description":"Get application details","schema":{"$ref":"#/definitions/Api_V1_Entities_App"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"App not found"}},"tags":["Apps"],"operationId":"getApp"},"put":{"summary":"Update application settings","description":"Updates the configuration of an existing application. You can modify build settings, resource allocation, deployment method, and maintenance mode.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true},{"name":"updateApp","in":"body","required":true,"schema":{"$ref":"#/definitions/updateApp"}}],"responses":{"200":{"description":"Update application settings","schema":{"$ref":"#/definitions/Api_V1_Entities_App"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"App not found"},"422":{"description":"Validation error"}},"tags":["Apps"],"operationId":"updateApp"},"delete":{"summary":"Delete an application","description":"Permanently deletes an application and all its associated data, including add-ons, domains, environment variables, and cron jobs. This action cannot be undone.","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true}],"responses":{"401":{"description":"Unauthorized"},"204":{"description":"Delete an application","schema":{"$ref":"#/definitions/Api_V1_Entities_Message"}},"403":{"description":"Forbidden"},"404":{"description":"App not found"}},"tags":["Apps"],"operationId":"deleteApp"}},"/api/v1/apps/{uuid}/state":{"patch":{"summary":"Change application state","description":"Schedules a state change for the application. The operation is performed asynchronously and you will receive a notification when complete.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true},{"name":"updateAppState","in":"body","required":true,"schema":{"$ref":"#/definitions/updateAppState"}}],"responses":{"200":{"description":"Change application state","schema":{"$ref":"#/definitions/Api_V1_Entities_Message"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"App not found"}},"tags":["Apps"],"operationId":"updateAppState"}},"/api/v1/apps/{uuid}/security":{"put":{"summary":"Update security settings","description":"Configures the application's network security settings, including whether to allow internal connections from other applications in your workspace, and Basic Authentication settings.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true},{"name":"updateAppSecurity","in":"body","required":true,"schema":{"$ref":"#/definitions/updateAppSecurity"}}],"responses":{"200":{"description":"Update security settings","schema":{"$ref":"#/definitions/Api_V1_Entities_Message"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"App not found"},"422":{"description":"Validation error"}},"tags":["Apps"],"operationId":"updateAppSecurity"}},"/api/v1/apps/{uuid}/clone":{"post":{"summary":"Clone an application","description":"Creates a copy of an existing application with optional cloning of environment variables, secret files, scaling settings, health checks, add-ons, and cron jobs.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Source application UUID to clone from","type":"string","required":true},{"name":"cloneApp","in":"body","required":true,"schema":{"$ref":"#/definitions/cloneApp"}}],"responses":{"201":{"description":"Clone an application","schema":{"$ref":"#/definitions/Api_V1_Entities_App"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"App not found"},"422":{"description":"Validation error"}},"tags":["Apps"],"operationId":"cloneApp"}},"/api/v1/apps/{uuid}/deploy":{"post":{"summary":"Deploy application","description":"Triggers a deployment of the application. You can optionally specify a custom image tag, commit SHA, or branch to deploy.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true},{"name":"deployApp","in":"body","required":true,"schema":{"$ref":"#/definitions/deployApp"}}],"responses":{"201":{"description":"Deploy application","schema":{"$ref":"#/definitions/Api_V1_Entities_Message"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"App not found"},"422":{"description":"Deployment failed"}},"tags":["Apps"],"operationId":"deployApp"}},"/api/v1/apps/{uuid}/deployment":{"put":{"summary":"Update application deployment configuration","description":"Updates the deployment method and configuration of an existing application. Use this to switch between Git-based deployments, container registry deployments, parent image inheritance, or update Kamal SSH keys.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true},{"name":"updateAppDeployment","in":"body","required":true,"schema":{"$ref":"#/definitions/updateAppDeployment"}}],"responses":{"200":{"description":"Update application deployment configuration","schema":{"$ref":"#/definitions/Api_V1_Entities_App"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"App not found"},"422":{"description":"Validation error"}},"tags":["Apps"],"operationId":"updateAppDeployment"}},"/api/v1/apps/{uuid}/activity":{"get":{"description":"Get app activity","produces":["application/json"],"parameters":[{"in":"path","name":"uuid","description":"App name","type":"string","required":true},{"in":"query","name":"page","description":"Page number","type":"integer","format":"int32","default":1,"required":false},{"in":"query","name":"limit","description":"Number of items per page","type":"integer","format":"int32","default":7,"required":false}],"responses":{"200":{"description":"Get app activity"}},"tags":["apps"],"operationId":"getApiV1AppsUuidActivity"}},"/api/v1/apps/{uuid}/scaling_profile":{"put":{"summary":"Update scaling profile","description":"Configures auto-scaling behavior for the application. Set replica counts, CPU/memory thresholds for scaling triggers, and optional time-based scaling windows. Not available on free plans.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true},{"name":"updateAppScalingProfile","in":"body","required":true,"schema":{"$ref":"#/definitions/updateAppScalingProfile"}}],"responses":{"200":{"description":"Update scaling profile","schema":{"$ref":"#/definitions/Api_V1_Entities_Message"}},"401":{"description":"Unauthorized"},"403":{"description":"Feature not available on free plan"},"404":{"description":"App not found"},"422":{"description":"Validation error"}},"tags":["Apps"],"operationId":"updateAppScalingProfile"}},"/api/v1/apps/{uuid}/health_checks":{"put":{"summary":"Update health checks","description":"Configures Kubernetes health probes (liveness, readiness, startup) for the application. Health checks ensure your application is running correctly and ready to receive traffic.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true},{"name":"updateAppHealthChecks","in":"body","required":true,"schema":{"$ref":"#/definitions/updateAppHealthChecks"}}],"responses":{"200":{"description":"Update health checks","schema":{"$ref":"#/definitions/Api_V1_Entities_Message"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"App not found"},"422":{"description":"Validation error"}},"tags":["Apps"],"operationId":"updateAppHealthChecks"}},"/api/v1/apps/{uuid}/domains":{"get":{"summary":"List application domains","description":"Returns all custom domains configured for the specified application. Each domain includes its DNS target for CNAME configuration.","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true}],"responses":{"200":{"description":"List application domains","schema":{"type":"array","items":{"$ref":"#/definitions/Api_V1_Entities_Domain"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"App not found"}},"tags":["App Domains"],"operationId":"listAppDomains"},"post":{"summary":"Add a custom domain","description":"Configures a custom domain for the application. The response includes verification_token (publish as TXT _migetapp-verify.\u003cdomain\u003e) and the empty dns_target placeholder; once verification succeeds (poll GET endpoint or trigger via POST .../verify), dns_target is filled in with the CNAME target you publish on the apex/subdomain itself.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true},{"name":"createAppDomain","in":"body","required":true,"schema":{"$ref":"#/definitions/createAppDomain"}}],"responses":{"201":{"description":"Add a custom domain","schema":{"$ref":"#/definitions/Api_V1_Entities_Domain"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"App not found"},"422":{"description":"Validation error"}},"tags":["App Domains"],"operationId":"createAppDomain"}},"/api/v1/apps/{uuid}/domains/{domain_uuid}":{"get":{"summary":"Get domain details","description":"Retrieves detailed information about a specific custom domain, including its DNS target for CNAME configuration.","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true},{"in":"path","name":"domain_uuid","description":"Unique domain identifier (UUID)","type":"string","required":true}],"responses":{"200":{"description":"Get domain details","schema":{"$ref":"#/definitions/Api_V1_Entities_Domain"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Domain not found"}},"tags":["App Domains"],"operationId":"getAppDomain"},"put":{"summary":"Update a custom domain","description":"Updates the configuration of an existing custom domain.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true},{"in":"path","name":"domain_uuid","description":"Unique domain identifier (UUID)","type":"string","required":true},{"name":"updateAppDomain","in":"body","required":true,"schema":{"$ref":"#/definitions/updateAppDomain"}}],"responses":{"200":{"description":"Update a custom domain","schema":{"$ref":"#/definitions/Api_V1_Entities_Domain"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Domain not found"},"422":{"description":"Validation error"}},"tags":["App Domains"],"operationId":"updateAppDomain"},"delete":{"summary":"Remove a custom domain","description":"Removes a custom domain from the application. The domain will no longer route traffic to your application.","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true},{"in":"path","name":"domain_uuid","description":"Unique domain identifier (UUID)","type":"string","required":true}],"responses":{"204":{"description":"Remove a custom domain"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Domain not found"}},"tags":["App Domains"],"operationId":"deleteAppDomain"}},"/api/v1/apps/{uuid}/domains/{domain_uuid}/verify":{"post":{"summary":"Trigger domain verification","description":"Re-runs the DNS verification check for a custom domain. Caller is expected to have already configured the TXT record at _migetapp-verify.\u003cdomain\u003e with the value from `verification_token`. The check runs asynchronously (Sidekiq worker `VerifyDomain` with Fibonacci backoff up to 60 minutes); poll the show endpoint to track status. If the domain is already verified, the call is a no-op and returns the current state. If the domain doesn't need verification (e.g. www subdomain whose root is verified), the call returns the current state without scheduling work.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true},{"in":"path","name":"domain_uuid","description":"Unique domain identifier (UUID)","type":"string","required":true}],"responses":{"201":{"description":"Trigger domain verification","schema":{"$ref":"#/definitions/Api_V1_Entities_Domain"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Domain not found"}},"tags":["App Domains"],"operationId":"verifyAppDomain"}},"/api/v1/apps/{uuid}/addons":{"get":{"summary":"List application add-ons","description":"Returns all add-ons (databases, caches, storage) attached to the specified application, excluding cron jobs.","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true}],"responses":{"200":{"description":"List application add-ons","schema":{"type":"array","items":{"$ref":"#/definitions/Api_V1_Entities_Addon"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"App not found"}},"tags":["App Add-ons"],"operationId":"listAppAddons"},"post":{"summary":"Create a new add-on","description":"Provisions a new add-on (database, cache, or storage) for the application. Connection credentials are automatically injected as environment variables.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true},{"name":"createAppAddon","in":"body","required":true,"schema":{"$ref":"#/definitions/createAppAddon"}}],"responses":{"201":{"description":"Create a new add-on","schema":{"$ref":"#/definitions/Api_V1_Entities_Addon"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"App not found"},"422":{"description":"Validation error"}},"tags":["App Add-ons"],"operationId":"createAppAddon"}},"/api/v1/apps/{uuid}/addons/{id}":{"get":{"summary":"Get add-on details","description":"Retrieves detailed information about a specific add-on, including its configuration, connection details, and resource allocation.","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true},{"in":"path","name":"id","description":"Add-on ID or UUID","type":"string","required":true}],"responses":{"200":{"description":"Get add-on details","schema":{"$ref":"#/definitions/Api_V1_Entities_Addon"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Add-on not found"}},"tags":["App Add-ons"],"operationId":"getAppAddon"},"put":{"summary":"Update an add-on","description":"Modifies the configuration of an existing add-on. You can adjust resource allocation and settings without data loss.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true},{"in":"path","name":"id","description":"Add-on ID or UUID","type":"string","required":true},{"name":"updateAppAddon","in":"body","required":true,"schema":{"$ref":"#/definitions/updateAppAddon"}}],"responses":{"200":{"description":"Update an add-on","schema":{"$ref":"#/definitions/Api_V1_Entities_Addon"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Add-on not found"},"422":{"description":"Validation error"}},"tags":["App Add-ons"],"operationId":"updateAppAddon"},"delete":{"summary":"Delete an add-on","description":"Permanently removes an add-on and all its data. This action cannot be undone - ensure you have backups if needed.","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true},{"in":"path","name":"id","description":"Add-on ID or UUID","type":"string","required":true}],"responses":{"401":{"description":"Unauthorized"},"204":{"description":"Delete an add-on","schema":{"$ref":"#/definitions/Api_V1_Entities_Message"}},"403":{"description":"Forbidden"},"404":{"description":"Add-on not found"},"422":{"description":"Delete failed"}},"tags":["App Add-ons"],"operationId":"deleteAppAddon"}},"/api/v1/apps/{uuid}/addons/{id}/state":{"patch":{"summary":"Change add-on state","description":"Schedules a state change for the add-on (start, stop, or restart). The operation is performed asynchronously.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true},{"in":"path","name":"id","description":"Add-on ID or UUID","type":"string","required":true},{"name":"updateAppAddonState","in":"body","required":true,"schema":{"$ref":"#/definitions/updateAppAddonState"}}],"responses":{"200":{"description":"Change add-on state","schema":{"$ref":"#/definitions/Api_V1_Entities_Message"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Add-on not found"}},"tags":["App Add-ons"],"operationId":"updateAppAddonState"}},"/api/v1/apps/{uuid}/addons/{id}/rotate_password":{"post":{"summary":"Rotate addon password","description":"Rotates the password for an addon (database, cache, etc.). Only certain addon types support password rotation (databases like PostgreSQL, MySQL, and caches like Valkey). The new password will be returned in the response. You must update ENV variables manually after rotation.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true},{"in":"path","name":"id","description":"Addon UUID","type":"string","required":true}],"responses":{"201":{"description":"Rotate addon password","schema":{"$ref":"#/definitions/Api_V1_Entities_Message"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Addon not found"},"422":{"description":"Password rotation not supported for this addon type"}},"tags":["App Add-ons"],"operationId":"rotateAddonPassword"}},"/api/v1/apps/{uuid}/addons/{id}/backups":{"get":{"summary":"Get add-on backups","description":"Retrieves backup information for a PostgreSQL add-on, including backup list, schedule, and cluster status.","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true},{"in":"path","name":"id","description":"Add-on ID or UUID","type":"string","required":true}],"responses":{"200":{"description":"Get add-on backups","schema":{"$ref":"#/definitions/Api_V1_Entities_Backup"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Add-on not found"},"422":{"description":"Not a PostgreSQL add-on"}},"tags":["App Add-ons"],"operationId":"getAppAddonBackups"}},"/api/v1/apps/{uuid}/addons/{id}/restore_backup":{"post":{"summary":"Restore add-on from backup","description":"Initiates a database restore for a PostgreSQL add-on. Provide either backup_name for a specific backup, target_time for point-in-time recovery, or neither for the latest backup.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true},{"in":"path","name":"id","description":"Add-on ID or UUID","type":"string","required":true},{"name":"restoreAppAddonBackup","in":"body","required":true,"schema":{"$ref":"#/definitions/restoreAppAddonBackup"}}],"responses":{"201":{"description":"Restore add-on from backup","schema":{"$ref":"#/definitions/Api_V1_Entities_Message"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Add-on not found"},"422":{"description":"Validation error"}},"tags":["App Add-ons"],"operationId":"restoreAppAddonBackup"}},"/api/v1/apps/{uuid}/addons/{id}/reset_database":{"post":{"summary":"Reset add-on database","description":"Drops all data in the database while keeping the database user and name. This action cannot be undone.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true},{"in":"path","name":"id","description":"Add-on ID or UUID","type":"string","required":true}],"responses":{"201":{"description":"Reset add-on database","schema":{"$ref":"#/definitions/Api_V1_Entities_Message"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Add-on not found"},"422":{"description":"Validation error"}},"tags":["App Add-ons"],"operationId":"resetAppAddonDatabase"}},"/api/v1/apps/{uuid}/addons/{id}/create_replica":{"post":{"summary":"Create a read replica of a PostgreSQL add-on","description":"Creates a new read replica of the specified PostgreSQL add-on. The replica shares credentials with the primary and uses the same resource allocation.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true},{"in":"path","name":"id","description":"Add-on ID or UUID","type":"string","required":true},{"name":"createAppAddonReplica","in":"body","required":true,"schema":{"$ref":"#/definitions/createAppAddonReplica"}}],"responses":{"201":{"description":"Create a read replica of a PostgreSQL add-on","schema":{"$ref":"#/definitions/Api_V1_Entities_Addon"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Add-on not found"},"422":{"description":"Validation error"}},"tags":["App Add-ons"],"operationId":"createAppAddonReplica"}},"/api/v1/apps/{uuid}/addons/{id}/promote_replica":{"post":{"summary":"Promote a read replica to standalone instance","description":"Promotes a PostgreSQL read replica to a standalone instance. The replica will no longer receive updates from the primary database. This action cannot be undone.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true},{"in":"path","name":"id","description":"Add-on ID or UUID","type":"string","required":true}],"responses":{"201":{"description":"Promote a read replica to standalone instance","schema":{"$ref":"#/definitions/Api_V1_Entities_Message"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Add-on not found"},"422":{"description":"Validation error"}},"tags":["App Add-ons"],"operationId":"promoteAppAddonReplica"}},"/api/v1/apps/{uuid}/addons/{id}/promote_external":{"post":{"summary":"Promote an external replica to standalone instance or cluster","description":"Promotes a PostgreSQL external replica to a standalone instance or HA cluster. The replica will disconnect from the external source and become an independent database. This action cannot be undone.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true},{"in":"path","name":"id","description":"Add-on ID or UUID","type":"string","required":true}],"responses":{"201":{"description":"Promote an external replica to standalone instance or cluster","schema":{"$ref":"#/definitions/Api_V1_Entities_Message"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Add-on not found"},"422":{"description":"Validation error"}},"tags":["App Add-ons"],"operationId":"promoteAppAddonExternalReplica"}},"/api/v1/apps/{uuid}/vars":{"get":{"summary":"List environment variables","description":"Returns all environment variables configured for the application. Sensitive values may be masked.","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true}],"responses":{"200":{"description":"List environment variables","schema":{"type":"array","items":{"$ref":"#/definitions/Api_V1_Entities_Variable"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"App not found"}},"tags":["App Environment Variables"],"operationId":"listAppVars"},"post":{"summary":"Create an environment variable","description":"Adds a new environment variable to the application. The variable will be available in the application's runtime environment after the next deployment.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true},{"name":"createAppVar","in":"body","required":true,"schema":{"$ref":"#/definitions/createAppVar"}}],"responses":{"201":{"description":"Create an environment variable"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"App not found"},"422":{"description":"Validation error"}},"tags":["App Environment Variables"],"operationId":"createAppVar"},"put":{"summary":"Update an environment variable","description":"Updates an existing environment variable. Changes take effect after the next deployment.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true},{"name":"updateAppVar","in":"body","required":true,"schema":{"$ref":"#/definitions/updateAppVar"}}],"responses":{"200":{"description":"Update an environment variable"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"App not found"},"422":{"description":"Validation error"}},"tags":["App Environment Variables"],"operationId":"updateAppVar"},"delete":{"summary":"Delete an environment variable","description":"Removes an environment variable from the application. The variable will no longer be available after the next deployment.","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true},{"in":"query","name":"key","description":"Variable name to delete","type":"string","required":true}],"responses":{"204":{"description":"Delete an environment variable"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"App not found"}},"tags":["App Environment Variables"],"operationId":"deleteAppVar"}},"/api/v1/apps/{uuid}/cronjobs":{"get":{"summary":"List cron jobs","description":"Returns all scheduled cron jobs configured for the application, including their schedules and last execution times.","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true}],"responses":{"200":{"description":"List cron jobs","schema":{"type":"array","items":{"$ref":"#/definitions/Api_V1_Entities_Cronjob"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"App not found"}},"tags":["App Cron Jobs"],"operationId":"listAppCronjobs"},"post":{"summary":"Create a cron job","description":"Creates a new scheduled cron job for the application. Jobs can run on a fixed interval or using a custom cron expression.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true},{"name":"createAppCronjob","in":"body","required":true,"schema":{"$ref":"#/definitions/createAppCronjob"}}],"responses":{"201":{"description":"Create a cron job","schema":{"$ref":"#/definitions/Api_V1_Entities_Addon"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"App not found"},"422":{"description":"Validation error"}},"tags":["App Cron Jobs"],"operationId":"createAppCronjob"}},"/api/v1/apps/{uuid}/cronjobs/{id}":{"get":{"summary":"Get cron job details","description":"Retrieves detailed information about a specific cron job, including its schedule configuration and execution history.","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true},{"in":"path","name":"id","description":"Cron job ID or UUID","type":"string","required":true}],"responses":{"200":{"description":"Get cron job details","schema":{"$ref":"#/definitions/Api_V1_Entities_Cronjob"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Cron job not found"}},"tags":["App Cron Jobs"],"operationId":"getAppCronjob"},"put":{"summary":"Update a cron job","description":"Modifies an existing cron job's configuration, including its label and command.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true},{"in":"path","name":"id","description":"Cron job ID or UUID","type":"string","required":true},{"name":"updateAppCronjob","in":"body","required":true,"schema":{"$ref":"#/definitions/updateAppCronjob"}}],"responses":{"200":{"description":"Update a cron job","schema":{"$ref":"#/definitions/Api_V1_Entities_Addon"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Cron job not found"},"422":{"description":"Validation error"}},"tags":["App Cron Jobs"],"operationId":"updateAppCronjob"},"delete":{"summary":"Delete a cron job","description":"Permanently removes a cron job from the application. The job will stop running immediately.","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true},{"in":"path","name":"id","description":"Cron job ID or UUID","type":"string","required":true}],"responses":{"401":{"description":"Unauthorized"},"204":{"description":"Delete a cron job","schema":{"$ref":"#/definitions/Api_V1_Entities_Message"}},"403":{"description":"Forbidden"},"404":{"description":"Cron job not found"},"422":{"description":"Delete failed"}},"tags":["App Cron Jobs"],"operationId":"deleteAppCronjob"}},"/api/v1/apps/{uuid}/workspaces/{workspace_name}/apps/{app_name}/ports":{"get":{"description":"List all ports for an app","produces":["application/json"],"parameters":[{"in":"path","name":"uuid","type":"string","required":true},{"in":"path","name":"workspace_name","description":"Workspace name","type":"string","required":true},{"in":"path","name":"app_name","description":"App name","type":"string","required":true}],"responses":{"200":{"description":"List all ports for an app"}},"tags":["apps"],"operationId":"getApiV1AppsUuidWorkspacesWorkspaceNameAppsAppNamePorts"},"post":{"description":"Create a new port for an app","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"path","name":"uuid","type":"string","required":true},{"in":"path","name":"workspace_name","description":"Workspace name","type":"string","required":true},{"in":"path","name":"app_name","description":"App name","type":"string","required":true},{"name":"postApiV1AppsUuidWorkspacesWorkspaceNameAppsAppNamePorts","in":"body","required":true,"schema":{"$ref":"#/definitions/postApiV1AppsUuidWorkspacesWorkspaceNameAppsAppNamePorts"}}],"responses":{"201":{"description":"Create a new port for an app"}},"tags":["apps"],"operationId":"postApiV1AppsUuidWorkspacesWorkspaceNameAppsAppNamePorts"}},"/api/v1/apps/{uuid}/workspaces/{workspace_name}/apps/{app_name}/ports/{id}":{"get":{"description":"Show a specific port","produces":["application/json"],"parameters":[{"in":"path","name":"uuid","type":"string","required":true},{"in":"path","name":"workspace_name","description":"Workspace name","type":"string","required":true},{"in":"path","name":"app_name","description":"App name","type":"string","required":true},{"in":"path","name":"id","description":"Port ID","type":"integer","format":"int32","required":true}],"responses":{"200":{"description":"Show a specific port"}},"tags":["apps"],"operationId":"getApiV1AppsUuidWorkspacesWorkspaceNameAppsAppNamePortsId"},"delete":{"description":"Delete a port","produces":["application/json"],"parameters":[{"in":"path","name":"uuid","type":"string","required":true},{"in":"path","name":"workspace_name","description":"Workspace name","type":"string","required":true},{"in":"path","name":"app_name","description":"App name","type":"string","required":true},{"in":"path","name":"id","description":"Port ID","type":"integer","format":"int32","required":true}],"responses":{"204":{"description":"Delete a port"}},"tags":["apps"],"operationId":"deleteApiV1AppsUuidWorkspacesWorkspaceNameAppsAppNamePortsId"}},"/api/v1/apps/{uuid}/workspaces/{workspace_name}/apps/{app_name}/ports/{id}/expose_publicly":{"patch":{"description":"Expose a port publicly","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"path","name":"uuid","type":"string","required":true},{"in":"path","name":"workspace_name","description":"Workspace name","type":"string","required":true},{"in":"path","name":"app_name","description":"App name","type":"string","required":true},{"in":"path","name":"id","description":"Port ID","type":"integer","format":"int32","required":true}],"responses":{"200":{"description":"Expose a port publicly"}},"tags":["apps"],"operationId":"patchApiV1AppsUuidWorkspacesWorkspaceNameAppsAppNamePortsIdExposePublicly"}},"/api/v1/apps/{uuid}/workspaces/{workspace_name}/apps/{app_name}/ports/{id}/make_private":{"patch":{"description":"Make a port private","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"path","name":"uuid","type":"string","required":true},{"in":"path","name":"workspace_name","description":"Workspace name","type":"string","required":true},{"in":"path","name":"app_name","description":"App name","type":"string","required":true},{"in":"path","name":"id","description":"Port ID","type":"integer","format":"int32","required":true}],"responses":{"200":{"description":"Make a port private"}},"tags":["apps"],"operationId":"patchApiV1AppsUuidWorkspacesWorkspaceNameAppsAppNamePortsIdMakePrivate"}},"/api/v1/apps/{uuid}/deployments":{"get":{"summary":"List deployments","description":"Returns all deployments for the specified application, optionally filtered by status and time period.","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true},{"in":"query","name":"status","description":"Filter by deployment status (pending, running, completed, failed, cancelling, cancelled)","type":"string","enum":["pending","running","completed","failed","cancelling","cancelled"],"required":false},{"in":"query","name":"period","description":"Filter by time period: '7days', '30days', '90days', or 'all'","type":"string","enum":["7days","30days","90days","all"],"required":false}],"responses":{"200":{"description":"List deployments","schema":{"type":"array","items":{"$ref":"#/definitions/Api_V1_Entities_Deployment"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"App not found"}},"tags":["App Deployments"],"operationId":"listAppDeployments"}},"/api/v1/apps/{uuid}/deployments/{id}":{"get":{"summary":"Get deployment details","description":"Retrieves detailed information about a specific deployment, including its current state and timestamps.","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true},{"in":"path","name":"id","description":"Deployment UUID","type":"string","required":true}],"responses":{"200":{"description":"Get deployment details","schema":{"$ref":"#/definitions/Api_V1_Entities_Deployment"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Deployment not found"}},"tags":["App Deployments"],"operationId":"getAppDeployment"}},"/api/v1/apps/{uuid}/deployments/{id}/logs":{"get":{"summary":"Get deployment build logs","description":"Retrieves the stored build logs for a completed deployment. Logs are only available after the deployment has finished and logs have been stored.","produces":["text/plain"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true},{"in":"path","name":"id","description":"Deployment UUID","type":"string","required":true}],"responses":{"200":{"description":"Get deployment build logs"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Deployment not found or logs not available"},"503":{"description":"Service unavailable"}},"tags":["App Deployments"],"operationId":"getAppDeploymentLogs"}},"/api/v1/apps/{uuid}/deployments/{id}/stream_logs":{"get":{"summary":"Stream deployment build logs","description":"Streams build logs in real-time using Server-Sent Events (SSE). Only available for running deployments or recently completed deployments (within 15-30 minutes depending on environment).","produces":["text/event-stream"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true},{"in":"path","name":"id","description":"Deployment UUID","type":"string","required":true}],"responses":{"200":{"description":"Stream deployment build logs"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Deployment not found"}},"tags":["App Deployments"],"operationId":"streamAppDeploymentLogs"}},"/api/v1/apps/{uuid}/deployments/{id}/cancel":{"post":{"summary":"Cancel deployment","description":"Cancels a running deployment. Only deployments in 'running' state can be cancelled.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true},{"in":"path","name":"id","description":"Deployment UUID","type":"string","required":true}],"responses":{"201":{"description":"Cancel deployment","schema":{"$ref":"#/definitions/Api_V1_Entities_Message"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Deployment not found"},"422":{"description":"Deployment cannot be cancelled"}},"tags":["App Deployments"],"operationId":"cancelAppDeployment"}},"/api/v1/apps/{uuid}/deployments/{id}/rollback":{"post":{"summary":"Rollback deployment","description":"Rolls back to a previous deployment. Only rollbackable deployments can be rolled back. A deployment is rollbackable if it has an image URL, uses the same deployment method as the app, and is not currently running or failed.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Application UUID","type":"string","required":true},{"in":"path","name":"id","description":"Deployment UUID","type":"string","required":true}],"responses":{"201":{"description":"Rollback deployment","schema":{"$ref":"#/definitions/Api_V1_Entities_Message"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Deployment not found"},"422":{"description":"Deployment cannot be rolled back"}},"tags":["App Deployments"],"operationId":"rollbackAppDeployment"}},"/api/v1/auth/sign_in":{"post":{"summary":"Authenticate user","description":"Authenticates a user with email and password. Returns JWT access token (30 min expiry) and refresh token (7 days expiry).","produces":["application/json"],"consumes":["application/json"],"parameters":[{"name":"signIn","in":"body","required":true,"schema":{"$ref":"#/definitions/signIn"}}],"security":[],"responses":{"201":{"description":"Authenticate user","schema":{"$ref":"#/definitions/Api_V1_Entities_AuthTokens"}},"401":{"description":"Invalid credentials"}},"tags":["Authentication"],"operationId":"signIn"}},"/api/v1/auth/refresh_token":{"post":{"summary":"Refresh access token","description":"Exchanges a valid refresh token for a new access token. Use this when your access token has expired.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"name":"refreshToken","in":"body","required":true,"schema":{"$ref":"#/definitions/refreshToken"}}],"security":[],"responses":{"201":{"description":"Refresh access token","schema":{"$ref":"#/definitions/Api_V1_Entities_AccessToken"}},"401":{"description":"Invalid or expired refresh token"},"404":{"description":"User not found"}},"tags":["Authentication"],"operationId":"refreshToken"}},"/api/v1/buckets":{"get":{"summary":"List all buckets","description":"Returns all storage buckets in the workspace.","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false}],"responses":{"200":{"description":"List all buckets","schema":{"type":"array","items":{"$ref":"#/definitions/Api_V1_Entities_Bucket"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"}},"tags":["Buckets"],"operationId":"listBuckets"},"post":{"summary":"Create a new bucket","description":"Creates a new storage bucket with the specified configuration.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"name":"createBucket","in":"body","required":true,"schema":{"$ref":"#/definitions/createBucket"}}],"responses":{"201":{"description":"Create a new bucket","schema":{"$ref":"#/definitions/Api_V1_Entities_Bucket"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"422":{"description":"Validation error"}},"tags":["Buckets"],"operationId":"createBucket"}},"/api/v1/buckets/{uuid}":{"get":{"summary":"Get bucket details","description":"Retrieves detailed information about a storage bucket, including connection details and statistics.","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Bucket UUID","type":"string","required":true}],"responses":{"200":{"description":"Get bucket details","schema":{"$ref":"#/definitions/Api_V1_Entities_Bucket"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Bucket not found"}},"tags":["Buckets"],"operationId":"getBucket"},"put":{"summary":"Update bucket","description":"Updates bucket configuration (label, visibility, disk allocation).","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Bucket UUID","type":"string","required":true},{"name":"updateBucket","in":"body","required":true,"schema":{"$ref":"#/definitions/updateBucket"}}],"responses":{"200":{"description":"Update bucket","schema":{"$ref":"#/definitions/Api_V1_Entities_Bucket"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Bucket not found"},"422":{"description":"Validation error"}},"tags":["Buckets"],"operationId":"updateBucket"},"delete":{"summary":"Delete bucket","description":"Permanently deletes a storage bucket and all its contents.","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Bucket UUID","type":"string","required":true}],"responses":{"204":{"description":"Delete bucket"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Bucket not found"}},"tags":["Buckets"],"operationId":"deleteBucket"}},"/api/v1/buckets/{uuid}/policy":{"put":{"summary":"Update bucket policy","description":"Sets or updates the S3-compatible JSON bucket policy.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Bucket UUID","type":"string","required":true},{"name":"updateBucketPolicy","in":"body","required":true,"schema":{"$ref":"#/definitions/updateBucketPolicy"}}],"responses":{"200":{"description":"Update bucket policy","schema":{"$ref":"#/definitions/Api_V1_Entities_Bucket"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Bucket not found"},"422":{"description":"Invalid JSON"}},"tags":["Buckets"],"operationId":"updateBucketPolicy"},"delete":{"summary":"Delete bucket policy","description":"Removes the bucket policy, reverting to default access rules.","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Bucket UUID","type":"string","required":true}],"responses":{"204":{"description":"Delete bucket policy"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Bucket not found"},"422":{"description":"Failed to delete policy"}},"tags":["Buckets"],"operationId":"deleteBucketPolicy"}},"/api/v1/buckets/{uuid}/acl":{"put":{"summary":"Update bucket ACL","description":"Sets or updates the S3-compatible XML access control list (ACL).","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Bucket UUID","type":"string","required":true},{"name":"updateBucketAcl","in":"body","required":true,"schema":{"$ref":"#/definitions/updateBucketAcl"}}],"responses":{"200":{"description":"Update bucket ACL","schema":{"$ref":"#/definitions/Api_V1_Entities_Bucket"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Bucket not found"},"422":{"description":"Invalid XML"}},"tags":["Buckets"],"operationId":"updateBucketAcl"},"delete":{"summary":"Delete bucket ACL","description":"Removes the bucket ACL, reverting to default access permissions.","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Bucket UUID","type":"string","required":true}],"responses":{"204":{"description":"Delete bucket ACL"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Bucket not found"},"422":{"description":"Failed to delete ACL"}},"tags":["Buckets"],"operationId":"deleteBucketAcl"}},"/api/v1/buckets/{uuid}/objects/list":{"get":{"summary":"List bucket objects","description":"Lists files and folders in a bucket, optionally filtered by prefix (folder path).","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","type":"string","required":true},{"in":"query","name":"prefix","description":"Folder path prefix to filter objects","type":"string","required":false},{"in":"query","name":"limit","description":"Maximum number of objects to return","type":"integer","format":"int32","default":100,"required":false},{"in":"query","name":"cursor","description":"Pagination cursor from previous request","type":"string","required":false}],"responses":{"200":{"description":"List bucket objects","schema":{"$ref":"#/definitions/Api_V1_Entities_BucketObjectList"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Bucket not found"}},"tags":["Bucket Objects"],"operationId":"listBucketObjects"}},"/api/v1/buckets/{uuid}/objects/upload_url":{"post":{"summary":"Generate upload URL","description":"Generates a presigned URL for uploading a file directly to S3.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","type":"string","required":true},{"name":"generateUploadUrl","in":"body","required":true,"schema":{"$ref":"#/definitions/generateUploadUrl"}}],"responses":{"200":{"description":"Upload URL generated"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Bucket not found"},"422":{"description":"Validation error"}},"tags":["Bucket Objects"],"operationId":"generateUploadUrl"}},"/api/v1/buckets/{uuid}/objects/download_url":{"post":{"summary":"Generate download URL","description":"Generates a presigned URL for downloading a file, or returns public URL for public buckets.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","type":"string","required":true},{"name":"generateDownloadUrl","in":"body","required":true,"schema":{"$ref":"#/definitions/generateDownloadUrl"}}],"responses":{"200":{"description":"Download URL generated"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Bucket not found"}},"tags":["Bucket Objects"],"operationId":"generateDownloadUrl"}},"/api/v1/buckets/{uuid}/objects/create_folder":{"post":{"summary":"Create folder","description":"Creates a new folder (empty object with trailing slash) in the bucket.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","type":"string","required":true},{"name":"createBucketFolder","in":"body","required":true,"schema":{"$ref":"#/definitions/createBucketFolder"}}],"responses":{"200":{"description":"Folder created successfully"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Bucket not found"},"422":{"description":"Validation error"}},"tags":["Bucket Objects"],"operationId":"createBucketFolder"}},"/api/v1/buckets/{uuid}/objects/{key}":{"delete":{"summary":"Delete object","description":"Deletes a file or folder (recursively) from the bucket.","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Bucket UUID","type":"string","required":true},{"in":"path","name":"key","description":"Object key (file path)","type":"string","required":true}],"responses":{"204":{"description":"Object deleted successfully"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Bucket not found"}},"tags":["Bucket Objects"],"operationId":"deleteBucketObject"}},"/api/v1/buckets/{uuid}/objects/{key}/rename":{"put":{"summary":"Rename object","description":"Renames a file or folder (recursively) in the bucket.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Bucket UUID","type":"string","required":true},{"in":"path","name":"key","description":"Current object key (file path)","type":"string","required":true},{"name":"renameBucketObject","in":"body","required":true,"schema":{"$ref":"#/definitions/renameBucketObject"}}],"responses":{"200":{"description":"Object renamed successfully"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Bucket not found"},"422":{"description":"Validation error"}},"tags":["Bucket Objects"],"operationId":"renameBucketObject"}},"/api/v1/components":{"get":{"summary":"List available components","description":"Returns all available resource components (extra RAM, CPU, disk) that can be added to compute resources.","produces":["application/json"],"responses":{"200":{"description":"List available components","schema":{"type":"array","items":{"$ref":"#/definitions/Api_V1_Entities_Component"}}},"401":{"description":"Unauthorized"}},"tags":["Components"],"operationId":"listComponents"}},"/api/v1/container_registry_credentials":{"get":{"summary":"List all container registry credentials","description":"Returns all container registry credentials in the workspace. Tokens are never returned.","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false}],"responses":{"200":{"description":"List all container registry credentials","schema":{"type":"array","items":{"$ref":"#/definitions/Api_V1_Entities_ContainerRegistryCredential"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"}},"tags":["Container Registry Credentials"],"operationId":"listContainerRegistryCredentials"},"post":{"summary":"Create a container registry credential","description":"Stores credentials for pulling images from a private container registry. The returned uuid can then be passed as deployment_config.credential_id (UUID-valued) when creating an app with deployment_method='container_registry'. Token is encrypted at rest and never returned by the API.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"name":"createContainerRegistryCredential","in":"body","required":true,"schema":{"$ref":"#/definitions/createContainerRegistryCredential"}}],"responses":{"201":{"description":"Create a container registry credential","schema":{"$ref":"#/definitions/Api_V1_Entities_ContainerRegistryCredential"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"422":{"description":"Validation error"}},"tags":["Container Registry Credentials"],"operationId":"createContainerRegistryCredential"}},"/api/v1/container_registry_credentials/{uuid}":{"get":{"summary":"Get container registry credential","description":"Retrieves a single container registry credential. Tokens are never returned.","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Credential UUID","type":"string","required":true}],"responses":{"200":{"description":"Get container registry credential","schema":{"$ref":"#/definitions/Api_V1_Entities_ContainerRegistryCredential"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Credential not found"}},"tags":["Container Registry Credentials"],"operationId":"getContainerRegistryCredential"},"put":{"summary":"Update a container registry credential","description":"Updates one or more fields. Omitted fields stay unchanged. Send a new token to rotate it (the existing token is never returned).","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Credential UUID","type":"string","required":true},{"name":"updateContainerRegistryCredential","in":"body","required":true,"schema":{"$ref":"#/definitions/updateContainerRegistryCredential"}}],"responses":{"200":{"description":"Update a container registry credential","schema":{"$ref":"#/definitions/Api_V1_Entities_ContainerRegistryCredential"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Credential not found"},"422":{"description":"Validation error"}},"tags":["Container Registry Credentials"],"operationId":"updateContainerRegistryCredential"},"delete":{"summary":"Delete a container registry credential","description":"Permanently deletes a stored credential. Apps that referenced it from their deployment_config will have the reference cleared (dependent: :nullify).","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Credential UUID","type":"string","required":true}],"responses":{"204":{"description":"Delete a container registry credential"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Credential not found"}},"tags":["Container Registry Credentials"],"operationId":"deleteContainerRegistryCredential"}},"/api/v1/plans":{"get":{"summary":"List available plans","description":"Returns all available pricing plans for compute resources, including their specifications and pricing information.","produces":["application/json"],"responses":{"200":{"description":"List available plans","schema":{"type":"array","items":{"$ref":"#/definitions/Api_V1_Entities_Plan"}}},"401":{"description":"Unauthorized"}},"tags":["Plans"],"operationId":"listPlans"}},"/api/v1/projects":{"get":{"summary":"List all projects","description":"Returns all projects in the current workspace, ordered by creation date (newest first).","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false}],"responses":{"200":{"description":"List all projects","schema":{"type":"array","items":{"$ref":"#/definitions/Api_V1_Entities_Project"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"}},"tags":["Projects"],"operationId":"listProjects"},"post":{"summary":"Create a new project","description":"Creates a new project in the workspace. Projects are used to organize related applications together.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"name":"createProject","in":"body","required":true,"schema":{"$ref":"#/definitions/createProject"}}],"responses":{"201":{"description":"Create a new project","schema":{"$ref":"#/definitions/Api_V1_Entities_Project"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"422":{"description":"Validation error"}},"tags":["Projects"],"operationId":"createProject"}},"/api/v1/projects/{project_id}":{"get":{"summary":"Get project details","description":"Retrieves detailed information about a specific project by ID or UUID.","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"project_id","description":"Project ID or UUID","type":"string","required":true}],"responses":{"200":{"description":"Get project details","schema":{"$ref":"#/definitions/Api_V1_Entities_Project"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Project not found"}},"tags":["Projects"],"operationId":"getProject"},"put":{"summary":"Update a project","description":"Updates the name or description of an existing project.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"project_id","description":"Project ID or UUID","type":"string","required":true},{"name":"updateProject","in":"body","required":true,"schema":{"$ref":"#/definitions/updateProject"}}],"responses":{"200":{"description":"Update a project","schema":{"$ref":"#/definitions/Api_V1_Entities_Project"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Project not found"},"422":{"description":"Validation error"}},"tags":["Projects"],"operationId":"updateProject"},"delete":{"summary":"Delete a project","description":"Permanently deletes a project and all its applications. Only the project owner can delete it. This action cannot be undone.","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"project_id","description":"Project ID or UUID","type":"string","required":true}],"responses":{"401":{"description":"Unauthorized"},"204":{"description":"Delete a project","schema":{"$ref":"#/definitions/Api_V1_Entities_Message"}},"403":{"description":"Only owner can delete"},"404":{"description":"Project not found"},"422":{"description":"Delete failed"}},"tags":["Projects"],"operationId":"deleteProject"}},"/api/v1/projects/{project_id}/apps":{"get":{"summary":"List project applications","description":"Returns all applications belonging to the specified project, ordered by creation date (newest first).","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"project_id","description":"Project ID or UUID","type":"string","required":true}],"responses":{"200":{"description":"List project applications","schema":{"type":"array","items":{"$ref":"#/definitions/Api_V1_Entities_App"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Project not found"}},"tags":["Projects"],"operationId":"listProjectApps"}},"/api/v1/projects/{project_id}/vars":{"get":{"summary":"List project environment variables","description":"Returns all environment variables defined at the project level. These variables are shared across all applications in the project that have project variables enabled.","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"project_id","description":"Project ID or UUID","type":"string","required":true}],"responses":{"200":{"description":"List project environment variables","schema":{"type":"array","items":{"$ref":"#/definitions/Api_V1_Entities_Variable"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Project not found"}},"tags":["Project Environment Variables"],"operationId":"listProjectVars"},"post":{"summary":"Create a project environment variable","description":"Adds a new environment variable at the project level. Applications with project variables enabled will inherit this variable.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"project_id","description":"Project ID or UUID","type":"string","required":true},{"name":"createProjectVar","in":"body","required":true,"schema":{"$ref":"#/definitions/createProjectVar"}}],"responses":{"201":{"description":"Create a project environment variable"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Project not found"},"422":{"description":"Validation error"}},"tags":["Project Environment Variables"],"operationId":"createProjectVar"},"put":{"summary":"Update a project environment variable","description":"Updates the value of an existing project-level environment variable. Changes will propagate to all applications with project variables enabled.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"project_id","description":"Project ID or UUID","type":"string","required":true},{"name":"updateProjectVar","in":"body","required":true,"schema":{"$ref":"#/definitions/updateProjectVar"}}],"responses":{"200":{"description":"Update a project environment variable"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Project not found"},"422":{"description":"Validation error"}},"tags":["Project Environment Variables"],"operationId":"updateProjectVar"},"delete":{"summary":"Delete a project environment variable","description":"Removes a project-level environment variable. Applications will no longer have access to this variable.","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"project_id","description":"Project ID or UUID","type":"string","required":true},{"in":"query","name":"key","description":"Variable name to delete","type":"string","required":true}],"responses":{"204":{"description":"Delete a project environment variable"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Project not found"}},"tags":["Project Environment Variables"],"operationId":"deleteProjectVar"}},"/api/v1/regions":{"get":{"summary":"List available regions","description":"Returns all available deployment regions where resources can be provisioned.","produces":["application/json"],"responses":{"200":{"description":"List available regions","schema":{"type":"array","items":{"$ref":"#/definitions/Api_V1_Entities_Region"}}},"401":{"description":"Unauthorized"}},"tags":["Regions"],"operationId":"listRegions"}},"/api/v1/resources":{"get":{"summary":"List all resources","description":"Returns all compute resources (Migets) in the workspace. Resources provide CPU, RAM, and disk capacity for applications.","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false}],"responses":{"200":{"description":"List all resources","schema":{"type":"array","items":{"$ref":"#/definitions/Api_V1_Entities_Resource"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"}},"tags":["Resources"],"operationId":"listResources"},"post":{"summary":"Create a new resource","description":"Provisions a new compute resource (Miget) with the specified plan and region. May require checkout for paid plans.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"name":"createResource","in":"body","required":true,"schema":{"$ref":"#/definitions/createResource"}}],"responses":{"201":{"description":"Create a new resource","schema":{"$ref":"#/definitions/Api_V1_Entities_Resource"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"422":{"description":"Validation error"}},"tags":["Resources"],"operationId":"createResource"}},"/api/v1/resources/{uuid}":{"get":{"summary":"Get resource details","description":"Retrieves detailed information about a compute resource, including its plan, capacity limits, current usage, and available components.","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Resource UUID","type":"string","required":true}],"responses":{"200":{"description":"Get resource details","schema":{"$ref":"#/definitions/Api_V1_Entities_Resource"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Resource not found"}},"tags":["Resources"],"operationId":"getResource"},"put":{"summary":"Update a resource","description":"Upgrades or modifies a compute resource's plan or components. Changes may require payment confirmation.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Resource UUID","type":"string","required":true},{"name":"updateResource","in":"body","required":true,"schema":{"$ref":"#/definitions/updateResource"}}],"responses":{"200":{"description":"Update a resource","schema":{"$ref":"#/definitions/Api_V1_Entities_Resource"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Resource not found"},"422":{"description":"Update failed"}},"tags":["Resources"],"operationId":"updateResource"},"delete":{"summary":"Delete a resource","description":"Schedules a compute resource for deletion. All applications and data associated with this resource will be permanently removed.","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Resource UUID","type":"string","required":true}],"responses":{"401":{"description":"Unauthorized"},"204":{"description":"Delete a resource","schema":{"$ref":"#/definitions/Api_V1_Entities_Message"}},"403":{"description":"Forbidden"},"404":{"description":"Resource not found"},"422":{"description":"Delete failed"}},"tags":["Resources"],"operationId":"deleteResource"}},"/api/v1/resources/{uuid}/labels":{"patch":{"summary":"Update resource labels","description":"Updates the user-defined labels for a compute resource. Labels help identify resources (e.g., 'production', 'staging', 'sandbox').","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"uuid","description":"Resource UUID","type":"string","required":true},{"name":"updateResourceLabels","in":"body","required":true,"schema":{"$ref":"#/definitions/updateResourceLabels"}}],"responses":{"200":{"description":"Update resource labels","schema":{"$ref":"#/definitions/Api_V1_Entities_Resource"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Resource not found"},"422":{"description":"Validation failed"}},"tags":["Resources"],"operationId":"updateResourceLabels"}},"/api/v1/services":{"get":{"summary":"List all services","description":"Returns all standalone services (databases, shared storage) in the workspace that are not attached to a specific application.","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false}],"responses":{"200":{"description":"List all services","schema":{"type":"array","items":{"$ref":"#/definitions/Api_V1_Entities_Service"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"}},"tags":["Services"],"operationId":"listServices"},"post":{"summary":"Create a new service","description":"Creates a standalone service (database or shared storage) that can be shared across multiple applications in a project.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"name":"createService","in":"body","required":true,"schema":{"$ref":"#/definitions/createService"}}],"responses":{"201":{"description":"Create a new service","schema":{"$ref":"#/definitions/Api_V1_Entities_Service"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"422":{"description":"Validation error"}},"tags":["Services"],"operationId":"createService"}},"/api/v1/services/{id}":{"get":{"summary":"Get service details","description":"Retrieves detailed information about a specific standalone service, including its configuration, resource allocation, and connection details.","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"id","description":"Service ID","type":"string","required":true}],"responses":{"200":{"description":"Get service details","schema":{"$ref":"#/definitions/Api_V1_Entities_Service"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Service not found"}},"tags":["Services"],"operationId":"getService"},"put":{"summary":"Update a service","description":"Modifies the configuration of a standalone service. You can adjust resource allocation without data loss.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"id","description":"Service ID","type":"string","required":true},{"name":"updateService","in":"body","required":true,"schema":{"$ref":"#/definitions/updateService"}}],"responses":{"200":{"description":"Update a service","schema":{"$ref":"#/definitions/Api_V1_Entities_Service"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Service not found"},"422":{"description":"Validation error"}},"tags":["Services"],"operationId":"updateService"},"delete":{"summary":"Delete a service","description":"Permanently removes a standalone service and all its data. This action cannot be undone - ensure you have backups if needed.","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"id","description":"Service ID","type":"string","required":true}],"responses":{"401":{"description":"Unauthorized"},"204":{"description":"Delete a service","schema":{"$ref":"#/definitions/Api_V1_Entities_Message"}},"403":{"description":"Forbidden"},"404":{"description":"Service not found"},"422":{"description":"Delete failed"}},"tags":["Services"],"operationId":"deleteService"}},"/api/v1/services/{id}/state":{"patch":{"summary":"Change service state","description":"Schedules a state change for the service (start, stop, or restart). The operation is performed asynchronously.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"id","description":"Service ID","type":"string","required":true},{"name":"updateServiceState","in":"body","required":true,"schema":{"$ref":"#/definitions/updateServiceState"}}],"responses":{"200":{"description":"Change service state","schema":{"$ref":"#/definitions/Api_V1_Entities_Message"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Service not found"}},"tags":["Services"],"operationId":"updateServiceState"}},"/api/v1/services/{id}/mount_app":{"post":{"summary":"Mount an application to a service","description":"Mounts an application to a shared storage service, creating a storage addon on the app linked to this service.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"id","description":"Service UUID","type":"string","required":true},{"name":"mountAppToService","in":"body","required":true,"schema":{"$ref":"#/definitions/mountAppToService"}}],"responses":{"201":{"description":"Mount an application to a service","schema":{"$ref":"#/definitions/Api_V1_Entities_Service"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Service or App not found"},"422":{"description":"Validation error"}},"tags":["Services"],"operationId":"mountAppToService"}},"/api/v1/services/{id}/unmount_app":{"post":{"summary":"Unmount an application from a service","description":"Unmounts an application from a shared storage service, removing the storage addon from the app.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"id","description":"Service UUID","type":"string","required":true},{"name":"unmountAppFromService","in":"body","required":true,"schema":{"$ref":"#/definitions/unmountAppFromService"}}],"responses":{"201":{"description":"Unmount an application from a service","schema":{"$ref":"#/definitions/Api_V1_Entities_Service"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Service or App not found"},"422":{"description":"Validation error"}},"tags":["Services"],"operationId":"unmountAppFromService"}},"/api/v1/services/{id}/rotate_password":{"post":{"summary":"Rotate service password","description":"Rotates the password for a standalone service (database, cache, etc.). Only certain service types support password rotation (databases like PostgreSQL, MySQL, and caches like Valkey). The new password will be returned in the response. You must update ENV variables manually after rotation.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"id","description":"Service ID","type":"string","required":true}],"responses":{"201":{"description":"Rotate service password","schema":{"$ref":"#/definitions/Api_V1_Entities_Message"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Service not found"},"422":{"description":"Password rotation not supported for this service type"}},"tags":["Services"],"operationId":"rotateServicePassword"}},"/api/v1/services/{id}/backups":{"get":{"summary":"Get service backups","description":"Retrieves backup information for a PostgreSQL service, including backup list, schedule, and cluster status.","produces":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"id","description":"Service ID","type":"string","required":true}],"responses":{"200":{"description":"Get service backups","schema":{"$ref":"#/definitions/Api_V1_Entities_Backup"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Service not found"},"422":{"description":"Not a PostgreSQL service"}},"tags":["Services"],"operationId":"getServiceBackups"}},"/api/v1/services/{id}/restore_backup":{"post":{"summary":"Restore service from backup","description":"Initiates a database restore for a PostgreSQL service. Provide either backup_name for a specific backup, target_time for point-in-time recovery, or neither for the latest backup.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"id","description":"Service ID","type":"string","required":true},{"name":"restoreServiceBackup","in":"body","required":true,"schema":{"$ref":"#/definitions/restoreServiceBackup"}}],"responses":{"201":{"description":"Restore service from backup","schema":{"$ref":"#/definitions/Api_V1_Entities_Message"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Service not found"},"422":{"description":"Validation error"}},"tags":["Services"],"operationId":"restoreServiceBackup"}},"/api/v1/services/{id}/reset_database":{"post":{"summary":"Reset service database","description":"Drops all data in the database while keeping the database user and name. This action cannot be undone.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"id","description":"Service ID","type":"string","required":true}],"responses":{"201":{"description":"Reset service database","schema":{"$ref":"#/definitions/Api_V1_Entities_Message"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Service not found"},"422":{"description":"Validation error"}},"tags":["Services"],"operationId":"resetServiceDatabase"}},"/api/v1/services/{id}/create_replica":{"post":{"summary":"Create a read replica of a PostgreSQL service","description":"Creates a new read replica of the specified PostgreSQL service. The replica shares credentials with the primary and uses the same resource allocation.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"id","description":"Service ID","type":"string","required":true},{"name":"createServiceReplica","in":"body","required":true,"schema":{"$ref":"#/definitions/createServiceReplica"}}],"responses":{"201":{"description":"Create a read replica of a PostgreSQL service","schema":{"$ref":"#/definitions/Api_V1_Entities_Service"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Service not found"},"422":{"description":"Validation error"}},"tags":["Services"],"operationId":"createServiceReplica"}},"/api/v1/services/{id}/promote_replica":{"post":{"summary":"Promote a service read replica to standalone instance","description":"Promotes a PostgreSQL service read replica to a standalone instance. The replica will no longer receive updates from the primary database. This action cannot be undone.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"id","description":"Service ID","type":"string","required":true}],"responses":{"201":{"description":"Promote a service read replica to standalone instance","schema":{"$ref":"#/definitions/Api_V1_Entities_Message"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Service not found"},"422":{"description":"Validation error"}},"tags":["Services"],"operationId":"promoteServiceReplica"}},"/api/v1/services/{id}/promote_external":{"post":{"summary":"Promote a service external replica to standalone instance or cluster","description":"Promotes a PostgreSQL service external replica to a standalone instance or HA cluster. The replica will disconnect from the external source and become an independent database. This action cannot be undone.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"in":"header","name":"X-Workspace-Id","description":"Workspace ID (uses default workspace if not provided)","type":"string","required":false},{"in":"path","name":"id","description":"Service ID","type":"string","required":true}],"responses":{"201":{"description":"Promote a service external replica to standalone instance or cluster","schema":{"$ref":"#/definitions/Api_V1_Entities_Message"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Service not found"},"422":{"description":"Validation error"}},"tags":["Services"],"operationId":"promoteServiceExternalReplica"}},"/api/v1/users/me":{"get":{"summary":"Get current user profile","description":"Returns the profile information of the currently authenticated user.","produces":["application/json"],"responses":{"200":{"description":"Get current user profile","schema":{"$ref":"#/definitions/Api_V1_Entities_User"}},"401":{"description":"Unauthorized"}},"tags":["Users"],"operationId":"getCurrentUser"}},"/api/v1/users/me/ssh_keys":{"get":{"summary":"List SSH keys","description":"Returns all SSH keys registered for the current user. Keys are used for secure Git operations.","produces":["application/json"],"responses":{"200":{"description":"List SSH keys","schema":{"type":"array","items":{"$ref":"#/definitions/Api_V1_Entities_SshKey"}}},"401":{"description":"Unauthorized"}},"tags":["Users - SSH Keys"],"operationId":"listSshKeys"},"post":{"summary":"Add an SSH key","description":"Registers a new SSH public key for the current user. The key must be in OpenSSH format.","produces":["application/json"],"consumes":["application/json"],"parameters":[{"name":"createSshKey","in":"body","required":true,"schema":{"$ref":"#/definitions/createSshKey"}}],"responses":{"201":{"description":"Add an SSH key","schema":{"$ref":"#/definitions/Api_V1_Entities_SshKey"}},"401":{"description":"Unauthorized"},"422":{"description":"Invalid key format"}},"tags":["Users - SSH Keys"],"operationId":"createSshKey"}},"/api/v1/users/me/ssh_keys/{id}":{"get":{"summary":"Get SSH key details","description":"Retrieves a specific SSH key by ID.","produces":["application/json"],"parameters":[{"in":"path","name":"id","description":"SSH key ID","type":"string","required":true}],"responses":{"200":{"description":"Get SSH key details","schema":{"$ref":"#/definitions/Api_V1_Entities_SshKey"}},"401":{"description":"Unauthorized"},"404":{"description":"SSH key not found"}},"tags":["Users - SSH Keys"],"operationId":"getSshKey"},"delete":{"summary":"Remove an SSH key","description":"Removes an SSH key from your account. The key will no longer be authorized for Git operations.","produces":["application/json"],"parameters":[{"in":"path","name":"id","description":"SSH key ID","type":"string","required":true}],"responses":{"204":{"description":"Remove an SSH key"},"401":{"description":"Unauthorized"},"404":{"description":"SSH key not found"}},"tags":["Users - SSH Keys"],"operationId":"deleteSshKey"}},"/api/v1/users/me/credits":{"get":{"summary":"Get current user credits","description":"Returns credit balance, referral code, and credit operation history for the authenticated user.","produces":["application/json"],"responses":{"200":{"description":"Get current user credits","schema":{"$ref":"#/definitions/Api_V1_Entities_Credit"}},"401":{"description":"Unauthorized"}},"tags":["Users - Credits"],"operationId":"getUserCredits"}}},"definitions":{"Api_V1_Entities_App":{"type":"object","properties":{"uuid":{"type":"string","description":"Unique application identifier"},"name":{"type":"string","description":"Service name (used in URLs)"},"label":{"type":"string","description":"Display name"},"state":{"type":"string","description":"Current state (pending, running, stopped, etc.)"},"project_id":{"type":"string","description":"Associated project UUID"},"deployment_method":{"type":"string","description":"Deployment method (git_push, public_git, github, docker_registry, parent_image, kamal)"},"deployment_config":{"type":"object","description":"Deployment configuration (fields vary by deployment method)"},"builder":{"type":"string","description":"Build strategy (auto, dockerfile, custom)"},"manage_dns_records":{"type":"boolean","description":"Auto DNS management enabled"},"maintenance":{"type":"boolean","description":"Maintenance mode enabled"},"service_name":{"type":"string","description":"Internal service name"},"allow_connections":{"type":"boolean","description":"Allow internal connections"},"quota":{"type":"object","description":"Resource quota configuration"},"created_at":{"type":"string","format":"date-time","description":"Creation timestamp"},"updated_at":{"type":"string","format":"date-time","description":"Last update timestamp"},"miget":{"$ref":"#/definitions/Api_V1_Entities_Resource","description":"Assigned compute resource"},"addons":{"type":"array","items":{"$ref":"#/definitions/Api_V1_Entities_Addon"},"description":"Attached add-ons"},"cronjobs":{"type":"array","items":{"$ref":"#/definitions/Api_V1_Entities_Addon"},"description":"Scheduled cron jobs"}},"required":["uuid","name","label","state","project_id","deployment_method","deployment_config","builder","manage_dns_records","maintenance","service_name","allow_connections","quota","created_at","updated_at","miget","addons","cronjobs"],"description":"Api_V1_Entities_App model"},"Api_V1_Entities_Resource":{"type":"object","properties":{"uuid":{"type":"string","description":"Unique resource identifier"},"name":{"type":"string","description":"Resource name"},"state":{"type":"string","description":"Current state"},"labels":{"type":"array","items":{"type":"string"},"description":"User-defined labels for identification"},"total_disk_size":{"type":"number","format":"float","description":"Total disk capacity in GiB"},"total_ram_size":{"type":"number","format":"float","description":"Total RAM capacity in MiB"},"total_cpu_size":{"type":"number","format":"float","description":"Total CPU capacity in cores"},"total_used_disk_size":{"type":"number","format":"float","description":"Used disk in GiB"},"total_used_ram_size":{"type":"number","format":"float","description":"Used RAM in MiB"},"total_used_cpu_size":{"type":"number","format":"float","description":"Used CPU in cores"},"available_cpu_size":{"type":"number","format":"float","description":"Available CPU in cores"},"available_disk_size":{"type":"number","format":"float","description":"Available disk in GiB"},"available_ram_size":{"type":"number","format":"float","description":"Available RAM in MiB"},"created_at":{"type":"string","format":"date-time","description":"Creation timestamp"},"updated_at":{"type":"string","format":"date-time","description":"Last update timestamp"},"plan":{"$ref":"#/definitions/Api_V1_Entities_Plan","description":"Associated plan"},"components":{"type":"array","items":{"$ref":"#/definitions/Api_V1_Entities_Component"},"description":"Additional components"}},"required":["uuid","name","state","labels","total_disk_size","total_ram_size","total_cpu_size","total_used_disk_size","total_used_ram_size","total_used_cpu_size","available_cpu_size","available_disk_size","available_ram_size","created_at","updated_at","plan","components"],"description":"Api_V1_Entities_Resource model"},"Api_V1_Entities_Plan":{"type":"object","properties":{"name":{"type":"string","description":"Plan name"},"code_name":{"type":"string","description":"Plan code identifier"},"description":{"type":"string","description":"Plan description"},"ram_size":{"type":"number","format":"float","description":"RAM allocation in MiB"},"disk_size":{"type":"number","format":"float","description":"Disk storage in GiB"},"cpu_size":{"type":"number","format":"float","description":"CPU allocation in cores"},"unit_price":{"type":"integer","format":"int32","description":"Price in cents per billing period"}},"required":["name","code_name","description","ram_size","disk_size","cpu_size","unit_price"],"description":"Api_V1_Entities_Plan model"},"Api_V1_Entities_Component":{"type":"object","properties":{"name":{"type":"string","description":"Component name"},"code_name":{"type":"string","description":"Component code identifier"},"unit_price":{"type":"integer","format":"int32","description":"Price in cents per unit"}},"required":["name","code_name","unit_price"],"description":"Api_V1_Entities_Component model"},"Api_V1_Entities_Addon":{"type":"object","properties":{"uuid":{"type":"string","description":"Add-on UUID"},"name":{"type":"string","description":"Add-on name"},"type":{"type":"string","description":"Add-on type (postgres, mysql, valkey, storage, cronjob)"},"label":{"type":"string","description":"Display name"},"state":{"type":"string","description":"Current state"},"quota":{"type":"object","description":"Resource quota configuration"},"settings":{"type":"object","description":"Add-on specific settings"},"var":{"type":"object","description":"Connection environment variables"},"created_at":{"type":"string","format":"date-time","description":"Creation timestamp"},"updated_at":{"type":"string","format":"date-time","description":"Last update timestamp"},"connection_details":{"type":"object","example":{"internal":{"hostname":"my-addon-xxx.internal","database":"db_name","port":5432,"username":"db_user","password":"db_password","connection_url":"postgres://db_user:db_password@my-addon-xxx.internal:5432/db_name"},"external":{"external_connection_url":"postgres://db_user:db_password@my-addon-xxx.external:5432/db_name","psql_command":"PGPASSWORD=db_password psql -h my-addon-xxx.external -U db_user db_name"}},"description":"Connection details for the addon"}},"required":["uuid","name","type","label","state","quota","settings","var","created_at","updated_at","connection_details"],"description":"Api_V1_Entities_Addon model"},"createApp":{"type":"object","properties":{"label":{"type":"string","description":"Human-readable display name for the application"},"name":{"type":"string","description":"Unique service name (used in URLs and DNS). Must be lowercase, alphanumeric with hyphens."},"project_id":{"type":"string","description":"UUID of the project to create the application in"},"resource_id":{"type":"string","description":"UUID of the compute resource (Miget) to assign. The app's region is derived from this resource."},"builder":{"type":"string","description":"Build strategy: 'auto' for automatic buildpack detection, 'dockerfile' for custom Dockerfile builds, 'custom' for language-specific builder","enum":["auto","dockerfile","custom"]},"ram_size":{"type":"number","format":"float","description":"RAM allocation in MiB (e.g., 256, 512, 1024)"},"cpu_size":{"type":"number","format":"float","description":"CPU allocation in cores (e.g., 0.5, 1.0, 2.0)"},"deployment_method":{"type":"string","description":"Deployment method: 'git_push', 'public_git', 'github', 'docker_registry', 'parent_image', or 'kamal'","enum":["git_push","parent_image","container_registry","github","public_git","kamal"]},"deployment_config":{"type":"object","description":"Deployment configuration (fields depend on deployment_method)","properties":{"credential_id":{"type":"string","description":"UUID of stored credentials (for github, public_git, container_registry)"},"image_url":{"type":"string","description":"Container image URL (for container_registry)"},"tag":{"type":"string","description":"Container image tag (for container_registry)"},"repository":{"type":"string","description":"Repository name (for github)"},"branch":{"type":"string","description":"Branch name (for github, public_git)"},"dockerfile_path":{"type":"string","description":"Path to Dockerfile (for github, public_git, git_push)"},"build_context":{"type":"string","description":"Docker build context path (for github, public_git, git_push)"},"auto_deploy_enabled":{"type":"boolean","description":"Enable auto-deploy on push (for github)"},"auto_deploy_branch":{"type":"string","description":"Branch for auto-deploy (for github)"},"parent_app_id":{"type":"string","description":"UUID of parent app (for parent_image)"},"parent_image_auto_sync":{"type":"boolean","description":"Auto-sync with parent image (for parent_image)"},"ssh_keys":{"type":"array","description":"SSH public keys for deployment access (for kamal)","items":{"type":"string"}},"command":{"type":"array","description":"Container ENTRYPOINT override (Kubernetes container.command). Only used for container_registry deployments. Leave unset to use the image's baked-in ENTRYPOINT.","items":{"type":"string"}},"args":{"type":"array","description":"Container CMD override (Kubernetes container.args). Only used for container_registry deployments. Leave unset to use the image's baked-in CMD.","items":{"type":"string"}}}},"app_vars_attributes":{"type":"array","description":"Environment variables to set on the app","items":{"type":"object","properties":{"key":{"type":"string","description":"Variable name (SCREAMING_SNAKE_CASE)"},"value":{"type":"string","description":"Variable value"}},"required":["key","value"]}}},"required":["label","name","project_id","resource_id","builder"],"description":"Create a new application"},"updateApp":{"type":"object","properties":{"label":{"type":"string","description":"Human-readable display name for the application"},"project_id":{"type":"string","description":"UUID of the project to move the application to"},"builder":{"type":"string","description":"Build strategy: 'auto' for automatic buildpack detection, 'dockerfile' for custom Dockerfile builds, 'custom' for language-specific builder","enum":["auto","dockerfile","custom"]},"manage_dns_records":{"type":"boolean","description":"Enable automatic DNS record management for custom domains"},"maintenance":{"type":"boolean","description":"Enable maintenance mode (shows maintenance page to visitors)"},"ram_size":{"type":"number","format":"float","description":"RAM allocation in MiB (e.g., 256, 512, 1024)"},"cpu_size":{"type":"number","format":"float","description":"CPU allocation in cores (e.g., 0.5, 1.0, 2.0)"}},"description":"Update application settings"},"Api_V1_Entities_Message":{"type":"object","properties":{"message":{"type":"string","description":"Response message"}},"required":["message"],"description":"Api_V1_Entities_Message model"},"updateAppState":{"type":"object","properties":{"state":{"type":"string","description":"Target state: 'schedule_start' to start, 'schedule_stop' to stop, 'schedule_restart' to restart","enum":["schedule_stop","schedule_start","schedule_restart"]}},"required":["state"],"description":"Change application state"},"updateAppSecurity":{"type":"object","properties":{"allow_connections":{"type":"boolean","description":"Allow internal network connections from other Miget applications in this workspace"},"basic_auth_enabled":{"type":"boolean","description":"Enable Basic Authentication for the application"},"basic_auth_username":{"type":"string","description":"Username for Basic Authentication (required when basic_auth_enabled is true)"},"basic_auth_password":{"type":"string","description":"Password for Basic Authentication (required when basic_auth_enabled is true, leave blank to keep current password)"}},"description":"Update security settings"},"cloneApp":{"type":"object","properties":{"label":{"type":"string","description":"Human-readable display name for the cloned application"},"name":{"type":"string","description":"Unique service name for the cloned application (used in URLs and DNS)"},"project_id":{"type":"string","description":"UUID of the project to create the cloned application in"},"resource_id":{"type":"string","description":"UUID of the compute resource (Miget) to assign to the cloned application"},"use_parent_image":{"type":"boolean","description":"Use the source application as a parent image (inherits container image)","default":false},"parent_image_auto_sync":{"type":"boolean","description":"Automatically deploy when parent application's image is updated","default":false},"clone_variables":{"type":"boolean","description":"Copy environment variables from source application","default":false},"clone_secret_files":{"type":"boolean","description":"Copy secret files from source application","default":false},"clone_scaling_settings":{"type":"boolean","description":"Copy auto-scaling configuration from source application","default":false},"clone_health_checks":{"type":"boolean","description":"Copy health check configuration from source application","default":false},"addons":{"type":"array","description":"Add-ons to clone from source application","items":{"type":"object","properties":{"uuid":{"type":"string","description":"Add-on UUID to clone"},"clone_data":{"type":"boolean","description":"Include add-on data (database contents, files)","default":false}},"required":["uuid","clone_data"]}},"cronjobs":{"type":"array","description":"Array of cron job UUIDs to clone from source application","items":{"type":"string"}}},"required":["label","name","project_id","resource_id"],"description":"Clone an application"},"deployApp":{"type":"object","properties":{"custom_tag":{"type":"string","description":"Custom image tag to deploy (optional)"},"commit_sha":{"type":"string","description":"Specific commit SHA to deploy (optional, for Git/GitHub deployments)"},"branch":{"type":"string","description":"Branch name for deployment (optional, for GitHub deployments)"}},"description":"Deploy application"},"updateAppDeployment":{"type":"object","properties":{"deployment_method":{"type":"string","description":"Deployment method: 'git_push', 'public_git', 'github', 'container_registry', 'parent_image', or 'kamal'","enum":["git_push","parent_image","container_registry","github","public_git","kamal"]},"deployment_config_attributes":{"type":"object","description":"Kamal deployment configuration","properties":{"credential_id":{"type":"string","description":"UUID of stored container registry credentials"},"image_url":{"type":"string","description":"Full container image URL (e.g., docker.io/library/nginx)"},"tag":{"type":"string","description":"Container image tag (e.g., latest, v1.0.0)"},"command":{"type":"array","description":"Container ENTRYPOINT override (Kubernetes container.command). Leave unset to use the image's baked-in ENTRYPOINT.","items":{"type":"string"}},"args":{"type":"array","description":"Container CMD override (Kubernetes container.args). Leave unset to use the image's baked-in CMD.","items":{"type":"string"}},"parent_app_id":{"type":"string","description":"UUID of parent application for image inheritance"},"parent_image_auto_sync":{"type":"boolean","description":"Automatically deploy when parent image is updated"},"ssh_keys":{"type":"array","description":"SSH public keys for Kamal deployment access","items":{"type":"string"}}},"required":["image_url","tag","parent_app_id","parent_image_auto_sync"]}},"required":["deployment_method"],"description":"Update application deployment configuration"},"updateAppScalingProfile":{"type":"object","properties":{"replicas":{"type":"integer","format":"int32","description":"Fixed number of running instances (ignored when auto-scaling is enabled)"},"auto_scaling_enabled":{"type":"boolean","description":"Enable automatic horizontal scaling based on resource usage"},"auto_min_replicas":{"type":"integer","format":"int32","description":"Minimum number of instances when auto-scaling (at least 1)"},"auto_max_replicas":{"type":"integer","format":"int32","description":"Maximum number of instances when auto-scaling"},"scaling_start_time":{"type":"string","description":"Start time for scheduled scaling window (HH:MM format, 24-hour)"},"scaling_end_time":{"type":"string","description":"End time for scheduled scaling window (HH:MM format, 24-hour)"},"within_resources":{"type":"boolean","description":"Limit scaling to available resource allocation"},"cpu_threshold":{"type":"integer","format":"int32","description":"CPU usage percentage that triggers scale-up (1-100)"},"memory_threshold":{"type":"integer","format":"int32","description":"Memory usage percentage that triggers scale-up (1-100)"},"period_enabled":{"type":"boolean","description":"Enable time-based scaling windows"}},"description":"Update scaling profile"},"updateAppHealthChecks":{"type":"object","properties":{"liveness_probe_enabled":{"type":"boolean","description":"Enable liveness probe (restarts container if unhealthy)"},"readiness_probe_enabled":{"type":"boolean","description":"Enable readiness probe (removes from load balancer if not ready)"},"startup_probe_enabled":{"type":"boolean","description":"Enable startup probe (delays other probes until app starts)"},"liveness_in_app_failure_notification_enabled":{"type":"boolean","description":"Send in-app notification on liveness probe failure"},"liveness_email_failure_notification_enabled":{"type":"boolean","description":"Send email notification on liveness probe failure"},"readiness_in_app_failure_notification_enabled":{"type":"boolean","description":"Send in-app notification on readiness probe failure"},"readiness_email_failure_notification_enabled":{"type":"boolean","description":"Send email notification on readiness probe failure"},"startup_in_app_failure_notification_enabled":{"type":"boolean","description":"Send in-app notification on startup probe failure"},"startup_email_failure_notification_enabled":{"type":"boolean","description":"Send email notification on startup probe failure"},"project_variables_enabled":{"type":"boolean","description":"Include project-level environment variables in health checks"},"liveness_probe_path":{"type":"string","description":"HTTP endpoint path for liveness checks (e.g., /health)"},"readiness_probe_path":{"type":"string","description":"HTTP endpoint path for readiness checks (e.g., /ready)"},"startup_probe_path":{"type":"string","description":"HTTP endpoint path for startup checks (e.g., /startup)"},"liveness_probe_initial_delay_seconds":{"type":"integer","format":"int32","description":"Seconds to wait before first liveness probe"},"liveness_probe_timeout_seconds":{"type":"integer","format":"int32","description":"Seconds before liveness probe times out"},"liveness_probe_period_seconds":{"type":"integer","format":"int32","description":"Interval between liveness probes in seconds"},"liveness_probe_failure_threshold":{"type":"integer","format":"int32","description":"Consecutive failures before container restart"},"readiness_probe_initial_delay_seconds":{"type":"integer","format":"int32","description":"Seconds to wait before first readiness probe"},"readiness_probe_timeout_seconds":{"type":"integer","format":"int32","description":"Seconds before readiness probe times out"},"readiness_probe_period_seconds":{"type":"integer","format":"int32","description":"Interval between readiness probes in seconds"},"readiness_probe_failure_threshold":{"type":"integer","format":"int32","description":"Consecutive failures before removing from load balancer"},"startup_probe_initial_delay_seconds":{"type":"integer","format":"int32","description":"Seconds to wait before first startup probe"},"startup_probe_timeout_seconds":{"type":"integer","format":"int32","description":"Seconds before startup probe times out"},"startup_probe_period_seconds":{"type":"integer","format":"int32","description":"Interval between startup probes in seconds"},"startup_probe_failure_threshold":{"type":"integer","format":"int32","description":"Consecutive failures before giving up on startup"}},"description":"Update health checks"},"Api_V1_Entities_Domain":{"type":"object","properties":{"uuid":{"type":"string","description":"Unique domain identifier"},"name":{"type":"string","description":"Domain name"},"dns_target":{"type":"string","description":"DNS CNAME target — populated only after verification succeeds"},"verification_status":{"type":"string","description":"Verification state: 'pending', 'in_progress', 'verified', or 'failed'"},"verification_token":{"type":"string","description":"Token to publish as TXT _migetapp-verify.\u003cdomain\u003e. Populated only while verification is needed; cleared once verified."},"created_at":{"type":"string","format":"date-time","description":"Creation timestamp"},"updated_at":{"type":"string","format":"date-time","description":"Last update timestamp"}},"required":["uuid","name","dns_target","verification_status","verification_token","created_at","updated_at"],"description":"Api_V1_Entities_Domain model"},"updateAppDomain":{"type":"object","properties":{"domain":{"type":"object","description":"Domain configuration","properties":{"name":{"type":"string","description":"Fully qualified domain name (e.g., app.example.com)"}}}},"required":["domain"],"description":"Update a custom domain"},"createAppDomain":{"type":"object","properties":{"domain":{"type":"object","description":"Domain configuration","properties":{"name":{"type":"string","description":"Fully qualified domain name (e.g., app.example.com)"}},"required":["name"]}},"required":["domain"],"description":"Add a custom domain"},"createAppAddon":{"type":"object","properties":{"type":{"type":"string","description":"Add-on type: 'postgres' (PostgreSQL), 'mysql' (MySQL), 'valkey' (Redis-compatible cache), 'storage' (persistent volume)","enum":["postgres","mysql","valkey","storage"]},"label":{"type":"string","description":"Human-readable display name for the add-on"},"ram_size":{"type":"number","format":"float","description":"RAM allocation in MiB (e.g., 64, 128, 256)"},"disk_size":{"type":"number","format":"float","description":"Disk storage in GiB (e.g., 1, 5, 10)"},"cpu_size":{"type":"number","format":"float","description":"CPU allocation in cores (e.g., 0.1, 0.25, 0.5)"},"postgres_version":{"type":"string","description":"PostgreSQL version (e.g., '15', '16'). Only for postgres type."},"mysql_version":{"type":"string","description":"MySQL version (e.g., '8.0', '8.4'). Only for mysql type."},"valkey_version":{"type":"string","description":"Valkey version (e.g., '7.2'). Only for valkey type."},"public_access":{"type":"string","description":"Enable public internet access: '0' disabled, '1' enabled. For postgres type.","enum":["0","1"]},"instances":{"type":"integer","format":"int32","description":"Number of database instances (1 for standalone, 3/5/7 for HA cluster). For postgres type.","enum":[1,3,5,7]},"creation_mode":{"type":"string","description":"Creation mode: 'fresh' (new database, default), 'external_replica' (replica of external PostgreSQL). For postgres type.","enum":["fresh","external_replica"]},"external_host":{"type":"string","description":"Hostname of the external PostgreSQL source database. Required for external_replica mode."},"external_port":{"type":"integer","format":"int32","description":"Port of the external PostgreSQL source database. Required for external_replica mode."},"auth_type":{"type":"string","description":"Authentication method for external replica: 'password' or 'tls'. Required for external_replica mode.","enum":["password","tls"]},"replication_username":{"type":"string","description":"Username for replication connection to external database."},"replication_password":{"type":"string","description":"Password for replication connection (password auth). Required when auth_type is 'password'."},"ca_crt":{"type":"string","description":"CA certificate for TLS authentication. Required when auth_type is 'tls'."},"tls_crt":{"type":"string","description":"TLS client certificate. Required when auth_type is 'tls'."},"tls_key":{"type":"string","description":"TLS client key. Required when auth_type is 'tls'."},"s3_enabled":{"type":"string","description":"Enable S3 WAL archive fallback: '0' disabled, '1' enabled. For external_replica mode.","enum":["0","1"]},"s3_endpoint":{"type":"string","description":"S3 endpoint URL. Required when s3_enabled is '1'."},"s3_bucket":{"type":"string","description":"S3 bucket name. Required when s3_enabled is '1'."},"s3_path":{"type":"string","description":"S3 path prefix. Required when s3_enabled is '1'."},"s3_access_key":{"type":"string","description":"S3 access key. Required when s3_enabled is '1'."},"s3_secret_key":{"type":"string","description":"S3 secret key. Required when s3_enabled is '1'."},"s3_server_name":{"type":"string","description":"Archive server name from barman-cloud-wal-archive. Required when s3_enabled is '1'."},"service_id":{"type":"integer","format":"int32","description":"Associated service ID for shared storage add-ons"},"mount_point":{"type":"string","description":"Container mount path (e.g., /data). For storage type."},"storage_access":{"type":"string","description":"Access mode: 'RWO' (single node read-write), 'RWX' (multi-node read-write). For storage type.","enum":["RWO","RWX"]}},"required":["type"],"description":"Create a new add-on"},"updateAppAddon":{"type":"object","properties":{"label":{"type":"string","description":"Human-readable display name for the add-on"},"ram_size":{"type":"number","format":"float","description":"RAM allocation in MiB (e.g., 64, 128, 256)"},"disk_size":{"type":"number","format":"float","description":"Disk storage in GiB (e.g., 1, 5, 10)"},"cpu_size":{"type":"number","format":"float","description":"CPU allocation in cores (e.g., 0.1, 0.25, 0.5)"},"public_access":{"type":"string","description":"Enable public internet access: '0' disabled, '1' enabled. For postgres type.","enum":["0","1"]},"backup_enabled":{"type":"string","description":"Enable automatic backups: '0' disabled, '1' enabled. For postgres type.","enum":["0","1"]},"scheduled_backup":{"type":"string","description":"Cron expression for backup schedule (6-field: second minute hour day month weekday). For postgres type."},"instances":{"type":"integer","format":"int32","description":"Number of database instances (1 for standalone, 3/5/7 for HA cluster). For postgres type.","enum":[1,3,5,7]}},"description":"Update an add-on"},"updateAppAddonState":{"type":"object","properties":{"state":{"type":"string","description":"Target state: 'process_start' to start, 'process_stop' to stop, 'process_restart' to restart","enum":["process_start","process_stop","process_restart"]}},"required":["state"],"description":"Change add-on state"},"Api_V1_Entities_Backup":{"type":"object","properties":{"backup_enabled":{"type":"boolean","description":"Whether backups are enabled"},"backups":{"type":"array","items":{"type":"object"},"description":"List of backup records"},"scheduled_backup":{"type":"object","description":"Scheduled backup configuration"},"cluster_status":{"type":"object","description":"Cluster backup status information"}},"required":["backup_enabled","backups","scheduled_backup","cluster_status"],"description":"Api_V1_Entities_Backup model"},"restoreAppAddonBackup":{"type":"object","properties":{"backup_name":{"type":"string","description":"Name of a specific backup to restore from"},"target_time":{"type":"string","description":"ISO 8601 timestamp for point-in-time recovery"},"to_new_cluster":{"type":"string","description":"Set to '1' to restore to a new cluster instead of replacing the current one"}},"description":"Restore add-on from backup"},"createAppAddonReplica":{"type":"object","properties":{"cpu_size":{"type":"number","format":"float","description":"CPU allocation for the replica (defaults to primary's value)"},"ram_size":{"type":"integer","format":"int32","description":"RAM allocation in megabytes (defaults to primary's value)"}},"description":"Create a read replica of a PostgreSQL add-on"},"Api_V1_Entities_Variable":{"type":"object","properties":{"id":{"type":"integer","format":"int32","description":"Variable ID"},"key":{"type":"string","description":"Variable name"},"value":{"type":"string","description":"Variable value"},"created_at":{"type":"string","format":"date-time","description":"Creation timestamp"}},"required":["id","key","value","created_at"],"description":"Api_V1_Entities_Variable model"},"createAppVar":{"type":"object","properties":{"key":{"type":"string","description":"Variable name (e.g., DATABASE_URL, API_KEY). Use SCREAMING_SNAKE_CASE."},"value":{"type":"string","description":"Variable value. Sensitive data will be encrypted at rest."}},"required":["key","value"],"description":"Create an environment variable"},"updateAppVar":{"type":"object","properties":{"key":{"type":"string","description":"Variable name to update"},"value":{"type":"string","description":"New variable value"},"project_variables_enabled":{"type":"boolean","description":"Enable inheritance of project-level environment variables"}},"required":["key","value"],"description":"Update an environment variable"},"Api_V1_Entities_Cronjob":{"type":"object","properties":{"uuid":{"type":"string","description":"Cron job UUID"},"name":{"type":"string","description":"Cron job name"},"schedule_type":{"type":"string","description":"Schedule type (cron, interval)"},"interval_type":{"type":"string","description":"Interval type (every_10_minutes, hourly, daily)"},"hour":{"type":"string","description":"Hour component"},"minute":{"type":"string","description":"Minute component"},"command":{"type":"string","description":"Command to execute"},"status":{"type":"string","description":"Current status (running, stopped)"},"last_job_name":{"type":"string","description":"Name of the most recent run"},"last_job_status":{"type":"string","description":"Status of the most recent run (e.g. running, complete, failed)"},"last_job_run_at":{"type":"string","format":"date-time","description":"Last execution timestamp"},"created_at":{"type":"string","format":"date-time","description":"Creation timestamp"},"updated_at":{"type":"string","format":"date-time","description":"Last update timestamp"}},"required":["uuid","name","schedule_type","interval_type","hour","minute","command","status","last_job_name","last_job_status","last_job_run_at","created_at","updated_at"],"description":"Api_V1_Entities_Cronjob model"},"createAppCronjob":{"type":"object","properties":{"name":{"type":"string","description":"Unique cron job identifier"},"label":{"type":"string","description":"Human-readable display name for the cron job"},"schedule_type":{"type":"string","description":"Schedule type: 'cron' for custom cron expression, 'interval' for predefined intervals","enum":["cron","interval"]},"interval_type":{"type":"string","description":"Predefined interval: 'every_10_minutes', 'hourly', or 'daily'. Only for interval schedule type.","enum":["every_10_minutes","hourly","daily"]},"cron":{"type":"string","description":"Cron expression (e.g., '0 * * * *' for hourly). Only for cron schedule type."},"command":{"type":"string","description":"Shell command to execute (e.g., 'rake db:cleanup', 'python script.py')"},"daily_time":{"type":"string","description":"Execution time for daily jobs in HH:MM format (24-hour). Only for daily interval."},"minute":{"type":"string","description":"Minute component for scheduling (0-59)"},"hour":{"type":"string","description":"Hour component for scheduling (0-23)"}},"required":["name"],"description":"Create a cron job"},"updateAppCronjob":{"type":"object","properties":{"label":{"type":"string","description":"Human-readable display name for the cron job"},"command":{"type":"string","description":"Shell command to execute"}},"description":"Update a cron job"},"postApiV1AppsUuidWorkspacesWorkspaceNameAppsAppNamePorts":{"type":"object","properties":{"internal_port":{"type":"integer","format":"int32","description":"Internal port number (1-65535)"},"protocol":{"type":"string","description":"Protocol (tcp or udp)","enum":["tcp","udp"]},"public":{"type":"boolean","description":"Public Access","default":false}},"required":["internal_port","protocol"],"description":"Create a new port for an app"},"Api_V1_Entities_Deployment":{"type":"object","properties":{"uuid":{"type":"string","description":"Unique deployment identifier"},"state":{"type":"string","description":"Current deployment state (pending, running, completed, failed, cancelling, cancelled)"},"created_at":{"type":"string","format":"date-time","description":"Creation timestamp"},"updated_at":{"type":"string","format":"date-time","description":"Last update timestamp"},"logs_stored_at":{"type":"string","format":"date-time","description":"Timestamp when logs were stored (null if not yet stored)"}},"required":["uuid","state","created_at","updated_at","logs_stored_at"],"description":"Api_V1_Entities_Deployment model"},"signIn":{"type":"object","properties":{"email":{"type":"string","description":"User's email address"},"password":{"type":"string","description":"User's password"}},"required":["email","password"],"description":"Authenticate user"},"Api_V1_Entities_AuthTokens":{"type":"object","properties":{"access_token":{"type":"string","description":"JWT access token (30 min expiry)"},"refresh_token":{"type":"string","description":"JWT refresh token (7 days expiry)"}},"required":["access_token","refresh_token"],"description":"Api_V1_Entities_AuthTokens model"},"refreshToken":{"type":"object","properties":{"refresh_token":{"type":"string","description":"Valid refresh token obtained from sign in"}},"required":["refresh_token"],"description":"Refresh access token"},"Api_V1_Entities_AccessToken":{"type":"object","properties":{"access_token":{"type":"string","description":"New JWT access token"}},"required":["access_token"],"description":"Api_V1_Entities_AccessToken model"},"Api_V1_Entities_Bucket":{"type":"object","properties":{"uuid":{"type":"string","description":"Unique bucket identifier"},"name":{"type":"string","description":"Bucket name (used in S3 operations)"},"label":{"type":"string","description":"Display label"},"state":{"type":"string","description":"Current state (pending, active, failed, blocked)"},"visibility":{"type":"string","description":"Access visibility (public_access, private_access)"},"s3_endpoint":{"type":"string","description":"S3 endpoint URL"},"s3_access_key":{"type":"string","description":"S3 access key (use for S3-compatible client auth)"},"s3_secret_key":{"type":"string","description":"S3 secret key (use for S3-compatible client auth)"},"public_endpoint":{"type":"string","description":"Public HTTPS endpoint (only for public buckets)"},"region_code":{"type":"string","description":"Region code where bucket is located"},"usage_bytes":{"type":"integer","format":"int32","description":"Current storage usage in bytes"},"quota_bytes":{"type":"integer","format":"int32","description":"Storage quota in bytes"},"usage_percentage":{"type":"number","format":"float","description":"Storage usage percentage"},"object_count":{"type":"integer","format":"int32","description":"Total number of objects in bucket"},"created_at":{"type":"string","format":"date-time","description":"Creation timestamp"},"updated_at":{"type":"string","format":"date-time","description":"Last update timestamp"},"policy":{"type":"string","description":"S3-compatible bucket policy (JSON string)"},"acl":{"type":"string","description":"S3-compatible access control list (JSON string)"},"miget":{"$ref":"#/definitions/Api_V1_Entities_Resource","description":"Assigned compute resource"}},"required":["uuid","name","label","state","visibility","s3_endpoint","s3_access_key","s3_secret_key","region_code","usage_bytes","quota_bytes","usage_percentage","object_count","created_at","updated_at","miget"],"description":"Api_V1_Entities_Bucket model"},"createBucket":{"type":"object","properties":{"label":{"type":"string","description":"Bucket label (display name)"},"resource_id":{"type":"string","description":"UUID of the compute resource to attach the bucket to"},"miget_id":{"type":"string","description":"DEPRECATED: use resource_id instead"},"visibility":{"type":"string","description":"Bucket visibility: 'public_access' or 'private_access'","default":"private_access"},"disk_size":{"type":"number","format":"float","description":"Disk allocation in GiB","default":0.1}},"required":["label"],"description":"Create a new bucket"},"updateBucket":{"type":"object","properties":{"label":{"type":"string","description":"Bucket label (display name)"},"visibility":{"type":"string","description":"Bucket visibility: 'public_access' or 'private_access'"},"disk_size":{"type":"number","format":"float","description":"Disk allocation in GiB"}},"description":"Update bucket"},"updateBucketPolicy":{"type":"object","properties":{"policy":{"type":"string","description":"S3-compatible bucket policy as JSON string"}},"required":["policy"],"description":"Update bucket policy"},"updateBucketAcl":{"type":"object","properties":{"acl":{"type":"string","description":"S3-compatible ACL as XML string"}},"required":["acl"],"description":"Update bucket ACL"},"Api_V1_Entities_BucketObjectList":{"type":"object","properties":{"objects":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Object key (full path)"},"name":{"type":"string","description":"Object name (file or folder name)"},"is_folder":{"type":"boolean","description":"Whether this is a folder"},"size":{"type":"integer","format":"int32","description":"Object size in bytes (0 for folders)"},"last_modified":{"type":"string","format":"date-time","description":"Last modification timestamp"},"etag":{"type":"string","description":"ETag for the object"},"content_type":{"type":"string","description":"MIME content type"}},"required":["key","name","is_folder","size","content_type"]},"description":"List of bucket objects (files and folders)"},"current_path":{"type":"string","description":"Current folder path being viewed"},"has_more":{"type":"boolean","description":"Whether there are more objects to fetch"},"next_cursor":{"type":"string","description":"Pagination cursor for next page"}},"required":["objects","current_path","has_more"],"description":"Api_V1_Entities_BucketObjectList model"},"generateUploadUrl":{"type":"object","properties":{"key":{"type":"string","description":"Object key (file path)"},"size":{"type":"integer","format":"int32","description":"File size in bytes"},"content_type":{"type":"string","description":"File content type","default":"application/octet-stream"}},"required":["key","size"],"description":"Generate upload URL"},"generateDownloadUrl":{"type":"object","properties":{"key":{"type":"string","description":"Object key (file path)"}},"required":["key"],"description":"Generate download URL"},"createBucketFolder":{"type":"object","properties":{"folder_path":{"type":"string","description":"Folder path (should end with /)"}},"required":["folder_path"],"description":"Create folder"},"renameBucketObject":{"type":"object","properties":{"new_key":{"type":"string","description":"New object key (file path)"}},"required":["new_key"],"description":"Rename object"},"Api_V1_Entities_ContainerRegistryCredential":{"type":"object","properties":{"uuid":{"type":"string","description":"Unique credential identifier — pass this as deployment_config.credential_id when creating an app"},"name":{"type":"string","description":"Display name (unique per workspace)"},"registry":{"type":"string","description":"Registry provider: 'docker_hub', 'github', 'gitlab', 'aws_ecr', 'azure', 'digitalocean', 'quay', or 'generic'"},"username":{"type":"string","description":"Registry username"},"registry_hostname":{"type":"string","description":"Registry hostname (required for 'generic', 'aws_ecr', 'azure'; optional for others)"},"created_at":{"type":"string","format":"date-time","description":"Creation timestamp"},"updated_at":{"type":"string","format":"date-time","description":"Last update timestamp"}},"required":["uuid","name","registry","username","registry_hostname","created_at","updated_at"],"description":"Api_V1_Entities_ContainerRegistryCredential model"},"createContainerRegistryCredential":{"type":"object","properties":{"name":{"type":"string","description":"Display name (must be unique within the workspace)"},"registry":{"type":"string","description":"Registry provider","enum":["docker_hub","github","gitlab","aws_ecr","azure","digitalocean","quay","generic"]},"username":{"type":"string","description":"Registry username"},"token":{"type":"string","description":"Registry password or access token"},"registry_hostname":{"type":"string","description":"Registry hostname URL (required for 'generic', 'aws_ecr', and 'azure'; optional otherwise)"},"skip_validation":{"type":"boolean","description":"Skip live credential validation (non-production environments only)"}},"required":["name","registry","username","token"],"description":"Create a container registry credential"},"updateContainerRegistryCredential":{"type":"object","properties":{"name":{"type":"string","description":"Display name (must be unique within the workspace)"},"registry":{"type":"string","description":"Registry provider","enum":["docker_hub","github","gitlab","aws_ecr","azure","digitalocean","quay","generic"]},"username":{"type":"string","description":"Registry username"},"token":{"type":"string","description":"New password/token to rotate the stored secret"},"registry_hostname":{"type":"string","description":"Registry hostname URL"},"skip_validation":{"type":"boolean","description":"Skip live credential validation (non-production environments only)"}},"description":"Update a container registry credential"},"Api_V1_Entities_Project":{"type":"object","properties":{"uuid":{"type":"integer","format":"int32","description":"Project UUID"},"name":{"type":"string","description":"Project name"},"description":{"type":"string","description":"Project description"},"created_at":{"type":"string","format":"date-time","description":"Creation timestamp"},"updated_at":{"type":"string","format":"date-time","description":"Last update timestamp"}},"required":["uuid","name","description","created_at","updated_at"],"description":"Api_V1_Entities_Project model"},"createProject":{"type":"object","properties":{"name":{"type":"string","description":"Project name (must be unique within the workspace)"},"description":{"type":"string","description":"Brief description of the project's purpose"}},"required":["name"],"description":"Create a new project"},"updateProject":{"type":"object","properties":{"name":{"type":"string","description":"New project name"},"description":{"type":"string","description":"New project description"}},"description":"Update a project"},"createProjectVar":{"type":"object","properties":{"key":{"type":"string","description":"Variable name (e.g., DATABASE_URL, API_KEY). Use SCREAMING_SNAKE_CASE."},"value":{"type":"string","description":"Variable value. Sensitive data will be encrypted at rest."}},"required":["key","value"],"description":"Create a project environment variable"},"updateProjectVar":{"type":"object","properties":{"key":{"type":"string","description":"Variable name to update"},"value":{"type":"string","description":"New variable value"}},"required":["key","value"],"description":"Update a project environment variable"},"Api_V1_Entities_Region":{"type":"object","properties":{"id":{"type":"integer","format":"int32","description":"Region ID"},"name":{"type":"string","description":"Region display name"},"code":{"type":"string","description":"Region code identifier"}},"required":["id","name","code"],"description":"Api_V1_Entities_Region model"},"createResource":{"type":"object","properties":{"plan_type":{"type":"string","description":"Plan category: 'dev' for development/hobby, 'pro' for production workloads"},"plan_code_name":{"type":"string","description":"Specific plan identifier (e.g., 'free', 'starter', 'professional')"},"region_code":{"type":"string","description":"Deployment region code (e.g., 'eu-central-1', 'us-east-1')"},"components":{"type":"array","description":"Additional resource components to add","items":{"type":"object","properties":{"code_name":{"type":"string","description":"Component code name (e.g., 'extra_ram', 'extra_cpu', 'extra_disk')"},"quantity":{"type":"integer","format":"int32","description":"Number of component units to add"}},"required":["code_name","quantity"]}}},"required":["plan_type","plan_code_name","region_code"],"description":"Create a new resource"},"updateResource":{"type":"object","properties":{"plan_type":{"type":"string","description":"New plan category: 'dev' for development, 'pro' for production"},"plan_code_name":{"type":"string","description":"New plan identifier"},"components":{"type":"array","description":"Updated resource components","items":{"type":"object","properties":{"code_name":{"type":"string","description":"Component code name"},"quantity":{"type":"integer","format":"int32","description":"Total number of component units (not increment)"}},"required":["code_name","quantity"]}}},"description":"Update a resource"},"updateResourceLabels":{"type":"object","properties":{"labels":{"type":"array","description":"Labels for the resource","items":{"type":"string"}}},"required":["labels"],"description":"Update resource labels"},"Api_V1_Entities_Service":{"type":"object","properties":{"uuid":{"type":"string","description":"Service UUID"},"name":{"type":"string","description":"Service name"},"label":{"type":"string","description":"Display name"},"service_type":{"type":"string","description":"Service type (postgres, shared_storage)"},"project_id":{"type":"string","description":"Associated project UUID"},"resource_id":{"type":"string","description":"Assigned resource UUID"},"miget_id":{"type":"string","description":"DEPRECATED: use resource_id instead"},"created_at":{"type":"string","format":"date-time","description":"Creation timestamp"},"updated_at":{"type":"string","format":"date-time","description":"Last update timestamp"},"connection_details":{"type":"object","example":{"internal":{"hostname":"my-service-xxx.internal","database":"db_name","port":5432,"username":"db_user","password":"db_password","connection_url":"postgres://db_user:db_password@my-service-xxx.internal:5432/db_name"},"external":{"external_connection_url":"postgres://db_user:db_password@my-service-xxx.external:5432/db_name","psql_command":"PGPASSWORD=db_password psql -h my-service-xxx.external -U db_user db_name"}},"description":"Connection details for the service"}},"required":["uuid","name","label","service_type","project_id","resource_id","miget_id","created_at","updated_at","connection_details"],"description":"Api_V1_Entities_Service model"},"createService":{"type":"object","properties":{"service_type":{"type":"string","description":"Service type: 'postgres' (PostgreSQL database), 'shared_storage' (shared persistent volume)","enum":["postgres","shared_storage"]},"project_id":{"type":"string","description":"UUID of the project to create the service in"},"resource_id":{"type":"string","description":"UUID of the compute resource to provision the service on"},"miget_id":{"type":"string","description":"DEPRECATED: use resource_id instead"},"label":{"type":"string","description":"Human-readable display name for the service"},"ram_size":{"type":"number","format":"float","description":"RAM allocation in MiB (e.g., 64, 128, 256)"},"disk_size":{"type":"number","format":"float","description":"Disk storage in GiB (e.g., 1, 5, 10)"},"cpu_size":{"type":"number","format":"float","description":"CPU allocation in cores (e.g., 0.1, 0.25, 0.5)"},"postgres_version":{"type":"string","description":"PostgreSQL version (e.g., '15', '16'). Only for postgres type."},"public_access":{"type":"string","description":"Enable public internet access: '0' disabled, '1' enabled. For postgres type.","enum":["0","1"]},"environment_variables":{"type":"boolean","description":"Automatically inject connection environment variables into parent application"},"instances":{"type":"integer","format":"int32","description":"Number of database instances (1 for standalone, 3/5/7 for HA cluster). For postgres type.","enum":[1,3,5,7]},"creation_mode":{"type":"string","description":"Creation mode: 'fresh' (new database, default), 'external_replica' (replica of external PostgreSQL). For postgres type.","enum":["fresh","external_replica"]},"external_host":{"type":"string","description":"Hostname of the external PostgreSQL source database. Required for external_replica mode."},"external_port":{"type":"integer","format":"int32","description":"Port of the external PostgreSQL source database. Required for external_replica mode."},"auth_type":{"type":"string","description":"Authentication method for external replica: 'password' or 'tls'. Required for external_replica mode.","enum":["password","tls"]},"replication_username":{"type":"string","description":"Username for replication connection to external database."},"replication_password":{"type":"string","description":"Password for replication connection (password auth). Required when auth_type is 'password'."},"ca_crt":{"type":"string","description":"CA certificate for TLS authentication. Required when auth_type is 'tls'."},"tls_crt":{"type":"string","description":"TLS client certificate. Required when auth_type is 'tls'."},"tls_key":{"type":"string","description":"TLS client key. Required when auth_type is 'tls'."},"s3_enabled":{"type":"string","description":"Enable S3 WAL archive fallback: '0' disabled, '1' enabled. For external_replica mode.","enum":["0","1"]},"s3_endpoint":{"type":"string","description":"S3 endpoint URL. Required when s3_enabled is '1'."},"s3_bucket":{"type":"string","description":"S3 bucket name. Required when s3_enabled is '1'."},"s3_path":{"type":"string","description":"S3 path prefix. Required when s3_enabled is '1'."},"s3_access_key":{"type":"string","description":"S3 access key. Required when s3_enabled is '1'."},"s3_secret_key":{"type":"string","description":"S3 secret key. Required when s3_enabled is '1'."},"s3_server_name":{"type":"string","description":"Archive server name from barman-cloud-wal-archive. Required when s3_enabled is '1'."},"mount_point":{"type":"string","description":"Container mount path (e.g., /data). For shared_storage type."},"storage_access":{"type":"string","description":"Access mode: 'RWO' (single node read-write), 'RWX' (multi-node read-write). For shared_storage type.","enum":["RWO","RWX"]}},"required":["service_type","project_id","label"],"description":"Create a new service"},"updateService":{"type":"object","properties":{"label":{"type":"string","description":"Human-readable display name for the service"},"ram_size":{"type":"number","format":"float","description":"RAM allocation in MiB (e.g., 64, 128, 256)"},"disk_size":{"type":"number","format":"float","description":"Disk storage in GiB (e.g., 1, 5, 10)"},"cpu_size":{"type":"number","format":"float","description":"CPU allocation in cores (e.g., 0.1, 0.25, 0.5)"},"public_access":{"type":"string","description":"Enable public internet access: '0' disabled, '1' enabled. For postgres type.","enum":["0","1"]},"backup_enabled":{"type":"string","description":"Enable automatic backups: '0' disabled, '1' enabled. For postgres type.","enum":["0","1"]},"scheduled_backup":{"type":"string","description":"Cron expression for backup schedule (6-field: second minute hour day month weekday). For postgres type."},"instances":{"type":"integer","format":"int32","description":"Number of database instances (1 for standalone, 3/5/7 for HA cluster). For postgres type.","enum":[1,3,5,7]}},"description":"Update a service"},"updateServiceState":{"type":"object","properties":{"state":{"type":"string","description":"Target state: 'process_start' to start, 'process_stop' to stop, 'process_restart' to restart","enum":["process_start","process_stop","process_restart"]}},"required":["state"],"description":"Change service state"},"mountAppToService":{"type":"object","properties":{"app_id":{"type":"string","description":"UUID of the application to mount"},"mount_point":{"type":"string","description":"Container mount path (e.g., /data). Defaults to the service's mount point."},"label":{"type":"string","description":"Human-readable label for the mounted addon"}},"required":["app_id"],"description":"Mount an application to a service"},"unmountAppFromService":{"type":"object","properties":{"app_id":{"type":"string","description":"UUID of the application to unmount"}},"required":["app_id"],"description":"Unmount an application from a service"},"restoreServiceBackup":{"type":"object","properties":{"backup_name":{"type":"string","description":"Name of a specific backup to restore from"},"target_time":{"type":"string","description":"ISO 8601 timestamp for point-in-time recovery"},"to_new_cluster":{"type":"string","description":"Set to '1' to restore to a new cluster instead of replacing the current one"}},"description":"Restore service from backup"},"createServiceReplica":{"type":"object","properties":{"cpu_size":{"type":"number","format":"float","description":"CPU allocation for the replica (defaults to primary's value)"},"ram_size":{"type":"integer","format":"int32","description":"RAM allocation in megabytes (defaults to primary's value)"}},"description":"Create a read replica of a PostgreSQL service"},"Api_V1_Entities_User":{"type":"object","properties":{"uuid":{"type":"string","description":"User UUID"},"email":{"type":"string","description":"Email address"},"name":{"type":"string","description":"First name"},"surname":{"type":"string","description":"Last name"},"discord_username":{"type":"string","description":"Discord username"},"created_at":{"type":"string","format":"date-time","description":"Registration date"},"updated_at":{"type":"string","format":"date-time","description":"Last update timestamp"}},"required":["uuid","email","name","surname","discord_username","created_at","updated_at"],"description":"Api_V1_Entities_User model"},"Api_V1_Entities_SshKey":{"type":"object","properties":{"id":{"type":"integer","format":"int32","description":"SSH key ID"},"public_key":{"type":"string","description":"SSH public key content"},"created_at":{"type":"string","format":"date-time","description":"Creation timestamp"},"updated_at":{"type":"string","format":"date-time","description":"Last update timestamp"}},"required":["id","public_key","created_at","updated_at"],"description":"Api_V1_Entities_SshKey model"},"createSshKey":{"type":"object","properties":{"public_key":{"type":"string","description":"SSH public key in OpenSSH format (e.g., 'ssh-ed25519 AAAA... user@host')"}},"required":["public_key"],"description":"Add an SSH key"},"Api_V1_Entities_Credit":{"type":"object","properties":{"credit_balance_in_cents":{"type":"integer","format":"int32","description":"Credit balance in cents"},"credit_balance_formatted":{"type":"string","description":"Formatted credit balance"},"referral_code":{"type":"string","description":"User's referral code"},"referral_percentage":{"type":"integer","format":"int32","description":"Referral credit percentage"},"credit_operations":{"type":"array","description":"Credit operation history"}},"required":["credit_balance_in_cents","credit_balance_formatted","referral_code","referral_percentage","credit_operations"],"description":"Api_V1_Entities_Credit model"}}}