{"openapi":"3.0.0","info":{"title":"Cloudgate API","version":"1.0.0","description":"The REST API of a Cloudgate instance: everything the console does, for scripts and CI. Authenticate with a Personal key in the x-api-key header and name the Organization to act in with x-organization-id. On the Hosted instance the base URL is https://cloudgate.octabyte.app/backend; on a Self-hosted instance it is your console address followed by /backend. Request shapes are generated from the schemas the server validates against. Operator-only, webhook and internal routes are left out of this public copy. Reference: https://cloudgate.octabyte.io/docs/api"},"servers":[{"url":"https://cloudgate.octabyte.app/backend","description":"Hosted instance"},{"url":"{console}/backend","description":"Self-hosted instance","variables":{"console":{"default":"https://cloud.example.com","description":"Your console address"}}}],"security":[{"personalKey":[]},{"personalKey":[],"organization":[]},{"cookie":[]}],"paths":{"/audit-logs":{"get":{"operationId":"AuditLogController_findAll","parameters":[{"name":"scope","required":false,"in":"query","schema":{"default":"organization","type":"string","enum":["organization","deleted-organizations"]}},{"name":"userId","required":false,"in":"query","schema":{"type":"string"}},{"name":"userEmail","required":false,"in":"query","schema":{"type":"string"}},{"name":"resourceName","required":false,"in":"query","schema":{"type":"string"}},{"name":"action","required":false,"in":"query","schema":{"type":"string","enum":["create","update","delete","deploy","cancel","redeploy","rollback","login","logout","restore","run","start","stop","restart","kill","reload","rebuild","read"]}},{"name":"resourceType","required":false,"in":"query","schema":{"type":"string","enum":["aiProvider","application","backup","billing","bucket","certificate","cloudAccount","cluster","compose","customRole","database","deployment","destination","docker","domain","environment","errorRateThreshold","gitProvider","license","mount","notification","organization","patch","port","previewDeployment","project","redirect","registry","schedule","scim","security","server","session","settings","sshKey","sso","tag","traces","uptimeCheck","user","volumeBackup"]}},{"name":"outcome","required":false,"in":"query","schema":{"type":"string","enum":["succeeded","refused","failed"]}},{"name":"actor","required":false,"in":"query","schema":{"type":"string","enum":["platform"]}},{"name":"from","required":false,"in":"query","schema":{"type":"string"}},{"name":"to","required":false,"in":"query","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":500,"default":50,"type":"integer"}},{"name":"offset","required":false,"in":"query","schema":{"minimum":0,"maximum":9007199254740991,"default":0,"type":"integer"}}],"responses":{"200":{"description":""}},"tags":["AuditLog"],"summary":"List audit log entries","x-cloudgate-permission":[{"resource":"auditLog","actions":["read"]}]}},"/auth/sign-up-open":{"get":{"operationId":"SignUpController_signUpOpen","parameters":[],"responses":{"200":{"description":""}},"tags":["SignUp"],"summary":"Check whether sign-up is open","description":"`open` is whether an uninvited sign-up is accepted now; `state` says which of the four `SignUpState`s that is, because the screen says different things for each: \"Set up this instance\" and \"Already set up\" when Self-hosted, \"Not open yet\" and the public form when Hosted.","security":[]}},"/auth/password-reset-open":{"get":{"operationId":"SignUpController_passwordResetOpen","parameters":[],"responses":{"200":{"description":""}},"tags":["SignUp"],"summary":"Check whether password reset works","security":[]}},"/auth/invitations/{id}":{"get":{"operationId":"SignUpController_invitationPreview","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The id."}],"responses":{"200":{"description":""}},"tags":["SignUp"],"summary":"Preview an invitation","security":[]}},"/auth/device/code":{"post":{"operationId":"DeviceLoginController_start","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceCodeRequestDto"}}}},"responses":{"200":{"description":"Starts a CLI login: a code for the person to approve at /device, and the device code the CLI polls with. Takes no fields; in particular no user, so a code is bound only to whoever approves it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceCodeDto"}}}}},"tags":["DeviceLogin"],"summary":"Start a device login","security":[]}},"/auth/device/token":{"post":{"operationId":"DeviceLoginController_poll","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceTokenRequestDto"}}}},"responses":{"200":{"description":"The CLI's poll. Once the code is approved, a Personal key ending 90 days after login, answered once; until then a 400 whose code is AUTHORIZATION_PENDING, SLOW_DOWN, EXPIRED_TOKEN, ACCESS_DENIED or INVALID_GRANT.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceTokenDto"}}}}},"tags":["DeviceLogin"],"summary":"Poll a device login for its key","security":[]}},"/users/me":{"get":{"operationId":"UsersController_getProfile","parameters":[],"responses":{"200":{"description":""}},"tags":["Users"],"summary":"Get your profile"},"patch":{"operationId":"UsersController_updateProfile","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProfileDto"}}}},"responses":{"200":{"description":""}},"tags":["Users"],"summary":"Update your profile"}},"/users/me/whoami":{"get":{"operationId":"UsersController_whoami","parameters":[],"responses":{"200":{"description":"Who this request is made as: the email, the Organization it acts in, and the Personal key it carries (null for a console session). Answers only about the key the request was made with, never another.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhoamiDto"}}}}},"tags":["Users"],"summary":"Show who a key belongs to"}},"/users/me/2fa/enable":{"post":{"operationId":"UsersController_enableTwoFactor","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFactorPasswordDto"}}}},"responses":{"200":{"description":""}},"tags":["Users"],"summary":"Turn on two-factor sign-in"}},"/users/me/2fa/verify":{"post":{"operationId":"UsersController_verifyTwoFactor","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyTwoFactorDto"}}}},"responses":{"200":{"description":""}},"tags":["Users"],"summary":"Verify a two-factor code"}},"/users/me/2fa/disable":{"post":{"operationId":"UsersController_disableTwoFactor","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFactorPasswordDto"}}}},"responses":{"200":{"description":""}},"tags":["Users"],"summary":"Turn off two-factor sign-in"}},"/users/me/sessions":{"get":{"operationId":"UsersController_listSessions","parameters":[],"responses":{"200":{"description":"The caller's own sessions. Deliberately carries no session token — the token is the credential, and revocation is by `id`.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","required":["id","userId","createdAt","expiresAt"],"properties":{"id":{"type":"string"},"userId":{"type":"string"},"userAgent":{"type":"string","nullable":true},"ipAddress":{"type":"string","nullable":true},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"}}}}}}}},"tags":["Users"],"summary":"List your sessions"}},"/users/me/api-keys":{"post":{"operationId":"UsersController_createApiKey","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateApiKeyDto"}}}},"responses":{"201":{"description":""}},"tags":["Users"],"summary":"Create a Personal key"},"get":{"operationId":"UsersController_listApiKeys","parameters":[],"responses":{"200":{"description":""}},"tags":["Users"],"summary":"List your Personal keys"}},"/users/me/api-keys/{id}":{"delete":{"operationId":"UsersController_deleteApiKey","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The user's id."}],"responses":{"200":{"description":""}},"tags":["Users"],"summary":"Delete a Personal key"}},"/users/me/sessions/revoke":{"post":{"operationId":"UsersController_revokeSession","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevokeSessionDto"}}}},"responses":{"200":{"description":""}},"tags":["Users"],"summary":"Revoke a session"}},"/organizations":{"get":{"operationId":"OrganizationsController_list","parameters":[],"responses":{"200":{"description":""}},"tags":["Organizations"],"summary":"List Organizations"},"post":{"operationId":"OrganizationsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOrganizationDto"}}}},"responses":{"201":{"description":""}},"tags":["Organizations"],"summary":"Create an Organization"}},"/organizations/creation":{"get":{"operationId":"OrganizationsController_creation","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationCreationDto"}}}}},"tags":["Organizations"],"summary":"Check whether you can create an Organization"}},"/organizations/active":{"get":{"operationId":"OrganizationsController_active","parameters":[],"responses":{"200":{"description":""}},"tags":["Organizations"],"summary":"Get the active Organization"}},"/organizations/invitations":{"post":{"operationId":"OrganizationsController_invite","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteMemberDto"}}}},"responses":{"201":{"description":""}},"tags":["Organizations"],"summary":"Invite a member"},"get":{"operationId":"OrganizationsController_listInvitations","parameters":[],"responses":{"200":{"description":""}},"tags":["Organizations"],"summary":"List invitations"}},"/organizations/invitations/{id}/state":{"get":{"operationId":"OrganizationsController_readInvitationState","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Organization's id."}],"responses":{"200":{"description":""}},"tags":["Organizations"],"summary":"Read invitation state"}},"/organizations/members":{"get":{"operationId":"OrganizationsController_listMembers","parameters":[],"responses":{"200":{"description":"The member list. Note the envelope: the members are under `members`, not at the top level.","content":{"application/json":{"schema":{"type":"object","required":["members","total"],"properties":{"members":{"type":"array","items":{"type":"object"}},"total":{"type":"integer"}}}}}}},"tags":["Organizations"],"summary":"List members"}},"/organizations/members/{id}":{"patch":{"operationId":"OrganizationsController_updateMemberRole","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Organization's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMemberRoleDto"}}}},"responses":{"200":{"description":""}},"tags":["Organizations"],"summary":"Update member role"},"delete":{"operationId":"OrganizationsController_removeMember","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Organization's id."}],"responses":{"200":{"description":""}},"tags":["Organizations"],"summary":"Remove member"}},"/organizations/members/{id}/entitlements":{"patch":{"operationId":"OrganizationsController_updateMemberEntitlements","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Organization's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMemberEntitlementsDto"}}}},"responses":{"200":{"description":""}},"tags":["Organizations"],"summary":"Update member entitlements","x-cloudgate-permission":[{"resource":"member","actions":["update"]}]}},"/organizations/teams":{"post":{"operationId":"OrganizationsController_createTeam","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTeamDto"}}}},"responses":{"201":{"description":""}},"tags":["Organizations"],"summary":"Create team"},"get":{"operationId":"OrganizationsController_listTeams","parameters":[],"responses":{"200":{"description":""}},"tags":["Organizations"],"summary":"List teams"}},"/organizations/teams/{id}":{"patch":{"operationId":"OrganizationsController_updateTeam","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Organization's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTeamDto"}}}},"responses":{"200":{"description":""}},"tags":["Organizations"],"summary":"Update team"},"delete":{"operationId":"OrganizationsController_removeTeam","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Organization's id."}],"responses":{"200":{"description":""}},"tags":["Organizations"],"summary":"Remove team"}},"/organizations/teams/{id}/members":{"post":{"operationId":"OrganizationsController_addTeamMember","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Organization's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddTeamMemberDto"}}}},"responses":{"201":{"description":""}},"tags":["Organizations"],"summary":"Add team member"},"get":{"operationId":"OrganizationsController_listTeamMembers","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Organization's id."}],"responses":{"200":{"description":""}},"tags":["Organizations"],"summary":"List team members"}},"/organizations/teams/{id}/members/{userId}":{"delete":{"operationId":"OrganizationsController_removeTeamMember","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Organization's id."},{"name":"userId","required":true,"in":"path","schema":{"type":"string"},"description":"The user's id."}],"responses":{"200":{"description":""}},"tags":["Organizations"],"summary":"Remove team member"}},"/organizations/invitations/{id}/accept":{"post":{"operationId":"OrganizationsController_acceptInvitation","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Organization's id."}],"responses":{"201":{"description":""}},"tags":["Organizations"],"summary":"Accept invitation","description":"The invitation is the input, not the thing created."}},"/organizations/invitations/{id}":{"delete":{"operationId":"OrganizationsController_removeInvitation","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Organization's id."}],"responses":{"200":{"description":""}},"tags":["Organizations"],"summary":"Remove invitation"}},"/organizations/{id}/set-default":{"post":{"operationId":"OrganizationsController_setDefault","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Organization's id."}],"responses":{"200":{"description":""}},"tags":["Organizations"],"summary":"Set your default Organization"}},"/organizations/{id}":{"get":{"operationId":"OrganizationsController_getById","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Organization's id."}],"responses":{"200":{"description":""}},"tags":["Organizations"],"summary":"Get an Organization"},"patch":{"operationId":"OrganizationsController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Organization's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateOrganizationDto"}}}},"responses":{"200":{"description":""}},"tags":["Organizations"],"summary":"Update an Organization"},"delete":{"operationId":"OrganizationsController_delete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Organization's id."}],"responses":{"200":{"description":""}},"tags":["Organizations"],"summary":"Delete an Organization"}},"/agents":{"post":{"operationId":"AgentsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAgentDto"}}}},"responses":{"201":{"description":""}},"tags":["Agents"],"summary":"Create an Agent","x-cloudgate-permission":[{"resource":"member","actions":["create"]}]},"get":{"operationId":"AgentsController_list","parameters":[],"responses":{"200":{"description":""}},"tags":["Agents"],"summary":"List Agents"}},"/agents/{id}":{"delete":{"operationId":"AgentsController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Agent's id."}],"responses":{"200":{"description":""}},"tags":["Agents"],"summary":"Delete an Agent","x-cloudgate-permission":[{"resource":"member","actions":["delete"]}]}},"/agents/{id}/suspend":{"post":{"operationId":"AgentsController_suspend","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Agent's id."}],"responses":{"200":{"description":""}},"tags":["Agents"],"summary":"Suspend an Agent","x-cloudgate-permission":[{"resource":"member","actions":["update"]}]}},"/agents/{id}/resume":{"post":{"operationId":"AgentsController_resume","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Agent's id."}],"responses":{"200":{"description":""}},"tags":["Agents"],"summary":"Resume an Agent","x-cloudgate-permission":[{"resource":"member","actions":["update"]}]}},"/agents/{id}/keys":{"post":{"operationId":"AgentsController_addKey","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Agent's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddAgentKeyDto"}}}},"responses":{"201":{"description":""}},"tags":["Agents"],"summary":"Add an Agent key","x-cloudgate-permission":[{"resource":"member","actions":["update"]}]}},"/agents/{id}/keys/{keyId}":{"delete":{"operationId":"AgentsController_removeKey","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Agent's id."},{"name":"keyId","required":true,"in":"path","schema":{"type":"string"},"description":"The key's id."}],"responses":{"200":{"description":""}},"tags":["Agents"],"summary":"Remove an Agent key","x-cloudgate-permission":[{"resource":"member","actions":["update"]}]}},"/license/status":{"get":{"operationId":"LicenseController_status","parameters":[],"responses":{"200":{"description":""}},"tags":["License"],"summary":"Get licence status","description":"Whether the organization is licensed (`licensed`), with the stored state that produced the answer, so a console can warn before an expiry and tell a refused license from a missing one."}},"/license/settings":{"get":{"operationId":"LicenseController_getEnterpriseSettings","parameters":[],"responses":{"200":{"description":""}},"tags":["License"],"summary":"Get enterprise settings"},"patch":{"operationId":"LicenseController_updateEnterpriseSettings","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateEnterpriseSettingsDto"}}}},"responses":{"200":{"description":""}},"tags":["License"],"summary":"Update enterprise settings"}},"/license/activate":{"post":{"operationId":"LicenseController_activate","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivateLicenseDto"}}}},"responses":{"200":{"description":""}},"tags":["License"],"summary":"Activate a licence"}},"/license/validate":{"post":{"operationId":"LicenseController_validate","parameters":[],"responses":{"200":{"description":""}},"tags":["License"],"summary":"Validate a licence key"}},"/license/check-now":{"post":{"operationId":"LicenseController_checkNow","parameters":[],"responses":{"200":{"description":""}},"tags":["License"],"summary":"Check the licence now","description":"\"I've renewed, check now\": re-activates the stored key, answering with the license status that results."}},"/license/deactivate":{"post":{"operationId":"LicenseController_deactivate","parameters":[],"responses":{"200":{"description":""}},"tags":["License"],"summary":"Deactivate the licence"}},"/notifications/slack":{"post":{"operationId":"NotificationsController_createSlack","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSlackDto"}}}},"responses":{"201":{"description":""}},"tags":["Notifications"],"summary":"Add a Slack channel","x-cloudgate-permission":[{"resource":"notification","actions":["create"]}]}},"/notifications/slack/{id}":{"patch":{"operationId":"NotificationsController_updateSlack","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The notification channel's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSlackDto"}}}},"responses":{"200":{"description":""}},"tags":["Notifications"],"summary":"Update a Slack channel","x-cloudgate-permission":[{"resource":"notification","actions":["update"]}]}},"/notifications/telegram":{"post":{"operationId":"NotificationsController_createTelegram","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTelegramDto"}}}},"responses":{"201":{"description":""}},"tags":["Notifications"],"summary":"Add a Telegram channel","x-cloudgate-permission":[{"resource":"notification","actions":["create"]}]}},"/notifications/telegram/{id}":{"patch":{"operationId":"NotificationsController_updateTelegram","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The notification channel's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTelegramDto"}}}},"responses":{"200":{"description":""}},"tags":["Notifications"],"summary":"Update a Telegram channel","x-cloudgate-permission":[{"resource":"notification","actions":["update"]}]}},"/notifications/discord":{"post":{"operationId":"NotificationsController_createDiscord","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDiscordDto"}}}},"responses":{"201":{"description":""}},"tags":["Notifications"],"summary":"Add a Discord channel","x-cloudgate-permission":[{"resource":"notification","actions":["create"]}]}},"/notifications/discord/{id}":{"patch":{"operationId":"NotificationsController_updateDiscord","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The notification channel's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDiscordDto"}}}},"responses":{"200":{"description":""}},"tags":["Notifications"],"summary":"Update a Discord channel","x-cloudgate-permission":[{"resource":"notification","actions":["update"]}]}},"/notifications/email":{"post":{"operationId":"NotificationsController_createEmail","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEmailDto"}}}},"responses":{"201":{"description":""}},"tags":["Notifications"],"summary":"Add an email channel","x-cloudgate-permission":[{"resource":"notification","actions":["create"]}]}},"/notifications/email/{id}":{"patch":{"operationId":"NotificationsController_updateEmail","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The notification channel's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateEmailDto"}}}},"responses":{"200":{"description":""}},"tags":["Notifications"],"summary":"Update an email channel","x-cloudgate-permission":[{"resource":"notification","actions":["update"]}]}},"/notifications/resend":{"post":{"operationId":"NotificationsController_createResend","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateResendDto"}}}},"responses":{"201":{"description":""}},"tags":["Notifications"],"summary":"Add a Resend channel","x-cloudgate-permission":[{"resource":"notification","actions":["create"]}]}},"/notifications/resend/{id}":{"patch":{"operationId":"NotificationsController_updateResend","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The notification channel's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateResendDto"}}}},"responses":{"200":{"description":""}},"tags":["Notifications"],"summary":"Update a Resend channel","x-cloudgate-permission":[{"resource":"notification","actions":["update"]}]}},"/notifications/gotify":{"post":{"operationId":"NotificationsController_createGotify","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateGotifyDto"}}}},"responses":{"201":{"description":""}},"tags":["Notifications"],"summary":"Add a Gotify channel","x-cloudgate-permission":[{"resource":"notification","actions":["create"]}]}},"/notifications/gotify/{id}":{"patch":{"operationId":"NotificationsController_updateGotify","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The notification channel's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateGotifyDto"}}}},"responses":{"200":{"description":""}},"tags":["Notifications"],"summary":"Update a Gotify channel","x-cloudgate-permission":[{"resource":"notification","actions":["update"]}]}},"/notifications/ntfy":{"post":{"operationId":"NotificationsController_createNtfy","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateNtfyDto"}}}},"responses":{"201":{"description":""}},"tags":["Notifications"],"summary":"Add a ntfy channel","x-cloudgate-permission":[{"resource":"notification","actions":["create"]}]}},"/notifications/ntfy/{id}":{"patch":{"operationId":"NotificationsController_updateNtfy","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The notification channel's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateNtfyDto"}}}},"responses":{"200":{"description":""}},"tags":["Notifications"],"summary":"Update a ntfy channel","x-cloudgate-permission":[{"resource":"notification","actions":["update"]}]}},"/notifications/mattermost":{"post":{"operationId":"NotificationsController_createMattermost","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMattermostDto"}}}},"responses":{"201":{"description":""}},"tags":["Notifications"],"summary":"Add a Mattermost channel","x-cloudgate-permission":[{"resource":"notification","actions":["create"]}]}},"/notifications/mattermost/{id}":{"patch":{"operationId":"NotificationsController_updateMattermost","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The notification channel's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMattermostDto"}}}},"responses":{"200":{"description":""}},"tags":["Notifications"],"summary":"Update a Mattermost channel","x-cloudgate-permission":[{"resource":"notification","actions":["update"]}]}},"/notifications/custom":{"post":{"operationId":"NotificationsController_createCustom","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCustomDto"}}}},"responses":{"201":{"description":""}},"tags":["Notifications"],"summary":"Add a custom webhook channel","x-cloudgate-permission":[{"resource":"notification","actions":["create"]}]}},"/notifications/custom/{id}":{"patch":{"operationId":"NotificationsController_updateCustom","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The notification channel's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCustomDto"}}}},"responses":{"200":{"description":""}},"tags":["Notifications"],"summary":"Update a custom webhook channel","x-cloudgate-permission":[{"resource":"notification","actions":["update"]}]}},"/notifications/lark":{"post":{"operationId":"NotificationsController_createLark","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateLarkDto"}}}},"responses":{"201":{"description":""}},"tags":["Notifications"],"summary":"Add a Lark channel","x-cloudgate-permission":[{"resource":"notification","actions":["create"]}]}},"/notifications/lark/{id}":{"patch":{"operationId":"NotificationsController_updateLark","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The notification channel's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateLarkDto"}}}},"responses":{"200":{"description":""}},"tags":["Notifications"],"summary":"Update a Lark channel","x-cloudgate-permission":[{"resource":"notification","actions":["update"]}]}},"/notifications/pushover":{"post":{"operationId":"NotificationsController_createPushover","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePushoverDto"}}}},"responses":{"201":{"description":""}},"tags":["Notifications"],"summary":"Add a Pushover channel","x-cloudgate-permission":[{"resource":"notification","actions":["create"]}]}},"/notifications/pushover/{id}":{"patch":{"operationId":"NotificationsController_updatePushover","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The notification channel's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePushoverDto"}}}},"responses":{"200":{"description":""}},"tags":["Notifications"],"summary":"Update a Pushover channel","x-cloudgate-permission":[{"resource":"notification","actions":["update"]}]}},"/notifications/teams":{"post":{"operationId":"NotificationsController_createTeams","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTeamsDto"}}}},"responses":{"201":{"description":""}},"tags":["Notifications"],"summary":"Add a Microsoft Teams channel","x-cloudgate-permission":[{"resource":"notification","actions":["create"]}]}},"/notifications/teams/{id}":{"patch":{"operationId":"NotificationsController_updateTeams","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The notification channel's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTeamsDto"}}}},"responses":{"200":{"description":""}},"tags":["Notifications"],"summary":"Update a Microsoft Teams channel","x-cloudgate-permission":[{"resource":"notification","actions":["update"]}]}},"/notifications/slack/test":{"post":{"operationId":"NotificationsController_testSlack","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestSlackDto"}}}},"responses":{"204":{"description":""}},"tags":["Notifications"],"summary":"Test a Slack channel before saving","x-cloudgate-permission":[{"resource":"notification","actions":["create"]}]}},"/notifications/telegram/test":{"post":{"operationId":"NotificationsController_testTelegram","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestTelegramDto"}}}},"responses":{"204":{"description":""}},"tags":["Notifications"],"summary":"Test a Telegram channel before saving","x-cloudgate-permission":[{"resource":"notification","actions":["create"]}]}},"/notifications/discord/test":{"post":{"operationId":"NotificationsController_testDiscord","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestDiscordDto"}}}},"responses":{"204":{"description":""}},"tags":["Notifications"],"summary":"Test a Discord channel before saving","x-cloudgate-permission":[{"resource":"notification","actions":["create"]}]}},"/notifications/email/test":{"post":{"operationId":"NotificationsController_testEmail","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestEmailDto"}}}},"responses":{"204":{"description":""}},"tags":["Notifications"],"summary":"Test an email channel before saving","x-cloudgate-permission":[{"resource":"notification","actions":["create"]}]}},"/notifications/resend/test":{"post":{"operationId":"NotificationsController_testResend","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestResendDto"}}}},"responses":{"204":{"description":""}},"tags":["Notifications"],"summary":"Test a Resend channel before saving","x-cloudgate-permission":[{"resource":"notification","actions":["create"]}]}},"/notifications/gotify/test":{"post":{"operationId":"NotificationsController_testGotify","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestGotifyDto"}}}},"responses":{"204":{"description":""}},"tags":["Notifications"],"summary":"Test a Gotify channel before saving","x-cloudgate-permission":[{"resource":"notification","actions":["create"]}]}},"/notifications/ntfy/test":{"post":{"operationId":"NotificationsController_testNtfy","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestNtfyDto"}}}},"responses":{"204":{"description":""}},"tags":["Notifications"],"summary":"Test a ntfy channel before saving","x-cloudgate-permission":[{"resource":"notification","actions":["create"]}]}},"/notifications/mattermost/test":{"post":{"operationId":"NotificationsController_testMattermost","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestMattermostDto"}}}},"responses":{"204":{"description":""}},"tags":["Notifications"],"summary":"Test a Mattermost channel before saving","x-cloudgate-permission":[{"resource":"notification","actions":["create"]}]}},"/notifications/custom/test":{"post":{"operationId":"NotificationsController_testCustom","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestCustomDto"}}}},"responses":{"204":{"description":""}},"tags":["Notifications"],"summary":"Test a custom webhook channel before saving","x-cloudgate-permission":[{"resource":"notification","actions":["create"]}]}},"/notifications/lark/test":{"post":{"operationId":"NotificationsController_testLark","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestLarkDto"}}}},"responses":{"204":{"description":""}},"tags":["Notifications"],"summary":"Test a Lark channel before saving","x-cloudgate-permission":[{"resource":"notification","actions":["create"]}]}},"/notifications/pushover/test":{"post":{"operationId":"NotificationsController_testPushover","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestPushoverDto"}}}},"responses":{"204":{"description":""}},"tags":["Notifications"],"summary":"Test a Pushover channel before saving","x-cloudgate-permission":[{"resource":"notification","actions":["create"]}]}},"/notifications/teams/test":{"post":{"operationId":"NotificationsController_testTeams","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestTeamsDto"}}}},"responses":{"204":{"description":""}},"tags":["Notifications"],"summary":"Test a Microsoft Teams channel before saving","x-cloudgate-permission":[{"resource":"notification","actions":["create"]}]}},"/notifications/{id}/test":{"post":{"operationId":"NotificationsController_testSaved","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The notification channel's id."}],"responses":{"204":{"description":""}},"tags":["Notifications"],"summary":"Test a saved channel","description":"The same test, naming the row instead of carrying its credentials.","x-cloudgate-permission":[{"resource":"notification","actions":["create"]}]}},"/notifications":{"get":{"operationId":"NotificationsController_list","parameters":[],"responses":{"200":{"description":""}},"tags":["Notifications"],"summary":"List notification channels","x-cloudgate-permission":[{"resource":"notification","actions":["read"]}]}},"/notifications/{id}":{"get":{"operationId":"NotificationsController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The notification channel's id."}],"responses":{"200":{"description":""}},"tags":["Notifications"],"summary":"Get a notification channel","x-cloudgate-permission":[{"resource":"notification","actions":["read"]}]},"delete":{"operationId":"NotificationsController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The notification channel's id."}],"responses":{"200":{"description":""}},"tags":["Notifications"],"summary":"Delete a notification channel","x-cloudgate-permission":[{"resource":"notification","actions":["delete"]}]}},"/billing/standing":{"get":{"operationId":"BillingController_getStanding","parameters":[],"responses":{"200":{"description":""}},"tags":["Billing"],"summary":"Get standing","description":"Whether the Organization is frozen and why, and whether a payment has failed while Stripe retries: what the banner every member sees reads. Any member; empty on a Self-hosted instance."}},"/billing/subscription":{"get":{"operationId":"BillingController_getSubscription","parameters":[],"responses":{"200":{"description":""}},"tags":["Billing"],"summary":"Get subscription"}},"/billing/attached-organizations":{"get":{"operationId":"BillingController_getAttachedOrganizations","parameters":[],"responses":{"200":{"description":""}},"tags":["Billing"],"summary":"Get attached organizations","description":"The \"Organizations on this plan\" card: whether \"Add an Organization to this plan\" is offered and why not, how much of the pool is free, and each Organization this one pays for."}},"/billing/attached-plan":{"get":{"operationId":"BillingController_getAttachedPlan","parameters":[],"responses":{"200":{"description":""}},"tags":["Billing"],"summary":"Get attached plan"}},"/billing/attached-organizations/{organizationId}/stop-paying":{"post":{"operationId":"BillingController_stopPaying","parameters":[{"name":"organizationId","required":true,"in":"path","schema":{"type":"string"},"description":"The Organization's id."}],"responses":{"200":{"description":""}},"tags":["Billing"],"summary":"Stop paying","description":"\"Stop paying for it\": detaches an Organization this one pays for, which lapses at once — see `StopPaying`. Owner or admin of the Paying Organization. Also the \"Before <Paying> can move to Starter\" checklist's Detach. Allowed while the Paying Organization is frozen (`detach`): it only takes an Organization off a plan nobody is paying."}},"/billing/plan":{"get":{"operationId":"BillingController_getCurrentPlan","parameters":[],"responses":{"200":{"description":""}},"tags":["Billing"],"summary":"Get current plan","description":"The plan the organization holds now, and a waiting move's date; any member."}},"/billing/products":{"get":{"operationId":"BillingController_getCatalogue","parameters":[],"responses":{"200":{"description":""}},"tags":["Billing"],"summary":"Get catalogue","description":"Both plans and the Add-on, as Stripe prices them."}},"/billing/invoices":{"get":{"operationId":"BillingController_getInvoices","parameters":[],"responses":{"200":{"description":""}},"tags":["Billing"],"summary":"Get invoices","description":"The organization's Stripe invoices."}},"/billing/can-create-server":{"get":{"operationId":"BillingController_canCreateMoreServers","parameters":[],"responses":{"200":{"description":""}},"tags":["Billing"],"summary":"Can create more servers","description":"Whether one more Server fits the allowance, with the refusal's code and sentence when not; any member."}},"/billing/checkout":{"post":{"operationId":"BillingController_createCheckoutSession","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutDto"}}}},"responses":{"200":{"description":""}},"tags":["Billing"],"summary":"Create checkout session","description":"Starts a Stripe Checkout session for the chosen plan and its Add-ons."}},"/billing/portal":{"post":{"operationId":"BillingController_createCustomerPortalSession","parameters":[],"responses":{"200":{"description":""}},"tags":["Billing"],"summary":"Create customer portal session","description":"Opens a Stripe customer-portal session."}},"/billing/add-ons":{"post":{"operationId":"BillingController_setAddOns","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddOnsDto"}}}},"responses":{"200":{"description":""}},"tags":["Billing"],"summary":"Set add ons","description":"Sets the existing subscription's Add-on quantity."}},"/billing/upgrade-preview":{"get":{"operationId":"BillingController_previewUpgrade","parameters":[],"responses":{"200":{"description":""}},"tags":["Billing"],"summary":"Preview upgrade","description":"What upgrading Starter to Business charges today and every month after, from Stripe's invoice preview."}},"/billing/upgrade":{"post":{"operationId":"BillingController_upgrade","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpgradeDto"}}}},"responses":{"200":{"description":""}},"tags":["Billing"],"summary":"Upgrade","description":"Upgrades Starter to Business at once, charging the previewed amount. Not allowed while frozen: a Frozen Organization has no plan to upgrade."}},"/billing/downgrade-impact":{"get":{"operationId":"BillingController_getDowngradeImpact","parameters":[],"responses":{"200":{"description":""}},"tags":["Billing"],"summary":"Get downgrade impact","description":"What moving to Starter stops, against what the Organization uses: its SSO providers and SSO-only people, SCIM connections, custom-role holders and protected apps."}},"/billing/downgrade":{"post":{"operationId":"BillingController_downgrade","parameters":[],"responses":{"200":{"description":""}},"tags":["Billing"],"summary":"Downgrade","description":"Moves Business to Starter at the end of the paid month; nothing is charged. Not allowed while frozen, as the upgrade."},"delete":{"operationId":"BillingController_keepBusiness","parameters":[],"responses":{"200":{"description":""}},"tags":["Billing"],"summary":"Keep business","description":"\"Keep Business\": takes a waiting downgrade back, at no charge."}},"/billing/cancel-trial":{"post":{"operationId":"BillingController_cancelTrial","parameters":[],"responses":{"200":{"description":""}},"tags":["Billing"],"summary":"Cancel trial","description":"\"Cancel trial\": the plan ends with the free trial, and nothing is charged. Owner/admin, during a trial only."},"delete":{"operationId":"BillingController_keepTrial","parameters":[],"responses":{"200":{"description":""}},"tags":["Billing"],"summary":"Keep trial","description":"\"Keep <plan>\": takes a cancelled trial's cancel back."}},"/billing/invoice-notifications":{"patch":{"operationId":"BillingController_updateInvoiceNotifications","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateInvoiceNotificationsDto"}}}},"responses":{"200":{"description":""}},"tags":["Billing"],"summary":"Update invoice notifications","description":"Turns invoice mail on or off."}},"/projects":{"post":{"operationId":"ProjectsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProjectDto"}}}},"responses":{"201":{"description":""}},"tags":["Projects"],"summary":"Create a Project","x-cloudgate-permission":[{"resource":"project","actions":["create"]}]},"get":{"operationId":"ProjectsController_list","parameters":[],"responses":{"200":{"description":""}},"tags":["Projects"],"summary":"List Projects"}},"/projects/{id}":{"get":{"operationId":"ProjectsController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Project's id."}],"responses":{"200":{"description":""}},"tags":["Projects"],"summary":"Get a Project"},"patch":{"operationId":"ProjectsController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Project's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProjectDto"}}}},"responses":{"200":{"description":""}},"tags":["Projects"],"summary":"Update a Project"},"delete":{"operationId":"ProjectsController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Project's id."},{"name":"force","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Projects"],"summary":"Delete a Project","description":"`?force=true` is the escape hatch for a Server that is gone for good: it deletes the Project even though Cloudgate could not confirm every Service under it is torn down, and the response names each workload left behind. Default false, a string query parameter compared to 'true' like the `force` on all eight per-Service delete routes.","x-cloudgate-permission":[{"resource":"project","actions":["delete"]}]}},"/traefik/config-status":{"get":{"operationId":"TraefikController_configStatus","parameters":[{"name":"applicationId","required":true,"in":"query","schema":{"minLength":1,"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Traefik"],"summary":"Config status","x-cloudgate-permission":[{"resource":"service","actions":["read"]}]}},"/traefik/config-status/console":{"get":{"operationId":"TraefikController_consoleConfigStatus","parameters":[],"responses":{"200":{"description":""}},"tags":["Traefik"],"summary":"Console config status"}},"/schema/project-config/v1.json":{"get":{"operationId":"ProjectConfigSchemaController_findV1","parameters":[],"responses":{"200":{"description":"The draft-07 JSON Schema of a version 1 Project config"}},"tags":["ProjectConfigSchema"],"summary":"Get the Project config schema","description":"The schema; anyone may read it.","security":[]}},"/projects/{projectId}/config":{"get":{"operationId":"ProjectConfigsController_findOne","parameters":[{"name":"projectId","required":true,"in":"path","schema":{"type":"string"},"description":"The Project's id."}],"responses":{"200":{"description":""}},"tags":["ProjectConfigs"],"summary":"Get a Project config","description":"The config's location, its version and, kept in Cloudgate, its text: what a working copy is downloaded from."}},"/projects/{projectId}/config/plans":{"post":{"operationId":"ProjectConfigsController_create","parameters":[{"name":"projectId","required":true,"in":"path","schema":{"type":"string"},"description":"The Project's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveConfigTextDto"}}}},"responses":{"201":{"description":""}},"tags":["ProjectConfigs"],"summary":"Make Plans from a Project config","x-cloudgate-permission":[{"resource":"environment","actions":["read"]}]}},"/projects/{projectId}/config/move/preview":{"post":{"operationId":"ProjectConfigsController_preview","parameters":[{"name":"projectId","required":true,"in":"path","schema":{"type":"string"},"description":"The Project's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreviewMoveDto"}}}},"responses":{"200":{"description":""}},"tags":["ProjectConfigs"],"summary":"Preview moving a Project config","x-cloudgate-permission":[{"resource":"project","actions":["update"]}]}},"/projects/{projectId}/config/move":{"post":{"operationId":"ProjectConfigsController_move","parameters":[{"name":"projectId","required":true,"in":"path","schema":{"type":"string"},"description":"The Project's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmMoveDto"}}}},"responses":{"200":{"description":""}},"tags":["ProjectConfigs"],"summary":"Move a Project config","description":"A move's confirm: refused if the preview's reads changed; switches the location, dismisses the open plans and stores the previewed ones open; a move out also stores the kept copy and clears every Config branch. Applies nothing.","x-cloudgate-permission":[{"resource":"project","actions":["update"]}]}},"/environments/{environmentId}/config":{"get":{"operationId":"PlansController_findCopy","parameters":[{"name":"environmentId","required":true,"in":"path","schema":{"type":"string"},"description":"The Environment's id."}],"responses":{"200":{"description":""}},"tags":["Plans"],"summary":"Get an Environment's config copy","x-cloudgate-permission":[{"resource":"environment","actions":["read"]}]}},"/environments/{environmentId}/config/repository-sources":{"get":{"operationId":"PlansController_repositorySources","parameters":[{"name":"environmentId","required":true,"in":"path","schema":{"type":"string"},"description":"The Environment's id."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigRepositorySourcesDto"}}}}},"tags":["Plans"],"summary":"List repository-sourced Services","description":"The Services whose source the config, as this Environment reads it, names as a repository: `cloudgate deploy` refuses to upload to one. Only Config names, providers and repositories; never the text.","x-cloudgate-permission":[{"resource":"environment","actions":["read"]}]}},"/environments/{environmentId}/config/sources":{"get":{"operationId":"PlansController_configSources","parameters":[{"name":"environmentId","required":true,"in":"path","schema":{"type":"string"},"description":"The Environment's id."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigSourcesDto"}}}}},"tags":["Plans"],"summary":"List where each config entry's code comes from","description":"Every entry of the config, as this Environment reads it, and where its code comes from: a root `cloudgate deploy` in a Project folder builds the ones from a subfolder of it. Never the text.","x-cloudgate-permission":[{"resource":"environment","actions":["read"]}]}},"/environments/{environmentId}/plan":{"get":{"operationId":"PlansController_findOne","parameters":[{"name":"environmentId","required":true,"in":"path","schema":{"type":"string"},"description":"The Environment's id."}],"responses":{"200":{"description":""}},"tags":["Plans"],"summary":"Get an Environment's Plan","description":"The open plan, else the latest, else `{ plan: null }`.","x-cloudgate-permission":[{"resource":"environment","actions":["read"]}]},"post":{"operationId":"PlansController_create","parameters":[{"name":"environmentId","required":true,"in":"path","schema":{"type":"string"},"description":"The Environment's id."}],"responses":{"201":{"description":""}},"tags":["Plans"],"summary":"Check for changes (make a Plan)","description":"\"Check for changes\": makes a plan, which replaces the open one.","x-cloudgate-permission":[{"resource":"environment","actions":["read"]}]}},"/environments/{environmentId}/plan/dismiss":{"post":{"operationId":"PlansController_dismiss","parameters":[{"name":"environmentId","required":true,"in":"path","schema":{"type":"string"},"description":"The Environment's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DismissPlanDto"}}}},"responses":{"200":{"description":""}},"tags":["Plans"],"summary":"Dismiss the open Plan","x-cloudgate-permission":[{"resource":"environment","actions":["update"]}]}},"/environments/{environmentId}/plan/apply":{"post":{"operationId":"PlansController_apply","parameters":[{"name":"environmentId","required":true,"in":"path","schema":{"type":"string"},"description":"The Environment's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplyPlanDto"}}}},"responses":{"200":{"description":""}},"tags":["Plans"],"summary":"Apply the open Plan","description":"Applies the open plan: creates, changes, then confirmed destroys, each on its own.","x-cloudgate-permission":[{"resource":"environment","actions":["read"]}]}},"/applications/{id}/runtime-log":{"get":{"operationId":"RuntimeLogController_read","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The id."},{"name":"since","required":false,"in":"query","schema":{"minimum":0,"maximum":9007199254740991,"type":"integer"}}],"responses":{"200":{"description":""}},"tags":["RuntimeLog"],"summary":"Read the runtime log","description":"Every task's lines from `since` on, merged by time, each naming its task, and the `since` of the next read."}},"/applications/{id}/cloud-resources":{"get":{"operationId":"ServiceCloudResourcesController_list","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The cloud resource's id."}],"responses":{"200":{"description":""}},"tags":["ServiceCloudResources"],"summary":"List cloud resources","description":"What Cloudgate made for the Service: type, AWS id, region and tags only.","x-cloudgate-permission":[{"resource":"service","actions":["read"]}]}},"/applications/{id}/state/rebuild":{"post":{"operationId":"ServiceCloudResourcesController_rebuild","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The cloud resource's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RebuildStateDto"}}}},"responses":{"200":{"description":""}},"tags":["ServiceCloudResources"],"summary":"Rebuild a cloud resource","description":"Discards an unreadable state and plans an adopt by tag; confirmed by the Service's name.","x-cloudgate-permission":[{"resource":"service","actions":["update"]}]}},"/environments/{id}/networks/{networkId}/resources":{"get":{"operationId":"NetworkCloudResourcesController_list","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The network cloud resource's id."},{"name":"networkId","required":true,"in":"path","schema":{"type":"string"},"description":"The network's id."}],"responses":{"200":{"description":""}},"tags":["NetworkCloudResources"],"summary":"List network cloud resources","description":"What Cloudgate made for the network: type, AWS id, region and tags only.","x-cloudgate-permission":[{"resource":"environment","actions":["read"]}]}},"/environments/{id}/networks/{networkId}/state/rebuild":{"post":{"operationId":"NetworkCloudResourcesController_rebuild","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The network cloud resource's id."},{"name":"networkId","required":true,"in":"path","schema":{"type":"string"},"description":"The network's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RebuildStateDto"}}}},"responses":{"200":{"description":""}},"tags":["NetworkCloudResources"],"summary":"Rebuild a network cloud resource","description":"Discards an unreadable state and plans an adopt by tag; confirmed by the Environment's name.","x-cloudgate-permission":[{"resource":"environment","actions":["update"]}]}},"/services/{serviceType}/{serviceId}/links":{"get":{"operationId":"WiredVariablesController_findOne","parameters":[{"name":"serviceType","required":true,"in":"path","schema":{"type":"string"},"description":"Service type."},{"name":"serviceId","required":true,"in":"path","schema":{"type":"string"},"description":"The Service's id."}],"responses":{"200":{"description":""}},"tags":["WiredVariables"],"summary":"Get a Service's wired variables","x-cloudgate-permission":[{"resource":"service","actions":["read"]}]},"put":{"operationId":"WiredVariablesController_update","parameters":[{"name":"serviceType","required":true,"in":"path","schema":{"type":"string"},"description":"Service type."},{"name":"serviceId","required":true,"in":"path","schema":{"type":"string"},"description":"The Service's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveLinksDto"}}}},"responses":{"200":{"description":""}},"tags":["WiredVariables"],"summary":"Set a Service's wired variables","description":"Sets the whole set of links, as a console Save of a Cloudgate-kept config. `PROJECT_CONFIG_REPOSITORY_KEPT` (409, with a pointer) on a repository-kept one, `LINK_NEEDS_PROJECT_CONFIG` where there is none, `LINK_REFUSED` for a link its plan would refuse.","x-cloudgate-permission":[{"resource":"service","actions":["update"]}]}},"/applications":{"post":{"operationId":"ApplicationsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateApplicationDto"}}}},"responses":{"201":{"description":""}},"tags":["Applications"],"summary":"Create an Application","x-cloudgate-permission":[{"resource":"service","actions":["create"]}]}},"/applications/{id}":{"patch":{"operationId":"ApplicationsController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Application's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateApplicationDto"}}}},"responses":{"200":{"description":""}},"tags":["Applications"],"summary":"Update an Application"},"get":{"operationId":"ApplicationsController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Application's id."}],"responses":{"200":{"description":""}},"tags":["Applications"],"summary":"Get an Application"},"delete":{"operationId":"ApplicationsController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Application's id."},{"name":"force","required":true,"in":"query","schema":{"type":"string"}},{"name":"deleteVolumes","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Applications"],"summary":"Delete an Application","description":"`?force=true` is the escape hatch for a Server that is gone for good: it drops the row even though Cloudgate could not confirm the swarm service is gone, and the response names what was left behind. Default false, a string query parameter compared to 'true' like compose's `deleteVolumes`.","x-cloudgate-permission":[{"resource":"service","actions":["delete"]}]}},"/applications/{id}/environment":{"patch":{"operationId":"ApplicationsController_saveEnvironment","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Application's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveApplicationEnvironmentDto"}}}},"responses":{"200":{"description":""}},"tags":["Applications"],"summary":"Save the environment variables of an Application"}},"/applications/{id}/variables":{"get":{"operationId":"ApplicationsController_listVariables","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Application's id."}],"responses":{"200":{"description":"Every variable name the Application has, with the Output each wired one links to; never a value.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VariableListDto"}}}}},"tags":["Applications"],"summary":"List runtime variable names","description":"The Application's own runtime variables by name, each with the Output it is wired to."},"patch":{"operationId":"ApplicationsController_updateVariables","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Application's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeVariablesDto"}}}},"responses":{"200":{"description":"The variable names after the change, as GET answers them; never a value.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VariableListDto"}}}}},"tags":["Applications"],"summary":"Set or unset runtime variables","description":"Sets and unsets named keys, leaving every other one as it was, and answers the names as the `GET` does. `VARIABLE_IS_LINKED` (409) for a wired name, `VARIABLE_NOT_SET` (404) for unsetting a name not set."}},"/applications/{id}/test-registry-login":{"post":{"operationId":"ApplicationsController_testRegistryLogin","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Application's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestApplicationRegistryLoginDto"}}}},"responses":{"204":{"description":""}},"tags":["Applications"],"summary":"Test a registry login","description":"Does the registry a Docker-image source pulls from accept this login? `204` when it does, a `400` carrying the registry's own refusal when it does not."}},"/applications/{id}/drop":{"post":{"operationId":"ApplicationsController_uploadDrop","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Application's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadApplicationDropDto"}}}},"responses":{"200":{"description":""}},"tags":["Applications"],"summary":"Upload files for a drop deployment","description":"The upload half of a drop deployment: the zip arrives as the multipart `zip` part and is extracted into the application's code directory. Deploying it stays POST /applications/:id/deployments."}},"/applications/{id}/drop/compare":{"post":{"operationId":"ApplicationsController_compareDrop","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Application's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadApplicationDropDto"}}}},"responses":{"200":{"description":""}},"tags":["Applications"],"summary":"Compare a folder with the uploaded files","x-cloudgate-permission":[{"resource":"service","actions":["update"]}]}},"/applications/{id}/drop/apply":{"post":{"operationId":"ApplicationsController_applyDrop","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Application's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadApplicationDropDto"}}}},"responses":{"200":{"description":""}},"tags":["Applications"],"summary":"Upload only the changed files","description":"The second half: the multipart `files` part is the whole folder's file list, the `zip` part only the files compare asked for, and the fields are `/drop`'s. Answers what `/drop` answers. Any member who may update the Application may call it; the service scopes it to the caller's organization.","x-cloudgate-permission":[{"resource":"service","actions":["update"]}]}},"/applications/{id}/start":{"post":{"operationId":"ApplicationsController_start","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Application's id."}],"responses":{"200":{"description":""}},"tags":["Applications"],"summary":"Start an Application","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/applications/{id}/stop":{"post":{"operationId":"ApplicationsController_stop","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Application's id."}],"responses":{"200":{"description":""}},"tags":["Applications"],"summary":"Stop an Application","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/applications/{id}/reload":{"post":{"operationId":"ApplicationsController_reload","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Application's id."}],"responses":{"200":{"description":""}},"tags":["Applications"],"summary":"Reload an Application","description":"Restart the Swarm service without rebuilding the image.","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/applications/{id}/copy-range":{"put":{"operationId":"ApplicationsController_setCopyRange","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Application's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CopyRangeDto"}}}},"responses":{"200":{"description":""}},"tags":["Applications"],"summary":"Set the copy range","x-cloudgate-permission":[{"resource":"service","actions":["update"]}]}},"/applications/{id}/refresh-token":{"post":{"operationId":"ApplicationsController_refreshToken","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Application's id."}],"responses":{"200":{"description":""}},"tags":["Applications"],"summary":"Rotate the deploy-webhook token","description":"Rotate the secret in the deploy-webhook URL."}},"/applications/{id}/gpu-wait":{"get":{"operationId":"ApplicationsController_gpuWait","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Application's id."}],"responses":{"200":{"description":""}},"tags":["Applications"],"summary":"Check whether it waits for a GPU","description":"\"Waiting for a GPU\" on the Overview: `{ waiting: true, free, cards }` when the Application reserves GPUs and Swarm has left its task pending for want of a node, else `{ waiting: false }`. Read live; writes nothing."}},"/applications/{id}/delete/retry":{"post":{"operationId":"ApplicationsController_retryDelete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Application's id."}],"responses":{"200":{"description":""}},"tags":["Applications"],"summary":"Retry deleting an Application","description":"Retry a cloud Service's incomplete Delete: another destroy-only Cloud run from the kept state.","x-cloudgate-permission":[{"resource":"service","actions":["delete"]}]}},"/applications/{id}/delete/forget":{"post":{"operationId":"ApplicationsController_forgetDelete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Application's id."}],"responses":{"200":{"description":""}},"tags":["Applications"],"summary":"Forget the incomplete delete of an Application","description":"Forget a cloud Service's incomplete Delete: the row dropped, what is left in AWS written into the audit entry.","x-cloudgate-permission":[{"resource":"service","actions":["delete"]}]}},"/cloud-accounts/setup":{"post":{"operationId":"CloudAccountsController_setup","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetupCloudAccountDto"}}}},"responses":{"200":{"description":""}},"tags":["CloudAccounts"],"summary":"Get Cloud account setup","x-cloudgate-permission":[{"resource":"cloudAccount","actions":["create"]}]}},"/cloud-accounts":{"post":{"operationId":"CloudAccountsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCloudAccountDto"}}}},"responses":{"201":{"description":""}},"tags":["CloudAccounts"],"summary":"Create a Cloud account","x-cloudgate-permission":[{"resource":"cloudAccount","actions":["create"]}]},"get":{"operationId":"CloudAccountsController_list","parameters":[],"responses":{"200":{"description":""}},"tags":["CloudAccounts"],"summary":"List Cloud accounts","x-cloudgate-permission":[{"resource":"cloudAccount","actions":["read"]}]}},"/cloud-accounts/{id}":{"get":{"operationId":"CloudAccountsController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Cloud account's id."}],"responses":{"200":{"description":""}},"tags":["CloudAccounts"],"summary":"Get a Cloud account","x-cloudgate-permission":[{"resource":"cloudAccount","actions":["read"]}]},"patch":{"operationId":"CloudAccountsController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Cloud account's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCloudAccountDto"}}}},"responses":{"200":{"description":""}},"tags":["CloudAccounts"],"summary":"Update a Cloud account","x-cloudgate-permission":[{"resource":"cloudAccount","actions":["update"]}]},"delete":{"operationId":"CloudAccountsController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Cloud account's id."}],"responses":{"200":{"description":""}},"tags":["CloudAccounts"],"summary":"Delete a Cloud account","x-cloudgate-permission":[{"resource":"cloudAccount","actions":["delete"]}]}},"/cloud-accounts/{id}/template":{"get":{"operationId":"CloudAccountsController_template","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Cloud account's id."}],"responses":{"200":{"description":""}},"tags":["CloudAccounts"],"summary":"Get the setup template","description":"The setup template (AWS) or script (Google) at the current version, for \"permissions out of date\" and a key change.","x-cloudgate-permission":[{"resource":"cloudAccount","actions":["update"]}]}},"/cloud-accounts/{id}/check":{"post":{"operationId":"CloudAccountsController_check","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Cloud account's id."}],"responses":{"200":{"description":""}},"tags":["CloudAccounts"],"summary":"Check a Cloud account now","x-cloudgate-permission":[{"resource":"cloudAccount","actions":["update"]}]}},"/cloud-accounts/{id}/key":{"post":{"operationId":"CloudAccountsController_newKey","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Cloud account's id."}],"responses":{"200":{"description":""}},"tags":["CloudAccounts"],"summary":"Make a new key (Google Cloud)","description":"\"New key\" on a Google Cloud account: a new key pair, pending until a check signed with it passes, and the setup with a JWKS of both public halves. Nothing signs with it yet, so `200`.","x-cloudgate-permission":[{"resource":"cloudAccount","actions":["update"]}]}},"/cloud-accounts/{id}/key/check":{"post":{"operationId":"CloudAccountsController_checkNewKey","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Cloud account's id."}],"responses":{"200":{"description":""}},"tags":["CloudAccounts"],"summary":"Check the new key","description":"The check signed with the pending key: a pass switches to it, a failure (`400`) changes nothing.","x-cloudgate-permission":[{"resource":"cloudAccount","actions":["update"]}]}},"/git-providers":{"post":{"operationId":"GitProvidersController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateGitProviderDto"}}}},"responses":{"201":{"description":""}},"tags":["GitProviders"],"summary":"Create a git provider","x-cloudgate-permission":[{"resource":"gitProviders","actions":["create"]}]},"get":{"operationId":"GitProvidersController_list","parameters":[],"responses":{"200":{"description":""}},"tags":["GitProviders"],"summary":"List git providers","x-cloudgate-permission":[{"resource":"gitProviders","actions":["read"]}]}},"/git-providers/{id}":{"get":{"operationId":"GitProvidersController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The git provider's id."}],"responses":{"200":{"description":""}},"tags":["GitProviders"],"summary":"Get a git provider","x-cloudgate-permission":[{"resource":"gitProviders","actions":["read"]}]},"patch":{"operationId":"GitProvidersController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The git provider's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateGitProviderDto"}}}},"responses":{"200":{"description":""}},"tags":["GitProviders"],"summary":"Update a git provider","x-cloudgate-permission":[{"resource":"gitProviders","actions":["create"]}]},"delete":{"operationId":"GitProvidersController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The git provider's id."}],"responses":{"200":{"description":""}},"tags":["GitProviders"],"summary":"Delete a git provider","x-cloudgate-permission":[{"resource":"gitProviders","actions":["delete"]}]}},"/git-providers/oauth/github/manifest":{"post":{"operationId":"GitProviderOauthController_startGithubManifest","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartGithubManifestDto"}}}},"responses":{"200":{"description":""}},"tags":["GitProviderOauth"],"summary":"Start GitHub manifest","description":"The GitHub App setup page, as data: the manifest document plus the github.com form to POST it to. The POST has to come from the browser — GitHub answers it with a redirect carrying a one-time code.","x-cloudgate-permission":[{"resource":"gitProviders","actions":["create"]}]}},"/git-providers/oauth/gitlab/{id}/authorize":{"post":{"operationId":"GitProviderOauthController_startGitlabAuthorization","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The id."}],"responses":{"200":{"description":""}},"tags":["GitProviderOauth"],"summary":"Start GitLab authorization","description":"Where to send the browser to authorize a GitLab OAuth application.","x-cloudgate-permission":[{"resource":"gitProviders","actions":["create"]}]}},"/git-providers/oauth/gitea/{id}/authorize":{"post":{"operationId":"GitProviderOauthController_startGiteaAuthorization","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The id."}],"responses":{"200":{"description":""}},"tags":["GitProviderOauth"],"summary":"Start Gitea authorization","description":"Where to send the browser to authorize a Gitea OAuth application.","x-cloudgate-permission":[{"resource":"gitProviders","actions":["create"]}]}},"/github":{"post":{"operationId":"GithubController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateGithubDto"}}}},"responses":{"201":{"description":""}},"tags":["Github"],"summary":"Create a GitHub connection","x-cloudgate-permission":[{"resource":"gitProviders","actions":["create"]}]},"get":{"operationId":"GithubController_list","parameters":[],"responses":{"200":{"description":""}},"tags":["Github"],"summary":"List GitHub connections","x-cloudgate-permission":[{"resource":"gitProviders","actions":["read"]}]}},"/github/{id}/repositories":{"get":{"operationId":"GithubController_listRepositories","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The GitHub connection's id."}],"responses":{"200":{"description":""}},"tags":["Github"],"summary":"List repositories of a GitHub connection","x-cloudgate-permission":[{"resource":"gitProviders","actions":["read"]}]}},"/github/{id}/branches":{"get":{"operationId":"GithubController_listBranches","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The GitHub connection's id."},{"name":"owner","required":true,"in":"query","schema":{"minLength":1,"type":"string"}},{"name":"repo","required":true,"in":"query","schema":{"minLength":1,"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Github"],"summary":"List branches of a GitHub connection","x-cloudgate-permission":[{"resource":"gitProviders","actions":["read"]}]}},"/github/{id}":{"get":{"operationId":"GithubController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The GitHub connection's id."}],"responses":{"200":{"description":""}},"tags":["Github"],"summary":"Get a GitHub connection","x-cloudgate-permission":[{"resource":"gitProviders","actions":["read"]}]},"patch":{"operationId":"GithubController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The GitHub connection's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateGithubDto"}}}},"responses":{"200":{"description":""}},"tags":["Github"],"summary":"Update a GitHub connection","x-cloudgate-permission":[{"resource":"gitProviders","actions":["create"]}]}},"/gitlab":{"post":{"operationId":"GitlabController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateGitlabDto"}}}},"responses":{"201":{"description":""}},"tags":["Gitlab"],"summary":"Create a GitLab connection","x-cloudgate-permission":[{"resource":"gitProviders","actions":["create"]}]},"get":{"operationId":"GitlabController_list","parameters":[],"responses":{"200":{"description":""}},"tags":["Gitlab"],"summary":"List GitLab connections","x-cloudgate-permission":[{"resource":"gitProviders","actions":["read"]}]}},"/gitlab/{id}/repositories":{"get":{"operationId":"GitlabController_listRepositories","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The GitLab connection's id."}],"responses":{"200":{"description":""}},"tags":["Gitlab"],"summary":"List repositories of a GitLab connection","x-cloudgate-permission":[{"resource":"gitProviders","actions":["read"]}]}},"/gitlab/{id}/branches":{"get":{"operationId":"GitlabController_listBranches","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The GitLab connection's id."},{"name":"projectId","required":true,"in":"query","schema":{"maximum":9007199254740991,"exclusiveMinimum":true,"type":"integer","minimum":0}}],"responses":{"200":{"description":""}},"tags":["Gitlab"],"summary":"List branches of a GitLab connection","x-cloudgate-permission":[{"resource":"gitProviders","actions":["read"]}]}},"/gitlab/{id}":{"get":{"operationId":"GitlabController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The GitLab connection's id."}],"responses":{"200":{"description":""}},"tags":["Gitlab"],"summary":"Get a GitLab connection","x-cloudgate-permission":[{"resource":"gitProviders","actions":["read"]}]},"patch":{"operationId":"GitlabController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The GitLab connection's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateGitlabDto"}}}},"responses":{"200":{"description":""}},"tags":["Gitlab"],"summary":"Update a GitLab connection","x-cloudgate-permission":[{"resource":"gitProviders","actions":["create"]}]}},"/bitbucket":{"post":{"operationId":"BitbucketController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBitbucketDto"}}}},"responses":{"201":{"description":""}},"tags":["Bitbucket"],"summary":"Create a Bitbucket connection","x-cloudgate-permission":[{"resource":"gitProviders","actions":["create"]}]},"get":{"operationId":"BitbucketController_list","parameters":[],"responses":{"200":{"description":""}},"tags":["Bitbucket"],"summary":"List Bitbucket connections","x-cloudgate-permission":[{"resource":"gitProviders","actions":["read"]}]}},"/bitbucket/{id}/repositories":{"get":{"operationId":"BitbucketController_listRepositories","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Bitbucket connection's id."}],"responses":{"200":{"description":""}},"tags":["Bitbucket"],"summary":"List repositories of a Bitbucket connection","x-cloudgate-permission":[{"resource":"gitProviders","actions":["read"]}]}},"/bitbucket/{id}/branches":{"get":{"operationId":"BitbucketController_listBranches","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Bitbucket connection's id."},{"name":"owner","required":true,"in":"query","schema":{"minLength":1,"type":"string"}},{"name":"repo","required":true,"in":"query","schema":{"minLength":1,"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Bitbucket"],"summary":"List branches of a Bitbucket connection","x-cloudgate-permission":[{"resource":"gitProviders","actions":["read"]}]}},"/bitbucket/{id}":{"get":{"operationId":"BitbucketController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Bitbucket connection's id."}],"responses":{"200":{"description":""}},"tags":["Bitbucket"],"summary":"Get a Bitbucket connection","x-cloudgate-permission":[{"resource":"gitProviders","actions":["read"]}]},"patch":{"operationId":"BitbucketController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Bitbucket connection's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateBitbucketDto"}}}},"responses":{"200":{"description":""}},"tags":["Bitbucket"],"summary":"Update a Bitbucket connection","x-cloudgate-permission":[{"resource":"gitProviders","actions":["create"]}]}},"/gitea":{"post":{"operationId":"GiteaController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateGiteaDto"}}}},"responses":{"201":{"description":""}},"tags":["Gitea"],"summary":"Create a Gitea connection","x-cloudgate-permission":[{"resource":"gitProviders","actions":["create"]}]},"get":{"operationId":"GiteaController_list","parameters":[],"responses":{"200":{"description":""}},"tags":["Gitea"],"summary":"List Gitea connections","x-cloudgate-permission":[{"resource":"gitProviders","actions":["read"]}]}},"/gitea/{id}/repositories":{"get":{"operationId":"GiteaController_listRepositories","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Gitea connection's id."}],"responses":{"200":{"description":""}},"tags":["Gitea"],"summary":"List repositories of a Gitea connection","x-cloudgate-permission":[{"resource":"gitProviders","actions":["read"]}]}},"/gitea/{id}/branches":{"get":{"operationId":"GiteaController_listBranches","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Gitea connection's id."},{"name":"owner","required":true,"in":"query","schema":{"minLength":1,"type":"string"}},{"name":"repo","required":true,"in":"query","schema":{"minLength":1,"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Gitea"],"summary":"List branches of a Gitea connection","x-cloudgate-permission":[{"resource":"gitProviders","actions":["read"]}]}},"/gitea/{id}":{"get":{"operationId":"GiteaController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Gitea connection's id."}],"responses":{"200":{"description":""}},"tags":["Gitea"],"summary":"Get a Gitea connection","x-cloudgate-permission":[{"resource":"gitProviders","actions":["read"]}]},"patch":{"operationId":"GiteaController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Gitea connection's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateGiteaDto"}}}},"responses":{"200":{"description":""}},"tags":["Gitea"],"summary":"Update a Gitea connection","x-cloudgate-permission":[{"resource":"gitProviders","actions":["create"]}]}},"/deployments":{"get":{"operationId":"DeploymentsController_list","parameters":[{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"default":20,"type":"integer"}},{"name":"cursor","required":false,"in":"query","schema":{"minLength":1,"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"type":"string","enum":["pending","running","done","error","cancelled","held"]}},{"name":"projectId","required":false,"in":"query","schema":{"minLength":1,"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Deployments"],"summary":"List the Organization's Deployments","description":"The organization's deployment feed — the read that exists for no single owner, because no route enumerates an Environment's services for a client to fan out over.","x-cloudgate-permission":[{"resource":"deployment","actions":["read"]}]}},"/applications/{applicationId}/deployments":{"post":{"operationId":"DeploymentsController_deploy","parameters":[{"name":"applicationId","required":true,"in":"path","schema":{"type":"string"},"description":"The Application's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerDeploymentDto"}}}},"responses":{"201":{"description":""}},"tags":["Deployments"],"summary":"Deploy an Application","description":"Triggers a deployment of an application — deployments are triggered per service.","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]},"get":{"operationId":"DeploymentsController_findAllByApplication","parameters":[{"name":"applicationId","required":true,"in":"path","schema":{"type":"string"},"description":"The Application's id."}],"responses":{"200":{"description":""}},"tags":["Deployments"],"summary":"List Deployments for an Application","description":"An application's deployments.","x-cloudgate-permission":[{"resource":"deployment","actions":["read"]}]}},"/applications/{applicationId}/redeploy":{"post":{"operationId":"DeploymentsController_redeploy","parameters":[{"name":"applicationId","required":true,"in":"path","schema":{"type":"string"},"description":"The Application's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerDeploymentDto"}}}},"responses":{"201":{"description":""}},"tags":["Deployments"],"summary":"Redeploy an Application","description":"Builds again from the source the Application already has. It lives here rather than on the applications controller for the same reason `deployments` does — it writes a deployment record and enqueues a job, and both of those belong to one service.","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/deployments/{deploymentId}/cancel":{"post":{"operationId":"DeploymentsController_cancel","parameters":[{"name":"deploymentId","required":true,"in":"path","schema":{"type":"string"},"description":"The Deployment's id."}],"responses":{"200":{"description":""}},"tags":["Deployments"],"summary":"Cancel a Deployment","description":"Cancels a deployment.","x-cloudgate-permission":[{"resource":"deployment","actions":["cancel"]}]}},"/deployments/{deploymentId}/stop-run":{"post":{"operationId":"DeploymentsController_stopRun","parameters":[{"name":"deploymentId","required":true,"in":"path","schema":{"type":"string"},"description":"The Deployment's id."}],"responses":{"200":{"description":""}},"tags":["Deployments"],"summary":"Stop a Cloud run","description":"Stop the run: ends a running Cloud run, its apply included.","x-cloudgate-permission":[{"resource":"deployment","actions":["cancel"]}]}},"/deployments/{deploymentId}/build-now":{"post":{"operationId":"DeploymentsController_buildNow","parameters":[{"name":"deploymentId","required":true,"in":"path","schema":{"type":"string"},"description":"The Deployment's id."}],"responses":{"200":{"description":""}},"tags":["Deployments"],"summary":"Build a held push now","description":"\"Build now with saved settings\": releases a build a push held for a plan into the queue at once. `200`, like `cancel`: it updates the Deployment named in its path and inserts nothing.","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/compose/{composeId}/deployments":{"post":{"operationId":"DeploymentsController_deployCompose","parameters":[{"name":"composeId","required":true,"in":"path","schema":{"type":"string"},"description":"The Compose stack's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerDeploymentDto"}}}},"responses":{"201":{"description":""}},"tags":["Deployments"],"summary":"Deploy a Compose stack","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]},"get":{"operationId":"DeploymentsController_findAllByCompose","parameters":[{"name":"composeId","required":true,"in":"path","schema":{"type":"string"},"description":"The Compose stack's id."}],"responses":{"200":{"description":""}},"tags":["Deployments"],"summary":"List Deployments for a Compose stack","description":"A compose stack's deployments.","x-cloudgate-permission":[{"resource":"deployment","actions":["read"]}]}},"/schedules/{scheduleId}/deployments":{"get":{"operationId":"DeploymentsController_findAllBySchedule","parameters":[{"name":"scheduleId","required":true,"in":"path","schema":{"type":"string"},"description":"The schedule's id."}],"responses":{"200":{"description":""}},"tags":["Deployments"],"summary":"List Deployments for a schedule","x-cloudgate-permission":[{"resource":"deployment","actions":["read"]}]}},"/volume-backups/{volumeBackupId}/deployments":{"get":{"operationId":"DeploymentsController_findAllByVolumeBackup","parameters":[{"name":"volumeBackupId","required":true,"in":"path","schema":{"type":"string"},"description":"The volume backup's id."}],"responses":{"200":{"description":""}},"tags":["Deployments"],"summary":"List Deployments for a volume backup","description":"A volume backup's run history.","x-cloudgate-permission":[{"resource":"deployment","actions":["read"]}]}},"/deployments/{deploymentId}":{"get":{"operationId":"DeploymentsController_findOne","parameters":[{"name":"deploymentId","required":true,"in":"path","schema":{"type":"string"},"description":"The Deployment's id."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentStatusDto"}}}}},"tags":["Deployments"],"summary":"Get a Deployment","description":"One Deployment's status and times: `pending`, `running`, `done`, `error` (failed), `cancelled` or `held`, and when it was recorded, started and finished. The Cloudgate CLI asks it while following the Deployment log, whose stream never closes by itself.","x-cloudgate-permission":[{"resource":"deployment","actions":["read"]}]}},"/deployments/{deploymentId}/logs":{"get":{"operationId":"DeploymentsController_readLogs","parameters":[{"name":"deploymentId","required":true,"in":"path","schema":{"type":"string"},"description":"The Deployment's id."},{"name":"tail","required":false,"in":"query","schema":{"minimum":1,"maximum":10000,"default":100,"type":"integer"}}],"responses":{"200":{"description":"The deployment's log file, most recent `tail` lines last.","content":{"text/plain":{"schema":{"type":"string"}}}}},"tags":["Deployments"],"summary":"Read a Deployment log","description":"The tail of a deployment's log file.","x-cloudgate-permission":[{"resource":"deployment","actions":["read"]}]}},"/backups":{"post":{"operationId":"BackupsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBackupDto"}}}},"responses":{"201":{"description":""}},"tags":["Backups"],"summary":"Create a backup","x-cloudgate-permission":[{"resource":"backup","actions":["create"]}]},"get":{"operationId":"BackupsController_listByService","parameters":[{"name":"serviceId","required":true,"in":"query","schema":{"minLength":1,"type":"string"}},{"name":"serviceType","required":true,"in":"query","schema":{"type":"string","enum":["postgres","mysql","mariadb","mongo","libsql","compose"]}}],"responses":{"200":{"description":""}},"tags":["Backups"],"summary":"List backups for a Service","x-cloudgate-permission":[{"resource":"backup","actions":["read"]}]}},"/backups/restore":{"post":{"operationId":"BackupsController_restore","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestoreBackupDto"}}}},"responses":{"204":{"description":""}},"tags":["Backups"],"summary":"Restore a backup","x-cloudgate-permission":[{"resource":"backup","actions":["restore"]}]}},"/backups/files":{"get":{"operationId":"BackupsController_listBackupFiles","parameters":[{"name":"destinationId","required":true,"in":"query","schema":{"minLength":1,"type":"string"}},{"name":"search","required":false,"in":"query","schema":{"default":"","type":"string"}},{"name":"serverId","required":false,"in":"query","schema":{"type":"string","nullable":true}}],"responses":{"200":{"description":""}},"tags":["Backups"],"summary":"List backup files","x-cloudgate-permission":[{"resource":"backup","actions":["read"]}]}},"/backups/{id}":{"get":{"operationId":"BackupsController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The backup's id."}],"responses":{"200":{"description":""}},"tags":["Backups"],"summary":"Get a backup","x-cloudgate-permission":[{"resource":"backup","actions":["read"]}]},"patch":{"operationId":"BackupsController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The backup's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateBackupDto"}}}},"responses":{"200":{"description":""}},"tags":["Backups"],"summary":"Update a backup","x-cloudgate-permission":[{"resource":"backup","actions":["update"]}]},"delete":{"operationId":"BackupsController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The backup's id."}],"responses":{"200":{"description":""}},"tags":["Backups"],"summary":"Delete a backup","x-cloudgate-permission":[{"resource":"backup","actions":["delete"]}]}},"/backups/{id}/run":{"post":{"operationId":"BackupsController_runManual","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The backup's id."}],"responses":{"204":{"description":""}},"tags":["Backups"],"summary":"Run a backup now","x-cloudgate-permission":[{"resource":"backup","actions":["create"]}]}},"/destinations":{"post":{"operationId":"DestinationsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDestinationDto"}}}},"responses":{"201":{"description":""}},"tags":["Destinations"],"summary":"Create a backup destination","x-cloudgate-permission":[{"resource":"destination","actions":["create"]}]},"get":{"operationId":"DestinationsController_list","parameters":[],"responses":{"200":{"description":""}},"tags":["Destinations"],"summary":"List backup destinations","x-cloudgate-permission":[{"resource":"destination","actions":["read"]}]}},"/destinations/test-connection":{"post":{"operationId":"DestinationsController_testConnection","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DestinationTestConnectionDto"}}}},"responses":{"204":{"description":""}},"tags":["Destinations"],"summary":"Test a connection to a backup destination","x-cloudgate-permission":[{"resource":"destination","actions":["create"]}]}},"/destinations/{id}/test-connection":{"post":{"operationId":"DestinationsController_testSavedConnection","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The backup destination's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestSavedConnectionDto"}}}},"responses":{"204":{"description":""}},"tags":["Destinations"],"summary":"Test a saved backup destination","description":"The same probe against a destination that is already saved. The credentials come off the row server-side, because the read path strips the secret and so the console has nothing to send.","x-cloudgate-permission":[{"resource":"destination","actions":["create"]}]}},"/destinations/{id}":{"get":{"operationId":"DestinationsController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The backup destination's id."}],"responses":{"200":{"description":""}},"tags":["Destinations"],"summary":"Get a backup destination","x-cloudgate-permission":[{"resource":"destination","actions":["read"]}]},"patch":{"operationId":"DestinationsController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The backup destination's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDestinationDto"}}}},"responses":{"200":{"description":""}},"tags":["Destinations"],"summary":"Update a backup destination","x-cloudgate-permission":[{"resource":"destination","actions":["create"]}]},"delete":{"operationId":"DestinationsController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The backup destination's id."}],"responses":{"200":{"description":""}},"tags":["Destinations"],"summary":"Delete a backup destination","x-cloudgate-permission":[{"resource":"destination","actions":["delete"]}]}},"/destinations/{id}/objects":{"get":{"operationId":"DestinationsController_listObjects","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The backup destination's id."},{"name":"prefix","required":false,"in":"query","schema":{"type":"string"}},{"name":"serverId","required":false,"in":"query","schema":{"type":"string","nullable":true}}],"responses":{"200":{"description":""}},"tags":["Destinations"],"summary":"List objects","description":"What is actually in the bucket, so a restore can pick it.","x-cloudgate-permission":[{"resource":"destination","actions":["read"]}]}},"/schedules":{"post":{"operationId":"SchedulesController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateScheduleDto"}}}},"responses":{"201":{"description":""}},"tags":["Schedules"],"summary":"Create a schedule","x-cloudgate-permission":[{"resource":"schedule","actions":["create"]}]},"get":{"operationId":"SchedulesController_list","parameters":[{"name":"scheduleType","required":true,"in":"query","schema":{"type":"string","enum":["application","compose","server","cloudgate-server"]}},{"name":"serviceId","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Schedules"],"summary":"List schedules","x-cloudgate-permission":[{"resource":"schedule","actions":["read"]}]}},"/schedules/{id}":{"get":{"operationId":"SchedulesController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The schedule's id."}],"responses":{"200":{"description":""}},"tags":["Schedules"],"summary":"Get a schedule","x-cloudgate-permission":[{"resource":"schedule","actions":["read"]}]},"patch":{"operationId":"SchedulesController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The schedule's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateScheduleDto"}}}},"responses":{"200":{"description":""}},"tags":["Schedules"],"summary":"Update a schedule","x-cloudgate-permission":[{"resource":"schedule","actions":["update"]}]},"delete":{"operationId":"SchedulesController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The schedule's id."}],"responses":{"200":{"description":""}},"tags":["Schedules"],"summary":"Delete a schedule","x-cloudgate-permission":[{"resource":"schedule","actions":["delete"]}]}},"/schedules/{id}/run":{"post":{"operationId":"SchedulesController_runManual","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The schedule's id."}],"responses":{"204":{"description":""}},"tags":["Schedules"],"summary":"Run a schedule now","x-cloudgate-permission":[{"resource":"schedule","actions":["create"]}]}},"/volume-backups":{"post":{"operationId":"VolumeBackupsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateVolumeBackupDto"}}}},"responses":{"201":{"description":""}},"tags":["VolumeBackups"],"summary":"Create a volume backup","x-cloudgate-permission":[{"resource":"volumeBackup","actions":["create"]}]},"get":{"operationId":"VolumeBackupsController_listByService","parameters":[{"name":"serviceId","required":true,"in":"query","schema":{"minLength":1,"type":"string"}},{"name":"serviceType","required":true,"in":"query","schema":{"type":"string","enum":["application","postgres","mysql","mariadb","mongo","redis","compose","libsql","bucket"]}}],"responses":{"200":{"description":""}},"tags":["VolumeBackups"],"summary":"List volume backups for a Service","x-cloudgate-permission":[{"resource":"volumeBackup","actions":["read"]}]}},"/volume-backups/restore":{"post":{"operationId":"VolumeBackupsController_restore","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestoreVolumeBackupDto"}}}},"responses":{"204":{"description":""}},"tags":["VolumeBackups"],"summary":"Restore a volume backup","description":"`204`, and both of this controller's `204`s are void by design. `restore` answers nothing because its whole diagnosis is the rclone script's stdout, which reaches the caller as a 400/409 message — success has nothing left to say.","x-cloudgate-permission":[{"resource":"volumeBackup","actions":["restore"]}]}},"/volume-backups/{id}":{"get":{"operationId":"VolumeBackupsController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The volume backup's id."}],"responses":{"200":{"description":""}},"tags":["VolumeBackups"],"summary":"Get a volume backup","x-cloudgate-permission":[{"resource":"volumeBackup","actions":["read"]}]},"patch":{"operationId":"VolumeBackupsController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The volume backup's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateVolumeBackupDto"}}}},"responses":{"200":{"description":""}},"tags":["VolumeBackups"],"summary":"Update a volume backup","x-cloudgate-permission":[{"resource":"volumeBackup","actions":["update"]}]},"delete":{"operationId":"VolumeBackupsController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The volume backup's id."}],"responses":{"200":{"description":""}},"tags":["VolumeBackups"],"summary":"Delete a volume backup","x-cloudgate-permission":[{"resource":"volumeBackup","actions":["delete"]}]}},"/volume-backups/{id}/run":{"post":{"operationId":"VolumeBackupsController_runManual","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The volume backup's id."}],"responses":{"204":{"description":""}},"tags":["VolumeBackups"],"summary":"Run a volume backup now","x-cloudgate-permission":[{"resource":"volumeBackup","actions":["create"]}]}},"/registries":{"post":{"operationId":"RegistriesController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRegistryDto"}}}},"responses":{"201":{"description":""}},"tags":["Registries"],"summary":"Create a registry","x-cloudgate-permission":[{"resource":"registry","actions":["create"]}]},"get":{"operationId":"RegistriesController_list","parameters":[],"responses":{"200":{"description":""}},"tags":["Registries"],"summary":"List registries","x-cloudgate-permission":[{"resource":"registry","actions":["read"]}]}},"/registries/test-connection":{"post":{"operationId":"RegistriesController_testConnection","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestRegistryConnectionDto"}}}},"responses":{"204":{"description":""}},"tags":["Registries"],"summary":"Test a connection to a registry","description":"Does the registry accept this login? `204` when it does, a `400` carrying the registry's own refusal when it does not — and nothing else either way, so no answer can carry the password back out.","x-cloudgate-permission":[{"resource":"registry","actions":["create"]}]}},"/registries/{id}/test-connection":{"post":{"operationId":"RegistriesController_testSavedConnection","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The registry's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestSavedRegistryConnectionDto"}}}},"responses":{"204":{"description":""}},"tags":["Registries"],"summary":"Test a saved registry","description":"The same question for a saved registry, with the stored password — which the console cannot send, because no read ever returns it.","x-cloudgate-permission":[{"resource":"registry","actions":["create"]}]}},"/registries/{id}":{"get":{"operationId":"RegistriesController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The registry's id."}],"responses":{"200":{"description":""}},"tags":["Registries"],"summary":"Get a registry","x-cloudgate-permission":[{"resource":"registry","actions":["read"]}]},"patch":{"operationId":"RegistriesController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The registry's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRegistryDto"}}}},"responses":{"200":{"description":""}},"tags":["Registries"],"summary":"Update a registry","x-cloudgate-permission":[{"resource":"registry","actions":["create"]}]},"delete":{"operationId":"RegistriesController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The registry's id."}],"responses":{"200":{"description":""}},"tags":["Registries"],"summary":"Delete a registry","x-cloudgate-permission":[{"resource":"registry","actions":["delete"]}]}},"/ssh-keys":{"post":{"operationId":"SshKeysController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSshKeyDto"}}}},"responses":{"201":{"description":""}},"tags":["SshKeys"],"summary":"Create an SSH key","x-cloudgate-permission":[{"resource":"sshKeys","actions":["create"]}]},"get":{"operationId":"SshKeysController_list","parameters":[],"responses":{"200":{"description":""}},"tags":["SshKeys"],"summary":"List SSH keys","x-cloudgate-permission":[{"resource":"sshKeys","actions":["read"]}]}},"/ssh-keys/{id}":{"get":{"operationId":"SshKeysController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The SSH key's id."}],"responses":{"200":{"description":""}},"tags":["SshKeys"],"summary":"Get an SSH key","x-cloudgate-permission":[{"resource":"sshKeys","actions":["read"]}]},"patch":{"operationId":"SshKeysController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The SSH key's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSshKeyDto"}}}},"responses":{"200":{"description":""}},"tags":["SshKeys"],"summary":"Update an SSH key","x-cloudgate-permission":[{"resource":"sshKeys","actions":["create"]}]},"delete":{"operationId":"SshKeysController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The SSH key's id."}],"responses":{"200":{"description":""}},"tags":["SshKeys"],"summary":"Delete an SSH key","x-cloudgate-permission":[{"resource":"sshKeys","actions":["delete"]}]}},"/uptime-checks":{"post":{"operationId":"UptimeChecksController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUptimeCheckDto"}}}},"responses":{"201":{"description":""}},"tags":["UptimeChecks"],"summary":"Create an uptime check","x-cloudgate-permission":[{"resource":"service","actions":["update"]}]},"get":{"operationId":"UptimeChecksController_list","parameters":[{"name":"serviceType","required":true,"in":"query","schema":{"type":"string","enum":["application","postgres","mysql","mariadb","mongo","redis","compose","libsql","bucket"]}},{"name":"serviceId","required":true,"in":"query","schema":{"minLength":1,"type":"string"}}],"responses":{"200":{"description":""}},"tags":["UptimeChecks"],"summary":"List uptime checks","x-cloudgate-permission":[{"resource":"service","actions":["read"]}]}},"/uptime-checks/published-ports":{"get":{"operationId":"UptimeChecksController_publishedPorts","parameters":[{"name":"serviceType","required":true,"in":"query","schema":{"type":"string","enum":["application","postgres","mysql","mariadb","mongo","redis","compose","libsql","bucket"]}},{"name":"serviceId","required":true,"in":"query","schema":{"minLength":1,"type":"string"}}],"responses":{"200":{"description":""}},"tags":["UptimeChecks"],"summary":"List ports a check may dial","description":"The TCP ports a check on this Service may dial, the address it dials them on, and why there are none when there are none — the modal's published-port picker.","x-cloudgate-permission":[{"resource":"service","actions":["read"]}]}},"/uptime-checks/{uptimeCheckId}":{"patch":{"operationId":"UptimeChecksController_update","parameters":[{"name":"uptimeCheckId","required":true,"in":"path","schema":{"type":"string"},"description":"The uptime check's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUptimeCheckDto"}}}},"responses":{"200":{"description":""}},"tags":["UptimeChecks"],"summary":"Update an uptime check","x-cloudgate-permission":[{"resource":"service","actions":["update"]}]},"delete":{"operationId":"UptimeChecksController_remove","parameters":[{"name":"uptimeCheckId","required":true,"in":"path","schema":{"type":"string"},"description":"The uptime check's id."}],"responses":{"200":{"description":""}},"tags":["UptimeChecks"],"summary":"Delete an uptime check","x-cloudgate-permission":[{"resource":"service","actions":["update"]}]}},"/error-rate-thresholds/{serviceId}":{"get":{"operationId":"ErrorRateThresholdsController_findOne","parameters":[{"name":"serviceId","required":true,"in":"path","schema":{"type":"string"},"description":"The Service's id."},{"name":"serviceType","required":true,"in":"query","schema":{"type":"string","enum":["application","postgres","mysql","mariadb","mongo","redis","compose","libsql","bucket"]}}],"responses":{"200":{"description":""}},"tags":["ErrorRateThresholds"],"summary":"Get an error-rate threshold","x-cloudgate-permission":[{"resource":"service","actions":["read"]}]},"put":{"operationId":"ErrorRateThresholdsController_update","parameters":[{"name":"serviceId","required":true,"in":"path","schema":{"type":"string"},"description":"The Service's id."},{"name":"serviceType","required":true,"in":"query","schema":{"type":"string","enum":["application","postgres","mysql","mariadb","mongo","redis","compose","libsql","bucket"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PutErrorRateThresholdDto"}}}},"responses":{"200":{"description":""}},"tags":["ErrorRateThresholds"],"summary":"Update an error-rate threshold","x-cloudgate-permission":[{"resource":"service","actions":["update"]}]},"delete":{"operationId":"ErrorRateThresholdsController_remove","parameters":[{"name":"serviceId","required":true,"in":"path","schema":{"type":"string"},"description":"The Service's id."},{"name":"serviceType","required":true,"in":"query","schema":{"type":"string","enum":["application","postgres","mysql","mariadb","mongo","redis","compose","libsql","bucket"]}}],"responses":{"200":{"description":""}},"tags":["ErrorRateThresholds"],"summary":"Delete an error-rate threshold","x-cloudgate-permission":[{"resource":"service","actions":["update"]}]}},"/service-health/{serviceType}/{serviceId}":{"get":{"operationId":"ServiceHealthController_findOne","parameters":[{"name":"serviceType","required":true,"in":"path","schema":{"type":"string","enum":["application","postgres","mysql","mariadb","mongo","redis","compose","libsql","bucket"]},"description":"Service type."},{"name":"serviceId","required":true,"in":"path","schema":{"minLength":1,"type":"string"},"description":"The Service's id."},{"name":"page","required":false,"in":"query","schema":{"minimum":1,"maximum":9007199254740991,"default":1,"type":"integer"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"default":20,"type":"integer"}}],"responses":{"200":{"description":""}},"tags":["ServiceHealth"],"summary":"Get a Service's health","x-cloudgate-permission":[{"resource":"service","actions":["read"]}]}},"/postgres":{"post":{"operationId":"PostgresController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePostgresDto"}}}},"responses":{"201":{"description":""}},"tags":["Postgres"],"summary":"Create a PostgreSQL database","x-cloudgate-permission":[{"resource":"service","actions":["create"]}]}},"/postgres/existing":{"post":{"operationId":"PostgresController_createExisting","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateExistingPostgresDto"}}}},"responses":{"201":{"description":""}},"tags":["Postgres"],"summary":"Use an existing PostgreSQL database","description":"\"Use an existing database\": the Environment's entry stands for an RDS instance the operator already has.","x-cloudgate-permission":[{"resource":"service","actions":["create"]}]}},"/postgres/existing/reach":{"get":{"operationId":"PostgresController_existingReach","parameters":[{"name":"environmentId","required":true,"in":"query","schema":{"minLength":1,"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Postgres"],"summary":"Read reach for an existing PostgreSQL database","description":"What the \"Use an existing database\" form shows: where this Environment's Services reach a database from, to let in.","x-cloudgate-permission":[{"resource":"service","actions":["create"]}]}},"/postgres/{id}/existing":{"patch":{"operationId":"PostgresController_updateExisting","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The PostgreSQL database's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateExistingPostgresDto"}}}},"responses":{"200":{"description":""}},"tags":["Postgres"],"summary":"Update an existing PostgreSQL database","description":"An Existing database's login, identifier or tick.","x-cloudgate-permission":[{"resource":"service","actions":["update"]}]}},"/postgres/{id}/switch/to-existing":{"post":{"operationId":"PostgresController_switchToExisting","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The PostgreSQL database's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwitchToExistingPostgresDto"}}}},"responses":{"200":{"description":""}},"tags":["Postgres"],"summary":"Switch to an existing PostgreSQL database","description":"A switch between a Cloudgate-made and an existing database, asked for on the Service's page: `to-existing` takes what \"Use an existing database\" takes, `to-made` nothing. Nothing changes until the next plan's Apply, which removes one Service and adds the other — its destroy confirmed by name, as any.","x-cloudgate-permission":[{"resource":"service","actions":["update"]}]}},"/postgres/{id}/switch/to-made":{"post":{"operationId":"PostgresController_switchToMade","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The PostgreSQL database's id."}],"responses":{"200":{"description":""}},"tags":["Postgres"],"summary":"Switch to a Cloudgate-made PostgreSQL database","x-cloudgate-permission":[{"resource":"service","actions":["update"]}]}},"/postgres/{id}/switch":{"delete":{"operationId":"PostgresController_cancelSwitch","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The PostgreSQL database's id."}],"responses":{"200":{"description":""}},"tags":["Postgres"],"summary":"Cancel the switch of a PostgreSQL database","description":"Cancels a switch no Apply has made yet.","x-cloudgate-permission":[{"resource":"service","actions":["update"]}]}},"/postgres/{id}/deploy":{"post":{"operationId":"PostgresController_deploy","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The PostgreSQL database's id."}],"responses":{"200":{"description":""}},"tags":["Postgres"],"summary":"Deploy a PostgreSQL database","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/postgres/{id}":{"patch":{"operationId":"PostgresController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The PostgreSQL database's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePostgresDto"}}}},"responses":{"200":{"description":""}},"tags":["Postgres"],"summary":"Update a PostgreSQL database"},"delete":{"operationId":"PostgresController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The PostgreSQL database's id."},{"name":"force","required":true,"in":"query","schema":{"type":"string"}},{"name":"deleteData","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Postgres"],"summary":"Delete a PostgreSQL database","x-cloudgate-permission":[{"resource":"service","actions":["delete"]}]},"get":{"operationId":"PostgresController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The PostgreSQL database's id."}],"responses":{"200":{"description":""}},"tags":["Postgres"],"summary":"Get a PostgreSQL database"}},"/postgres/{id}/rds-settings":{"patch":{"operationId":"PostgresController_saveRdsSettings","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The PostgreSQL database's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavePostgresRdsSettingsDto"}}}},"responses":{"200":{"description":""}},"tags":["Postgres"],"summary":"Save RDS settings of a PostgreSQL database","description":"Cloudgate's own settings of a postgres on RDS: its class when the entry has no size, storage and its ceiling, Multi-AZ and backup retention, applied by the next plan's Apply.","x-cloudgate-permission":[{"resource":"service","actions":["update"]}]}},"/postgres/{id}/cloud-sql-settings":{"patch":{"operationId":"PostgresController_saveCloudSqlSettings","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The PostgreSQL database's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavePostgresCloudSqlSettingsDto"}}}},"responses":{"200":{"description":""}},"tags":["Postgres"],"summary":"Save Cloud SQL settings of a PostgreSQL database","description":"Cloudgate's own setting of a postgres on Cloud SQL: its backup retention, 1 to 365 days, edited on its Backups tab and applied by the next plan's Apply. Refused for a postgres anywhere else.","x-cloudgate-permission":[{"resource":"service","actions":["update"]}]}},"/postgres/{id}/cloud-backups":{"get":{"operationId":"PostgresController_cloudBackups","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The PostgreSQL database's id."}],"responses":{"200":{"description":""}},"tags":["Postgres"],"summary":"List cloud backups of a PostgreSQL database","description":"A postgres in a Cloud account's Backups tab: its retention, the window a restore reaches and its snapshots or backups, read live from RDS or Cloud SQL.","x-cloudgate-permission":[{"resource":"backup","actions":["read"]}]}},"/postgres/{id}/environment":{"patch":{"operationId":"PostgresController_saveEnvironment","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The PostgreSQL database's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavePostgresEnvironmentDto"}}}},"responses":{"200":{"description":""}},"tags":["Postgres"],"summary":"Save the environment variables of a PostgreSQL database"}},"/postgres/{id}/status":{"post":{"operationId":"PostgresController_changeStatus","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The PostgreSQL database's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePostgresStatusDto"}}}},"responses":{"200":{"description":""}},"tags":["Postgres"],"summary":"Change status of a PostgreSQL database","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/postgres/{id}/volume":{"get":{"operationId":"PostgresController_dataVolume","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The PostgreSQL database's id."}],"responses":{"200":{"description":""}},"tags":["Postgres"],"summary":"Check the data volume of a PostgreSQL database","description":"Whether `<appName>-data` is on the Server now, for the Delete dialog. `present` is `null` when it cannot be known — a multi-node swarm, or a Server that did not answer.","x-cloudgate-permission":[{"resource":"service","actions":["delete"]}]}},"/postgres/{id}/final-snapshot":{"get":{"operationId":"PostgresController_finalSnapshot","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The PostgreSQL database's id."}],"responses":{"200":{"description":""}},"tags":["Postgres"],"summary":"Preview the final snapshot of a PostgreSQL database","description":"The final snapshot a Delete pressed now keeps, and about what it costs a month, for the Delete dialog of a database in a Cloud account.","x-cloudgate-permission":[{"resource":"service","actions":["delete"]}]}},"/postgres/{id}/delete/retry":{"post":{"operationId":"PostgresController_retryDelete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The PostgreSQL database's id."}],"responses":{"200":{"description":""}},"tags":["Postgres"],"summary":"Retry deleting a PostgreSQL database","description":"Retry a cloud database's incomplete Delete: another destroy-only Cloud run from the kept state.","x-cloudgate-permission":[{"resource":"service","actions":["delete"]}]}},"/postgres/{id}/delete/forget":{"post":{"operationId":"PostgresController_forgetDelete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The PostgreSQL database's id."}],"responses":{"200":{"description":""}},"tags":["Postgres"],"summary":"Forget the incomplete delete of a PostgreSQL database","description":"Forget a cloud database's incomplete Delete: the row dropped, what is left in AWS written into the audit entry.","x-cloudgate-permission":[{"resource":"service","actions":["delete"]}]}},"/postgres/{id}/external-port":{"post":{"operationId":"PostgresController_saveExternalPort","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The PostgreSQL database's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavePostgresExternalPortDto"}}}},"responses":{"200":{"description":""}},"tags":["Postgres"],"summary":"Set the external port of a PostgreSQL database","x-cloudgate-permission":[{"resource":"service","actions":["create"]}]}},"/postgres/{id}/rebuild":{"post":{"operationId":"PostgresController_rebuild","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The PostgreSQL database's id."}],"responses":{"200":{"description":""}},"tags":["Postgres"],"summary":"Rebuild a PostgreSQL database","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/postgres/{id}/start":{"post":{"operationId":"PostgresController_start","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The PostgreSQL database's id."}],"responses":{"200":{"description":""}},"tags":["Postgres"],"summary":"Start a PostgreSQL database","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/postgres/{id}/stop":{"post":{"operationId":"PostgresController_stop","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The PostgreSQL database's id."}],"responses":{"200":{"description":""}},"tags":["Postgres"],"summary":"Stop a PostgreSQL database","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/buckets/existing":{"post":{"operationId":"BucketsController_createExisting","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateExistingBucketDto"}}}},"responses":{"201":{"description":""}},"tags":["Buckets"],"summary":"Use an existing bucket","description":"\"Use an existing bucket\": the Environment's `bucket` entry stands for an S3 bucket the operator already has, looked up at every plan and never changed.","x-cloudgate-permission":[{"resource":"service","actions":["create"]}]}},"/buckets/existing/reach":{"get":{"operationId":"BucketsController_existingReach","parameters":[{"name":"environmentId","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Buckets"],"summary":"Read reach for an existing bucket","description":"What the \"Use an existing bucket\" form shows: on Google Cloud the `roles/storage.legacyBucketReader` grant a bucket in another project needs so every plan can look it up; on AWS.","x-cloudgate-permission":[{"resource":"service","actions":["create"]}]}},"/buckets/{id}":{"get":{"operationId":"BucketsController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The bucket's id."}],"responses":{"200":{"description":""}},"tags":["Buckets"],"summary":"Get a bucket","description":"The bucket's page; an existing bucket on Google Cloud's access is checked again."},"delete":{"operationId":"BucketsController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The bucket's id."},{"name":"deleteFiles","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Buckets"],"summary":"Delete a bucket","description":"Keeps a bucket that holds files and names it as left behind (`bucketLeftBehind`), and removes an empty one whole.","x-cloudgate-permission":[{"resource":"service","actions":["delete"]}]}},"/buckets/{id}/origins":{"put":{"operationId":"BucketsController_updateOrigins","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The bucket's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PutBucketOriginsDto"}}}},"responses":{"200":{"description":""}},"tags":["Buckets"],"summary":"Set upload origins","description":"The bucket's whole browser-upload origin list, an ordinary Service update.","x-cloudgate-permission":[{"resource":"service","actions":["update"]}]}},"/buckets/{id}/rotate-key":{"post":{"operationId":"BucketsController_rotateKey","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The bucket's id."}],"responses":{"200":{"description":""}},"tags":["Buckets"],"summary":"Rotate a bucket's key","description":"Rotate key: a new key, a redeploy of every Service linking the bucket's key, and only then the old key's removal. An ordinary Service update. Answers once the redeploys are queued, with the bucket whose `keyRotation` then follows them to their end.","x-cloudgate-permission":[{"resource":"service","actions":["update"]}]}},"/buckets/{id}/delete/retry":{"post":{"operationId":"BucketsController_retryDelete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The bucket's id."}],"responses":{"200":{"description":""}},"tags":["Buckets"],"summary":"Retry deleting a bucket","description":"Retry a bucket on AWS's incomplete Delete: another destroy-only Cloud run from the kept state, emptying it again first if its Delete asked.","x-cloudgate-permission":[{"resource":"service","actions":["delete"]}]}},"/buckets/{id}/delete/forget":{"post":{"operationId":"BucketsController_forgetDelete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The bucket's id."}],"responses":{"200":{"description":""}},"tags":["Buckets"],"summary":"Forget the incomplete delete of a bucket","description":"Forget a bucket on AWS's incomplete Delete: the row dropped, what is left in AWS written into the audit entry.","x-cloudgate-permission":[{"resource":"service","actions":["delete"]}]}},"/mysql":{"post":{"operationId":"MysqlController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMysqlDto"}}}},"responses":{"201":{"description":""}},"tags":["Mysql"],"summary":"Create a MySQL database","x-cloudgate-permission":[{"resource":"service","actions":["create"]}]}},"/mysql/existing":{"post":{"operationId":"MysqlController_createExisting","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateExistingMysqlDto"}}}},"responses":{"201":{"description":""}},"tags":["Mysql"],"summary":"Use an existing MySQL database","description":"\"Use an existing database\": the Environment's entry stands for an RDS instance the operator already has.","x-cloudgate-permission":[{"resource":"service","actions":["create"]}]}},"/mysql/existing/reach":{"get":{"operationId":"MysqlController_existingReach","parameters":[{"name":"environmentId","required":true,"in":"query","schema":{"minLength":1,"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Mysql"],"summary":"Read reach for an existing MySQL database","description":"What the \"Use an existing database\" form shows: where this Environment's Services reach a database from, to let in.","x-cloudgate-permission":[{"resource":"service","actions":["create"]}]}},"/mysql/{id}/existing":{"patch":{"operationId":"MysqlController_updateExisting","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MySQL database's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateExistingMysqlDto"}}}},"responses":{"200":{"description":""}},"tags":["Mysql"],"summary":"Update an existing MySQL database","description":"An Existing database's login, identifier or tick.","x-cloudgate-permission":[{"resource":"service","actions":["update"]}]}},"/mysql/{id}/switch/to-existing":{"post":{"operationId":"MysqlController_switchToExisting","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MySQL database's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwitchToExistingMysqlDto"}}}},"responses":{"200":{"description":""}},"tags":["Mysql"],"summary":"Switch to an existing MySQL database","description":"A switch between a Cloudgate-made and an existing database, asked for on the Service's page: `to-existing` takes what \"Use an existing database\" takes, `to-made` nothing. Nothing changes until the next plan's Apply, which removes one Service and adds the other — its destroy confirmed by name, as any.","x-cloudgate-permission":[{"resource":"service","actions":["update"]}]}},"/mysql/{id}/switch/to-made":{"post":{"operationId":"MysqlController_switchToMade","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MySQL database's id."}],"responses":{"200":{"description":""}},"tags":["Mysql"],"summary":"Switch to a Cloudgate-made MySQL database","x-cloudgate-permission":[{"resource":"service","actions":["update"]}]}},"/mysql/{id}/switch":{"delete":{"operationId":"MysqlController_cancelSwitch","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MySQL database's id."}],"responses":{"200":{"description":""}},"tags":["Mysql"],"summary":"Cancel the switch of a MySQL database","description":"Cancels a switch no Apply has made yet.","x-cloudgate-permission":[{"resource":"service","actions":["update"]}]}},"/mysql/{id}/deploy":{"post":{"operationId":"MysqlController_deploy","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MySQL database's id."}],"responses":{"200":{"description":""}},"tags":["Mysql"],"summary":"Deploy a MySQL database","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/mysql/{id}":{"patch":{"operationId":"MysqlController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MySQL database's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMysqlDto"}}}},"responses":{"200":{"description":""}},"tags":["Mysql"],"summary":"Update a MySQL database"},"delete":{"operationId":"MysqlController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MySQL database's id."},{"name":"force","required":true,"in":"query","schema":{"type":"string"}},{"name":"deleteData","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Mysql"],"summary":"Delete a MySQL database","x-cloudgate-permission":[{"resource":"service","actions":["delete"]}]},"get":{"operationId":"MysqlController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MySQL database's id."}],"responses":{"200":{"description":""}},"tags":["Mysql"],"summary":"Get a MySQL database"}},"/mysql/{id}/rds-settings":{"patch":{"operationId":"MysqlController_saveRdsSettings","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MySQL database's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveMysqlRdsSettingsDto"}}}},"responses":{"200":{"description":""}},"tags":["Mysql"],"summary":"Save RDS settings of a MySQL database","description":"Cloudgate's own settings of a mysql on RDS, as a postgres's: its class when the entry has no size, storage and its ceiling, Multi-AZ and backup retention, applied by the next plan's Apply.","x-cloudgate-permission":[{"resource":"service","actions":["update"]}]}},"/mysql/{id}/cloud-sql-settings":{"patch":{"operationId":"MysqlController_saveCloudSqlSettings","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MySQL database's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveMysqlCloudSqlSettingsDto"}}}},"responses":{"200":{"description":""}},"tags":["Mysql"],"summary":"Save Cloud SQL settings of a MySQL database","description":"Cloudgate's own setting of a mysql on Cloud SQL, as a postgres's: its backup retention, 1 to 365 days, edited on its Backups tab and applied by the next plan's Apply. Refused for a mysql anywhere else.","x-cloudgate-permission":[{"resource":"service","actions":["update"]}]}},"/mysql/{id}/cloud-backups":{"get":{"operationId":"MysqlController_cloudBackups","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MySQL database's id."}],"responses":{"200":{"description":""}},"tags":["Mysql"],"summary":"List cloud backups of a MySQL database","description":"A mysql in a Cloud account's Backups tab, as a postgres's: its retention, the window point-in-time restore reaches and its snapshots or backups, read live from RDS or Cloud SQL.","x-cloudgate-permission":[{"resource":"backup","actions":["read"]}]}},"/mysql/{id}/environment":{"patch":{"operationId":"MysqlController_saveEnvironment","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MySQL database's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveMysqlEnvironmentDto"}}}},"responses":{"200":{"description":""}},"tags":["Mysql"],"summary":"Save the environment variables of a MySQL database"}},"/mysql/{id}/status":{"post":{"operationId":"MysqlController_changeStatus","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MySQL database's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeMysqlStatusDto"}}}},"responses":{"200":{"description":""}},"tags":["Mysql"],"summary":"Change status of a MySQL database","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/mysql/{id}/volume":{"get":{"operationId":"MysqlController_dataVolume","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MySQL database's id."}],"responses":{"200":{"description":""}},"tags":["Mysql"],"summary":"Check the data volume of a MySQL database","description":"Whether `<appName>-data` is on the Server now, for the Delete dialog. `present` is `null` when it cannot be known — a multi-node swarm, or a Server that did not answer.","x-cloudgate-permission":[{"resource":"service","actions":["delete"]}]}},"/mysql/{id}/final-snapshot":{"get":{"operationId":"MysqlController_finalSnapshot","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MySQL database's id."}],"responses":{"200":{"description":""}},"tags":["Mysql"],"summary":"Preview the final snapshot of a MySQL database","description":"The final snapshot a Delete pressed now keeps, and about what it costs a month, for the Delete dialog of a database in a Cloud account.","x-cloudgate-permission":[{"resource":"service","actions":["delete"]}]}},"/mysql/{id}/delete/retry":{"post":{"operationId":"MysqlController_retryDelete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MySQL database's id."}],"responses":{"200":{"description":""}},"tags":["Mysql"],"summary":"Retry deleting a MySQL database","description":"Retry a cloud database's incomplete Delete: another destroy-only Cloud run from the kept state.","x-cloudgate-permission":[{"resource":"service","actions":["delete"]}]}},"/mysql/{id}/delete/forget":{"post":{"operationId":"MysqlController_forgetDelete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MySQL database's id."}],"responses":{"200":{"description":""}},"tags":["Mysql"],"summary":"Forget the incomplete delete of a MySQL database","description":"Forget a cloud database's incomplete Delete: the row dropped, what is left in AWS written into the audit entry.","x-cloudgate-permission":[{"resource":"service","actions":["delete"]}]}},"/mysql/{id}/external-port":{"post":{"operationId":"MysqlController_saveExternalPort","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MySQL database's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveMysqlExternalPortDto"}}}},"responses":{"200":{"description":""}},"tags":["Mysql"],"summary":"Set the external port of a MySQL database","x-cloudgate-permission":[{"resource":"service","actions":["create"]}]}},"/mysql/{id}/rebuild":{"post":{"operationId":"MysqlController_rebuild","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MySQL database's id."}],"responses":{"200":{"description":""}},"tags":["Mysql"],"summary":"Rebuild a MySQL database","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/mysql/{id}/start":{"post":{"operationId":"MysqlController_start","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MySQL database's id."}],"responses":{"200":{"description":""}},"tags":["Mysql"],"summary":"Start a MySQL database","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/mysql/{id}/stop":{"post":{"operationId":"MysqlController_stop","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MySQL database's id."}],"responses":{"200":{"description":""}},"tags":["Mysql"],"summary":"Stop a MySQL database","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/redis/{id}/cloud-backups":{"get":{"operationId":"RedisController_cloudBackups","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Redis database's id."}],"responses":{"200":{"description":""}},"tags":["Redis"],"summary":"List cloud backups of a Redis database","description":"A redis on ElastiCache's Backups tab: its snapshot retention and snapshots, read live from ElastiCache.","x-cloudgate-permission":[{"resource":"backup","actions":["read"]}]}},"/redis":{"post":{"operationId":"RedisController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRedisDto"}}}},"responses":{"201":{"description":""}},"tags":["Redis"],"summary":"Create a Redis database","x-cloudgate-permission":[{"resource":"service","actions":["create"]}]}},"/redis/existing":{"post":{"operationId":"RedisController_createExisting","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateExistingRedisDto"}}}},"responses":{"201":{"description":""}},"tags":["Redis"],"summary":"Use an existing Redis database","description":"\"Use an existing database\" for a `redis`: the Environment's entry stands for an ElastiCache replication group the operator already has.","x-cloudgate-permission":[{"resource":"service","actions":["create"]}]}},"/redis/existing/reach":{"get":{"operationId":"RedisController_existingReach","parameters":[{"name":"environmentId","required":true,"in":"query","schema":{"minLength":1,"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Redis"],"summary":"Read reach for an existing Redis database","description":"What the \"Use an existing database\" form shows: where this Environment's Services reach a cache from, to let in.","x-cloudgate-permission":[{"resource":"service","actions":["create"]}]}},"/redis/{id}/existing":{"patch":{"operationId":"RedisController_updateExisting","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Redis database's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateExistingRedisDto"}}}},"responses":{"200":{"description":""}},"tags":["Redis"],"summary":"Update an existing Redis database","description":"An Existing cache's replication group id, AUTH token, TLS flag or tick.","x-cloudgate-permission":[{"resource":"service","actions":["update"]}]}},"/redis/{id}/switch/to-existing":{"post":{"operationId":"RedisController_switchToExisting","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Redis database's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwitchToExistingRedisDto"}}}},"responses":{"200":{"description":""}},"tags":["Redis"],"summary":"Switch to an existing Redis database","description":"A switch between a Cloudgate-made and an existing cache, asked for on the Service's page: `to-existing` takes what \"Use an existing cache\" takes, `to-made` nothing. Nothing changes until the next plan's Apply, which removes one Service and adds the other — its destroy confirmed by name, as any.","x-cloudgate-permission":[{"resource":"service","actions":["update"]}]}},"/redis/{id}/switch/to-made":{"post":{"operationId":"RedisController_switchToMade","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Redis database's id."}],"responses":{"200":{"description":""}},"tags":["Redis"],"summary":"Switch to a Cloudgate-made Redis database","x-cloudgate-permission":[{"resource":"service","actions":["update"]}]}},"/redis/{id}/switch":{"delete":{"operationId":"RedisController_cancelSwitch","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Redis database's id."}],"responses":{"200":{"description":""}},"tags":["Redis"],"summary":"Cancel the switch of a Redis database","description":"Cancels a switch no Apply has made yet.","x-cloudgate-permission":[{"resource":"service","actions":["update"]}]}},"/redis/{id}/deploy":{"post":{"operationId":"RedisController_deploy","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Redis database's id."}],"responses":{"200":{"description":""}},"tags":["Redis"],"summary":"Deploy a Redis database","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/redis/{id}":{"patch":{"operationId":"RedisController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Redis database's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRedisDto"}}}},"responses":{"200":{"description":""}},"tags":["Redis"],"summary":"Update a Redis database"},"delete":{"operationId":"RedisController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Redis database's id."},{"name":"force","required":true,"in":"query","schema":{"type":"string"}},{"name":"deleteData","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Redis"],"summary":"Delete a Redis database","x-cloudgate-permission":[{"resource":"service","actions":["delete"]}]},"get":{"operationId":"RedisController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Redis database's id."}],"responses":{"200":{"description":""}},"tags":["Redis"],"summary":"Get a Redis database"}},"/redis/{id}/elasticache-settings":{"patch":{"operationId":"RedisController_saveElastiCacheSettings","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Redis database's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveRedisElastiCacheSettingsDto"}}}},"responses":{"200":{"description":""}},"tags":["Redis"],"summary":"Save ElastiCache settings of a Redis database","description":"Cloudgate's own settings of a redis on ElastiCache: its node type when the entry has no size, the replica and snapshot retention, applied by the next plan's Apply.","x-cloudgate-permission":[{"resource":"service","actions":["update"]}]}},"/redis/{id}/memorystore-settings":{"patch":{"operationId":"RedisController_saveMemorystoreSettings","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Redis database's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveRedisMemorystoreSettingsDto"}}}},"responses":{"200":{"description":""}},"tags":["Redis"],"summary":"Save Memorystore settings of a Redis database","description":"Cloudgate's own setting of a redis on Memorystore: high availability, a replica in another zone, applied by the next plan's Apply. Refused for a redis anywhere else.","x-cloudgate-permission":[{"resource":"service","actions":["update"]}]}},"/redis/{id}/environment":{"patch":{"operationId":"RedisController_saveEnvironment","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Redis database's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveRedisEnvironmentDto"}}}},"responses":{"200":{"description":""}},"tags":["Redis"],"summary":"Save the environment variables of a Redis database"}},"/redis/{id}/status":{"post":{"operationId":"RedisController_changeStatus","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Redis database's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeRedisStatusDto"}}}},"responses":{"200":{"description":""}},"tags":["Redis"],"summary":"Change status of a Redis database","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/redis/{id}/volume":{"get":{"operationId":"RedisController_dataVolume","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Redis database's id."}],"responses":{"200":{"description":""}},"tags":["Redis"],"summary":"Check the data volume of a Redis database","description":"Whether `<appName>-data` is on the Server now, for the Delete dialog. `present` is `null` when it cannot be known — a multi-node swarm, or a Server that did not answer.","x-cloudgate-permission":[{"resource":"service","actions":["delete"]}]}},"/redis/{id}/final-snapshot":{"get":{"operationId":"RedisController_finalSnapshot","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Redis database's id."}],"responses":{"200":{"description":""}},"tags":["Redis"],"summary":"Preview the final snapshot of a Redis database","description":"The final snapshot a Delete pressed now keeps, and about what it costs a month, for the Delete dialog of a database in a Cloud account.","x-cloudgate-permission":[{"resource":"service","actions":["delete"]}]}},"/redis/{id}/delete/retry":{"post":{"operationId":"RedisController_retryDelete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Redis database's id."}],"responses":{"200":{"description":""}},"tags":["Redis"],"summary":"Retry deleting a Redis database","description":"Retry a cloud database's incomplete Delete: another destroy-only Cloud run from the kept state.","x-cloudgate-permission":[{"resource":"service","actions":["delete"]}]}},"/redis/{id}/delete/forget":{"post":{"operationId":"RedisController_forgetDelete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Redis database's id."}],"responses":{"200":{"description":""}},"tags":["Redis"],"summary":"Forget the incomplete delete of a Redis database","description":"Forget a cloud database's incomplete Delete: the row dropped, what is left in AWS written into the audit entry.","x-cloudgate-permission":[{"resource":"service","actions":["delete"]}]}},"/redis/{id}/external-port":{"post":{"operationId":"RedisController_saveExternalPort","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Redis database's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveRedisExternalPortDto"}}}},"responses":{"200":{"description":""}},"tags":["Redis"],"summary":"Set the external port of a Redis database","x-cloudgate-permission":[{"resource":"service","actions":["create"]}]}},"/redis/{id}/rebuild":{"post":{"operationId":"RedisController_rebuild","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Redis database's id."}],"responses":{"200":{"description":""}},"tags":["Redis"],"summary":"Rebuild a Redis database","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/redis/{id}/start":{"post":{"operationId":"RedisController_start","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Redis database's id."}],"responses":{"200":{"description":""}},"tags":["Redis"],"summary":"Start a Redis database","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/redis/{id}/stop":{"post":{"operationId":"RedisController_stop","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Redis database's id."}],"responses":{"200":{"description":""}},"tags":["Redis"],"summary":"Stop a Redis database","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/compose":{"post":{"operationId":"ComposeController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateComposeDto"}}}},"responses":{"201":{"description":""}},"tags":["Compose"],"summary":"Create a Compose stack","x-cloudgate-permission":[{"resource":"service","actions":["create"]}]}},"/compose/{id}":{"get":{"operationId":"ComposeController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Compose stack's id."}],"responses":{"200":{"description":""}},"tags":["Compose"],"summary":"Get a Compose stack"},"patch":{"operationId":"ComposeController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Compose stack's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateComposeDto"}}}},"responses":{"200":{"description":""}},"tags":["Compose"],"summary":"Update a Compose stack"},"delete":{"operationId":"ComposeController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Compose stack's id."},{"name":"deleteVolumes","required":true,"in":"query","schema":{"type":"string"}},{"name":"force","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Compose"],"summary":"Delete a Compose stack","description":"`?force=true` is the escape hatch for a Server that is gone for good: it drops the row even though Cloudgate could not confirm the stack's containers are gone, and the response names what was left behind.","x-cloudgate-permission":[{"resource":"service","actions":["delete"]}]}},"/compose/{id}/environment":{"patch":{"operationId":"ComposeController_saveEnvironment","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Compose stack's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveComposeEnvironmentDto"}}}},"responses":{"200":{"description":""}},"tags":["Compose"],"summary":"Save the environment variables of a Compose stack"}},"/compose/{id}/stack-vm":{"patch":{"operationId":"ComposeController_saveStackVm","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Compose stack's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveComposeStackVmDto"}}}},"responses":{"200":{"description":""}},"tags":["Compose"],"summary":"Save the Stack VM of a Compose stack","x-cloudgate-permission":[{"resource":"service","actions":["update"]}]},"get":{"operationId":"ComposeController_stackVmStatus","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Compose stack's id."}],"responses":{"200":{"description":""}},"tags":["Compose"],"summary":"Get the Stack VM status of a Compose stack","description":"Whether the stack's Stack VM runs, read from its cloud now. A read, gated by the stack's row-level access as `GET :id` is."}},"/compose/{id}/start":{"post":{"operationId":"ComposeController_start","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Compose stack's id."}],"responses":{"200":{"description":""}},"tags":["Compose"],"summary":"Start a Compose stack","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/compose/{id}/stop":{"post":{"operationId":"ComposeController_stop","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Compose stack's id."}],"responses":{"200":{"description":""}},"tags":["Compose"],"summary":"Stop a Compose stack","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/compose/{id}/restart":{"post":{"operationId":"ComposeController_restart","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Compose stack's id."}],"responses":{"200":{"description":""}},"tags":["Compose"],"summary":"Restart a Compose stack","description":"Restart: `docker compose restart`, the containers only; on a Stack VM, never the VM.","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/compose/{id}/remove-containers":{"post":{"operationId":"ComposeController_removeContainers","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Compose stack's id."}],"responses":{"200":{"description":""}},"tags":["Compose"],"summary":"Remove the containers of a Compose stack","description":"Remove containers.","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/compose/{id}/services":{"get":{"operationId":"ComposeController_loadServices","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Compose stack's id."}],"responses":{"200":{"description":""}},"tags":["Compose"],"summary":"Load the services of a Compose stack"}},"/compose/{id}/converted":{"get":{"operationId":"ComposeController_getConverted","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Compose stack's id."}],"responses":{"200":{"description":""}},"tags":["Compose"],"summary":"Get the converted file of a Compose stack","description":"The compose file as the deploy applies it."}},"/domains":{"post":{"operationId":"DomainsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDomainDto"}}}},"responses":{"201":{"description":""}},"tags":["Domains"],"summary":"Create a Domain","x-cloudgate-permission":[{"resource":"domain","actions":["create"]}]}},"/domains/generate":{"post":{"operationId":"DomainsController_generate","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateDomainDto"}}}},"responses":{"200":{"description":""}},"tags":["Domains"],"summary":"Generate a free sslip.io Domain","x-cloudgate-permission":[{"resource":"domain","actions":["create"]}]}},"/applications/{applicationId}/domains":{"get":{"operationId":"DomainsController_byApplicationId","parameters":[{"name":"applicationId","required":true,"in":"path","schema":{"type":"string"},"description":"The Application's id."}],"responses":{"200":{"description":""}},"tags":["Domains"],"summary":"List an Application's Domains","x-cloudgate-permission":[{"resource":"domain","actions":["read"]}]}},"/compose/{composeId}/domains":{"get":{"operationId":"DomainsController_byComposeId","parameters":[{"name":"composeId","required":true,"in":"path","schema":{"type":"string"},"description":"The Compose stack's id."}],"responses":{"200":{"description":""}},"tags":["Domains"],"summary":"List a Compose stack's Domains","x-cloudgate-permission":[{"resource":"domain","actions":["read"]}]}},"/buckets/{bucketId}/domains":{"get":{"operationId":"DomainsController_byBucketId","parameters":[{"name":"bucketId","required":true,"in":"path","schema":{"type":"string"},"description":"The bucket's id."}],"responses":{"200":{"description":""}},"tags":["Domains"],"summary":"List a bucket's Domains","description":"A Server bucket's Domains, under the same.","x-cloudgate-permission":[{"resource":"domain","actions":["read"]}]}},"/domains/{id}":{"get":{"operationId":"DomainsController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Domain's id."}],"responses":{"200":{"description":""}},"tags":["Domains"],"summary":"Get a Domain"},"patch":{"operationId":"DomainsController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Domain's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDomainDto"}}}},"responses":{"200":{"description":""}},"tags":["Domains"],"summary":"Update a Domain","x-cloudgate-permission":[{"resource":"domain","actions":["create"]}]},"delete":{"operationId":"DomainsController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Domain's id."},{"name":"force","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Domains"],"summary":"Delete a Domain","description":"`?force=true` is the escape hatch for a Server that is gone for good, as on an Application Delete: without it, a Server that cannot be reached is a 409 naming it and the row is kept; with it, the row goes and the response names the router left in that Server's file. Compared to 'true' like the Application Delete's.","x-cloudgate-permission":[{"resource":"domain","actions":["delete"]}]}},"/domains/{id}/ask-again":{"post":{"operationId":"DomainsController_askAgain","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Domain's id."}],"responses":{"200":{"description":""}},"tags":["Domains"],"summary":"Request a certificate again","description":"A failed cloud Domain's certificate, requested again.","x-cloudgate-permission":[{"resource":"domain","actions":["create"]}]}},"/mounts":{"post":{"operationId":"MountsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMountDto"}}}},"responses":{"201":{"description":""}},"tags":["Mounts"],"summary":"Create a mount","x-cloudgate-permission":[{"resource":"volume","actions":["create"]}]},"get":{"operationId":"MountsController_listByService","parameters":[{"name":"serviceId","required":true,"in":"query","schema":{"minLength":1,"type":"string"}},{"name":"serviceType","required":true,"in":"query","schema":{"type":"string","enum":["application","postgres","mysql","mariadb","mongo","redis","compose","libsql"]}}],"responses":{"200":{"description":""}},"tags":["Mounts"],"summary":"List mounts for a Service","x-cloudgate-permission":[{"resource":"volume","actions":["read"]}]}},"/mounts/{mountId}":{"get":{"operationId":"MountsController_findOne","parameters":[{"name":"mountId","required":true,"in":"path","schema":{"type":"string"},"description":"The mount's id."}],"responses":{"200":{"description":""}},"tags":["Mounts"],"summary":"Get a mount","x-cloudgate-permission":[{"resource":"volume","actions":["read"]}]},"patch":{"operationId":"MountsController_update","parameters":[{"name":"mountId","required":true,"in":"path","schema":{"type":"string"},"description":"The mount's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMountDto"}}}},"responses":{"200":{"description":""}},"tags":["Mounts"],"summary":"Update a mount","x-cloudgate-permission":[{"resource":"volume","actions":["create"]}]},"delete":{"operationId":"MountsController_remove","parameters":[{"name":"mountId","required":true,"in":"path","schema":{"type":"string"},"description":"The mount's id."}],"responses":{"200":{"description":""}},"tags":["Mounts"],"summary":"Delete a mount","x-cloudgate-permission":[{"resource":"volume","actions":["delete"]}]}},"/environments":{"post":{"operationId":"EnvironmentsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEnvironmentDto"}}}},"responses":{"201":{"description":""}},"tags":["Environments"],"summary":"Create an Environment","x-cloudgate-permission":[{"resource":"environment","actions":["create"]}]},"get":{"operationId":"EnvironmentsController_listByProject","parameters":[{"name":"projectId","required":true,"in":"query","schema":{"minLength":1,"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Environments"],"summary":"List Environments for a Project"}},"/environments/{id}":{"get":{"operationId":"EnvironmentsController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Environment's id."}],"responses":{"200":{"description":""}},"tags":["Environments"],"summary":"Get an Environment","description":"The environment plus the services deployed in it."},"patch":{"operationId":"EnvironmentsController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Environment's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateEnvironmentDto"}}}},"responses":{"200":{"description":""}},"tags":["Environments"],"summary":"Update an Environment"},"delete":{"operationId":"EnvironmentsController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Environment's id."},{"name":"force","required":true,"in":"query","schema":{"type":"string"}},{"name":"deleteData","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Environments"],"summary":"Delete an Environment","description":"`?force=true` is the escape hatch for a Server that is gone for good: it deletes the Environment even though Cloudgate could not confirm every Service in it is torn down, and the response names each workload left behind.","x-cloudgate-permission":[{"resource":"environment","actions":["delete"]}]}},"/environments/{id}/deployments":{"get":{"operationId":"EnvironmentsController_listDeployments","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Environment's id."}],"responses":{"200":{"description":""}},"tags":["Environments"],"summary":"List Deployments in an Environment","description":"Every Deployment of every service in this Environment.","x-cloudgate-permission":[{"resource":"deployment","actions":["read"]}]}},"/environments/{id}/networks":{"get":{"operationId":"EnvironmentsController_listNetworks","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Environment's id."}],"responses":{"200":{"description":""}},"tags":["Environments"],"summary":"List networks in an Environment","description":"The Environment's networks in Cloud accounts, with status and idle cost."}},"/environments/{id}/domains":{"get":{"operationId":"EnvironmentsController_listDomains","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Environment's id."}],"responses":{"200":{"description":""}},"tags":["Environments"],"summary":"List Domains in an Environment","description":"Every domain answered by a service in this Environment.","x-cloudgate-permission":[{"resource":"domain","actions":["read"]}]}},"/environments/{id}/health":{"get":{"operationId":"EnvironmentsController_listHealth","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Environment's id."}],"responses":{"200":{"description":""}},"tags":["Environments"],"summary":"List health in an Environment","x-cloudgate-permission":[{"resource":"service","actions":["read"]}]}},"/environments/{id}/delete/retry":{"post":{"operationId":"EnvironmentsController_retryDelete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Environment's id."}],"responses":{"200":{"description":""}},"tags":["Environments"],"summary":"Retry deleting an Environment","description":"Retry an Environment's incomplete Delete in a Cloud account: its cloud Services' Deletes and its networks' removals again, from the kept states.","x-cloudgate-permission":[{"resource":"environment","actions":["delete"]}]}},"/environments/{id}/delete/forget":{"post":{"operationId":"EnvironmentsController_forgetDelete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Environment's id."}],"responses":{"200":{"description":""}},"tags":["Environments"],"summary":"Forget the incomplete delete of an Environment","description":"Forget an Environment's incomplete Delete: its rows dropped, what is left in AWS written into the audit entry.","x-cloudgate-permission":[{"resource":"environment","actions":["delete"]}]}},"/tags":{"post":{"operationId":"TagsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTagDto"}}}},"responses":{"201":{"description":""}},"tags":["Tags"],"summary":"Create a tag","x-cloudgate-permission":[{"resource":"tag","actions":["create"]}]},"get":{"operationId":"TagsController_list","parameters":[{"name":"projectId","required":false,"in":"query","schema":{"minLength":1,"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Tags"],"summary":"List tags"}},"/tags/{id}":{"get":{"operationId":"TagsController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The tag's id."}],"responses":{"200":{"description":""}},"tags":["Tags"],"summary":"Get a tag"},"patch":{"operationId":"TagsController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The tag's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTagDto"}}}},"responses":{"200":{"description":""}},"tags":["Tags"],"summary":"Update a tag","x-cloudgate-permission":[{"resource":"tag","actions":["update"]}]},"delete":{"operationId":"TagsController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The tag's id."}],"responses":{"200":{"description":""}},"tags":["Tags"],"summary":"Delete a tag","x-cloudgate-permission":[{"resource":"tag","actions":["delete"]}]}},"/tags/{id}/projects/{projectId}":{"post":{"operationId":"TagsController_assignToProject","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The tag's id."},{"name":"projectId","required":true,"in":"path","schema":{"type":"string"},"description":"The Project's id."}],"responses":{"201":{"description":""}},"tags":["Tags"],"summary":"Assign to project"},"delete":{"operationId":"TagsController_removeFromProject","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The tag's id."},{"name":"projectId","required":true,"in":"path","schema":{"type":"string"},"description":"The Project's id."}],"responses":{"200":{"description":""}},"tags":["Tags"],"summary":"Remove from project"}},"/servers":{"post":{"operationId":"ServersController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateServerDto"}}}},"responses":{"201":{"description":""}},"tags":["Servers"],"summary":"Create a Server","x-cloudgate-permission":[{"resource":"server","actions":["create"]}]},"get":{"operationId":"ServersController_list","parameters":[],"responses":{"200":{"description":""}},"tags":["Servers"],"summary":"List Servers","x-cloudgate-permission":[{"resource":"server","actions":["read"]}]}},"/servers/{id}":{"get":{"operationId":"ServersController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Server's id."}],"responses":{"200":{"description":""}},"tags":["Servers"],"summary":"Get a Server","x-cloudgate-permission":[{"resource":"server","actions":["read"]}]},"patch":{"operationId":"ServersController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Server's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateServerDto"}}}},"responses":{"200":{"description":""}},"tags":["Servers"],"summary":"Update a Server","x-cloudgate-permission":[{"resource":"server","actions":["create"]}]},"delete":{"operationId":"ServersController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Server's id."}],"responses":{"200":{"description":""}},"tags":["Servers"],"summary":"Delete a Server","x-cloudgate-permission":[{"resource":"server","actions":["delete"]}]}},"/servers/{id}/validate":{"get":{"operationId":"ServersController_validate","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Server's id."}],"responses":{"200":{"description":""}},"tags":["Servers"],"summary":"Validate a Server","x-cloudgate-permission":[{"resource":"server","actions":["read"]}]}},"/servers/{id}/audit":{"get":{"operationId":"ServersController_audit","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Server's id."}],"responses":{"200":{"description":""}},"tags":["Servers"],"summary":"Audit a Server","x-cloudgate-permission":[{"resource":"server","actions":["read"]}]}},"/servers/{id}/setup":{"post":{"operationId":"ServersController_setup","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Server's id."}],"responses":{"200":{"description":""}},"tags":["Servers"],"summary":"Set up a Server","description":"Provision the host and answer when the script ends.","x-cloudgate-permission":[{"resource":"server","actions":["create"]}]}},"/servers/{id}/forget-host-key":{"post":{"operationId":"ServersController_forgetHostKey","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Server's id."}],"responses":{"200":{"description":""}},"tags":["Servers"],"summary":"Forget the host key","description":"Forget the Server's recorded host key, after a deliberate reinstall, so the next connect records the new one. A change to the Server row, so `server:create` as `PATCH` is.","x-cloudgate-permission":[{"resource":"server","actions":["create"]}]}},"/servers/{id}/start-maintenance":{"post":{"operationId":"ServersController_startMaintenance","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Server's id."}],"responses":{"200":{"description":""}},"tags":["Servers"],"summary":"Start maintenance on a Server","x-cloudgate-permission":[{"resource":"server","actions":["create"]}]}},"/servers/{id}/end-maintenance":{"post":{"operationId":"ServersController_endMaintenance","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Server's id."}],"responses":{"200":{"description":""}},"tags":["Servers"],"summary":"End maintenance on a Server","description":"End the Server's Maintenance; 409 when it is not in maintenance.","x-cloudgate-permission":[{"resource":"server","actions":["create"]}]}},"/bought-servers/offer":{"get":{"operationId":"BoughtServersController_offer","parameters":[],"responses":{"200":{"description":""}},"tags":["BoughtServers"],"summary":"Check whether buying a Server is offered","description":"Whether *Buy a Server* is offered here.","x-cloudgate-permission":[{"resource":"server","actions":["read"]}]}},"/bought-servers/catalogue":{"get":{"operationId":"BoughtServersController_catalogue","parameters":[],"responses":{"200":{"description":""}},"tags":["BoughtServers"],"summary":"List locations, sizes and prices","description":"Every Location and every size with its tidy monthly price and availability.","x-cloudgate-permission":[{"resource":"server","actions":["create"]}]}},"/bought-servers/today":{"get":{"operationId":"BoughtServersController_today","parameters":[{"name":"serverType","required":true,"in":"query","schema":{"minLength":1,"type":"string"}},{"name":"location","required":true,"in":"query","schema":{"minLength":1,"type":"string"}},{"name":"backups","required":false,"in":"query","schema":{"type":"string","enum":["true","false"]}},{"name":"storageGb","required":false,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["BoughtServers"],"summary":"Price a purchase today","description":"The Today box: what Buy would charge now for this size there, and the dates it covers.","x-cloudgate-permission":[{"resource":"server","actions":["create"]}]}},"/bought-servers/purchases":{"get":{"operationId":"BoughtServersController_list","parameters":[],"responses":{"200":{"description":""}},"tags":["BoughtServers"],"summary":"List Bought Servers","description":"The Organization's Bought Servers not yet made: waiting for payment, or being created.","x-cloudgate-permission":[{"resource":"server","actions":["read"]}]}},"/bought-servers":{"post":{"operationId":"BoughtServersController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuyDto"}}}},"responses":{"201":{"description":""}},"tags":["BoughtServers"],"summary":"Buy a Server","description":"Buy: charged at once; the machine is asked for only once the payment succeeds.","x-cloudgate-permission":[{"resource":"server","actions":["create"]}]}},"/bought-servers/{id}/finish-paying":{"post":{"operationId":"BoughtServersController_finishPaying","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Bought Server's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FinishPayingDto"}}}},"responses":{"200":{"description":""}},"tags":["BoughtServers"],"summary":"Finish paying for a purchase","description":"Finish paying*: where the payment stands, and where to finish it (3D Secure).","x-cloudgate-permission":[{"resource":"server","actions":["create"]}]}},"/bought-servers/{id}/cancel":{"post":{"operationId":"BoughtServersController_cancel","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Bought Server's id."}],"responses":{"200":{"description":""}},"tags":["BoughtServers"],"summary":"Cancel an unpaid purchase","description":"*Cancel* a purchase still waiting for payment: nothing is charged. A removal, so a frozen Organization may still do it.","x-cloudgate-permission":[{"resource":"server","actions":["create"]}]}},"/bought-servers/{id}":{"get":{"operationId":"BoughtServersController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Bought Server's id."}],"responses":{"200":{"description":""}},"tags":["BoughtServers"],"summary":"Get a Bought Server","description":"The Bought Server behind a Server: its stage, what it holds and its prices.","x-cloudgate-permission":[{"resource":"server","actions":["read"]}]}},"/bought-servers/{id}/backups":{"put":{"operationId":"BoughtServersController_setBackups","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Bought Server's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BackupsDto"}}}},"responses":{"200":{"description":""}},"tags":["BoughtServers"],"summary":"Set backups","description":"Backups on (charged at once, for the rest of the plan's month) or off (every backup deleted at once, credited on the next invoice). Off only lowers what is owed, so a frozen Organization may still do it; on is refused while frozen, by the service.","x-cloudgate-permission":[{"resource":"server","actions":["create"]}]}},"/bought-servers/{id}/storage":{"put":{"operationId":"BoughtServersController_growStorage","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Bought Server's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorageDto"}}}},"responses":{"200":{"description":""}},"tags":["BoughtServers"],"summary":"Grow storage","description":"Extra storage grown: charged at once for the rest of the plan's month, then the Volume and the filesystem are grown. It never shrinks.","x-cloudgate-permission":[{"resource":"server","actions":["create"]}]}},"/bought-servers/{id}/sizes":{"get":{"operationId":"BoughtServersController_sizes","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Bought Server's id."}],"responses":{"200":{"description":""}},"tags":["BoughtServers"],"summary":"List sizes a Server can move to","description":"The sizes the Server can move to in its Location, with their prices.","x-cloudgate-permission":[{"resource":"server","actions":["read"]}]}},"/bought-servers/{id}/size":{"put":{"operationId":"BoughtServersController_setSize","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The Bought Server's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SizeDto"}}}},"responses":{"200":{"description":""}},"tags":["BoughtServers"],"summary":"Set size","description":"A new size, up (charged at once, for the rest of the plan's month) or down (credited on the next invoice); the machine is powered off while it changes. Down only lowers what is owed, so a frozen Organization may still do it; up is refused while frozen, by the service.","x-cloudgate-permission":[{"resource":"server","actions":["create"]}]}},"/patches":{"post":{"operationId":"PatchController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePatchDto"}}}},"responses":{"201":{"description":""}},"tags":["Patch"],"summary":"Create a patch","x-cloudgate-permission":[{"resource":"service","actions":["create"]}]},"get":{"operationId":"PatchController_byEntityId","parameters":[{"name":"id","required":true,"in":"query","schema":{"minLength":1,"type":"string"}},{"name":"type","required":true,"in":"query","schema":{"type":"string","enum":["application","compose"]}}],"responses":{"200":{"description":""}},"tags":["Patch"],"summary":"List a Service's patches","x-cloudgate-permission":[{"resource":"service","actions":["read"]}]}},"/patches/save-file":{"post":{"operationId":"PatchController_saveFileAsPatch","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveFileAsPatchDto"}}}},"responses":{"200":{"description":""}},"tags":["Patch"],"summary":"Save file as patch","x-cloudgate-permission":[{"resource":"service","actions":["create"]}]}},"/patches/mark-for-deletion":{"post":{"operationId":"PatchController_markFileForDeletion","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarkFileForDeletionDto"}}}},"responses":{"200":{"description":""}},"tags":["Patch"],"summary":"Mark file for deletion","x-cloudgate-permission":[{"resource":"service","actions":["create"]}]}},"/patches/repo/ensure":{"post":{"operationId":"PatchController_ensureRepo","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnsureRepoDto"}}}},"responses":{"200":{"description":""}},"tags":["Patch"],"summary":"Ensure repo","x-cloudgate-permission":[{"resource":"service","actions":["create"]}]}},"/patches/repo/directories":{"get":{"operationId":"PatchController_readRepoDirectories","parameters":[{"name":"id","required":true,"in":"query","schema":{"minLength":1,"type":"string"}},{"name":"type","required":true,"in":"query","schema":{"type":"string","enum":["application","compose"]}}],"responses":{"200":{"description":""}},"tags":["Patch"],"summary":"Read repo directories","x-cloudgate-permission":[{"resource":"service","actions":["read"]}]}},"/patches/repo/file":{"get":{"operationId":"PatchController_readRepoFile","parameters":[{"name":"id","required":true,"in":"query","schema":{"minLength":1,"type":"string"}},{"name":"type","required":true,"in":"query","schema":{"type":"string","enum":["application","compose"]}},{"name":"filePath","required":true,"in":"query","schema":{"type":"string"}},{"name":"source","required":false,"in":"query","schema":{"default":"patch","type":"string","enum":["patch","repo"]}}],"responses":{"200":{"description":""}},"tags":["Patch"],"summary":"Read repo file","x-cloudgate-permission":[{"resource":"service","actions":["read"]}]}},"/patches/repo/clean":{"post":{"operationId":"PatchController_cleanRepos","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CleanPatchReposDto"}}}},"responses":{"200":{"description":""}},"tags":["Patch"],"summary":"Clean repos"}},"/patches/{patchId}":{"get":{"operationId":"PatchController_findOne","parameters":[{"name":"patchId","required":true,"in":"path","schema":{"type":"string"},"description":"The patch's id."}],"responses":{"200":{"description":""}},"tags":["Patch"],"summary":"Get a patch","x-cloudgate-permission":[{"resource":"service","actions":["read"]}]},"patch":{"operationId":"PatchController_update","parameters":[{"name":"patchId","required":true,"in":"path","schema":{"type":"string"},"description":"The patch's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePatchDto"}}}},"responses":{"200":{"description":""}},"tags":["Patch"],"summary":"Update a patch","x-cloudgate-permission":[{"resource":"service","actions":["create"]}]},"delete":{"operationId":"PatchController_remove","parameters":[{"name":"patchId","required":true,"in":"path","schema":{"type":"string"},"description":"The patch's id."}],"responses":{"200":{"description":""}},"tags":["Patch"],"summary":"Delete a patch","x-cloudgate-permission":[{"resource":"service","actions":["delete"]}]}},"/patches/{patchId}/toggle":{"post":{"operationId":"PatchController_toggleEnabled","parameters":[{"name":"patchId","required":true,"in":"path","schema":{"type":"string"},"description":"The patch's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TogglePatchDto"}}}},"responses":{"200":{"description":""}},"tags":["Patch"],"summary":"Toggle enabled","x-cloudgate-permission":[{"resource":"service","actions":["create"]}]}},"/applications/{applicationId}/rollbacks":{"get":{"operationId":"RollbacksController_findAllByApplication","parameters":[{"name":"applicationId","required":true,"in":"path","schema":{"type":"string"},"description":"The Application's id."}],"responses":{"200":{"description":""}},"tags":["Rollbacks"],"summary":"List rollback snapshots for an Application","description":"Rollback snapshots are listed per application, like deployments.","x-cloudgate-permission":[{"resource":"deployment","actions":["read"]}]}},"/rollbacks/{rollbackId}/rollback":{"post":{"operationId":"RollbacksController_rollback","parameters":[{"name":"rollbackId","required":true,"in":"path","schema":{"type":"string"},"description":"The rollback's id."}],"responses":{"202":{"description":"The Rollback is under way. `deploymentId` is the queued Deployment of a static site on AWS, whose log shows it; null on a Server, where Swarm converges the service onto the snapshot's image.","content":{"application/json":{"schema":{"type":"object","required":["deploymentId"],"properties":{"deploymentId":{"type":"string","nullable":true}}}}}}},"tags":["Rollbacks"],"summary":"Roll back to a snapshot","description":"Rolls the application back onto this snapshot. The service answers which (`deploymentId`).","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/rollbacks/{rollbackId}":{"delete":{"operationId":"RollbacksController_remove","parameters":[{"name":"rollbackId","required":true,"in":"path","schema":{"type":"string"},"description":"The rollback's id."}],"responses":{"200":{"description":""}},"tags":["Rollbacks"],"summary":"Delete a rollback snapshot","description":"Deletes a snapshot: its preserved image, then its row.","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/applications/{applicationId}/preview-deployments":{"get":{"operationId":"PreviewDeploymentsController_findAllByApplication","parameters":[{"name":"applicationId","required":true,"in":"path","schema":{"type":"string"},"description":"The Application's id."}],"responses":{"200":{"description":""}},"tags":["PreviewDeployments"],"summary":"List preview deployments for an Application","description":"An application's preview deployments.","x-cloudgate-permission":[{"resource":"deployment","actions":["read"]}]},"post":{"operationId":"PreviewDeploymentsController_createRequested","parameters":[{"name":"applicationId","required":true,"in":"path","schema":{"type":"string"},"description":"The Application's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRequestedPreviewDto"}}}},"responses":{"201":{"description":""}},"tags":["PreviewDeployments"],"summary":"Request a preview","description":"Asks for a Requested preview of a branch. `201` with the preview, its printed link and the queued Deployment's id.","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/preview-deployments/{previewDeploymentId}/extend":{"post":{"operationId":"PreviewDeploymentsController_extend","parameters":[{"name":"previewDeploymentId","required":true,"in":"path","schema":{"type":"string"},"description":"The preview deployment's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtendRequestedPreviewDto"}}}},"responses":{"200":{"description":""}},"tags":["PreviewDeployments"],"summary":"Extend a preview deployment","description":"Moves a Requested preview's expiry to now plus the TTL.","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/preview-deployments/{previewDeploymentId}":{"get":{"operationId":"PreviewDeploymentsController_findOne","parameters":[{"name":"previewDeploymentId","required":true,"in":"path","schema":{"type":"string"},"description":"The preview deployment's id."}],"responses":{"200":{"description":""}},"tags":["PreviewDeployments"],"summary":"Get a preview deployment","description":"One preview deployment.","x-cloudgate-permission":[{"resource":"deployment","actions":["read"]}]},"delete":{"operationId":"PreviewDeploymentsController_remove","parameters":[{"name":"previewDeploymentId","required":true,"in":"path","schema":{"type":"string"},"description":"The preview deployment's id."}],"responses":{"200":{"description":""}},"tags":["PreviewDeployments"],"summary":"Delete a preview deployment","description":"Tears a pull-request preview down without waiting for its PR to close, or expires a Requested preview now and answers at once: the expiry sweep tears it down within the minute.","x-cloudgate-permission":[{"resource":"deployment","actions":["cancel"]}]}},"/preview-deployments/{previewDeploymentId}/redeploy":{"post":{"operationId":"PreviewDeploymentsController_redeploy","parameters":[{"name":"previewDeploymentId","required":true,"in":"path","schema":{"type":"string"},"description":"The preview deployment's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedeployPreviewDeploymentDto"}}}},"responses":{"201":{"description":""}},"tags":["PreviewDeployments"],"summary":"Redeploy a preview deployment","description":"Re-enqueues the preview's build, and answers the queued Deployment.","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/traces/{serviceId}":{"get":{"operationId":"TracesController_findOne","parameters":[{"name":"serviceId","required":true,"in":"path","schema":{"type":"string"},"description":"The Service's id."},{"name":"serviceType","required":true,"in":"query","schema":{"type":"string","enum":["application","postgres","mysql","mariadb","mongo","redis","compose","libsql","bucket"]}}],"responses":{"200":{"description":""}},"tags":["Traces"],"summary":"Get trace settings","x-cloudgate-permission":[{"resource":"service","actions":["read"]}]},"put":{"operationId":"TracesController_update","parameters":[{"name":"serviceId","required":true,"in":"path","schema":{"type":"string"},"description":"The Service's id."},{"name":"serviceType","required":true,"in":"query","schema":{"type":"string","enum":["application","postgres","mysql","mariadb","mongo","redis","compose","libsql","bucket"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PutTracesDto"}}}},"responses":{"200":{"description":""}},"tags":["Traces"],"summary":"Update trace settings","x-cloudgate-permission":[{"resource":"service","actions":["update"]}]}},"/traces/{serviceId}/frame":{"get":{"operationId":"TracesController_frame","parameters":[{"name":"serviceId","required":true,"in":"path","schema":{"type":"string"},"description":"The Service's id."}],"responses":{"200":{"description":""}},"tags":["Traces"],"summary":"Get a trace viewer frame","description":"Where the console frames the Service's Trace store for this caller: its UI's base path under a frame token, and when that token expires.","x-cloudgate-permission":[{"resource":"service","actions":["read"]}]}},"/mariadb":{"post":{"operationId":"MariadbController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMariadbDto"}}}},"responses":{"201":{"description":""}},"tags":["Mariadb"],"summary":"Create a MariaDB database","x-cloudgate-permission":[{"resource":"service","actions":["create"]}]}},"/mariadb/{id}/deploy":{"post":{"operationId":"MariadbController_deploy","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MariaDB database's id."}],"responses":{"200":{"description":""}},"tags":["Mariadb"],"summary":"Deploy a MariaDB database","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/mariadb/{id}":{"patch":{"operationId":"MariadbController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MariaDB database's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMariadbDto"}}}},"responses":{"200":{"description":""}},"tags":["Mariadb"],"summary":"Update a MariaDB database"},"delete":{"operationId":"MariadbController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MariaDB database's id."},{"name":"force","required":true,"in":"query","schema":{"type":"string"}},{"name":"deleteData","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Mariadb"],"summary":"Delete a MariaDB database","x-cloudgate-permission":[{"resource":"service","actions":["delete"]}]},"get":{"operationId":"MariadbController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MariaDB database's id."}],"responses":{"200":{"description":""}},"tags":["Mariadb"],"summary":"Get a MariaDB database"}},"/mariadb/{id}/environment":{"patch":{"operationId":"MariadbController_saveEnvironment","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MariaDB database's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveMariadbEnvironmentDto"}}}},"responses":{"200":{"description":""}},"tags":["Mariadb"],"summary":"Save the environment variables of a MariaDB database"}},"/mariadb/{id}/status":{"post":{"operationId":"MariadbController_changeStatus","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MariaDB database's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeMariadbStatusDto"}}}},"responses":{"200":{"description":""}},"tags":["Mariadb"],"summary":"Change status of a MariaDB database","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/mariadb/{id}/volume":{"get":{"operationId":"MariadbController_dataVolume","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MariaDB database's id."}],"responses":{"200":{"description":""}},"tags":["Mariadb"],"summary":"Check the data volume of a MariaDB database","description":"Whether `<appName>-data` is on the Server now, for the Delete dialog. `present` is `null` when it cannot be known — a multi-node swarm, or a Server that did not answer.","x-cloudgate-permission":[{"resource":"service","actions":["delete"]}]}},"/mariadb/{id}/external-port":{"post":{"operationId":"MariadbController_saveExternalPort","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MariaDB database's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveMariadbExternalPortDto"}}}},"responses":{"200":{"description":""}},"tags":["Mariadb"],"summary":"Set the external port of a MariaDB database","x-cloudgate-permission":[{"resource":"service","actions":["create"]}]}},"/mariadb/{id}/rebuild":{"post":{"operationId":"MariadbController_rebuild","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MariaDB database's id."}],"responses":{"200":{"description":""}},"tags":["Mariadb"],"summary":"Rebuild a MariaDB database","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/mariadb/{id}/start":{"post":{"operationId":"MariadbController_start","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MariaDB database's id."}],"responses":{"200":{"description":""}},"tags":["Mariadb"],"summary":"Start a MariaDB database","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/mariadb/{id}/stop":{"post":{"operationId":"MariadbController_stop","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MariaDB database's id."}],"responses":{"200":{"description":""}},"tags":["Mariadb"],"summary":"Stop a MariaDB database","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/mongo":{"post":{"operationId":"MongoController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMongoDto"}}}},"responses":{"201":{"description":""}},"tags":["Mongo"],"summary":"Create a MongoDB database","x-cloudgate-permission":[{"resource":"service","actions":["create"]}]}},"/mongo/{id}/deploy":{"post":{"operationId":"MongoController_deploy","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MongoDB database's id."}],"responses":{"200":{"description":""}},"tags":["Mongo"],"summary":"Deploy a MongoDB database","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/mongo/{id}":{"patch":{"operationId":"MongoController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MongoDB database's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMongoDto"}}}},"responses":{"200":{"description":""}},"tags":["Mongo"],"summary":"Update a MongoDB database"},"delete":{"operationId":"MongoController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MongoDB database's id."},{"name":"force","required":true,"in":"query","schema":{"type":"string"}},{"name":"deleteData","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Mongo"],"summary":"Delete a MongoDB database","x-cloudgate-permission":[{"resource":"service","actions":["delete"]}]},"get":{"operationId":"MongoController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MongoDB database's id."}],"responses":{"200":{"description":""}},"tags":["Mongo"],"summary":"Get a MongoDB database"}},"/mongo/{id}/environment":{"patch":{"operationId":"MongoController_saveEnvironment","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MongoDB database's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveMongoEnvironmentDto"}}}},"responses":{"200":{"description":""}},"tags":["Mongo"],"summary":"Save the environment variables of a MongoDB database"}},"/mongo/{id}/status":{"post":{"operationId":"MongoController_changeStatus","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MongoDB database's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeMongoStatusDto"}}}},"responses":{"200":{"description":""}},"tags":["Mongo"],"summary":"Change status of a MongoDB database","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/mongo/{id}/volume":{"get":{"operationId":"MongoController_dataVolume","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MongoDB database's id."}],"responses":{"200":{"description":""}},"tags":["Mongo"],"summary":"Check the data volume of a MongoDB database","description":"Whether `<appName>-data` is on the Server now, for the Delete dialog. `present` is `null` when it cannot be known — a multi-node swarm, or a Server that did not answer.","x-cloudgate-permission":[{"resource":"service","actions":["delete"]}]}},"/mongo/{id}/external-port":{"post":{"operationId":"MongoController_saveExternalPort","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MongoDB database's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveMongoExternalPortDto"}}}},"responses":{"200":{"description":""}},"tags":["Mongo"],"summary":"Set the external port of a MongoDB database","x-cloudgate-permission":[{"resource":"service","actions":["create"]}]}},"/mongo/{id}/rebuild":{"post":{"operationId":"MongoController_rebuild","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MongoDB database's id."}],"responses":{"200":{"description":""}},"tags":["Mongo"],"summary":"Rebuild a MongoDB database","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/mongo/{id}/start":{"post":{"operationId":"MongoController_start","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MongoDB database's id."}],"responses":{"200":{"description":""}},"tags":["Mongo"],"summary":"Start a MongoDB database","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/mongo/{id}/stop":{"post":{"operationId":"MongoController_stop","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The MongoDB database's id."}],"responses":{"200":{"description":""}},"tags":["Mongo"],"summary":"Stop a MongoDB database","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/libsql":{"post":{"operationId":"LibsqlController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateLibsqlDto"}}}},"responses":{"201":{"description":""}},"tags":["Libsql"],"summary":"Create a libSQL database","x-cloudgate-permission":[{"resource":"service","actions":["create"]}]}},"/libsql/{id}/deploy":{"post":{"operationId":"LibsqlController_deploy","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The libSQL database's id."}],"responses":{"200":{"description":""}},"tags":["Libsql"],"summary":"Deploy a libSQL database","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/libsql/{id}":{"patch":{"operationId":"LibsqlController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The libSQL database's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateLibsqlDto"}}}},"responses":{"200":{"description":""}},"tags":["Libsql"],"summary":"Update a libSQL database"},"delete":{"operationId":"LibsqlController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The libSQL database's id."},{"name":"force","required":true,"in":"query","schema":{"type":"string"}},{"name":"deleteData","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Libsql"],"summary":"Delete a libSQL database","x-cloudgate-permission":[{"resource":"service","actions":["delete"]}]},"get":{"operationId":"LibsqlController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The libSQL database's id."}],"responses":{"200":{"description":""}},"tags":["Libsql"],"summary":"Get a libSQL database"}},"/libsql/{id}/environment":{"patch":{"operationId":"LibsqlController_saveEnvironment","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The libSQL database's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveLibsqlEnvironmentDto"}}}},"responses":{"200":{"description":""}},"tags":["Libsql"],"summary":"Save the environment variables of a libSQL database"}},"/libsql/{id}/status":{"post":{"operationId":"LibsqlController_changeStatus","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The libSQL database's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeLibsqlStatusDto"}}}},"responses":{"200":{"description":""}},"tags":["Libsql"],"summary":"Change status of a libSQL database","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/libsql/{id}/volume":{"get":{"operationId":"LibsqlController_dataVolume","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The libSQL database's id."}],"responses":{"200":{"description":""}},"tags":["Libsql"],"summary":"Check the data volume of a libSQL database","description":"Whether `<appName>-data` is on the Server now, for the Delete dialog. `present` is `null` when it cannot be known — a multi-node swarm, or a Server that did not answer.","x-cloudgate-permission":[{"resource":"service","actions":["delete"]}]}},"/libsql/{id}/external-ports":{"post":{"operationId":"LibsqlController_saveExternalPorts","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The libSQL database's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveLibsqlExternalPortsDto"}}}},"responses":{"200":{"description":""}},"tags":["Libsql"],"summary":"Set the external ports of a libSQL database","x-cloudgate-permission":[{"resource":"service","actions":["create"]}]}},"/libsql/{id}/rebuild":{"post":{"operationId":"LibsqlController_rebuild","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The libSQL database's id."}],"responses":{"200":{"description":""}},"tags":["Libsql"],"summary":"Rebuild a libSQL database","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/libsql/{id}/start":{"post":{"operationId":"LibsqlController_start","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The libSQL database's id."}],"responses":{"200":{"description":""}},"tags":["Libsql"],"summary":"Start a libSQL database","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/libsql/{id}/stop":{"post":{"operationId":"LibsqlController_stop","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The libSQL database's id."}],"responses":{"200":{"description":""}},"tags":["Libsql"],"summary":"Stop a libSQL database","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/certificates":{"post":{"operationId":"CertificatesController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCertificateDto"}}}},"responses":{"201":{"description":""}},"tags":["Certificates"],"summary":"Create a certificate","x-cloudgate-permission":[{"resource":"certificate","actions":["create"]}]},"get":{"operationId":"CertificatesController_list","parameters":[],"responses":{"200":{"description":""}},"tags":["Certificates"],"summary":"List certificates","x-cloudgate-permission":[{"resource":"certificate","actions":["read"]}]}},"/certificates/{id}":{"get":{"operationId":"CertificatesController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The certificate's id."}],"responses":{"200":{"description":""}},"tags":["Certificates"],"summary":"Get a certificate","x-cloudgate-permission":[{"resource":"certificate","actions":["read"]}]},"patch":{"operationId":"CertificatesController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The certificate's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCertificateDto"}}}},"responses":{"200":{"description":""}},"tags":["Certificates"],"summary":"Update a certificate","x-cloudgate-permission":[{"resource":"certificate","actions":["update"]}]},"delete":{"operationId":"CertificatesController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The certificate's id."}],"responses":{"200":{"description":""}},"tags":["Certificates"],"summary":"Delete a certificate","x-cloudgate-permission":[{"resource":"certificate","actions":["delete"]}]}},"/redirects":{"post":{"operationId":"RedirectsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRedirectDto"}}}},"responses":{"201":{"description":""}},"tags":["Redirects"],"summary":"Create a redirect","x-cloudgate-permission":[{"resource":"service","actions":["create"]}]},"get":{"operationId":"RedirectsController_listByApplication","parameters":[{"name":"applicationId","required":true,"in":"query","schema":{"minLength":1,"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Redirects"],"summary":"List redirects for an Application","x-cloudgate-permission":[{"resource":"service","actions":["read"]}]}},"/redirects/{redirectId}":{"get":{"operationId":"RedirectsController_findOne","parameters":[{"name":"redirectId","required":true,"in":"path","schema":{"type":"string"},"description":"The redirect's id."}],"responses":{"200":{"description":""}},"tags":["Redirects"],"summary":"Get a redirect","x-cloudgate-permission":[{"resource":"service","actions":["read"]}]},"patch":{"operationId":"RedirectsController_update","parameters":[{"name":"redirectId","required":true,"in":"path","schema":{"type":"string"},"description":"The redirect's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRedirectDto"}}}},"responses":{"200":{"description":""}},"tags":["Redirects"],"summary":"Update a redirect","x-cloudgate-permission":[{"resource":"service","actions":["create"]}]},"delete":{"operationId":"RedirectsController_remove","parameters":[{"name":"redirectId","required":true,"in":"path","schema":{"type":"string"},"description":"The redirect's id."},{"name":"force","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Redirects"],"summary":"Delete a redirect","description":"`?force=true` is the escape hatch for a Server that is gone for good, as on an Application Delete: without it, a Server that cannot be reached is a 409 naming it and the row is kept; with it, the row goes and the response names the router left in that Server's file. Compared to 'true' like the Application Delete's.","x-cloudgate-permission":[{"resource":"service","actions":["delete"]}]}},"/ports":{"post":{"operationId":"PortsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePortDto"}}}},"responses":{"201":{"description":""}},"tags":["Ports"],"summary":"Create a port","x-cloudgate-permission":[{"resource":"service","actions":["create"]}]},"get":{"operationId":"PortsController_listByApplication","parameters":[{"name":"applicationId","required":true,"in":"query","schema":{"minLength":1,"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Ports"],"summary":"List ports for an Application","x-cloudgate-permission":[{"resource":"service","actions":["read"]}]}},"/ports/{portId}":{"get":{"operationId":"PortsController_findOne","parameters":[{"name":"portId","required":true,"in":"path","schema":{"type":"string"},"description":"The port's id."}],"responses":{"200":{"description":""}},"tags":["Ports"],"summary":"Get a port","x-cloudgate-permission":[{"resource":"service","actions":["read"]}]},"patch":{"operationId":"PortsController_update","parameters":[{"name":"portId","required":true,"in":"path","schema":{"type":"string"},"description":"The port's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePortDto"}}}},"responses":{"200":{"description":""}},"tags":["Ports"],"summary":"Update a port","x-cloudgate-permission":[{"resource":"service","actions":["create"]}]},"delete":{"operationId":"PortsController_remove","parameters":[{"name":"portId","required":true,"in":"path","schema":{"type":"string"},"description":"The port's id."}],"responses":{"200":{"description":""}},"tags":["Ports"],"summary":"Delete a port","x-cloudgate-permission":[{"resource":"service","actions":["delete"]}]}},"/security":{"post":{"operationId":"SecurityController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSecurityDto"}}}},"responses":{"201":{"description":""}},"tags":["Security"],"summary":"Create a basic-auth user","x-cloudgate-permission":[{"resource":"service","actions":["create"]}]},"get":{"operationId":"SecurityController_listByApplication","parameters":[{"name":"applicationId","required":true,"in":"query","schema":{"minLength":1,"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Security"],"summary":"List basic-auth users for an Application","x-cloudgate-permission":[{"resource":"service","actions":["read"]}]}},"/security/{securityId}":{"get":{"operationId":"SecurityController_findOne","parameters":[{"name":"securityId","required":true,"in":"path","schema":{"type":"string"},"description":"The security's id."}],"responses":{"200":{"description":""}},"tags":["Security"],"summary":"Get a basic-auth user","x-cloudgate-permission":[{"resource":"service","actions":["read"]}]},"patch":{"operationId":"SecurityController_update","parameters":[{"name":"securityId","required":true,"in":"path","schema":{"type":"string"},"description":"The security's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSecurityDto"}}}},"responses":{"200":{"description":""}},"tags":["Security"],"summary":"Update a basic-auth user","x-cloudgate-permission":[{"resource":"service","actions":["create"]}]},"delete":{"operationId":"SecurityController_remove","parameters":[{"name":"securityId","required":true,"in":"path","schema":{"type":"string"},"description":"The security's id."},{"name":"force","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Security"],"summary":"Delete a basic-auth user","description":"`?force=true` is the escape hatch for a Server that is gone for good, as on an Application Delete: without it, a Server that cannot be reached is a 409 naming it and the row is kept; with it, the row goes and the response names the router left in that Server's file. Compared to 'true' like the Application Delete's.","x-cloudgate-permission":[{"resource":"service","actions":["create"]}]}},"/domains/validate":{"post":{"operationId":"CdnController_validateDomain","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateDomainDto"}}}},"responses":{"200":{"description":""}},"tags":["Cdn"],"summary":"Check a Domain behind a CDN","x-cloudgate-permission":[{"resource":"domain","actions":["read"]}]}},"/applications/{id}/run":{"post":{"operationId":"CronRunsController_run","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The id."}],"responses":{"201":{"description":""}},"tags":["CronRuns"],"summary":"Run a cron Service now","x-cloudgate-permission":[{"resource":"deployment","actions":["create"]}]}},"/docker/containers":{"get":{"operationId":"DockerOpsController_getContainers","parameters":[{"name":"serverId","required":false,"in":"query","schema":{"type":"string","nullable":true}}],"responses":{"200":{"description":""}},"tags":["DockerOps"],"summary":"Get containers","x-cloudgate-permission":[{"resource":"docker","actions":["read"]}]}},"/docker/containers/search":{"get":{"operationId":"DockerOpsController_getContainersByOwnerLabel","parameters":[{"name":"appName","required":true,"in":"query","schema":{"minLength":1,"pattern":"^[a-zA-Z0-9.\\-_]+$","type":"string"}},{"name":"appType","required":false,"in":"query","schema":{"type":"string","enum":["stack","docker-compose"]}},{"name":"serverId","required":false,"in":"query","schema":{"type":"string","nullable":true}}],"responses":{"200":{"description":""}},"tags":["DockerOps"],"summary":"Get containers by owner label","x-cloudgate-permission":[{"resource":"service","actions":["read"]}]}},"/docker/containers/by-label":{"get":{"operationId":"DockerOpsController_getContainersByAppLabel","parameters":[{"name":"appName","required":true,"in":"query","schema":{"minLength":1,"pattern":"^[a-zA-Z0-9.\\-_]+$","type":"string"}},{"name":"type","required":true,"in":"query","schema":{"type":"string","enum":["standalone","swarm"]}},{"name":"serverId","required":false,"in":"query","schema":{"type":"string","nullable":true}}],"responses":{"200":{"description":""}},"tags":["DockerOps"],"summary":"Get containers by app label","x-cloudgate-permission":[{"resource":"docker","actions":["read"]}]}},"/docker/containers/stack":{"get":{"operationId":"DockerOpsController_getStackContainersByAppName","parameters":[{"name":"appName","required":true,"in":"query","schema":{"minLength":1,"pattern":"^[a-zA-Z0-9.\\-_]+$","type":"string"}},{"name":"serverId","required":false,"in":"query","schema":{"type":"string","nullable":true}}],"responses":{"200":{"description":""}},"tags":["DockerOps"],"summary":"Get stack containers by app name","x-cloudgate-permission":[{"resource":"docker","actions":["read"]}]}},"/docker/containers/service":{"get":{"operationId":"DockerOpsController_getServiceContainersByAppName","parameters":[{"name":"appName","required":true,"in":"query","schema":{"minLength":1,"pattern":"^[a-zA-Z0-9.\\-_]+$","type":"string"}},{"name":"serverId","required":false,"in":"query","schema":{"type":"string","nullable":true}}],"responses":{"200":{"description":""}},"tags":["DockerOps"],"summary":"Get service containers by app name","x-cloudgate-permission":[{"resource":"docker","actions":["read"]}]}},"/docker/services/{serviceType}/{serviceId}/containers":{"get":{"operationId":"DockerOpsController_getServiceRunningContainers","parameters":[{"name":"serviceType","required":true,"in":"path","schema":{"type":"string","enum":["application","postgres","mysql","mariadb","mongo","redis","compose","libsql"]},"description":"Service type."},{"name":"serviceId","required":true,"in":"path","schema":{"minLength":1,"type":"string"},"description":"The Service's id."}],"responses":{"200":{"description":""}},"tags":["DockerOps"],"summary":"Get service running containers","description":"A Service's running containers, for its Shell tab."}},"/docker/containers/{containerId}/config":{"get":{"operationId":"DockerOpsController_getConfig","parameters":[{"name":"containerId","required":true,"in":"path","schema":{"minLength":1,"pattern":"^[a-zA-Z0-9.\\-_]+$","type":"string"},"description":"The container's id."},{"name":"serverId","required":false,"in":"query","schema":{"type":"string","nullable":true}}],"responses":{"200":{"description":""}},"tags":["DockerOps"],"summary":"Get config","x-cloudgate-permission":[{"resource":"docker","actions":["read"]}]}},"/docker/containers/{containerId}/restart":{"post":{"operationId":"DockerOpsController_restartContainer","parameters":[{"name":"containerId","required":true,"in":"path","schema":{"minLength":1,"pattern":"^[a-zA-Z0-9.\\-_]+$","type":"string"},"description":"The container's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerIdBodyDto"}}}},"responses":{"204":{"description":""}},"tags":["DockerOps"],"summary":"Restart container","x-cloudgate-permission":[{"resource":"docker","actions":["write"]}]}},"/docker/containers/{containerId}/start":{"post":{"operationId":"DockerOpsController_startContainer","parameters":[{"name":"containerId","required":true,"in":"path","schema":{"minLength":1,"pattern":"^[a-zA-Z0-9.\\-_]+$","type":"string"},"description":"The container's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerIdBodyDto"}}}},"responses":{"204":{"description":""}},"tags":["DockerOps"],"summary":"Start container","x-cloudgate-permission":[{"resource":"docker","actions":["write"]}]}},"/docker/containers/{containerId}/stop":{"post":{"operationId":"DockerOpsController_stopContainer","parameters":[{"name":"containerId","required":true,"in":"path","schema":{"minLength":1,"pattern":"^[a-zA-Z0-9.\\-_]+$","type":"string"},"description":"The container's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerIdBodyDto"}}}},"responses":{"204":{"description":""}},"tags":["DockerOps"],"summary":"Stop container","x-cloudgate-permission":[{"resource":"docker","actions":["write"]}]}},"/docker/containers/{containerId}/kill":{"post":{"operationId":"DockerOpsController_killContainer","parameters":[{"name":"containerId","required":true,"in":"path","schema":{"minLength":1,"pattern":"^[a-zA-Z0-9.\\-_]+$","type":"string"},"description":"The container's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerIdBodyDto"}}}},"responses":{"204":{"description":""}},"tags":["DockerOps"],"summary":"Kill container","x-cloudgate-permission":[{"resource":"docker","actions":["write"]}]}},"/docker/containers/{containerId}":{"delete":{"operationId":"DockerOpsController_removeContainer","parameters":[{"name":"containerId","required":true,"in":"path","schema":{"minLength":1,"pattern":"^[a-zA-Z0-9.\\-_]+$","type":"string"},"description":"The container's id."},{"name":"serverId","required":false,"in":"query","schema":{"type":"string","nullable":true}}],"responses":{"200":{"description":""}},"tags":["DockerOps"],"summary":"Remove container","x-cloudgate-permission":[{"resource":"docker","actions":["write"]}]}},"/docker/containers/{containerId}/upload":{"post":{"operationId":"DockerOpsController_uploadFileToContainer","parameters":[{"name":"containerId","required":true,"in":"path","schema":{"minLength":1,"pattern":"^[a-zA-Z0-9.\\-_]+$","type":"string"},"description":"The container's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadFileBodyDto"}}}},"responses":{"200":{"description":""}},"tags":["DockerOps"],"summary":"Upload file to container","x-cloudgate-permission":[{"resource":"docker","actions":["write"]}]}},"/swarm/nodes":{"get":{"operationId":"SwarmController_getNodes","parameters":[{"name":"serverId","required":false,"in":"query","schema":{"type":"string","nullable":true}}],"responses":{"200":{"description":""}},"tags":["Swarm"],"summary":"Get nodes","x-cloudgate-permission":[{"resource":"server","actions":["read"]}]}},"/swarm/nodes/{nodeId}":{"get":{"operationId":"SwarmController_getNodeInfo","parameters":[{"name":"nodeId","required":true,"in":"path","schema":{"minLength":1,"pattern":"^[a-zA-Z0-9.\\-_]+$","type":"string"},"description":"The node's id."},{"name":"serverId","required":false,"in":"query","schema":{"type":"string","nullable":true}}],"responses":{"200":{"description":""}},"tags":["Swarm"],"summary":"Get node info","x-cloudgate-permission":[{"resource":"server","actions":["read"]}]}},"/swarm/apps":{"get":{"operationId":"SwarmController_getNodeApps","parameters":[{"name":"serverId","required":false,"in":"query","schema":{"type":"string","nullable":true}}],"responses":{"200":{"description":""}},"tags":["Swarm"],"summary":"Get node apps","x-cloudgate-permission":[{"resource":"server","actions":["read"]}]}},"/swarm/apps/info":{"get":{"operationId":"SwarmController_getAppInfos","parameters":[{"name":"appName","required":false,"in":"query","schema":{"type":"array","items":{"type":"string","minLength":1,"pattern":"^[a-zA-Z0-9.\\-_]+$"}}},{"name":"serverId","required":false,"in":"query","schema":{"type":"string","nullable":true}}],"responses":{"200":{"description":""}},"tags":["Swarm"],"summary":"Get app infos","x-cloudgate-permission":[{"resource":"server","actions":["read"]}]}},"/swarm/stats":{"get":{"operationId":"SwarmController_getContainerStats","parameters":[{"name":"serverId","required":false,"in":"query","schema":{"type":"string","nullable":true}}],"responses":{"200":{"description":""}},"tags":["Swarm"],"summary":"Get container stats","x-cloudgate-permission":[{"resource":"server","actions":["read"]}]}},"/cluster/nodes":{"get":{"operationId":"ClusterController_getNodes","parameters":[{"name":"serverId","required":false,"in":"query","schema":{"type":"string","nullable":true}}],"responses":{"200":{"description":""}},"tags":["Cluster"],"summary":"Get nodes","x-cloudgate-permission":[{"resource":"server","actions":["read"]}]}},"/cluster/add-worker":{"get":{"operationId":"ClusterController_addWorker","parameters":[{"name":"serverId","required":false,"in":"query","schema":{"type":"string","nullable":true}}],"responses":{"200":{"description":""}},"tags":["Cluster"],"summary":"Add worker","x-cloudgate-permission":[{"resource":"server","actions":["create"]}]}},"/cluster/add-manager":{"get":{"operationId":"ClusterController_addManager","parameters":[{"name":"serverId","required":false,"in":"query","schema":{"type":"string","nullable":true}}],"responses":{"200":{"description":""}},"tags":["Cluster"],"summary":"Add manager","x-cloudgate-permission":[{"resource":"server","actions":["create"]}]}},"/cluster/nodes/{nodeId}":{"delete":{"operationId":"ClusterController_removeWorker","parameters":[{"name":"nodeId","required":true,"in":"path","schema":{"minLength":1,"pattern":"^[a-zA-Z0-9.\\-_]+$","type":"string"},"description":"The node's id."},{"name":"serverId","required":false,"in":"query","schema":{"type":"string","nullable":true}}],"responses":{"200":{"description":""}},"tags":["Cluster"],"summary":"Remove worker","x-cloudgate-permission":[{"resource":"server","actions":["delete"]}]}},"/monitoring/servers/{serverId}/setup":{"post":{"operationId":"MonitoringController_setupMonitoring","parameters":[{"name":"serverId","required":true,"in":"path","schema":{"minLength":1,"type":"string"},"description":"The Server's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetupMonitoringBodyDto"}}}},"responses":{"200":{"description":""}},"tags":["Monitoring"],"summary":"Setup monitoring","x-cloudgate-permission":[{"resource":"server","actions":["create"]}]}},"/monitoring/metrics":{"get":{"operationId":"MonitoringController_getServerMetrics","parameters":[{"name":"serverId","required":false,"in":"query","schema":{"minLength":1,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"string"}},{"name":"start","required":false,"in":"query","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Monitoring"],"summary":"Get server metrics","x-cloudgate-permission":[{"resource":"monitoring","actions":["read"]}]}},"/monitoring/metrics/containers":{"get":{"operationId":"MonitoringController_getContainerMetrics","parameters":[{"name":"serverId","required":false,"in":"query","schema":{"minLength":1,"type":"string"}},{"name":"appName","required":true,"in":"query","schema":{"minLength":1,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"string"}},{"name":"start","required":false,"in":"query","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Monitoring"],"summary":"Get container metrics","x-cloudgate-permission":[{"resource":"monitoring","actions":["read"]}]}},"/monitoring/requests/logs":{"post":{"operationId":"MonitoringController_readStatsLogs","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReadStatsLogsBodyDto"}}}},"responses":{"200":{"description":""}},"tags":["Monitoring"],"summary":"Read stats logs"}},"/monitoring/requests/stats":{"post":{"operationId":"MonitoringController_readStats","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReadStatsBodyDto"}}}},"responses":{"200":{"description":""}},"tags":["Monitoring"],"summary":"Read stats"}},"/monitoring/requests/servers":{"get":{"operationId":"MonitoringController_listRequestTargets","parameters":[],"responses":{"200":{"description":""}},"tags":["Monitoring"],"summary":"List request targets","description":"The Requests page's Server picker. No SSH: logging-off Servers are listed."}},"/monitoring/requests":{"get":{"operationId":"MonitoringController_readRequests","parameters":[{"name":"serverId","required":false,"in":"query","schema":{"minLength":1,"type":"string"}},{"name":"start","required":false,"in":"query","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","schema":{"type":"string"}},{"name":"pageIndex","required":false,"in":"query","schema":{"minimum":0,"maximum":9007199254740991,"type":"integer"}},{"name":"pageSize","required":false,"in":"query","schema":{"minimum":1,"maximum":500,"type":"integer"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"type":"array","items":{"type":"string"}}},{"name":"method","required":false,"in":"query","schema":{"type":"array","items":{"type":"string"}}},{"name":"serviceId","required":false,"in":"query","schema":{"type":"array","items":{"type":"string"}}},{"name":"noService","required":false,"in":"query","schema":{"type":"string","enum":["true","false"]}}],"responses":{"200":{"description":""}},"tags":["Monitoring"],"summary":"Read requests","description":"One read of a Server's access log over SSH (or the platform host's), split by Service. A `GET`, so a Frozen Organization keeps it."}},"/monitoring/requests/services/{serviceId}":{"get":{"operationId":"MonitoringController_readServiceRequests","parameters":[{"name":"serviceId","required":true,"in":"path","schema":{"minLength":1,"type":"string"},"description":"The Service's id."},{"name":"start","required":false,"in":"query","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","schema":{"type":"string"}},{"name":"pageIndex","required":false,"in":"query","schema":{"minimum":0,"maximum":9007199254740991,"type":"integer"}},{"name":"pageSize","required":false,"in":"query","schema":{"minimum":1,"maximum":500,"type":"integer"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"type":"array","items":{"type":"string"}}},{"name":"method","required":false,"in":"query","schema":{"type":"array","items":{"type":"string"}}}],"responses":{"200":{"description":""}},"tags":["Monitoring"],"summary":"Read service requests","description":"A Service's Requests tab: its Server's read, found from the Service, with the Service filter fixed to it — or `cloud-account` for a Service in a Cloud account. Only an Application or a Compose stack has one. A `GET`, so a Frozen Organization keeps it."}},"/settings/web-server":{"get":{"operationId":"SettingsController_getWebServerSettings","parameters":[],"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Get web server settings"}},"/settings/whitelabeling":{"get":{"operationId":"SettingsController_getWhitelabelingConfig","parameters":[],"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Get white-labeling config","description":"The instance's branding.","security":[]},"patch":{"operationId":"SettingsController_updateWhitelabelingConfig","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWhitelabelingDto"}}}},"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Update white-labeling config","description":"Rebrand the instance: enterprise-gated in the service, like the other enterprise surfaces. A merge, not a replace — an omitted key keeps its stored value and an explicit null clears it."}},"/settings/ip":{"get":{"operationId":"SettingsController_getIp","parameters":[],"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Get the server IP"},"post":{"operationId":"SettingsController_updateServerIp","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateServerIpDto"}}}},"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Update server IP","description":"Sets the platform host's IP on the settings singleton; owners and admins of the instance organization only."}},"/settings/builds-concurrency":{"post":{"operationId":"SettingsController_updateBuildsConcurrency","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateBuildsConcurrencyDto"}}}},"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Update builds concurrency"}},"/settings/cloud-runs-concurrency":{"post":{"operationId":"SettingsController_updateCloudRunsConcurrency","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCloudRunsConcurrencyDto"}}}},"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Update cloud runs concurrency","description":"The Cloud run pool limit, gated like Concurrent builds."}},"/settings/cloud-run-time-limit":{"post":{"operationId":"SettingsController_updateCloudRunTimeLimit","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCloudRunTimeLimitDto"}}}},"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Update cloud run time limit","description":"The Cloud run time limit, gated like Concurrent builds."}},"/settings/requested-preview-max-ttl":{"post":{"operationId":"SettingsController_updateRequestedPreviewMaxTtl","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequestedPreviewMaxTtlDto"}}}},"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Update requested preview max TTL"}},"/settings/traefik/config":{"get":{"operationId":"SettingsController_readTraefikConfig","parameters":[],"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Read Traefik config"},"post":{"operationId":"SettingsController_updateTraefikConfig","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TraefikConfigDto"}}}},"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Update Traefik config"}},"/settings/traefik/web-server-config":{"get":{"operationId":"SettingsController_readWebServerTraefikConfig","parameters":[],"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Read web server Traefik config","description":"Reads the console's `dynamic/cloudgate.yml`; owners and admins of the instance organization only."},"post":{"operationId":"SettingsController_updateWebServerTraefikConfig","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TraefikConfigDto"}}}},"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Update web server Traefik config","description":"Overwrites `dynamic/cloudgate.yml` with raw YAML; owners and admins of the instance organization only."}},"/settings/traefik/middlewares-config":{"get":{"operationId":"SettingsController_readMiddlewareTraefikConfig","parameters":[],"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Read middleware Traefik config","description":"Reads `dynamic/middlewares.yml`; owners and admins of the instance organization only."},"post":{"operationId":"SettingsController_updateMiddlewareTraefikConfig","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TraefikConfigDto"}}}},"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Update middleware Traefik config","description":"Overwrites `dynamic/middlewares.yml` with raw YAML; owners and admins of the instance organization only."}},"/settings/traefik/directories":{"get":{"operationId":"SettingsController_readDirectories","parameters":[{"name":"serverId","required":false,"in":"query","schema":{"type":"string","nullable":true}}],"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Read directories","description":"Lists the Traefik directory tree of the platform host or of the Server `serverId` names (`traefikFiles:read`; the host takes the instance organization’s owners and admins).","x-cloudgate-permission":[{"resource":"traefikFiles","actions":["read"]}]}},"/settings/traefik/file":{"get":{"operationId":"SettingsController_readTraefikFile","parameters":[{"name":"path","required":true,"in":"query","schema":{"minLength":1,"type":"string"}},{"name":"serverId","required":false,"in":"query","schema":{"type":"string","nullable":true}}],"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Read Traefik file","description":"Reads one file under the Traefik directory by path (`traefikFiles:read`; `serverId` org-scoped, the host takes the instance organization’s owners and admins). A file holding private-key material is refused, and htpasswd entries come back redacted.","x-cloudgate-permission":[{"resource":"traefikFiles","actions":["read"]}]},"post":{"operationId":"SettingsController_updateTraefikFile","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModifyTraefikFileDto"}}}},"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Update Traefik file","description":"Writes one file under the Traefik directory by path (`traefikFiles:write`; `serverId` org-scoped, the host takes the instance organization’s owners and admins). A key file is refused, YAML is parsed before it is written, and a redacted htpasswd entry keeps its stored secret.","x-cloudgate-permission":[{"resource":"traefikFiles","actions":["write"]}]}},"/settings/version":{"get":{"operationId":"SettingsController_getVersion","parameters":[],"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Get version","description":"The running Cloudgate version (any authenticated user)."}},"/settings/release-tag":{"get":{"operationId":"SettingsController_getReleaseTag","parameters":[],"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Get release tag","description":"The image tag this instance runs (any authenticated user)."}},"/settings/update-data":{"post":{"operationId":"SettingsController_getUpdateData","parameters":[],"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Check for a newer version","description":"Compares the running version with the newest `cloudgate/cloudgate` tag on Docker Hub (any authenticated user). A POST, though it writes nothing."}},"/settings/update-server":{"post":{"operationId":"SettingsController_updateServer","parameters":[],"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Update Cloudgate","description":"Pulls the newest `cloudgate` image and force-updates the service running this console."}},"/settings/gpu":{"get":{"operationId":"SettingsController_checkGpuStatus","parameters":[{"name":"serverId","required":false,"in":"query","schema":{"type":"string","nullable":true}}],"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Check GPU status","description":"NVIDIA driver, runtime, CUDA and swarm GPU status of the platform host or the named Server."}},"/settings/gpu/counts":{"get":{"operationId":"SettingsController_gpuCounts","parameters":[{"name":"serverId","required":false,"in":"query","schema":{"type":"string","nullable":true}}],"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Count GPUs","description":"The counts-only GPU read: cards advertised by ID and cards no running task holds, on the platform host or the named Server, read live.","x-cloudgate-permission":[{"resource":"service","actions":["create"]}]}},"/settings/gpu-setup":{"post":{"operationId":"SettingsController_setupGpu","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerIdQueryDto"}}}},"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Set up GPU support","description":"Sets up swarm GPU support on the platform host or the named Server; a failure answers 400 with its message."}},"/settings/infrastructure-health":{"get":{"operationId":"SettingsController_checkInfrastructureHealth","parameters":[],"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Check infrastructure health"}},"/settings/runtime-info":{"get":{"operationId":"SettingsController_getRuntimeInfo","parameters":[{"name":"serverId","required":false,"in":"query","schema":{"type":"string","nullable":true}}],"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Get runtime info","description":"What this install is actually running, declared beside observed."}},"/settings/health":{"get":{"operationId":"SettingsController_health","parameters":[],"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Check liveness","description":"Liveness: `{ status: 'ok' }` once the database answers (public).","security":[]}},"/settings/is-user-subscribed":{"get":{"operationId":"SettingsController_isUserSubscribed","parameters":[],"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Check whether the Organization has Servers or Projects","description":"Whether the active org has servers or projects (any signed-in user)."}},"/settings/traefik/requests":{"get":{"operationId":"SettingsController_haveActivateRequests","parameters":[{"name":"serverId","required":false,"in":"query","schema":{"type":"string","nullable":true}}],"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Check whether the access log is on"},"post":{"operationId":"SettingsController_toggleRequests","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToggleRequestsDto"}}}},"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Turn the access log on or off"}},"/settings/assign-domain":{"post":{"operationId":"SettingsController_assignDomain","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignDomainDto"}}}},"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Set the console's domain","description":"Assigns the console's domain, certificate type and ACME email and rewrites `dynamic/cloudgate.yml`; owners and admins of the instance organization only. Answers with the sanitized row: the metrics agent token is projected out, and `consoleOrigin` says whether sign-in on the new domain will work."}},"/settings/log-cleanup":{"post":{"operationId":"SettingsController_updateLogCleanup","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateLogCleanupDto"}}}},"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Update log cleanup","description":"Starts or stops the access-log rotation cron; owners and admins of the instance organization only."},"get":{"operationId":"SettingsController_getLogCleanupStatus","parameters":[],"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Get log cleanup status"}},"/settings/clean-deployment-queue":{"post":{"operationId":"SettingsController_cleanAllDeploymentQueue","parameters":[],"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Clear the deployment queue"}},"/settings/cleanup/images":{"post":{"operationId":"SettingsController_cleanUnusedImages","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerIdQueryDto"}}}},"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Clean unused images","description":"`docker image prune --all`."}},"/settings/cleanup/volumes":{"post":{"operationId":"SettingsController_cleanUnusedVolumes","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerIdQueryDto"}}}},"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Clean unused volumes","description":"`docker volume prune --all`."}},"/settings/cleanup/stopped-containers":{"post":{"operationId":"SettingsController_cleanStoppedContainers","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerIdQueryDto"}}}},"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Clean stopped containers","description":"`docker container prune`."}},"/settings/cleanup/docker-builder":{"post":{"operationId":"SettingsController_cleanDockerBuilder","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerIdQueryDto"}}}},"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Clean Docker builder","description":"`docker builder prune --all`."}},"/settings/cleanup/docker-prune":{"post":{"operationId":"SettingsController_cleanDockerPrune","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerIdQueryDto"}}}},"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Prune Docker system","description":"System prune + builder prune."}},"/settings/cleanup/all":{"post":{"operationId":"SettingsController_cleanAll","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerIdQueryDto"}}}},"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Run every cleanup","description":"Every prune but volumes, backgrounded."}},"/settings/cleanup/monitoring":{"post":{"operationId":"SettingsController_cleanMonitoring","parameters":[],"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Clear stored metrics","description":"Deletes the platform host's stored samples — its `server_metric` and `container_metric` rows, every organization's containers on it included — and recreates its metrics directory. No `serverId` — the store is the instance's — so the instance organization’s owners and admins outright. A Server's samples are not touched; its own retention cleanup prunes them."}},"/settings/docker-disk-usage":{"get":{"operationId":"SettingsController_getDockerDiskUsage","parameters":[],"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Get Docker disk usage"}},"/settings/docker-cleanup":{"post":{"operationId":"SettingsController_updateDockerCleanup","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDockerCleanupDto"}}}},"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Update Docker cleanup"}},"/settings/reload-server":{"post":{"operationId":"SettingsController_reloadServer","parameters":[],"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Reload server","description":"Force-updates the `cloudgate` service, which restarts the backend serving this request."}},"/settings/traefik/reload":{"post":{"operationId":"SettingsController_reloadTraefik","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerIdQueryDto"}}}},"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Reload Traefik","description":"Restarts Traefik on the platform host or the named Server, fire-and-forget so the request returns before Traefik goes down (avoids proxy timeouts)."}},"/settings/traefik/request-metrics":{"post":{"operationId":"SettingsController_enableRequestMetrics","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerIdQueryDto"}}}},"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Enable request metrics"}},"/settings/traefik/env":{"get":{"operationId":"SettingsController_readTraefikEnv","parameters":[{"name":"serverId","required":false,"in":"query","schema":{"type":"string","nullable":true}}],"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Read Traefik env","description":"Traefik's environment as KEY=value lines, less every key the machine's DNS-01 setup names: those are credentials, and a response carries a secret's presence, never its value. `GET /settings/traefik/dns-challenge` is where their names are answered."},"post":{"operationId":"SettingsController_writeTraefikEnv","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WriteTraefikEnvDto"}}}},"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Write Traefik env","description":"Replaces Traefik's environment: resolve the env refs, keep the current ports, and recreate Traefik in the background."}},"/settings/traefik/dns-challenge":{"get":{"operationId":"SettingsController_readDnsChallenge","parameters":[{"name":"serverId","required":false,"in":"query","schema":{"type":"string","nullable":true}}],"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Read DNS challenge","description":"The machine's DNS-01 setup: `{ provider, credentialKeys }`, or null when it has none. The credential values are never answered."},"put":{"operationId":"SettingsController_updateDnsChallenge","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PutDnsChallengeDto"}}}},"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Update DNS challenge","description":"Sets the machine's DNS provider and credentials, writes the `letsencrypt-dns` resolver into its traefik.yml and recreates its Traefik with the credentials in its env. Answers what the GET answers."},"delete":{"operationId":"SettingsController_removeDnsChallenge","parameters":[{"name":"serverId","required":false,"in":"query","schema":{"type":"string","nullable":true}}],"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Remove DNS challenge","description":"Removes the machine's DNS-01 setup — row, resolver and env keys — or 409s naming the Applications whose previews still use it."}},"/settings/traefik/dashboard":{"get":{"operationId":"SettingsController_haveTraefikDashboardPortEnabled","parameters":[{"name":"serverId","required":false,"in":"query","schema":{"type":"string","nullable":true}}],"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Check the Traefik dashboard port","description":"Whether Traefik publishes dashboard port 8080."},"post":{"operationId":"SettingsController_toggleDashboard","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToggleDashboardDto"}}}},"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Turn the Traefik dashboard on or off","description":"Publishes or withdraws Traefik's dashboard port 8080 and the `api` block that answers on it, 409 when 8080 is taken."}},"/settings/traefik/ports":{"get":{"operationId":"SettingsController_getTraefikPorts","parameters":[{"name":"serverId","required":false,"in":"query","schema":{"type":"string","nullable":true}}],"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Get Traefik ports","description":"Traefik's additional published ports."},"post":{"operationId":"SettingsController_updateTraefikPorts","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTraefikPortsDto"}}}},"responses":{"200":{"description":""}},"tags":["Settings"],"summary":"Update Traefik ports","description":"Replaces Traefik's additional published ports after checking none is in use, and recreates Traefik in the background."}},"/settings/about":{"get":{"operationId":"AboutController_about","parameters":[],"responses":{"200":{"description":"Public. Names this as a Cloudgate, its server version, the API's own origin for WebSockets (null when CLOUDGATE_API_URL is unset), and whether this is the Hosted instance or a Self-hosted one.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AboutDto"}}}}},"tags":["About"],"summary":"Identify the instance","security":[]}},"/templates":{"get":{"operationId":"TemplatesController_list","parameters":[{"name":"baseUrl","required":false,"in":"query","not":{},"schema":{}}],"responses":{"200":{"description":""}},"tags":["Templates"],"summary":"List Templates","description":"The Template catalogue as this instance offers it, and the saved copy it came from."}},"/templates/tags":{"get":{"operationId":"TemplatesController_tags","parameters":[{"name":"baseUrl","required":false,"in":"query","not":{},"schema":{}}],"responses":{"200":{"description":""}},"tags":["Templates"],"summary":"List Template tags"}},"/templates/{templateId}/setup":{"get":{"operationId":"TemplatesController_findOne","parameters":[{"name":"templateId","required":true,"in":"path","schema":{"type":"string"},"description":"The template's id."},{"name":"projectId","required":false,"in":"query","schema":{"minLength":1,"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Templates"],"summary":"Get a Template setup form","description":"The setup form: the template's asked values, and each of a Project's Environments with whether it can take the template, and why not."}},"/templates/setup":{"post":{"operationId":"TemplatesController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateSetupDto"}}}},"responses":{"201":{"description":""}},"tags":["Templates"],"summary":"Set up a Template","description":"Sets a Template up: writes its Pending setup and Setup record, adds its renamed entries to the config and opens the Plan.","x-cloudgate-permission":[{"resource":"service","actions":["create"]}]}},"/environments/{environmentId}/pending-setups":{"get":{"operationId":"PendingSetupsController_list","parameters":[{"name":"environmentId","required":true,"in":"path","schema":{"type":"string"},"description":"The Environment's id."}],"responses":{"200":{"description":""}},"tags":["PendingSetups"],"summary":"List pending setups","description":"The Environment's Pending setups, each value as present only, and the notes of those the 30-day sweep dropped.","x-cloudgate-permission":[{"resource":"environment","actions":["read"]}]}},"/environments/{environmentId}/pending-setups/{pendingSetupId}":{"delete":{"operationId":"PendingSetupsController_remove","parameters":[{"name":"environmentId","required":true,"in":"path","schema":{"type":"string"},"description":"The Environment's id."},{"name":"pendingSetupId","required":true,"in":"path","schema":{"type":"string"},"description":"The pending setup's id."}],"responses":{"200":{"description":""}},"tags":["PendingSetups"],"summary":"Delete a pending setup","description":"Cancels one Pending setup; answers it, and the plan made again.","x-cloudgate-permission":[{"resource":"environment","actions":["update"]}]}},"/ai":{"post":{"operationId":"AiController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAiDto"}}}},"responses":{"201":{"description":""}},"tags":["Ai"],"summary":"Create an AI provider"},"get":{"operationId":"AiController_list","parameters":[],"responses":{"200":{"description":""}},"tags":["Ai"],"summary":"List AI providers"}},"/ai/enabled-providers":{"get":{"operationId":"AiController_getEnabledProviders","parameters":[],"responses":{"200":{"description":""}},"tags":["Ai"],"summary":"List enabled AI providers"}},"/ai/models":{"post":{"operationId":"AiController_getModels","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetModelsDto"}}}},"responses":{"200":{"description":""}},"tags":["Ai"],"summary":"List a provider's models"}},"/ai/suggest":{"post":{"operationId":"AiController_suggest","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuggestAiDto"}}}},"responses":{"200":{"description":""}},"tags":["Ai"],"summary":"Suggest a Compose stack with AI"}},"/ai/analyze-logs":{"post":{"operationId":"AiController_analyzeLogs","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyzeLogsDto"}}}},"responses":{"200":{"description":""}},"tags":["Ai"],"summary":"Analyze logs with AI"}},"/ai/test-connection":{"post":{"operationId":"AiController_testConnection","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AiTestConnectionDto"}}}},"responses":{"200":{"description":""}},"tags":["Ai"],"summary":"Test a connection to an AI provider"}},"/ai/{id}/test-connection":{"post":{"operationId":"AiController_testSavedConnection","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The AI provider's id."}],"responses":{"200":{"description":""}},"tags":["Ai"],"summary":"Test a saved AI provider","description":"The same probe against a config that is already saved. The key comes off the row server-side, because the read path strips it and so the console has nothing to send."}},"/ai/deploy":{"post":{"operationId":"AiController_deploy","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeployAiDto"}}}},"responses":{"201":{"description":""}},"tags":["Ai"],"summary":"Deploy an AI-suggested Compose stack"}},"/ai/{id}":{"get":{"operationId":"AiController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The AI provider's id."}],"responses":{"200":{"description":""}},"tags":["Ai"],"summary":"Get an AI provider"},"patch":{"operationId":"AiController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The AI provider's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAiDto"}}}},"responses":{"200":{"description":""}},"tags":["Ai"],"summary":"Update an AI provider"},"delete":{"operationId":"AiController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The AI provider's id."}],"responses":{"200":{"description":""}},"tags":["Ai"],"summary":"Delete an AI provider"}},"/custom-roles":{"get":{"operationId":"CustomRoleController_findAll","parameters":[],"responses":{"200":{"description":""}},"tags":["CustomRole"],"summary":"List custom roles"},"post":{"operationId":"CustomRoleController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCustomRoleDto"}}}},"responses":{"201":{"description":""}},"tags":["CustomRole"],"summary":"Create a custom role"}},"/custom-roles/statements":{"get":{"operationId":"CustomRoleController_getStatements","parameters":[],"responses":{"200":{"description":""}},"tags":["CustomRole"],"summary":"List permission statements"}},"/custom-roles/{roleName}/members":{"get":{"operationId":"CustomRoleController_membersByRole","parameters":[{"name":"roleName","required":true,"in":"path","schema":{"type":"string"},"description":"Role name."}],"responses":{"200":{"description":""}},"tags":["CustomRole"],"summary":"List members holding a role"}},"/custom-roles/{roleName}":{"patch":{"operationId":"CustomRoleController_update","parameters":[{"name":"roleName","required":true,"in":"path","schema":{"type":"string"},"description":"Role name."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCustomRoleDto"}}}},"responses":{"200":{"description":""}},"tags":["CustomRole"],"summary":"Update a custom role"},"delete":{"operationId":"CustomRoleController_remove","parameters":[{"name":"roleName","required":true,"in":"path","schema":{"type":"string"},"description":"Role name."}],"responses":{"200":{"description":""}},"tags":["CustomRole"],"summary":"Delete a custom role"}},"/forward-auth/settings":{"get":{"operationId":"ForwardAuthController_getAuthDomain","parameters":[{"name":"serverId","required":false,"in":"query","schema":{"type":"string","minLength":1,"default":null,"nullable":true}}],"responses":{"200":{"description":""}},"tags":["ForwardAuth"],"summary":"Get auth domain"},"put":{"operationId":"ForwardAuthController_setAuthDomain","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetForwardAuthSettingsDto"}}}},"responses":{"200":{"description":""}},"tags":["ForwardAuth"],"summary":"Set auth domain"},"delete":{"operationId":"ForwardAuthController_removeAuthDomain","parameters":[{"name":"serverId","required":false,"in":"query","schema":{"type":"string","minLength":1,"default":null,"nullable":true}}],"responses":{"200":{"description":""}},"tags":["ForwardAuth"],"summary":"Remove auth domain"}},"/forward-auth/providers":{"get":{"operationId":"ForwardAuthController_listProviders","parameters":[],"responses":{"200":{"description":""}},"tags":["ForwardAuth"],"summary":"List forward-auth providers"}},"/forward-auth/servers":{"get":{"operationId":"ForwardAuthController_serverStatus","parameters":[],"responses":{"200":{"description":""}},"tags":["ForwardAuth"],"summary":"Server status"}},"/forward-auth/proxy":{"post":{"operationId":"ForwardAuthController_deployOnServer","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeployForwardAuthDto"}}}},"responses":{"200":{"description":""}},"tags":["ForwardAuth"],"summary":"Deploy on server"},"delete":{"operationId":"ForwardAuthController_removeOnServer","parameters":[{"name":"serverId","required":false,"in":"query","schema":{"type":"string","minLength":1,"default":null,"nullable":true}}],"responses":{"200":{"description":""}},"tags":["ForwardAuth"],"summary":"Remove on server"}},"/forward-auth/domains/{domainId}":{"get":{"operationId":"ForwardAuthController_getDomainStatus","parameters":[{"name":"domainId","required":true,"in":"path","schema":{"type":"string"},"description":"The Domain's id."}],"responses":{"200":{"description":""}},"tags":["ForwardAuth"],"summary":"Get domain status"}},"/forward-auth/domains/{domainId}/enable":{"post":{"operationId":"ForwardAuthController_enableOnDomain","parameters":[{"name":"domainId","required":true,"in":"path","schema":{"type":"string"},"description":"The Domain's id."}],"responses":{"200":{"description":""}},"tags":["ForwardAuth"],"summary":"Enable on domain"}},"/forward-auth/domains/{domainId}/disable":{"post":{"operationId":"ForwardAuthController_disableOnDomain","parameters":[{"name":"domainId","required":true,"in":"path","schema":{"type":"string"},"description":"The Domain's id."}],"responses":{"200":{"description":""}},"tags":["ForwardAuth"],"summary":"Disable on domain"}},"/scim/providers":{"get":{"operationId":"ScimController_listProviders","parameters":[],"responses":{"200":{"description":""}},"tags":["Scim"],"summary":"List SCIM providers"},"post":{"operationId":"ScimController_generateToken","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateScimTokenDto"}}}},"responses":{"201":{"description":""}},"tags":["Scim"],"summary":"Generate a SCIM token"}},"/scim/providers/{providerId}":{"delete":{"operationId":"ScimController_deleteProvider","parameters":[{"name":"providerId","required":true,"in":"path","schema":{"type":"string"},"description":"The provider's id."}],"responses":{"200":{"description":""}},"tags":["Scim"],"summary":"Delete a SCIM provider"}},"/sso/show-sign-in":{"get":{"operationId":"SsoController_showSignIn","parameters":[],"responses":{"200":{"description":""}},"tags":["Sso"],"summary":"Check whether SSO sign-in shows","security":[]}},"/sso/enforce":{"get":{"operationId":"SsoController_enforce","parameters":[],"responses":{"200":{"description":""}},"tags":["Sso"],"summary":"Get SSO enforcement","security":[]},"patch":{"operationId":"SsoController_setEnforce","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnforceSsoDto"}}}},"responses":{"200":{"description":""}},"tags":["Sso"],"summary":"Set SSO enforcement","description":"Sets the instance's `enforceSSO` flag."}},"/sso/redirect-uri":{"get":{"operationId":"SsoController_redirectUri","parameters":[],"responses":{"200":{"description":""}},"tags":["Sso"],"summary":"Get the OIDC redirect URI","description":"The OIDC redirect URI, with `{providerId}` still in it — the console needs it on the Add dialog, where no provider exists yet."}},"/sso/providers":{"get":{"operationId":"SsoController_listProviders","parameters":[],"responses":{"200":{"description":""}},"tags":["Sso"],"summary":"List SSO providers"},"post":{"operationId":"SsoController_register","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterSsoProviderDto"}}}},"responses":{"201":{"description":""}},"tags":["Sso"],"summary":"Register an SSO provider"}},"/sso/trusted-origins":{"get":{"operationId":"SsoController_getTrustedOrigins","parameters":[],"responses":{"200":{"description":""}},"tags":["Sso"],"summary":"Get trusted origins"},"post":{"operationId":"SsoController_addTrustedOrigin","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrustedOriginDto"}}}},"responses":{"200":{"description":""}},"tags":["Sso"],"summary":"Add trusted origin"},"put":{"operationId":"SsoController_updateTrustedOrigin","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTrustedOriginDto"}}}},"responses":{"200":{"description":""}},"tags":["Sso"],"summary":"Update trusted origin"},"delete":{"operationId":"SsoController_removeTrustedOrigin","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrustedOriginDto"}}}},"responses":{"200":{"description":""}},"tags":["Sso"],"summary":"Remove trusted origin"}},"/sso/providers/{providerId}":{"get":{"operationId":"SsoController_findOne","parameters":[{"name":"providerId","required":true,"in":"path","schema":{"type":"string"},"description":"The provider's id."}],"responses":{"200":{"description":""}},"tags":["Sso"],"summary":"Get an SSO provider"},"put":{"operationId":"SsoController_update","parameters":[{"name":"providerId","required":true,"in":"path","schema":{"type":"string"},"description":"The provider's id."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSsoProviderDto"}}}},"responses":{"200":{"description":""}},"tags":["Sso"],"summary":"Update an SSO provider"},"delete":{"operationId":"SsoController_remove","parameters":[{"name":"providerId","required":true,"in":"path","schema":{"type":"string"},"description":"The provider's id."}],"responses":{"200":{"description":""}},"tags":["Sso"],"summary":"Delete an SSO provider"}},"/sso/proven-domains":{"get":{"operationId":"SsoController_listProvenDomains","parameters":[],"responses":{"200":{"description":""}},"tags":["Sso"],"summary":"List proven domains","description":"Proven domains, Hosted only. The domain is the key: one per Organization, and it is what the owner types and publishes a record for."},"post":{"operationId":"SsoController_addProvenDomain","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvenDomainDto"}}}},"responses":{"201":{"description":""}},"tags":["Sso"],"summary":"Add proven domain"}},"/sso/proven-domains/{domain}/check":{"post":{"operationId":"SsoController_checkProvenDomain","parameters":[{"name":"domain","required":true,"in":"path","schema":{"type":"string"},"description":"Domain."}],"responses":{"200":{"description":""}},"tags":["Sso"],"summary":"Check proven domain"}},"/sso/proven-domains/{domain}":{"delete":{"operationId":"SsoController_removeProvenDomain","parameters":[{"name":"domain","required":true,"in":"path","schema":{"type":"string"},"description":"Domain."}],"responses":{"200":{"description":""}},"tags":["Sso"],"summary":"Remove proven domain"}},"/applications/{id}/token-spend":{"get":{"operationId":"TokenSpendController_forAiModel","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The id."},{"name":"from","required":false,"in":"query","schema":{"pattern":"^\\d{4}-\\d{2}-\\d{2}$","type":"string"}},{"name":"to","required":false,"in":"query","schema":{"pattern":"^\\d{4}-\\d{2}-\\d{2}$","type":"string"}}],"responses":{"200":{"description":""}},"tags":["TokenSpend"],"summary":"Read token spend for an AI model","description":"An AI model's spend by UTC day over `from`..`to`, split reported and estimated, and by Agent × model served with calls per outcome."}},"/environments/{id}/token-spend":{"get":{"operationId":"EnvironmentTokenSpendController_forEnvironment","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The id."},{"name":"from","required":false,"in":"query","schema":{"pattern":"^\\d{4}-\\d{2}-\\d{2}$","type":"string"}},{"name":"to","required":false,"in":"query","schema":{"pattern":"^\\d{4}-\\d{2}-\\d{2}$","type":"string"}}],"responses":{"200":{"description":""}},"tags":["EnvironmentTokenSpend"],"summary":"Read token spend for an Environment","description":"The Environment's spend by UTC day over `from`..`to` (default: the last 30 days), and each AI model's total, summing only the AI models the caller can read."}},"/projects/{id}/token-spend":{"get":{"operationId":"ProjectTokenSpendController_forProject","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"The id."},{"name":"from","required":false,"in":"query","schema":{"pattern":"^\\d{4}-\\d{2}-\\d{2}$","type":"string"}},{"name":"to","required":false,"in":"query","schema":{"pattern":"^\\d{4}-\\d{2}-\\d{2}$","type":"string"}}],"responses":{"200":{"description":""}},"tags":["ProjectTokenSpend"],"summary":"Read token spend for a Project","description":"The Project's spend by UTC day over `from`..`to` (default: the last 30 days), and each Environment's total, summing only the AI models the caller can read."}}},"components":{"securitySchemes":{"personalKey":{"type":"apiKey","in":"header","name":"x-api-key","description":"A Personal key, made in the console under Personal keys or by cloudgate login. Agent keys are refused on every REST route (403 AGENT_NOT_ALLOWED_HERE)."},"organization":{"type":"apiKey","in":"header","name":"x-organization-id","description":"The Organization the request acts in. Optional: without it, the key acts in your default Organization. An Organization you are not a member of is refused with 403 NOT_ORGANIZATION_MEMBER."},"cookie":{"type":"apiKey","in":"cookie","name":"better-auth.session_token","description":"The better-auth session cookie. Every route is authenticated unless it is marked @Public()."}},"schemas":{"AboutDto":{"type":"object","properties":{"product":{"type":"string","enum":["cloudgate"]},"version":{"type":"string"},"apiUrl":{"type":"string","nullable":true},"mode":{"type":"string","enum":["hosted","self-hosted"]}},"required":["product","version","apiUrl"]},"ActivateLicenseDto":{"type":"object","properties":{"licenseKey":{"type":"string","minLength":1}},"required":["licenseKey"]},"AddAgentKeyDto":{"type":"object","properties":{"expiresInDays":{"default":90,"anyOf":[{"type":"number","enum":[30]},{"type":"number","enum":[90]},{"type":"number","enum":[365]}]}}},"AddOnsDto":{"type":"object","properties":{"addOns":{"type":"integer","minimum":0,"maximum":1000}},"required":["addOns"]},"AddTeamMemberDto":{"type":"object","properties":{"userId":{"type":"string","minLength":1}},"required":["userId"]},"AiTestConnectionDto":{"type":"object","properties":{"apiUrl":{"type":"string","format":"uri"},"apiKey":{"type":"string"},"model":{"type":"string","minLength":1}},"required":["apiUrl","apiKey","model"]},"AnalyzeLogsDto":{"type":"object","properties":{"aiId":{"type":"string","minLength":1},"logs":{"type":"string","minLength":1},"context":{"type":"string","enum":["build","runtime"]}},"required":["aiId","logs","context"]},"ApplyPlanDto":{"type":"object","properties":{"planId":{"type":"string","minLength":1},"confirmDestroy":{"default":[],"maxItems":1000,"type":"array","items":{"type":"string","minLength":1}},"confirmUpgrade":{"default":[],"maxItems":1000,"type":"array","items":{"type":"string","minLength":1}},"deleteFilesOf":{"default":[],"maxItems":1000,"type":"array","items":{"type":"string","minLength":1}},"deleteDataOf":{"default":[],"maxItems":1000,"type":"array","items":{"type":"string","minLength":1}},"folderSourcesDeployedNext":{"default":false,"type":"boolean"}},"required":["planId"]},"AssignDomainDto":{"type":"object","properties":{"host":{"type":"string"},"certificateType":{"type":"string","enum":["letsencrypt","none","custom"]},"letsEncryptEmail":{"anyOf":[{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},{"type":"string","enum":[""]}],"nullable":true},"https":{"type":"boolean"}},"required":["host","certificateType"]},"BackupsDto":{"type":"object","properties":{"enabled":{"type":"boolean"}},"required":["enabled"]},"BuyDto":{"type":"object","properties":{"serverType":{"type":"string","minLength":1},"location":{"type":"string","minLength":1},"name":{"type":"string","maxLength":100},"backups":{"type":"boolean"},"storageGb":{"type":"integer","minimum":10,"maximum":10240},"termsAccepted":{"type":"boolean","enum":[true]},"prorationDate":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991,"minimum":0},"returnTo":{"type":"string","maxLength":2000}},"required":["serverType","location","termsAccepted","prorationDate"]},"ChangeLibsqlStatusDto":{"type":"object","properties":{"applicationStatus":{"type":"string","enum":["idle","running","done","error","stopped"]}},"required":["applicationStatus"]},"ChangeMariadbStatusDto":{"type":"object","properties":{"applicationStatus":{"type":"string","enum":["idle","running","done","error","stopped"]}},"required":["applicationStatus"]},"ChangeMongoStatusDto":{"type":"object","properties":{"applicationStatus":{"type":"string","enum":["idle","running","done","error","stopped"]}},"required":["applicationStatus"]},"ChangeMysqlStatusDto":{"type":"object","properties":{"applicationStatus":{"type":"string","enum":["idle","running","done","error","stopped"]}},"required":["applicationStatus"]},"ChangePostgresStatusDto":{"type":"object","properties":{"applicationStatus":{"type":"string","enum":["idle","running","done","error","stopped"]}},"required":["applicationStatus"]},"ChangeRedisStatusDto":{"type":"object","properties":{"applicationStatus":{"type":"string","enum":["idle","running","done","error","stopped"]}},"required":["applicationStatus"]},"ChangeVariablesDto":{"type":"object","properties":{"set":{"type":"object","additionalProperties":{"type":"string","maxLength":65536}},"unset":{"maxItems":100,"type":"array","items":{"type":"string","pattern":"^[\\w.-]+$"}}},"additionalProperties":false},"CheckoutDto":{"type":"object","properties":{"addOns":{"type":"integer","minimum":0,"maximum":1000},"plan":{"type":"string","enum":["starter","business"]},"returnTo":{"type":"string","maxLength":2000}},"required":["addOns","plan"]},"CleanPatchReposDto":{"type":"object","properties":{"serverId":{"type":"string","nullable":true}}},"ConfigRepositorySourcesDto":{"type":"object","properties":{"keptIn":{"type":"string","enum":["cloudgate","repository",null],"nullable":true},"readable":{"type":"boolean"},"services":{"type":"array","items":{"type":"object","properties":{"configName":{"type":"string"},"provider":{"type":"string"},"repository":{"type":"string"}},"required":["configName","provider","repository"]}}},"required":["keptIn","readable","services"]},"ConfigSourcesDto":{"type":"object","properties":{"keptIn":{"type":"string","enum":["cloudgate","repository",null],"nullable":true},"readable":{"type":"boolean"},"services":{"type":"array","items":{"type":"object","properties":{"configName":{"type":"string"},"kind":{"type":"string"},"source":{"type":"string","enum":["folder","repository","image","console","none"]},"folder":{"type":"string","nullable":true}},"required":["configName","kind","source","folder"]}}},"required":["keptIn","readable","services"]},"ConfirmMoveDto":{"type":"object","properties":{"to":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["cloudgate"]},"fromEnvironmentId":{"type":"string","minLength":1,"nullable":true}},"required":["kind"]},{"type":"object","properties":{"kind":{"type":"string","enum":["repository"]},"gitProviderId":{"type":"string","minLength":1},"repository":{"type":"string","maxLength":512,"pattern":"^[^/\\s]+(\\/[^/\\s]+)+$"},"path":{"type":"string","maxLength":1024,"pattern":"^(?!\\/)(?!(.*\\/)?\\.\\.?(\\/|$))[^\\s\\\\]+$"}},"required":["kind","gitProviderId","repository"]}]},"reads":{"maxItems":1000,"type":"array","items":{"type":"object","properties":{"environmentId":{"type":"string","minLength":1},"commitSha":{"type":"string","minLength":1,"nullable":true},"textHash":{"type":"string","minLength":1}},"required":["environmentId","commitSha","textHash"]}}},"required":["to","reads"]},"CopyRangeDto":{"type":"object","properties":{"minCopies":{"type":"integer","minimum":0,"maximum":1000},"maxCopies":{"type":"integer","minimum":1,"maximum":1000}},"required":["minCopies","maxCopies"]},"CreateAgentDto":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":64},"role":{"default":"agentReader","type":"string","enum":["agentReader","agentOperator","agentCaller"]},"grant":{"default":{},"type":"object","properties":{"accessedProjects":{"type":"array","items":{"type":"string","minLength":1}},"accessedEnvironments":{"type":"array","items":{"type":"string","minLength":1}},"accessedServices":{"type":"array","items":{"type":"string","minLength":1}}}},"keyExpiresInDays":{"default":90,"anyOf":[{"type":"number","enum":[30]},{"type":"number","enum":[90]},{"type":"number","enum":[365]}]}},"required":["name"]},"CreateAiDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"apiUrl":{"type":"string","format":"uri"},"apiKey":{"type":"string"},"model":{"type":"string","minLength":1},"isEnabled":{"type":"boolean"}},"required":["name","apiUrl","apiKey","model"]},"CreateApiKeyDto":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255},"prefix":{"type":"string","maxLength":64},"expiresIn":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991,"minimum":0}},"required":["name"]},"CreateApplicationDto":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"appName":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-zA-Z0-9_][a-zA-Z0-9._-]*$"},"description":{"type":"string"},"environmentId":{"type":"string","minLength":1},"serverId":{"type":"string","nullable":true},"gpus":{"type":"integer","minimum":0,"maximum":9007199254740991},"aiModel":{"type":"object","properties":{"runtime":{"type":"string","enum":["ollama","vllm","llama.cpp"]},"model":{"type":"string","maxLength":255,"pattern":"^[A-Za-z0-9][A-Za-z0-9._-]*(\\/[A-Za-z0-9._-]+)*(:[A-Za-z0-9._-]+)?$"},"imageTag":{"type":"string","pattern":"^[A-Za-z0-9_][A-Za-z0-9_.-]{0,127}$"},"hfToken":{"type":"string","minLength":1,"maxLength":512,"pattern":"^\\S+$"}},"required":["runtime","model"],"additionalProperties":false}},"required":["name","environmentId"]},"CreateBackupDto":{"type":"object","properties":{"schedule":{"type":"string","minLength":1},"enabled":{"type":"boolean"},"prefix":{"type":"string","minLength":1},"database":{"type":"string","minLength":1,"pattern":"^[a-zA-Z0-9_][a-zA-Z0-9_$.-]*$"},"keepLatestCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"nullable":true},"destinationId":{"type":"string","minLength":1},"databaseType":{"type":"string","enum":["postgres","mysql","mariadb","mongo","libsql"]},"backupType":{"default":"database","type":"string","enum":["database","compose"]},"serviceId":{"type":"string","minLength":1},"serviceName":{"type":"string","minLength":1,"pattern":"^[a-zA-Z0-9._-]+$"},"metadata":{"type":"object","properties":{"postgres":{"type":"object","properties":{"databaseUser":{"type":"string","minLength":1}},"required":["databaseUser"]},"mariadb":{"type":"object","properties":{"databaseUser":{"type":"string","minLength":1},"databasePassword":{"type":"string"}},"required":["databaseUser","databasePassword"]},"mongo":{"type":"object","properties":{"databaseUser":{"type":"string","minLength":1},"databasePassword":{"type":"string"}},"required":["databaseUser","databasePassword"]},"mysql":{"type":"object","properties":{"databaseRootPassword":{"type":"string"}},"required":["databaseRootPassword"]}}}},"required":["schedule","prefix","database","destinationId","databaseType","serviceId"]},"CreateBitbucketDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"bitbucketUsername":{"type":"string"},"bitbucketEmail":{"type":"string"},"appPassword":{"type":"string"},"apiToken":{"type":"string"},"bitbucketWorkspaceName":{"type":"string"}},"required":["name"]},"CreateCertificateDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"certificateData":{"type":"string","minLength":1},"privateKey":{"type":"string","minLength":1},"serverId":{"type":"string","nullable":true}},"required":["name","certificateData","privateKey"]},"CreateCloudAccountDto":{"oneOf":[{"type":"object","properties":{"setupToken":{"type":"string","minLength":1},"name":{"type":"string","minLength":1,"maxLength":100},"cloud":{"default":"aws","type":"string","enum":["aws"]},"cloudId":{"type":"string","pattern":"^\\d{12}$"},"accessKeyId":{"type":"string","pattern":"^[A-Z0-9]{16,128}$"},"secretAccessKey":{"type":"string","minLength":1},"deployRoleArn":{"type":"string","pattern":"^arn:aws[a-z-]*:iam::(\\d{12}):role\\/[\\w+=,.@/-]{1,512}$"},"taskExecutionRoleArn":{"type":"string","pattern":"^arn:aws[a-z-]*:iam::(\\d{12}):role\\/[\\w+=,.@/-]{1,512}$"}},"required":["setupToken","name","cloudId","accessKeyId","secretAccessKey","deployRoleArn","taskExecutionRoleArn"]},{"type":"object","properties":{"setupToken":{"type":"string","minLength":1},"name":{"type":"string","minLength":1,"maxLength":100},"cloud":{"type":"string","enum":["gcp"]},"cloudId":{"type":"string","pattern":"^[a-z][a-z0-9-]{4,28}[a-z0-9]$"},"workloadIdentityProvider":{"type":"string","pattern":"^(?:\\/\\/iam\\.googleapis\\.com\\/)?(projects\\/\\d+\\/locations\\/global\\/workloadIdentityPools\\/[a-z0-9-]{4,32}\\/providers\\/[a-z0-9-]{4,32})$"},"deployServiceAccount":{"type":"string","pattern":"^[a-z][a-z0-9-]{4,28}[a-z0-9]@[a-z0-9.:-]+\\.iam\\.gserviceaccount\\.com$"}},"required":["setupToken","name","cloud","cloudId","workloadIdentityProvider","deployServiceAccount"]}]},"CreateComposeDto":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"appName":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-zA-Z0-9_][a-zA-Z0-9._-]*$"},"description":{"type":"string"},"environmentId":{"type":"string","minLength":1},"composeType":{"type":"string","enum":["docker-compose","stack"]},"serverId":{"type":"string","nullable":true},"composeFile":{"type":"string"},"sourceType":{"type":"string","enum":["git","github","gitlab","bitbucket","gitea","raw"]}},"required":["name","environmentId"]},"CreateCustomDto":{"type":"object","properties":{"appDeploy":{"default":false,"type":"boolean"},"appBuildError":{"default":false,"type":"boolean"},"databaseBackup":{"default":false,"type":"boolean"},"volumeBackup":{"default":false,"type":"boolean"},"instanceBackup":{"default":false,"type":"boolean"},"instanceRestart":{"default":false,"type":"boolean"},"dockerCleanup":{"default":false,"type":"boolean"},"serverThreshold":{"default":false,"type":"boolean"},"licenseLapse":{"default":false,"type":"boolean"},"licenseExpiring":{"default":false,"type":"boolean"},"agentRateLimited":{"default":false,"type":"boolean"},"previewTeardownStuck":{"default":false,"type":"boolean"},"serviceIncident":{"default":false,"type":"boolean"},"aiModelNotAnswering":{"default":false,"type":"boolean"},"name":{"type":"string","minLength":1},"endpoint":{"type":"string","minLength":1},"headers":{"type":"object","additionalProperties":{"type":"string"}}},"required":["name","endpoint"]},"CreateCustomRoleDto":{"type":"object","properties":{"roleName":{"type":"string","minLength":1,"maxLength":50},"permissions":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}},"required":["roleName","permissions"]},"CreateDestinationDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"provider":{"type":"string","nullable":true},"accessKey":{"type":"string","minLength":1},"secretAccessKey":{"type":"string","minLength":1},"bucket":{"type":"string","minLength":1},"region":{"type":"string"},"endpoint":{"type":"string"}},"required":["name","accessKey","secretAccessKey","bucket","region","endpoint"]},"CreateDiscordDto":{"type":"object","properties":{"appDeploy":{"default":false,"type":"boolean"},"appBuildError":{"default":false,"type":"boolean"},"databaseBackup":{"default":false,"type":"boolean"},"volumeBackup":{"default":false,"type":"boolean"},"instanceBackup":{"default":false,"type":"boolean"},"instanceRestart":{"default":false,"type":"boolean"},"dockerCleanup":{"default":false,"type":"boolean"},"serverThreshold":{"default":false,"type":"boolean"},"licenseLapse":{"default":false,"type":"boolean"},"licenseExpiring":{"default":false,"type":"boolean"},"agentRateLimited":{"default":false,"type":"boolean"},"previewTeardownStuck":{"default":false,"type":"boolean"},"serviceIncident":{"default":false,"type":"boolean"},"aiModelNotAnswering":{"default":false,"type":"boolean"},"name":{"type":"string","minLength":1},"webhookUrl":{"type":"string","minLength":1},"decoration":{"type":"boolean"}},"required":["name","webhookUrl"]},"CreateDomainDto":{"type":"object","properties":{"host":{"type":"string","minLength":1},"path":{"type":"string","minLength":1,"maxLength":255},"internalPath":{"type":"string","minLength":1,"maxLength":255},"stripPath":{"type":"boolean"},"port":{"type":"integer","minimum":1,"maximum":65535},"https":{"type":"boolean"},"certificateType":{"type":"string","enum":["letsencrypt","none","custom","stored"]},"customCertResolver":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","nullable":true},"customEntrypoint":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","nullable":true},"middlewares":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}(@[a-z]+)?$"}},"forwardAuthEnabled":{"type":"boolean"},"serviceName":{"type":"string"},"domainType":{"type":"string","enum":["application","compose"]},"applicationId":{"type":"string","description":"The owning Application. Exactly one of applicationId, composeId or bucketId must be sent; a body carrying two is refused."},"composeId":{"type":"string","description":"The owning Compose stack. Exactly one of applicationId, composeId or bucketId must be sent; a body carrying two is refused."},"bucketId":{"type":"string","description":"The owning bucket on a Server, whose Garage S3 API the Domain routes to. Exactly one of applicationId, composeId or bucketId must be sent."}},"required":["host"]},"CreateEmailDto":{"type":"object","properties":{"appDeploy":{"default":false,"type":"boolean"},"appBuildError":{"default":false,"type":"boolean"},"databaseBackup":{"default":false,"type":"boolean"},"volumeBackup":{"default":false,"type":"boolean"},"instanceBackup":{"default":false,"type":"boolean"},"instanceRestart":{"default":false,"type":"boolean"},"dockerCleanup":{"default":false,"type":"boolean"},"serverThreshold":{"default":false,"type":"boolean"},"licenseLapse":{"default":false,"type":"boolean"},"licenseExpiring":{"default":false,"type":"boolean"},"agentRateLimited":{"default":false,"type":"boolean"},"previewTeardownStuck":{"default":false,"type":"boolean"},"serviceIncident":{"default":false,"type":"boolean"},"aiModelNotAnswering":{"default":false,"type":"boolean"},"name":{"type":"string","minLength":1},"smtpServer":{"type":"string","minLength":1},"smtpPort":{"type":"number","minimum":1},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1},"fromAddress":{"type":"string","minLength":1},"toAddresses":{"minItems":1,"type":"array","items":{"type":"string"}}},"required":["name","smtpServer","smtpPort","username","password","fromAddress","toAddresses"]},"CreateEnvironmentDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"description":{"type":"string"},"projectId":{"type":"string","minLength":1},"env":{"type":"string"},"deployTarget":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["server"]},"serverId":{"type":"string","minLength":1}},"required":["kind","serverId"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["platform-host"]}},"required":["kind"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["cloud"]},"cloudAccountId":{"type":"string","minLength":1},"region":{"type":"string","minLength":1}},"required":["kind","cloudAccountId","region"],"additionalProperties":false}]},"configBranch":{"type":"string","maxLength":255,"pattern":"^$|^(?!-)(?!.*\\.\\.)(?!.*\\/\\/)[^\\s~^:?*[\\\\]+(?<![./])$","nullable":true}},"required":["name","projectId"]},"CreateExistingBucketDto":{"type":"object","properties":{"environmentId":{"type":"string","minLength":1},"configName":{"type":"string","pattern":"^[a-z][a-z0-9-]{0,62}$"},"bucketName":{"type":"string","pattern":"^(?=.{3,222}$)[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?$"}},"required":["environmentId","configName","bucketName"],"additionalProperties":false},"CreateExistingMysqlDto":{"type":"object","properties":{"environmentId":{"type":"string","minLength":1},"configName":{"type":"string","pattern":"^[a-z][a-z0-9-]{0,62}$"},"identifier":{"type":"string"},"databaseUser":{"type":"string","minLength":1,"maxLength":63},"databasePassword":{"type":"string","minLength":1,"maxLength":128},"databaseName":{"type":"string","minLength":1,"maxLength":63},"madeReachable":{"default":false,"type":"boolean"}},"required":["environmentId","configName","identifier","databaseUser","databasePassword","databaseName"],"additionalProperties":false},"CreateExistingPostgresDto":{"type":"object","properties":{"environmentId":{"type":"string","minLength":1},"configName":{"type":"string","pattern":"^[a-z][a-z0-9-]{0,62}$"},"identifier":{"type":"string"},"databaseUser":{"type":"string","minLength":1,"maxLength":63},"databasePassword":{"type":"string","minLength":1,"maxLength":128},"databaseName":{"type":"string","minLength":1,"maxLength":63},"madeReachable":{"default":false,"type":"boolean"}},"required":["environmentId","configName","identifier","databaseUser","databasePassword","databaseName"],"additionalProperties":false},"CreateExistingRedisDto":{"type":"object","properties":{"environmentId":{"type":"string","minLength":1},"configName":{"type":"string","pattern":"^[a-z][a-z0-9-]{0,62}$"},"identifier":{"type":"string"},"authToken":{"default":"","anyOf":[{"type":"string","pattern":"^[!#-.0-?A-~]{16,128}$"},{"type":"string","const":""}]},"tls":{"default":true,"type":"boolean"},"madeReachable":{"default":false,"type":"boolean"}},"required":["environmentId","configName","identifier"],"additionalProperties":false},"CreateGitProviderDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"providerType":{"default":"github","type":"string","enum":["github","gitlab","bitbucket","gitea"]}},"required":["name"]},"CreateGiteaDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"giteaUrl":{"type":"string","minLength":1},"giteaInternalUrl":{"type":"string","nullable":true},"redirectUri":{"type":"string"},"clientId":{"type":"string"},"clientSecret":{"type":"string"},"accessToken":{"type":"string"},"refreshToken":{"type":"string"},"expiresAt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"scopes":{"type":"string"},"lastAuthenticatedAt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["name"]},"CreateGithubDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"appName":{"type":"string"},"appId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"clientId":{"type":"string"},"clientSecret":{"type":"string"},"installationId":{"type":"string"},"privateKey":{"type":"string"},"webhookSecret":{"type":"string"}},"required":["name"]},"CreateGitlabDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"gitlabUrl":{"type":"string","minLength":1},"gitlabInternalUrl":{"type":"string","nullable":true},"applicationId":{"type":"string"},"redirectUri":{"type":"string"},"secret":{"type":"string"},"accessToken":{"type":"string"},"refreshToken":{"type":"string"},"groupName":{"type":"string"},"expiresAt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["name"]},"CreateGotifyDto":{"type":"object","properties":{"appDeploy":{"default":false,"type":"boolean"},"appBuildError":{"default":false,"type":"boolean"},"databaseBackup":{"default":false,"type":"boolean"},"volumeBackup":{"default":false,"type":"boolean"},"instanceBackup":{"default":false,"type":"boolean"},"instanceRestart":{"default":false,"type":"boolean"},"dockerCleanup":{"default":false,"type":"boolean"},"serverThreshold":{"default":false,"type":"boolean"},"licenseLapse":{"default":false,"type":"boolean"},"licenseExpiring":{"default":false,"type":"boolean"},"agentRateLimited":{"default":false,"type":"boolean"},"previewTeardownStuck":{"default":false,"type":"boolean"},"serviceIncident":{"default":false,"type":"boolean"},"aiModelNotAnswering":{"default":false,"type":"boolean"},"name":{"type":"string","minLength":1},"serverUrl":{"type":"string","minLength":1},"appToken":{"type":"string","minLength":1},"priority":{"default":5,"type":"number","minimum":1},"decoration":{"type":"boolean"}},"required":["name","serverUrl","appToken"]},"CreateLarkDto":{"type":"object","properties":{"appDeploy":{"default":false,"type":"boolean"},"appBuildError":{"default":false,"type":"boolean"},"databaseBackup":{"default":false,"type":"boolean"},"volumeBackup":{"default":false,"type":"boolean"},"instanceBackup":{"default":false,"type":"boolean"},"instanceRestart":{"default":false,"type":"boolean"},"dockerCleanup":{"default":false,"type":"boolean"},"serverThreshold":{"default":false,"type":"boolean"},"licenseLapse":{"default":false,"type":"boolean"},"licenseExpiring":{"default":false,"type":"boolean"},"agentRateLimited":{"default":false,"type":"boolean"},"previewTeardownStuck":{"default":false,"type":"boolean"},"serviceIncident":{"default":false,"type":"boolean"},"aiModelNotAnswering":{"default":false,"type":"boolean"},"name":{"type":"string","minLength":1},"webhookUrl":{"type":"string","minLength":1}},"required":["name","webhookUrl"]},"CreateLibsqlDto":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"appName":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-zA-Z0-9_][a-zA-Z0-9._-]*$"},"databaseUser":{"type":"string","minLength":1},"databasePassword":{"type":"string","pattern":"^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$"},"sqldNode":{"type":"string","enum":["primary","replica"]},"sqldPrimaryUrl":{"type":"string","nullable":true},"enableNamespaces":{"type":"boolean"},"dockerImage":{"type":"string","pattern":"^(?:(?:(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])(?:\\.(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]))*|\\[(?:[a-fA-F0-9:]+)\\])(?::[0-9]+)?\\/)?[a-z0-9]+(?:(?:[._]|__|[-]+)[a-z0-9]+)*(?:\\/[a-z0-9]+(?:(?:[._]|__|[-]+)[a-z0-9]+)*)*(?::[\\w][\\w.-]{0,127})?(?:@[A-Za-z][A-Za-z0-9]*(?:[-_+.][A-Za-z][A-Za-z0-9]*)*:[0-9a-fA-F]{32,})?$"},"description":{"type":"string"},"environmentId":{"type":"string","minLength":1},"serverId":{"type":"string","nullable":true}},"required":["name","databaseUser","environmentId"]},"CreateMariadbDto":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"appName":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-zA-Z0-9_][a-zA-Z0-9._-]*$"},"databaseName":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z_][A-Za-z0-9_]*$"},"databaseUser":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[A-Za-z_][A-Za-z0-9_]*$"},"databasePassword":{"type":"string","pattern":"^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$"},"databaseRootPassword":{"type":"string","pattern":"^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$"},"dockerImage":{"type":"string","pattern":"^(?:(?:(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])(?:\\.(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]))*|\\[(?:[a-fA-F0-9:]+)\\])(?::[0-9]+)?\\/)?[a-z0-9]+(?:(?:[._]|__|[-]+)[a-z0-9]+)*(?:\\/[a-z0-9]+(?:(?:[._]|__|[-]+)[a-z0-9]+)*)*(?::[\\w][\\w.-]{0,127})?(?:@[A-Za-z][A-Za-z0-9]*(?:[-_+.][A-Za-z][A-Za-z0-9]*)*:[0-9a-fA-F]{32,})?$"},"description":{"type":"string"},"environmentId":{"type":"string","minLength":1},"serverId":{"type":"string","nullable":true}},"required":["name","databaseName","databaseUser","environmentId"]},"CreateMattermostDto":{"type":"object","properties":{"appDeploy":{"default":false,"type":"boolean"},"appBuildError":{"default":false,"type":"boolean"},"databaseBackup":{"default":false,"type":"boolean"},"volumeBackup":{"default":false,"type":"boolean"},"instanceBackup":{"default":false,"type":"boolean"},"instanceRestart":{"default":false,"type":"boolean"},"dockerCleanup":{"default":false,"type":"boolean"},"serverThreshold":{"default":false,"type":"boolean"},"licenseLapse":{"default":false,"type":"boolean"},"licenseExpiring":{"default":false,"type":"boolean"},"agentRateLimited":{"default":false,"type":"boolean"},"previewTeardownStuck":{"default":false,"type":"boolean"},"serviceIncident":{"default":false,"type":"boolean"},"aiModelNotAnswering":{"default":false,"type":"boolean"},"name":{"type":"string","minLength":1},"webhookUrl":{"type":"string","format":"uri"},"channel":{"type":"string"},"username":{"type":"string"}},"required":["name","webhookUrl"]},"CreateMongoDto":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"appName":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-zA-Z0-9_][a-zA-Z0-9._-]*$"},"databaseUser":{"type":"string","minLength":1},"databasePassword":{"type":"string","pattern":"^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$"},"dockerImage":{"type":"string","pattern":"^(?:(?:(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])(?:\\.(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]))*|\\[(?:[a-fA-F0-9:]+)\\])(?::[0-9]+)?\\/)?[a-z0-9]+(?:(?:[._]|__|[-]+)[a-z0-9]+)*(?:\\/[a-z0-9]+(?:(?:[._]|__|[-]+)[a-z0-9]+)*)*(?::[\\w][\\w.-]{0,127})?(?:@[A-Za-z][A-Za-z0-9]*(?:[-_+.][A-Za-z][A-Za-z0-9]*)*:[0-9a-fA-F]{32,})?$"},"description":{"type":"string"},"replicaSets":{"type":"boolean"},"environmentId":{"type":"string","minLength":1},"serverId":{"type":"string","nullable":true}},"required":["name","databaseUser","environmentId"]},"CreateMountDto":{"type":"object","properties":{"type":{"type":"string","enum":["bind","volume","file"],"description":"Must be 'file' when serviceType is 'compose'. Nothing assembles a Compose stack's mount rows into a deploy spec, so a bind or a volume attached to one would never be read; declare those in the stack's own compose file."},"hostPath":{"type":"string"},"volumeName":{"type":"string","minLength":1,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9_.-]*$"},"filePath":{"type":"string"},"content":{"type":"string"},"mountPath":{"type":"string","minLength":1,"description":"Required unless serviceType is 'compose'. A compose stack's mount rows are never assembled into a deploy spec, so a compose mount has no container target to name; every other serviceType is refused without one."},"serviceType":{"default":"application","type":"string","enum":["application","postgres","mysql","mariadb","mongo","redis","compose","libsql"]},"serviceId":{"type":"string","minLength":1}},"required":["type","serviceId"]},"CreateMysqlDto":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"appName":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-zA-Z0-9_][a-zA-Z0-9._-]*$"},"databaseName":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z_][A-Za-z0-9_]*$"},"databaseUser":{"type":"string","minLength":1,"maxLength":32,"pattern":"^[A-Za-z_][A-Za-z0-9_]*$"},"databasePassword":{"type":"string","pattern":"^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$"},"databaseRootPassword":{"type":"string","pattern":"^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$"},"dockerImage":{"type":"string","pattern":"^(?:(?:(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])(?:\\.(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]))*|\\[(?:[a-fA-F0-9:]+)\\])(?::[0-9]+)?\\/)?[a-z0-9]+(?:(?:[._]|__|[-]+)[a-z0-9]+)*(?:\\/[a-z0-9]+(?:(?:[._]|__|[-]+)[a-z0-9]+)*)*(?::[\\w][\\w.-]{0,127})?(?:@[A-Za-z][A-Za-z0-9]*(?:[-_+.][A-Za-z][A-Za-z0-9]*)*:[0-9a-fA-F]{32,})?$"},"description":{"type":"string"},"environmentId":{"type":"string","minLength":1},"serverId":{"type":"string","nullable":true}},"required":["name","databaseName","databaseUser","environmentId"]},"CreateNtfyDto":{"type":"object","properties":{"appDeploy":{"default":false,"type":"boolean"},"appBuildError":{"default":false,"type":"boolean"},"databaseBackup":{"default":false,"type":"boolean"},"volumeBackup":{"default":false,"type":"boolean"},"instanceBackup":{"default":false,"type":"boolean"},"instanceRestart":{"default":false,"type":"boolean"},"dockerCleanup":{"default":false,"type":"boolean"},"serverThreshold":{"default":false,"type":"boolean"},"licenseLapse":{"default":false,"type":"boolean"},"licenseExpiring":{"default":false,"type":"boolean"},"agentRateLimited":{"default":false,"type":"boolean"},"previewTeardownStuck":{"default":false,"type":"boolean"},"serviceIncident":{"default":false,"type":"boolean"},"aiModelNotAnswering":{"default":false,"type":"boolean"},"name":{"type":"string","minLength":1},"serverUrl":{"type":"string","minLength":1},"topic":{"type":"string","minLength":1},"accessToken":{"type":"string"},"priority":{"default":3,"type":"number","minimum":1}},"required":["name","serverUrl","topic"]},"CreateOrganizationDto":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255},"logo":{"type":"string"},"paidBy":{"type":"string","enum":["itself","active-organization"]}},"required":["name"]},"CreatePatchDto":{"type":"object","properties":{"filePath":{"type":"string","minLength":1,"description":"A path relative to the repository root, with no \"..\" segment and none of \", `, $, a backslash, NUL or a line break."},"content":{"type":"string"},"type":{"type":"string","enum":["create","update","delete"]},"enabled":{"type":"boolean"},"applicationId":{"type":"string","description":"The owning Application. Exactly one of applicationId or composeId must be sent; a body carrying both is refused."},"composeId":{"type":"string","description":"The owning Compose stack. Exactly one of applicationId or composeId must be sent; a body carrying both is refused."}},"required":["filePath","content"]},"CreatePortDto":{"type":"object","properties":{"publishedPort":{"type":"integer","minimum":1,"maximum":65535},"targetPort":{"type":"integer","minimum":1,"maximum":65535},"protocol":{"default":"tcp","type":"string","enum":["tcp","udp"]},"publishMode":{"default":"ingress","type":"string","enum":["ingress","host"]},"applicationId":{"type":"string","minLength":1}},"required":["publishedPort","targetPort","applicationId"]},"CreatePostgresDto":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"appName":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-zA-Z0-9_][a-zA-Z0-9._-]*$"},"databaseName":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[A-Za-z_][A-Za-z0-9_]*$"},"databaseUser":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[A-Za-z_][A-Za-z0-9_]*$"},"databasePassword":{"type":"string","pattern":"^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$"},"dockerImage":{"type":"string","pattern":"^(?:(?:(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])(?:\\.(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]))*|\\[(?:[a-fA-F0-9:]+)\\])(?::[0-9]+)?\\/)?[a-z0-9]+(?:(?:[._]|__|[-]+)[a-z0-9]+)*(?:\\/[a-z0-9]+(?:(?:[._]|__|[-]+)[a-z0-9]+)*)*(?::[\\w][\\w.-]{0,127})?(?:@[A-Za-z][A-Za-z0-9]*(?:[-_+.][A-Za-z][A-Za-z0-9]*)*:[0-9a-fA-F]{32,})?$"},"description":{"type":"string"},"environmentId":{"type":"string","minLength":1},"serverId":{"type":"string","nullable":true}},"required":["name","databaseName","databaseUser","environmentId"]},"CreateProjectDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"description":{"type":"string"},"env":{"type":"string"}},"required":["name"]},"CreatePushoverDto":{"type":"object","properties":{"appDeploy":{"default":false,"type":"boolean"},"appBuildError":{"default":false,"type":"boolean"},"databaseBackup":{"default":false,"type":"boolean"},"volumeBackup":{"default":false,"type":"boolean"},"instanceBackup":{"default":false,"type":"boolean"},"instanceRestart":{"default":false,"type":"boolean"},"dockerCleanup":{"default":false,"type":"boolean"},"serverThreshold":{"default":false,"type":"boolean"},"licenseLapse":{"default":false,"type":"boolean"},"licenseExpiring":{"default":false,"type":"boolean"},"agentRateLimited":{"default":false,"type":"boolean"},"previewTeardownStuck":{"default":false,"type":"boolean"},"serviceIncident":{"default":false,"type":"boolean"},"aiModelNotAnswering":{"default":false,"type":"boolean"},"name":{"type":"string","minLength":1},"userKey":{"type":"string","minLength":1},"apiToken":{"type":"string","minLength":1},"priority":{"default":0,"type":"number","minimum":-2,"maximum":2},"retry":{"type":"number","minimum":30,"nullable":true},"expire":{"type":"number","minimum":1,"maximum":10800,"nullable":true}},"required":["name","userKey","apiToken"]},"CreateRedirectDto":{"type":"object","properties":{"regex":{"type":"string","minLength":1,"maxLength":1024},"replacement":{"type":"string","minLength":1,"maxLength":1024},"permanent":{"type":"boolean"},"applicationId":{"type":"string","minLength":1}},"required":["regex","replacement","applicationId"]},"CreateRedisDto":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"appName":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-zA-Z0-9_][a-zA-Z0-9._-]*$"},"databasePassword":{"type":"string","pattern":"^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$"},"dockerImage":{"type":"string","pattern":"^(?:(?:(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])(?:\\.(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]))*|\\[(?:[a-fA-F0-9:]+)\\])(?::[0-9]+)?\\/)?[a-z0-9]+(?:(?:[._]|__|[-]+)[a-z0-9]+)*(?:\\/[a-z0-9]+(?:(?:[._]|__|[-]+)[a-z0-9]+)*)*(?::[\\w][\\w.-]{0,127})?(?:@[A-Za-z][A-Za-z0-9]*(?:[-_+.][A-Za-z][A-Za-z0-9]*)*:[0-9a-fA-F]{32,})?$"},"description":{"type":"string"},"environmentId":{"type":"string","minLength":1},"serverId":{"type":"string","nullable":true}},"required":["name","environmentId"]},"CreateRegistryDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1},"url":{"default":"","type":"string"},"registryType":{"default":"cloud","type":"string","enum":["selfHosted","cloud"]},"imagePrefix":{"type":"string","maxLength":255,"pattern":"^(?:[a-zA-Z0-9]+(?:(?:[._]|__|[-]+)[a-zA-Z0-9]+)*(?:\\/[a-zA-Z0-9]+(?:(?:[._]|__|[-]+)[a-zA-Z0-9]+)*)*)?$","nullable":true}},"required":["name","username","password"]},"CreateRequestedPreviewDto":{"type":"object","properties":{"branch":{"type":"string","minLength":1,"maxLength":255,"pattern":"^(?!-)(?!.*\\.\\.)[^\\s\\x00-\\x1f\\x7f~^:?*[\\\\]+$"},"ttlMinutes":{"type":"integer","minimum":1,"maximum":9007199254740991}},"required":["branch"]},"CreateResendDto":{"type":"object","properties":{"appDeploy":{"default":false,"type":"boolean"},"appBuildError":{"default":false,"type":"boolean"},"databaseBackup":{"default":false,"type":"boolean"},"volumeBackup":{"default":false,"type":"boolean"},"instanceBackup":{"default":false,"type":"boolean"},"instanceRestart":{"default":false,"type":"boolean"},"dockerCleanup":{"default":false,"type":"boolean"},"serverThreshold":{"default":false,"type":"boolean"},"licenseLapse":{"default":false,"type":"boolean"},"licenseExpiring":{"default":false,"type":"boolean"},"agentRateLimited":{"default":false,"type":"boolean"},"previewTeardownStuck":{"default":false,"type":"boolean"},"serviceIncident":{"default":false,"type":"boolean"},"aiModelNotAnswering":{"default":false,"type":"boolean"},"name":{"type":"string","minLength":1},"apiKey":{"type":"string","minLength":1},"fromAddress":{"type":"string","minLength":1},"toAddresses":{"minItems":1,"type":"array","items":{"type":"string"}}},"required":["name","apiKey","fromAddress","toAddresses"]},"CreateScheduleDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"description":{"type":"string"},"cronExpression":{"type":"string","minLength":1},"scheduleType":{"default":"application","type":"string","enum":["application","compose","server","cloudgate-server"]},"serviceId":{"type":"string"},"serviceName":{"type":"string"},"shellType":{"default":"bash","type":"string","enum":["bash","sh"]},"command":{"type":"string"},"script":{"type":"string"},"enabled":{"type":"boolean"},"timezone":{"type":"string"}},"required":["name","cronExpression"]},"CreateSecurityDto":{"type":"object","properties":{"username":{"type":"string","minLength":1,"maxLength":255},"password":{"type":"string","minLength":1},"applicationId":{"type":"string","minLength":1}},"required":["username","password","applicationId"]},"CreateServerDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"description":{"type":"string"},"ipAddress":{"type":"string","minLength":1},"port":{"default":22,"type":"integer","minimum":1,"maximum":65535},"username":{"default":"root","type":"string","minLength":1},"sshKeyId":{"type":"string","minLength":1},"serverType":{"type":"string","enum":["deploy","build"]}},"required":["name","ipAddress","sshKeyId"]},"CreateSlackDto":{"type":"object","properties":{"appDeploy":{"default":false,"type":"boolean"},"appBuildError":{"default":false,"type":"boolean"},"databaseBackup":{"default":false,"type":"boolean"},"volumeBackup":{"default":false,"type":"boolean"},"instanceBackup":{"default":false,"type":"boolean"},"instanceRestart":{"default":false,"type":"boolean"},"dockerCleanup":{"default":false,"type":"boolean"},"serverThreshold":{"default":false,"type":"boolean"},"licenseLapse":{"default":false,"type":"boolean"},"licenseExpiring":{"default":false,"type":"boolean"},"agentRateLimited":{"default":false,"type":"boolean"},"previewTeardownStuck":{"default":false,"type":"boolean"},"serviceIncident":{"default":false,"type":"boolean"},"aiModelNotAnswering":{"default":false,"type":"boolean"},"name":{"type":"string","minLength":1},"webhookUrl":{"type":"string","minLength":1},"channel":{"type":"string"}},"required":["name","webhookUrl"]},"CreateSshKeyDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"description":{"type":"string"},"publicKey":{"type":"string","minLength":1},"privateKey":{"type":"string","minLength":1},"type":{"type":"string","enum":["rsa","ed25519"]}},"required":["name"]},"CreateTagDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"color":{"type":"string"}},"required":["name"]},"CreateTeamDto":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255}},"required":["name"]},"CreateTeamsDto":{"type":"object","properties":{"appDeploy":{"default":false,"type":"boolean"},"appBuildError":{"default":false,"type":"boolean"},"databaseBackup":{"default":false,"type":"boolean"},"volumeBackup":{"default":false,"type":"boolean"},"instanceBackup":{"default":false,"type":"boolean"},"instanceRestart":{"default":false,"type":"boolean"},"dockerCleanup":{"default":false,"type":"boolean"},"serverThreshold":{"default":false,"type":"boolean"},"licenseLapse":{"default":false,"type":"boolean"},"licenseExpiring":{"default":false,"type":"boolean"},"agentRateLimited":{"default":false,"type":"boolean"},"previewTeardownStuck":{"default":false,"type":"boolean"},"serviceIncident":{"default":false,"type":"boolean"},"aiModelNotAnswering":{"default":false,"type":"boolean"},"name":{"type":"string","minLength":1},"webhookUrl":{"type":"string","minLength":1}},"required":["name","webhookUrl"]},"CreateTelegramDto":{"type":"object","properties":{"appDeploy":{"default":false,"type":"boolean"},"appBuildError":{"default":false,"type":"boolean"},"databaseBackup":{"default":false,"type":"boolean"},"volumeBackup":{"default":false,"type":"boolean"},"instanceBackup":{"default":false,"type":"boolean"},"instanceRestart":{"default":false,"type":"boolean"},"dockerCleanup":{"default":false,"type":"boolean"},"serverThreshold":{"default":false,"type":"boolean"},"licenseLapse":{"default":false,"type":"boolean"},"licenseExpiring":{"default":false,"type":"boolean"},"agentRateLimited":{"default":false,"type":"boolean"},"previewTeardownStuck":{"default":false,"type":"boolean"},"serviceIncident":{"default":false,"type":"boolean"},"aiModelNotAnswering":{"default":false,"type":"boolean"},"name":{"type":"string","minLength":1},"botToken":{"type":"string","minLength":1},"chatId":{"type":"string","minLength":1},"messageThreadId":{"type":"string"}},"required":["name","botToken","chatId"]},"CreateUptimeCheckDto":{"type":"object","properties":{"serviceType":{"type":"string","enum":["application","postgres","mysql","mariadb","mongo","redis","compose","libsql"]},"serviceId":{"type":"string","minLength":1},"kind":{"default":"http","type":"string","enum":["http","tcp"]},"domainId":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"intervalSeconds":{"default":60,"type":"integer","minimum":30,"maximum":3600},"timeoutSeconds":{"default":10,"type":"integer","minimum":1,"maximum":60},"expectedStatuses":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"string","pattern":"^(?:[1-5]xx|[1-5]\\d\\d)$"}},"downAfter":{"default":3,"type":"integer","minimum":1,"maximum":20},"enabled":{"default":true,"type":"boolean"},"keyword":{"type":"string","minLength":1,"maxLength":256,"nullable":true},"headerName":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[!#$%&'*+.^_`|~0-9A-Za-z-]+$","nullable":true},"headerValue":{"type":"string","minLength":1,"maxLength":4096,"pattern":"^[\\t\\x20-\\x7e\\x80-\\xff]+$","nullable":true}},"required":["serviceType","serviceId"]},"CreateVolumeBackupDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"volumeName":{"type":"string","minLength":1,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9_.-]*$"},"prefix":{"type":"string","minLength":1,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9_./-]*$"},"schedule":{"type":"string","minLength":1},"serviceType":{"default":"application","type":"string","enum":["application","postgres","mysql","mariadb","mongo","redis","compose","libsql","bucket"]},"serviceId":{"type":"string","minLength":1},"serviceName":{"type":"string","minLength":1,"pattern":"^[a-zA-Z0-9._-]+$"},"turnOff":{"default":false,"type":"boolean"},"keepLatestCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"nullable":true},"enabled":{"type":"boolean"},"destinationId":{"type":"string","minLength":1}},"required":["name","volumeName","prefix","schedule","serviceId","destinationId"]},"DeployAiDto":{"type":"object","properties":{"environmentId":{"type":"string","minLength":1},"id":{"type":"string","minLength":1},"dockerCompose":{"type":"string","minLength":1},"envVariables":{"type":"string"},"serverId":{"type":"string","nullable":true},"name":{"type":"string","minLength":1},"description":{"type":"string"},"domains":{"type":"array","items":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"number","minimum":1},"serviceName":{"type":"string","minLength":1}},"required":["host","port","serviceName"]}},"configFiles":{"type":"array","items":{"type":"object","properties":{"filePath":{"type":"string"},"content":{"type":"string","minLength":1}},"required":["filePath","content"]}}},"required":["environmentId","id","dockerCompose","envVariables","name","description"]},"DeployForwardAuthDto":{"type":"object","properties":{"serverId":{"type":"string","minLength":1,"default":null,"nullable":true},"providerId":{"type":"string","minLength":1}},"required":["providerId"]},"DeploymentStatusDto":{"type":"object","properties":{"deploymentId":{"type":"string"},"status":{"type":"string","enum":["pending","running","done","error","cancelled","held"]},"createdAt":{"type":"string"},"startedAt":{"type":"string","nullable":true},"finishedAt":{"type":"string","nullable":true}},"required":["deploymentId","status","createdAt","startedAt","finishedAt"]},"DestinationTestConnectionDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"provider":{"type":"string","nullable":true},"accessKey":{"type":"string","minLength":1},"secretAccessKey":{"type":"string","minLength":1},"bucket":{"type":"string","minLength":1},"region":{"type":"string"},"endpoint":{"type":"string"},"serverId":{"type":"string","nullable":true}},"required":["name","accessKey","secretAccessKey","bucket","region","endpoint"]},"DeviceCodeDto":{"type":"object","properties":{"deviceCode":{"type":"string"},"userCode":{"type":"string"},"interval":{"type":"number"},"expiresIn":{"type":"number"}},"required":["deviceCode","userCode","interval","expiresIn"]},"DeviceCodeRequestDto":{"type":"object","properties":{},"additionalProperties":false},"DeviceTokenDto":{"type":"object","properties":{"key":{"type":"string"},"keyId":{"type":"string"},"expiresAt":{"type":"string"}},"required":["key","keyId","expiresAt"]},"DeviceTokenRequestDto":{"type":"object","properties":{"deviceCode":{"type":"string","minLength":1},"name":{"type":"string","minLength":1,"maxLength":100},"replaces":{"type":"string","minLength":1,"maxLength":200}},"required":["deviceCode"],"additionalProperties":false},"DismissPlanDto":{"type":"object","properties":{"planId":{"type":"string","minLength":1}},"required":["planId"]},"EnforceSsoDto":{"type":"object","properties":{"enforceSSO":{"type":"boolean"}},"required":["enforceSSO"]},"EnsureRepoDto":{"type":"object","properties":{"id":{"type":"string","minLength":1},"type":{"type":"string","enum":["application","compose"]}},"required":["id","type"]},"ExtendRequestedPreviewDto":{"type":"object","properties":{"ttlMinutes":{"type":"integer","minimum":1,"maximum":9007199254740991}}},"FinishPayingDto":{"type":"object","properties":{"returnTo":{"type":"string","maxLength":2000}},"default":{}},"GenerateDomainDto":{"type":"object","properties":{"appName":{"type":"string","minLength":1},"serverId":{"type":"string","nullable":true},"composeId":{"type":"string","nullable":true}},"required":["appName"]},"GenerateScimTokenDto":{"type":"object","properties":{"providerId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9][a-z0-9-]*$"}},"required":["providerId"]},"GetModelsDto":{"type":"object","properties":{"apiUrl":{"type":"string","format":"uri"},"apiKey":{"type":"string"}},"required":["apiUrl","apiKey"]},"InviteMemberDto":{"type":"object","properties":{"email":{"type":"string","maxLength":255,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"role":{"type":"string","minLength":1,"maxLength":50},"teamId":{"type":"string"}},"required":["email","role"]},"MarkFileForDeletionDto":{"type":"object","properties":{"id":{"type":"string","minLength":1},"type":{"type":"string","enum":["application","compose"]},"filePath":{"type":"string","minLength":1,"description":"A path relative to the repository root, with no \"..\" segment and none of \", `, $, a backslash, NUL or a line break."}},"required":["id","type","filePath"]},"ModifyTraefikFileDto":{"type":"object","properties":{"path":{"type":"string","minLength":1},"traefikConfig":{"type":"string","minLength":1},"serverId":{"type":"string","nullable":true}},"required":["path","traefikConfig"]},"OrganizationCreationDto":{"type":"object","properties":{"allowed":{"type":"boolean"},"reason":{"type":"string","nullable":true},"code":{"type":"string","nullable":true},"licenseHint":{"type":"boolean"},"overLimit":{"type":"object","properties":{"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"nullable":true}},"required":["count"],"nullable":true},"ownedPayingForThemselves":{"type":"object","properties":{"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"of":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["count","of"],"nullable":true},"planHint":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["add-to-plan"]},"organizationName":{"type":"string"}},"required":["kind","organizationName"]},{"type":"object","properties":{"kind":{"type":"string","enum":["see-plans"]}},"required":["kind"]}],"nullable":true}},"required":["allowed","reason","code","licenseHint","overLimit","ownedPayingForThemselves","planHint"]},"PreviewMoveDto":{"type":"object","properties":{"to":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["cloudgate"]},"fromEnvironmentId":{"type":"string","minLength":1,"nullable":true}},"required":["kind"]},{"type":"object","properties":{"kind":{"type":"string","enum":["repository"]},"gitProviderId":{"type":"string","minLength":1},"repository":{"type":"string","maxLength":512,"pattern":"^[^/\\s]+(\\/[^/\\s]+)+$"},"path":{"type":"string","maxLength":1024,"pattern":"^(?!\\/)(?!(.*\\/)?\\.\\.?(\\/|$))[^\\s\\\\]+$"}},"required":["kind","gitProviderId","repository"]}]}},"required":["to"]},"ProvenDomainDto":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]},"PutBucketOriginsDto":{"type":"object","properties":{"origins":{"type":"array","items":{"type":"string","maxLength":300}}},"required":["origins"]},"PutDnsChallengeDto":{"type":"object","properties":{"serverId":{"type":"string","nullable":true},"provider":{"type":"string","pattern":"^[a-z0-9-]{1,64}$"},"credentials":{"type":"object","additionalProperties":{"type":"string","minLength":1,"maxLength":4096}}},"required":["provider"]},"PutErrorRateThresholdDto":{"type":"object","properties":{"percentage":{"default":5,"type":"number","minimum":0.1,"maximum":100},"windowMinutes":{"default":5,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"minRequests":{"default":20,"type":"integer","minimum":1,"maximum":1000000},"enabled":{"default":true,"type":"boolean"}}},"PutTracesDto":{"type":"object","properties":{"enabled":{"type":"boolean"},"retentionDays":{"default":3,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["enabled"]},"ReadStatsBodyDto":{"type":"object","properties":{"dateRange":{"type":"object","properties":{"start":{"type":"string"},"end":{"type":"string"}}}}},"ReadStatsLogsBodyDto":{"type":"object","properties":{"page":{"type":"object","properties":{"pageIndex":{"type":"number"},"pageSize":{"type":"number"}},"required":["pageIndex","pageSize"]},"sort":{"type":"object","properties":{"id":{"type":"string"},"desc":{"type":"boolean"}},"required":["id","desc"]},"search":{"type":"string"},"status":{"type":"array","items":{"type":"string"}},"method":{"type":"array","items":{"type":"string"}},"dateRange":{"type":"object","properties":{"start":{"type":"string"},"end":{"type":"string"}}}}},"RebuildStateDto":{"type":"object","properties":{"confirmName":{"type":"string","minLength":1}},"required":["confirmName"]},"RedeployPreviewDeploymentDto":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"}}},"RegisterSsoProviderDto":{"type":"object","properties":{"providerId":{"type":"string","minLength":1},"issuer":{"type":"string","format":"uri"},"domains":{"minItems":1,"type":"array","items":{"type":"string"}},"oidcConfig":{"type":"object","properties":{"clientId":{"type":"string","minLength":1},"clientSecret":{"type":"string","minLength":1},"authorizationEndpoint":{"type":"string","format":"uri"},"tokenEndpoint":{"type":"string","format":"uri"},"userInfoEndpoint":{"type":"string","format":"uri"},"tokenEndpointAuthentication":{"type":"string","enum":["client_secret_post","client_secret_basic"]},"jwksEndpoint":{"type":"string","format":"uri"},"discoveryEndpoint":{"type":"string","format":"uri"},"skipDiscovery":{"type":"boolean"},"scopes":{"type":"array","items":{"type":"string"}},"pkce":{"type":"boolean"},"mapping":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string"},"emailVerified":{"type":"string"},"name":{"type":"string"},"image":{"type":"string"},"extraFields":{"type":"object","additionalProperties":{}}},"required":["id","email","name"]}},"required":["clientId","clientSecret"]},"overrideUserInfo":{"type":"boolean"},"trustIssuer":{"type":"boolean"}},"required":["providerId","issuer","domains"]},"RestoreBackupDto":{"type":"object","properties":{"databaseId":{"type":"string","minLength":1},"databaseType":{"type":"string","enum":["postgres","mysql","mariadb","mongo","libsql"]},"backupType":{"default":"database","type":"string","enum":["database","compose"]},"databaseName":{"type":"string","minLength":1,"pattern":"^[a-zA-Z0-9_][a-zA-Z0-9_$.-]*$"},"backupFile":{"type":"string","minLength":1},"destinationId":{"type":"string","minLength":1},"metadata":{"type":"object","properties":{"postgres":{"type":"object","properties":{"databaseUser":{"type":"string","minLength":1}},"required":["databaseUser"]},"mariadb":{"type":"object","properties":{"databaseUser":{"type":"string","minLength":1},"databasePassword":{"type":"string"}},"required":["databaseUser","databasePassword"]},"mongo":{"type":"object","properties":{"databaseUser":{"type":"string","minLength":1},"databasePassword":{"type":"string"}},"required":["databaseUser","databasePassword"]},"mysql":{"type":"object","properties":{"databaseRootPassword":{"type":"string"}},"required":["databaseRootPassword"]},"serviceName":{"type":"string","minLength":1,"pattern":"^[a-zA-Z0-9._-]+$"}}}},"required":["databaseId","databaseType","databaseName","backupFile","destinationId"]},"RestoreVolumeBackupDto":{"type":"object","properties":{"serviceId":{"type":"string","minLength":1},"serviceType":{"type":"string","enum":["application","compose","bucket"]},"volumeName":{"type":"string","minLength":1,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9_.-]*$"},"backupFileName":{"type":"string","minLength":1,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9_./-]*$"},"destinationId":{"type":"string","minLength":1}},"required":["serviceId","serviceType","volumeName","backupFileName","destinationId"]},"RevokeSessionDto":{"type":"object","properties":{"sessionId":{"type":"string","minLength":1}},"required":["sessionId"]},"SaveApplicationEnvironmentDto":{"type":"object","properties":{"env":{"type":"string"},"buildArgs":{"type":"string"},"buildSecrets":{"type":"string"},"createEnvFile":{"type":"boolean"}}},"SaveComposeEnvironmentDto":{"type":"object","properties":{"env":{"type":"string"}}},"SaveComposeStackVmDto":{"type":"object","properties":{"size":{"type":"string","enum":["xsmall","small","medium","large","xlarge","2xlarge"]},"dataDiskGb":{"type":"integer","minimum":1,"maximum":16384}},"additionalProperties":false},"SaveConfigTextDto":{"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":262144},"version":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991,"minimum":0}},"required":["text"]},"SaveFileAsPatchDto":{"type":"object","properties":{"id":{"type":"string","minLength":1},"type":{"type":"string","enum":["application","compose"]},"filePath":{"type":"string","minLength":1,"description":"A path relative to the repository root, with no \"..\" segment and none of \", `, $, a backslash, NUL or a line break."},"content":{"type":"string"},"patchType":{"default":"update","type":"string","enum":["create","update"]}},"required":["id","type","filePath","content"]},"SaveLibsqlEnvironmentDto":{"type":"object","properties":{"env":{"type":"string","nullable":true}},"required":["env"]},"SaveLibsqlExternalPortsDto":{"type":"object","properties":{"externalPort":{"type":"integer","minimum":1,"maximum":65535,"nullable":true},"externalGRPCPort":{"type":"integer","minimum":1,"maximum":65535,"nullable":true},"externalAdminPort":{"type":"integer","minimum":1,"maximum":65535,"nullable":true}},"required":["externalPort","externalGRPCPort","externalAdminPort"]},"SaveLinksDto":{"type":"object","properties":{"links":{"maxItems":200,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[^\\s=]+$"},"source":{"type":"string","pattern":"^[a-z][a-z0-9-]{0,62}$"},"output":{"type":"string","pattern":"^[a-z][a-z_]*$"}},"required":["name","source","output"],"additionalProperties":false}}},"required":["links"]},"SaveMariadbEnvironmentDto":{"type":"object","properties":{"env":{"type":"string","nullable":true}},"required":["env"]},"SaveMariadbExternalPortDto":{"type":"object","properties":{"externalPort":{"type":"integer","minimum":1,"maximum":65535,"nullable":true}},"required":["externalPort"]},"SaveMongoEnvironmentDto":{"type":"object","properties":{"env":{"type":"string","nullable":true}},"required":["env"]},"SaveMongoExternalPortDto":{"type":"object","properties":{"externalPort":{"type":"integer","minimum":1,"maximum":65535,"nullable":true}},"required":["externalPort"]},"SaveMysqlCloudSqlSettingsDto":{"type":"object","properties":{"backupRetentionDays":{"type":"integer","minimum":1,"maximum":365}},"required":["backupRetentionDays"],"additionalProperties":false},"SaveMysqlEnvironmentDto":{"type":"object","properties":{"env":{"type":"string","nullable":true}},"required":["env"]},"SaveMysqlExternalPortDto":{"type":"object","properties":{"externalPort":{"type":"integer","minimum":1,"maximum":65535,"nullable":true}},"required":["externalPort"]},"SaveMysqlRdsSettingsDto":{"type":"object","properties":{"instanceClass":{"type":"string","minLength":1},"storageGb":{"type":"integer","minimum":20,"maximum":65536},"maxStorageGb":{"type":"integer","minimum":20,"maximum":65536},"multiAz":{"type":"boolean"},"backupRetentionDays":{"type":"integer","minimum":1,"maximum":35}},"additionalProperties":false},"SavePostgresCloudSqlSettingsDto":{"type":"object","properties":{"backupRetentionDays":{"type":"integer","minimum":1,"maximum":365}},"required":["backupRetentionDays"],"additionalProperties":false},"SavePostgresEnvironmentDto":{"type":"object","properties":{"env":{"type":"string","nullable":true}},"required":["env"]},"SavePostgresExternalPortDto":{"type":"object","properties":{"externalPort":{"type":"integer","minimum":1,"maximum":65535,"nullable":true}},"required":["externalPort"]},"SavePostgresRdsSettingsDto":{"type":"object","properties":{"instanceClass":{"type":"string","minLength":1},"storageGb":{"type":"integer","minimum":20,"maximum":65536},"maxStorageGb":{"type":"integer","minimum":20,"maximum":65536},"multiAz":{"type":"boolean"},"backupRetentionDays":{"type":"integer","minimum":1,"maximum":35}},"additionalProperties":false},"SaveRedisElastiCacheSettingsDto":{"type":"object","properties":{"nodeType":{"type":"string","minLength":1},"replica":{"type":"boolean"},"snapshotRetentionDays":{"type":"integer","minimum":0,"maximum":35}},"additionalProperties":false},"SaveRedisEnvironmentDto":{"type":"object","properties":{"env":{"type":"string","nullable":true}},"required":["env"]},"SaveRedisExternalPortDto":{"type":"object","properties":{"externalPort":{"type":"integer","minimum":1,"maximum":65535,"nullable":true}},"required":["externalPort"]},"SaveRedisMemorystoreSettingsDto":{"type":"object","properties":{"highAvailability":{"type":"boolean"},"backupRetentionDays":{"type":"integer","minimum":0,"maximum":365}},"additionalProperties":false},"ServerIdBodyDto":{"type":"object","properties":{"serverId":{"type":"string","nullable":true}}},"ServerIdQueryDto":{"type":"object","properties":{"serverId":{"type":"string","nullable":true}}},"SetForwardAuthSettingsDto":{"type":"object","properties":{"serverId":{"type":"string","minLength":1,"default":null,"nullable":true},"authDomain":{"type":"string"},"https":{"default":true,"type":"boolean"},"certificateType":{"default":"letsencrypt","type":"string","enum":["none","letsencrypt","custom"]},"customCertResolver":{"type":"string"}},"required":["authDomain"]},"SetupCloudAccountDto":{"oneOf":[{"type":"object","properties":{"cloud":{"default":"aws","type":"string","enum":["aws"]},"cloudId":{"type":"string","pattern":"^\\d{12}$"},"setupToken":{"type":"string","minLength":1}},"required":["cloudId"]},{"type":"object","properties":{"cloud":{"type":"string","enum":["gcp"]},"cloudId":{"type":"string","pattern":"^[a-z][a-z0-9-]{4,28}[a-z0-9]$"},"setupToken":{"type":"string","minLength":1}},"required":["cloud","cloudId"]}]},"SetupMonitoringBodyDto":{"type":"object","properties":{"metricsConfig":{"type":"object","properties":{"server":{"type":"object","properties":{"refreshRate":{"type":"number","minimum":2},"port":{"type":"number","minimum":1},"token":{"type":"string"},"urlCallback":{"type":"string","format":"uri"},"retentionDays":{"type":"number","minimum":1},"cronJob":{"type":"string","minLength":1},"thresholds":{"type":"object","properties":{"cpu":{"type":"number","minimum":0},"memory":{"type":"number","minimum":0}},"required":["cpu","memory"]}},"required":["refreshRate","port","urlCallback","retentionDays","cronJob","thresholds"]},"containers":{"type":"object","properties":{"refreshRate":{"type":"number","minimum":2},"services":{"type":"object","properties":{"include":{"type":"array","items":{"type":"string"}},"exclude":{"type":"array","items":{"type":"string"}}}}},"required":["refreshRate","services"]}},"required":["server","containers"]}},"required":["metricsConfig"]},"SizeDto":{"type":"object","properties":{"serverType":{"type":"string","minLength":1}},"required":["serverType"]},"StartGithubManifestDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"appName":{"type":"string","minLength":1},"organizationName":{"type":"string","minLength":1}},"required":["name"]},"StorageDto":{"type":"object","properties":{"sizeGb":{"type":"integer","minimum":10,"maximum":10240}},"required":["sizeGb"]},"SuggestAiDto":{"type":"object","properties":{"aiId":{"type":"string"},"input":{"type":"string"},"serverId":{"type":"string","nullable":true}},"required":["aiId","input"]},"SwitchToExistingMysqlDto":{"type":"object","properties":{"identifier":{"type":"string"},"databaseUser":{"type":"string","minLength":1,"maxLength":63},"databasePassword":{"type":"string","minLength":1,"maxLength":128},"databaseName":{"type":"string","minLength":1,"maxLength":63},"madeReachable":{"default":false,"type":"boolean"}},"required":["identifier","databaseUser","databasePassword","databaseName"],"additionalProperties":false},"SwitchToExistingPostgresDto":{"type":"object","properties":{"identifier":{"type":"string"},"databaseUser":{"type":"string","minLength":1,"maxLength":63},"databasePassword":{"type":"string","minLength":1,"maxLength":128},"databaseName":{"type":"string","minLength":1,"maxLength":63},"madeReachable":{"default":false,"type":"boolean"}},"required":["identifier","databaseUser","databasePassword","databaseName"],"additionalProperties":false},"SwitchToExistingRedisDto":{"type":"object","properties":{"identifier":{"type":"string"},"authToken":{"default":"","anyOf":[{"type":"string","pattern":"^[!#-.0-?A-~]{16,128}$"},{"type":"string","const":""}]},"tls":{"default":true,"type":"boolean"},"madeReachable":{"default":false,"type":"boolean"}},"required":["identifier"],"additionalProperties":false},"TemplateSetupDto":{"type":"object","properties":{"projectId":{"type":"string","minLength":1},"templateId":{"type":"string","minLength":1},"environmentId":{"type":"string","minLength":1},"newProject":{"type":"object","properties":{"name":{"type":"string","minLength":1},"deployTarget":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["server"]},"serverId":{"type":"string","minLength":1}},"required":["kind","serverId"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["platform-host"]}},"required":["kind"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["cloud"]},"cloudAccountId":{"type":"string","minLength":1},"region":{"type":"string","minLength":1}},"required":["kind","cloudAccountId","region"],"additionalProperties":false}]}},"required":["name"],"additionalProperties":false},"setupName":{"type":"string","minLength":1},"values":{"default":{},"type":"object","additionalProperties":{"type":"string"}},"hosts":{"default":{},"type":"object","additionalProperties":{"type":"string"}},"autoApply":{"type":"boolean"}},"required":["templateId","setupName"]},"TestApplicationRegistryLoginDto":{"type":"object","properties":{"registryUrl":{"type":"string","nullable":true},"username":{"type":"string","minLength":1},"password":{"type":"string","nullable":true}},"required":["username"]},"TestCustomDto":{"type":"object","properties":{"endpoint":{"type":"string","minLength":1},"headers":{"type":"object","additionalProperties":{"type":"string"}}},"required":["endpoint"]},"TestDiscordDto":{"type":"object","properties":{"webhookUrl":{"type":"string","minLength":1},"decoration":{"type":"boolean"}},"required":["webhookUrl"]},"TestEmailDto":{"type":"object","properties":{"smtpServer":{"type":"string","minLength":1},"smtpPort":{"type":"number","minimum":1},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1},"fromAddress":{"type":"string","minLength":1},"toAddresses":{"minItems":1,"type":"array","items":{"type":"string"}}},"required":["smtpServer","smtpPort","username","password","fromAddress","toAddresses"]},"TestGotifyDto":{"type":"object","properties":{"serverUrl":{"type":"string","minLength":1},"appToken":{"type":"string","minLength":1},"priority":{"default":5,"type":"number","minimum":1},"decoration":{"type":"boolean"}},"required":["serverUrl","appToken"]},"TestLarkDto":{"type":"object","properties":{"webhookUrl":{"type":"string","minLength":1}},"required":["webhookUrl"]},"TestMattermostDto":{"type":"object","properties":{"webhookUrl":{"type":"string","format":"uri"},"channel":{"type":"string"},"username":{"type":"string"}},"required":["webhookUrl"]},"TestNtfyDto":{"type":"object","properties":{"serverUrl":{"type":"string","minLength":1},"topic":{"type":"string","minLength":1},"accessToken":{"type":"string"},"priority":{"default":3,"type":"number","minimum":1}},"required":["serverUrl","topic"]},"TestPushoverDto":{"type":"object","properties":{"userKey":{"type":"string","minLength":1},"apiToken":{"type":"string","minLength":1},"priority":{"default":0,"type":"number","minimum":-2,"maximum":2},"retry":{"type":"number","minimum":30,"nullable":true},"expire":{"type":"number","minimum":1,"maximum":10800,"nullable":true}},"required":["userKey","apiToken"]},"TestRegistryConnectionDto":{"type":"object","properties":{"url":{"default":"","type":"string"},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1},"serverId":{"type":"string","nullable":true}},"required":["username","password"]},"TestResendDto":{"type":"object","properties":{"apiKey":{"type":"string","minLength":1},"fromAddress":{"type":"string","minLength":1},"toAddresses":{"minItems":1,"type":"array","items":{"type":"string"}}},"required":["apiKey","fromAddress","toAddresses"]},"TestSavedConnectionDto":{"type":"object","properties":{"serverId":{"type":"string","nullable":true}}},"TestSavedRegistryConnectionDto":{"type":"object","properties":{"serverId":{"type":"string","nullable":true}}},"TestSlackDto":{"type":"object","properties":{"webhookUrl":{"type":"string","minLength":1},"channel":{"type":"string"}},"required":["webhookUrl"]},"TestTeamsDto":{"type":"object","properties":{"webhookUrl":{"type":"string","minLength":1}},"required":["webhookUrl"]},"TestTelegramDto":{"type":"object","properties":{"botToken":{"type":"string","minLength":1},"chatId":{"type":"string","minLength":1},"messageThreadId":{"type":"string"}},"required":["botToken","chatId"]},"ToggleDashboardDto":{"type":"object","properties":{"enableDashboard":{"type":"boolean"},"serverId":{"type":"string","nullable":true}}},"TogglePatchDto":{"type":"object","properties":{"enabled":{"type":"boolean"}},"required":["enabled"]},"ToggleRequestsDto":{"type":"object","properties":{"enable":{"type":"boolean"},"serverId":{"type":"string","nullable":true}},"required":["enable"]},"TraefikConfigDto":{"type":"object","properties":{"traefikConfig":{"type":"string","minLength":1}},"required":["traefikConfig"]},"TriggerDeploymentDto":{"type":"object","properties":{"title":{"type":"string","minLength":1},"description":{"type":"string"}},"default":{}},"TrustedOriginDto":{"type":"object","properties":{"origin":{"type":"string","minLength":1}},"required":["origin"]},"TwoFactorPasswordDto":{"type":"object","properties":{"password":{"type":"string","minLength":1}},"required":["password"]},"UpdateAiDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"apiUrl":{"type":"string","format":"uri"},"apiKey":{"type":"string"},"model":{"type":"string","minLength":1},"isEnabled":{"type":"boolean"}}},"UpdateApplicationDto":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"description":{"type":"string","nullable":true},"env":{"type":"string","nullable":true},"buildArgs":{"type":"string","nullable":true},"buildSecrets":{"type":"string","nullable":true},"watchPaths":{"type":"array","items":{"type":"string"},"nullable":true},"memoryReservation":{"type":"string","nullable":true},"memoryLimit":{"type":"string","nullable":true},"cpuReservation":{"type":"string","nullable":true},"cpuLimit":{"type":"string","nullable":true},"command":{"type":"string","nullable":true},"args":{"type":"array","items":{"type":"string"},"nullable":true},"port":{"type":"integer","minimum":1,"maximum":65535},"sourceType":{"type":"string","enum":["docker","git","github","gitlab","bitbucket","gitea","drop"]},"cleanCache":{"type":"boolean","nullable":true},"repository":{"type":"string","nullable":true},"owner":{"type":"string","nullable":true},"branch":{"type":"string","nullable":true},"buildPath":{"type":"string","nullable":true},"triggerType":{"type":"string","enum":["push","tag",null],"nullable":true},"autoDeploy":{"type":"boolean","nullable":true},"githubId":{"type":"string","nullable":true},"gitlabProjectId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"nullable":true},"gitlabRepository":{"type":"string","nullable":true},"gitlabOwner":{"type":"string","nullable":true},"gitlabBranch":{"type":"string","nullable":true},"gitlabBuildPath":{"type":"string","nullable":true},"gitlabPathNamespace":{"type":"string","nullable":true},"gitlabId":{"type":"string","nullable":true},"giteaRepository":{"type":"string","nullable":true},"giteaOwner":{"type":"string","nullable":true},"giteaBranch":{"type":"string","nullable":true},"giteaBuildPath":{"type":"string","nullable":true},"giteaId":{"type":"string","nullable":true},"bitbucketRepository":{"type":"string","nullable":true},"bitbucketRepositorySlug":{"type":"string","nullable":true},"bitbucketOwner":{"type":"string","nullable":true},"bitbucketBranch":{"type":"string","nullable":true},"bitbucketBuildPath":{"type":"string","nullable":true},"bitbucketId":{"type":"string","nullable":true},"username":{"type":"string","nullable":true},"password":{"type":"string","nullable":true},"dockerImage":{"type":"string","pattern":"^(?:(?:(?:(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])(?:\\.(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]))*|\\[(?:[a-fA-F0-9:]+)\\])(?::[0-9]+)?\\/)?[a-z0-9]+(?:(?:[._]|__|[-]+)[a-z0-9]+)*(?:\\/[a-z0-9]+(?:(?:[._]|__|[-]+)[a-z0-9]+)*)*(?::[\\w][\\w.-]{0,127})?(?:@[A-Za-z][A-Za-z0-9]*(?:[-_+.][A-Za-z][A-Za-z0-9]*)*:[0-9a-fA-F]{32,})?)?$","nullable":true},"registryUrl":{"type":"string","nullable":true},"customGitUrl":{"anyOf":[{"type":"string","pattern":"^(?:(?:https?|ssh|git):\\/\\/(?:[^\\s/?#@\\\\-][^\\s/?#@\\\\]*@)?(?:[A-Za-z0-9][A-Za-z0-9.-]*|\\[[0-9A-Fa-f:.]+\\])(?::\\d{1,5})?\\/[^\\s\\\\]+|[A-Za-z0-9._][A-Za-z0-9._-]*@[A-Za-z0-9.][A-Za-z0-9.-]*:[^\\s\\\\]+)$"},{"type":"string","enum":[""]}],"nullable":true},"customGitBranch":{"type":"string","nullable":true},"customGitBuildPath":{"type":"string","nullable":true},"customGitSSHKeyId":{"type":"string","nullable":true},"enableSubmodules":{"type":"boolean"},"dockerfile":{"type":"string","nullable":true},"dockerContextPath":{"type":"string","nullable":true},"dockerBuildStage":{"type":"string","nullable":true},"dropBuildPath":{"type":"string","nullable":true},"healthCheckSwarm":{"type":"object","properties":{"Test":{"type":"array","items":{"type":"string"}},"Interval":{"type":"number"},"Timeout":{"type":"number"},"StartPeriod":{"type":"number"},"Retries":{"type":"number"}},"additionalProperties":false,"nullable":true},"restartPolicySwarm":{"type":"object","properties":{"Condition":{"type":"string"},"Delay":{"type":"number"},"MaxAttempts":{"type":"number"},"Window":{"type":"number"}},"additionalProperties":false,"nullable":true},"placementSwarm":{"type":"object","properties":{"Constraints":{"type":"array","items":{"type":"string"}},"Preferences":{"type":"array","items":{"type":"object","properties":{"Spread":{"type":"object","properties":{"SpreadDescriptor":{"type":"string"}},"required":["SpreadDescriptor"]}},"required":["Spread"],"additionalProperties":false}},"MaxReplicas":{"type":"number"},"Platforms":{"type":"array","items":{"type":"object","properties":{"Architecture":{"type":"string"},"OS":{"type":"string"}},"required":["Architecture","OS"],"additionalProperties":false}}},"additionalProperties":false,"nullable":true},"updateConfigSwarm":{"type":"object","properties":{"Parallelism":{"type":"number"},"Delay":{"type":"number"},"FailureAction":{"type":"string"},"Monitor":{"type":"number"},"MaxFailureRatio":{"type":"number"},"Order":{"type":"string"}},"required":["Parallelism","Order"],"additionalProperties":false,"nullable":true},"rollbackConfigSwarm":{"type":"object","properties":{"Parallelism":{"type":"number"},"Delay":{"type":"number"},"FailureAction":{"type":"string"},"Monitor":{"type":"number"},"MaxFailureRatio":{"type":"number"},"Order":{"type":"string"}},"required":["Parallelism","Order"],"additionalProperties":false,"nullable":true},"modeSwarm":{"type":"object","properties":{"Replicated":{"type":"object","properties":{"Replicas":{"type":"number"}},"additionalProperties":false},"Global":{"type":"object","properties":{},"additionalProperties":false},"ReplicatedJob":{"type":"object","properties":{"MaxConcurrent":{"type":"number"},"TotalCompletions":{"type":"number"}},"additionalProperties":false},"GlobalJob":{"type":"object","properties":{},"additionalProperties":false}},"additionalProperties":false,"nullable":true},"labelsSwarm":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"nullable":true},"networkSwarm":{"type":"array","items":{"type":"object","properties":{"Target":{"type":"string"},"Aliases":{"type":"array","items":{"type":"string"}},"DriverOpts":{"type":"object","additionalProperties":{"type":"string"}}},"additionalProperties":false},"nullable":true},"stopGracePeriodSwarm":{"type":"number","nullable":true},"endpointSpecSwarm":{"type":"object","properties":{"Mode":{"type":"string"},"Ports":{"type":"array","items":{"type":"object","properties":{"Protocol":{"type":"string"},"TargetPort":{"type":"number"},"PublishedPort":{"type":"number"},"PublishMode":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false,"nullable":true},"ulimitsSwarm":{"type":"array","items":{"type":"object","properties":{"Name":{"type":"string"},"Soft":{"type":"number"},"Hard":{"type":"number"}},"required":["Name","Soft","Hard"],"additionalProperties":false},"nullable":true},"rollbackActive":{"type":"boolean"},"isPreviewDeploymentsActive":{"type":"boolean"},"requestedPreviewsAllowed":{"type":"boolean"},"previewWildcard":{"type":"string","pattern":"^\\*\\..*","nullable":true},"previewDnsChallenge":{"type":"boolean"},"previewLimit":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestedPreviewLimit":{"type":"integer","minimum":1,"maximum":9007199254740991},"previewPort":{"type":"integer","minimum":1,"maximum":65535},"previewEnv":{"type":"string","nullable":true},"previewBuildArgs":{"type":"string","nullable":true},"replicas":{"type":"integer","minimum":0,"maximum":9007199254740991},"gpus":{"type":"integer","minimum":0,"maximum":9007199254740991},"aiModel":{"type":"object","properties":{"runtime":{"type":"string","enum":["ollama","vllm","llama.cpp"]},"model":{"type":"string","maxLength":255,"pattern":"^[A-Za-z0-9][A-Za-z0-9._-]*(\\/[A-Za-z0-9._-]+)*(:[A-Za-z0-9._-]+)?$"},"imageTag":{"type":"string","pattern":"^[A-Za-z0-9_][A-Za-z0-9_.-]{0,127}$","nullable":true},"hfToken":{"anyOf":[{"type":"string","minLength":1,"maxLength":512,"pattern":"^\\S+$"},{"type":"string","enum":[""]}],"nullable":true}},"additionalProperties":false,"nullable":true},"buildType":{"type":"string","enum":["dockerfile","heroku_buildpacks","paketo_buildpacks","nixpacks","static","railpack"]},"railpackVersion":{"type":"string","nullable":true},"herokuVersion":{"type":"string","nullable":true},"publishDirectory":{"type":"string","nullable":true},"isStaticSpa":{"type":"boolean","nullable":true},"createEnvFile":{"type":"boolean"},"registryId":{"type":"string","nullable":true},"buildRegistryId":{"type":"string","nullable":true},"buildServerId":{"type":"string","nullable":true}}},"UpdateBackupDto":{"type":"object","properties":{"schedule":{"type":"string","minLength":1},"enabled":{"type":"boolean"},"prefix":{"type":"string","minLength":1},"database":{"type":"string","minLength":1,"pattern":"^[a-zA-Z0-9_][a-zA-Z0-9_$.-]*$"},"keepLatestCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"nullable":true},"destinationId":{"type":"string","minLength":1},"databaseType":{"type":"string","enum":["postgres","mysql","mariadb","mongo","libsql"]},"serviceName":{"type":"string","minLength":1,"pattern":"^[a-zA-Z0-9._-]+$","nullable":true},"metadata":{"type":"object","properties":{"postgres":{"type":"object","properties":{"databaseUser":{"type":"string","minLength":1}},"required":["databaseUser"]},"mariadb":{"type":"object","properties":{"databaseUser":{"type":"string","minLength":1},"databasePassword":{"type":"string"}},"required":["databaseUser","databasePassword"]},"mongo":{"type":"object","properties":{"databaseUser":{"type":"string","minLength":1},"databasePassword":{"type":"string"}},"required":["databaseUser","databasePassword"]},"mysql":{"type":"object","properties":{"databaseRootPassword":{"type":"string"}},"required":["databaseRootPassword"]}},"nullable":true}}},"UpdateBitbucketDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"bitbucketUsername":{"type":"string"},"bitbucketEmail":{"type":"string"},"appPassword":{"type":"string"},"apiToken":{"type":"string"},"bitbucketWorkspaceName":{"type":"string"}}},"UpdateBuildsConcurrencyDto":{"type":"object","properties":{"buildsConcurrency":{"type":"integer","minimum":1,"maximum":100}},"required":["buildsConcurrency"]},"UpdateCertificateDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"certificateData":{"type":"string","minLength":1},"privateKey":{"type":"string","minLength":1}}},"UpdateCloudAccountDto":{"oneOf":[{"type":"object","properties":{"cloud":{"default":"aws","type":"string","enum":["aws"]},"name":{"type":"string","minLength":1,"maxLength":100},"accessKeyId":{"type":"string","pattern":"^[A-Z0-9]{16,128}$"},"secretAccessKey":{"type":"string","minLength":1},"deployRoleArn":{"type":"string","pattern":"^arn:aws[a-z-]*:iam::(\\d{12}):role\\/[\\w+=,.@/-]{1,512}$"},"taskExecutionRoleArn":{"type":"string","pattern":"^arn:aws[a-z-]*:iam::(\\d{12}):role\\/[\\w+=,.@/-]{1,512}$"}},"additionalProperties":false},{"type":"object","properties":{"cloud":{"type":"string","enum":["gcp"]},"name":{"type":"string","minLength":1,"maxLength":100},"workloadIdentityProvider":{"type":"string","pattern":"^(?:\\/\\/iam\\.googleapis\\.com\\/)?(projects\\/\\d+\\/locations\\/global\\/workloadIdentityPools\\/[a-z0-9-]{4,32}\\/providers\\/[a-z0-9-]{4,32})$"},"deployServiceAccount":{"type":"string","pattern":"^[a-z][a-z0-9-]{4,28}[a-z0-9]@[a-z0-9.:-]+\\.iam\\.gserviceaccount\\.com$"}},"required":["cloud"],"additionalProperties":false}]},"UpdateCloudRunTimeLimitDto":{"type":"object","properties":{"cloudRunTimeLimitMinutes":{"type":"integer","minimum":5,"maximum":1440}},"required":["cloudRunTimeLimitMinutes"]},"UpdateCloudRunsConcurrencyDto":{"type":"object","properties":{"cloudRunsConcurrency":{"type":"integer","minimum":1,"maximum":20}},"required":["cloudRunsConcurrency"]},"UpdateComposeDto":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"description":{"type":"string","nullable":true},"env":{"type":"string","nullable":true},"composeFile":{"type":"string"},"composePath":{"type":"string","minLength":1},"composeType":{"type":"string","enum":["docker-compose","stack"]},"command":{"type":"string"},"isolatedDeployment":{"type":"boolean"},"sourceType":{"type":"string","enum":["git","github","gitlab","bitbucket","gitea","raw"]},"triggerType":{"type":"string","enum":["push","tag",null],"nullable":true},"autoDeploy":{"type":"boolean","nullable":true},"watchPaths":{"type":"array","items":{"type":"string"},"nullable":true},"enableSubmodules":{"type":"boolean"},"repository":{"type":"string","nullable":true},"owner":{"type":"string","nullable":true},"branch":{"type":"string","nullable":true},"githubId":{"type":"string","nullable":true},"gitlabProjectId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"nullable":true},"gitlabRepository":{"type":"string","nullable":true},"gitlabOwner":{"type":"string","nullable":true},"gitlabBranch":{"type":"string","nullable":true},"gitlabPathNamespace":{"type":"string","nullable":true},"gitlabId":{"type":"string","nullable":true},"giteaRepository":{"type":"string","nullable":true},"giteaOwner":{"type":"string","nullable":true},"giteaBranch":{"type":"string","nullable":true},"giteaId":{"type":"string","nullable":true},"bitbucketRepository":{"type":"string","nullable":true},"bitbucketRepositorySlug":{"type":"string","nullable":true},"bitbucketOwner":{"type":"string","nullable":true},"bitbucketBranch":{"type":"string","nullable":true},"bitbucketId":{"type":"string","nullable":true},"customGitUrl":{"anyOf":[{"type":"string","pattern":"^(?:(?:https?|ssh|git):\\/\\/(?:[^\\s/?#@\\\\-][^\\s/?#@\\\\]*@)?(?:[A-Za-z0-9][A-Za-z0-9.-]*|\\[[0-9A-Fa-f:.]+\\])(?::\\d{1,5})?\\/[^\\s\\\\]+|[A-Za-z0-9._][A-Za-z0-9._-]*@[A-Za-z0-9.][A-Za-z0-9.-]*:[^\\s\\\\]+)$"},{"type":"string","enum":[""]}],"nullable":true},"customGitBranch":{"type":"string","nullable":true},"customGitSSHKeyId":{"type":"string","nullable":true}}},"UpdateCustomDto":{"type":"object","properties":{"appDeploy":{"default":false,"type":"boolean"},"appBuildError":{"default":false,"type":"boolean"},"databaseBackup":{"default":false,"type":"boolean"},"volumeBackup":{"default":false,"type":"boolean"},"instanceBackup":{"default":false,"type":"boolean"},"instanceRestart":{"default":false,"type":"boolean"},"dockerCleanup":{"default":false,"type":"boolean"},"serverThreshold":{"default":false,"type":"boolean"},"licenseLapse":{"default":false,"type":"boolean"},"licenseExpiring":{"default":false,"type":"boolean"},"agentRateLimited":{"default":false,"type":"boolean"},"previewTeardownStuck":{"default":false,"type":"boolean"},"serviceIncident":{"default":false,"type":"boolean"},"aiModelNotAnswering":{"default":false,"type":"boolean"},"name":{"type":"string","minLength":1},"endpoint":{"type":"string","minLength":1},"headers":{"type":"object","additionalProperties":{"type":"string"}}}},"UpdateCustomRoleDto":{"type":"object","properties":{"newRoleName":{"type":"string","minLength":1,"maxLength":50},"permissions":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}},"required":["permissions"]},"UpdateDestinationDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"provider":{"type":"string","nullable":true},"accessKey":{"type":"string","minLength":1},"secretAccessKey":{"type":"string","minLength":1},"bucket":{"type":"string","minLength":1},"region":{"type":"string"},"endpoint":{"type":"string"}}},"UpdateDiscordDto":{"type":"object","properties":{"appDeploy":{"default":false,"type":"boolean"},"appBuildError":{"default":false,"type":"boolean"},"databaseBackup":{"default":false,"type":"boolean"},"volumeBackup":{"default":false,"type":"boolean"},"instanceBackup":{"default":false,"type":"boolean"},"instanceRestart":{"default":false,"type":"boolean"},"dockerCleanup":{"default":false,"type":"boolean"},"serverThreshold":{"default":false,"type":"boolean"},"licenseLapse":{"default":false,"type":"boolean"},"licenseExpiring":{"default":false,"type":"boolean"},"agentRateLimited":{"default":false,"type":"boolean"},"previewTeardownStuck":{"default":false,"type":"boolean"},"serviceIncident":{"default":false,"type":"boolean"},"aiModelNotAnswering":{"default":false,"type":"boolean"},"name":{"type":"string","minLength":1},"webhookUrl":{"type":"string","minLength":1},"decoration":{"type":"boolean"}}},"UpdateDockerCleanupDto":{"type":"object","properties":{"enableDockerCleanup":{"type":"boolean"},"serverId":{"type":"string","nullable":true}},"required":["enableDockerCleanup"]},"UpdateDomainDto":{"type":"object","properties":{"host":{"type":"string","minLength":1},"path":{"type":"string","minLength":1,"maxLength":255},"internalPath":{"type":"string","minLength":1,"maxLength":255},"stripPath":{"type":"boolean"},"port":{"type":"integer","minimum":1,"maximum":65535},"https":{"type":"boolean"},"certificateType":{"type":"string","enum":["letsencrypt","none","custom","stored"]},"customCertResolver":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","nullable":true},"customEntrypoint":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","nullable":true},"middlewares":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}(@[a-z]+)?$"}},"forwardAuthEnabled":{"type":"boolean"},"serviceName":{"type":"string"},"domainType":{"type":"string","enum":["application","compose"]}}},"UpdateEmailDto":{"type":"object","properties":{"appDeploy":{"default":false,"type":"boolean"},"appBuildError":{"default":false,"type":"boolean"},"databaseBackup":{"default":false,"type":"boolean"},"volumeBackup":{"default":false,"type":"boolean"},"instanceBackup":{"default":false,"type":"boolean"},"instanceRestart":{"default":false,"type":"boolean"},"dockerCleanup":{"default":false,"type":"boolean"},"serverThreshold":{"default":false,"type":"boolean"},"licenseLapse":{"default":false,"type":"boolean"},"licenseExpiring":{"default":false,"type":"boolean"},"agentRateLimited":{"default":false,"type":"boolean"},"previewTeardownStuck":{"default":false,"type":"boolean"},"serviceIncident":{"default":false,"type":"boolean"},"aiModelNotAnswering":{"default":false,"type":"boolean"},"name":{"type":"string","minLength":1},"smtpServer":{"type":"string","minLength":1},"smtpPort":{"type":"number","minimum":1},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1},"fromAddress":{"type":"string","minLength":1},"toAddresses":{"minItems":1,"type":"array","items":{"type":"string"}}}},"UpdateEnterpriseSettingsDto":{"type":"object","properties":{"enableEnterpriseFeatures":{"type":"boolean"}},"required":["enableEnterpriseFeatures"]},"UpdateEnvironmentDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"description":{"type":"string"},"env":{"type":"string"},"deployTarget":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["server"]},"serverId":{"type":"string","minLength":1}},"required":["kind","serverId"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["platform-host"]}},"required":["kind"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["cloud"]},"cloudAccountId":{"type":"string","minLength":1},"region":{"type":"string","minLength":1}},"required":["kind","cloudAccountId","region"],"additionalProperties":false}]},"configBranch":{"type":"string","maxLength":255,"pattern":"^$|^(?!-)(?!.*\\.\\.)(?!.*\\/\\/)[^\\s~^:?*[\\\\]+(?<![./])$","nullable":true}}},"UpdateExistingMysqlDto":{"type":"object","properties":{"identifier":{"type":"string"},"databaseUser":{"type":"string","minLength":1,"maxLength":63},"databasePassword":{"type":"string","minLength":1,"maxLength":128},"databaseName":{"type":"string","minLength":1,"maxLength":63},"madeReachable":{"type":"boolean"}},"additionalProperties":false},"UpdateExistingPostgresDto":{"type":"object","properties":{"identifier":{"type":"string"},"databaseUser":{"type":"string","minLength":1,"maxLength":63},"databasePassword":{"type":"string","minLength":1,"maxLength":128},"databaseName":{"type":"string","minLength":1,"maxLength":63},"madeReachable":{"type":"boolean"}},"additionalProperties":false},"UpdateExistingRedisDto":{"type":"object","properties":{"identifier":{"type":"string"},"authToken":{"anyOf":[{"type":"string","pattern":"^[!#-.0-?A-~]{16,128}$"},{"type":"string","const":""}]},"tls":{"type":"boolean"},"madeReachable":{"type":"boolean"}},"additionalProperties":false},"UpdateGitProviderDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"providerType":{"default":"github","type":"string","enum":["github","gitlab","bitbucket","gitea"]}}},"UpdateGiteaDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"giteaUrl":{"type":"string","minLength":1},"giteaInternalUrl":{"type":"string","nullable":true},"redirectUri":{"type":"string"},"clientId":{"type":"string"},"clientSecret":{"type":"string"},"accessToken":{"type":"string"},"refreshToken":{"type":"string"},"expiresAt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"scopes":{"type":"string"},"lastAuthenticatedAt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}}},"UpdateGithubDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"appName":{"type":"string"},"appId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"clientId":{"type":"string"},"clientSecret":{"type":"string"},"installationId":{"type":"string"},"privateKey":{"type":"string"},"webhookSecret":{"type":"string"}}},"UpdateGitlabDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"gitlabUrl":{"type":"string","minLength":1},"gitlabInternalUrl":{"type":"string","nullable":true},"applicationId":{"type":"string"},"redirectUri":{"type":"string"},"secret":{"type":"string"},"accessToken":{"type":"string"},"refreshToken":{"type":"string"},"groupName":{"type":"string"},"expiresAt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}}},"UpdateGotifyDto":{"type":"object","properties":{"appDeploy":{"default":false,"type":"boolean"},"appBuildError":{"default":false,"type":"boolean"},"databaseBackup":{"default":false,"type":"boolean"},"volumeBackup":{"default":false,"type":"boolean"},"instanceBackup":{"default":false,"type":"boolean"},"instanceRestart":{"default":false,"type":"boolean"},"dockerCleanup":{"default":false,"type":"boolean"},"serverThreshold":{"default":false,"type":"boolean"},"licenseLapse":{"default":false,"type":"boolean"},"licenseExpiring":{"default":false,"type":"boolean"},"agentRateLimited":{"default":false,"type":"boolean"},"previewTeardownStuck":{"default":false,"type":"boolean"},"serviceIncident":{"default":false,"type":"boolean"},"aiModelNotAnswering":{"default":false,"type":"boolean"},"name":{"type":"string","minLength":1},"serverUrl":{"type":"string","minLength":1},"appToken":{"type":"string","minLength":1},"priority":{"default":5,"type":"number","minimum":1},"decoration":{"type":"boolean"}}},"UpdateInvoiceNotificationsDto":{"type":"object","properties":{"enabled":{"type":"boolean"}},"required":["enabled"]},"UpdateLarkDto":{"type":"object","properties":{"appDeploy":{"default":false,"type":"boolean"},"appBuildError":{"default":false,"type":"boolean"},"databaseBackup":{"default":false,"type":"boolean"},"volumeBackup":{"default":false,"type":"boolean"},"instanceBackup":{"default":false,"type":"boolean"},"instanceRestart":{"default":false,"type":"boolean"},"dockerCleanup":{"default":false,"type":"boolean"},"serverThreshold":{"default":false,"type":"boolean"},"licenseLapse":{"default":false,"type":"boolean"},"licenseExpiring":{"default":false,"type":"boolean"},"agentRateLimited":{"default":false,"type":"boolean"},"previewTeardownStuck":{"default":false,"type":"boolean"},"serviceIncident":{"default":false,"type":"boolean"},"aiModelNotAnswering":{"default":false,"type":"boolean"},"name":{"type":"string","minLength":1},"webhookUrl":{"type":"string","minLength":1}}},"UpdateLibsqlDto":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"description":{"type":"string","nullable":true},"databaseUser":{"type":"string","minLength":1},"databasePassword":{"type":"string","pattern":"^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$"},"sqldNode":{"type":"string","enum":["primary","replica"]},"sqldPrimaryUrl":{"type":"string","nullable":true},"enableNamespaces":{"type":"boolean"},"dockerImage":{"type":"string","pattern":"^(?:(?:(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])(?:\\.(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]))*|\\[(?:[a-fA-F0-9:]+)\\])(?::[0-9]+)?\\/)?[a-z0-9]+(?:(?:[._]|__|[-]+)[a-z0-9]+)*(?:\\/[a-z0-9]+(?:(?:[._]|__|[-]+)[a-z0-9]+)*)*(?::[\\w][\\w.-]{0,127})?(?:@[A-Za-z][A-Za-z0-9]*(?:[-_+.][A-Za-z][A-Za-z0-9]*)*:[0-9a-fA-F]{32,})?$"},"command":{"type":"string","nullable":true},"memoryReservation":{"type":"string","nullable":true},"memoryLimit":{"type":"string","nullable":true},"cpuReservation":{"type":"string","nullable":true},"cpuLimit":{"type":"string","nullable":true},"replicas":{"type":"integer","minimum":0,"maximum":9007199254740991},"healthCheckSwarm":{"type":"object","properties":{"Test":{"type":"array","items":{"type":"string"}},"Interval":{"type":"number"},"Timeout":{"type":"number"},"StartPeriod":{"type":"number"},"Retries":{"type":"number"}},"additionalProperties":false,"nullable":true},"restartPolicySwarm":{"type":"object","properties":{"Condition":{"type":"string"},"Delay":{"type":"number"},"MaxAttempts":{"type":"number"},"Window":{"type":"number"}},"additionalProperties":false,"nullable":true},"placementSwarm":{"type":"object","properties":{"Constraints":{"type":"array","items":{"type":"string"}},"Preferences":{"type":"array","items":{"type":"object","properties":{"Spread":{"type":"object","properties":{"SpreadDescriptor":{"type":"string"}},"required":["SpreadDescriptor"]}},"required":["Spread"],"additionalProperties":false}},"MaxReplicas":{"type":"number"},"Platforms":{"type":"array","items":{"type":"object","properties":{"Architecture":{"type":"string"},"OS":{"type":"string"}},"required":["Architecture","OS"],"additionalProperties":false}}},"additionalProperties":false,"nullable":true},"updateConfigSwarm":{"type":"object","properties":{"Parallelism":{"type":"number"},"Delay":{"type":"number"},"FailureAction":{"type":"string"},"Monitor":{"type":"number"},"MaxFailureRatio":{"type":"number"},"Order":{"type":"string"}},"required":["Parallelism","Order"],"additionalProperties":false,"nullable":true},"rollbackConfigSwarm":{"type":"object","properties":{"Parallelism":{"type":"number"},"Delay":{"type":"number"},"FailureAction":{"type":"string"},"Monitor":{"type":"number"},"MaxFailureRatio":{"type":"number"},"Order":{"type":"string"}},"required":["Parallelism","Order"],"additionalProperties":false,"nullable":true},"modeSwarm":{"type":"object","properties":{"Replicated":{"type":"object","properties":{"Replicas":{"type":"number"}},"additionalProperties":false},"Global":{"type":"object","properties":{},"additionalProperties":false},"ReplicatedJob":{"type":"object","properties":{"MaxConcurrent":{"type":"number"},"TotalCompletions":{"type":"number"}},"additionalProperties":false},"GlobalJob":{"type":"object","properties":{},"additionalProperties":false}},"additionalProperties":false,"nullable":true},"labelsSwarm":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"nullable":true},"networkSwarm":{"type":"array","items":{"type":"object","properties":{"Target":{"type":"string"},"Aliases":{"type":"array","items":{"type":"string"}},"DriverOpts":{"type":"object","additionalProperties":{"type":"string"}}},"additionalProperties":false},"nullable":true},"stopGracePeriodSwarm":{"type":"number","nullable":true},"endpointSpecSwarm":{"type":"object","properties":{"Mode":{"type":"string"},"Ports":{"type":"array","items":{"type":"object","properties":{"Protocol":{"type":"string"},"TargetPort":{"type":"number"},"PublishedPort":{"type":"number"},"PublishMode":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false,"nullable":true}}},"UpdateLogCleanupDto":{"type":"object","properties":{"cronExpression":{"type":"string","nullable":true}},"required":["cronExpression"]},"UpdateMariadbDto":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"description":{"type":"string","nullable":true},"databaseName":{"type":"string","minLength":1},"databaseUser":{"type":"string","minLength":1},"databasePassword":{"type":"string","pattern":"^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$"},"databaseRootPassword":{"type":"string","pattern":"^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$"},"dockerImage":{"type":"string","pattern":"^(?:(?:(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])(?:\\.(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]))*|\\[(?:[a-fA-F0-9:]+)\\])(?::[0-9]+)?\\/)?[a-z0-9]+(?:(?:[._]|__|[-]+)[a-z0-9]+)*(?:\\/[a-z0-9]+(?:(?:[._]|__|[-]+)[a-z0-9]+)*)*(?::[\\w][\\w.-]{0,127})?(?:@[A-Za-z][A-Za-z0-9]*(?:[-_+.][A-Za-z][A-Za-z0-9]*)*:[0-9a-fA-F]{32,})?$"},"command":{"type":"string","nullable":true},"args":{"type":"array","items":{"type":"string"},"nullable":true},"memoryReservation":{"type":"string","nullable":true},"memoryLimit":{"type":"string","nullable":true},"cpuReservation":{"type":"string","nullable":true},"cpuLimit":{"type":"string","nullable":true},"replicas":{"type":"integer","minimum":0,"maximum":9007199254740991},"healthCheckSwarm":{"type":"object","properties":{"Test":{"type":"array","items":{"type":"string"}},"Interval":{"type":"number"},"Timeout":{"type":"number"},"StartPeriod":{"type":"number"},"Retries":{"type":"number"}},"additionalProperties":false,"nullable":true},"restartPolicySwarm":{"type":"object","properties":{"Condition":{"type":"string"},"Delay":{"type":"number"},"MaxAttempts":{"type":"number"},"Window":{"type":"number"}},"additionalProperties":false,"nullable":true},"placementSwarm":{"type":"object","properties":{"Constraints":{"type":"array","items":{"type":"string"}},"Preferences":{"type":"array","items":{"type":"object","properties":{"Spread":{"type":"object","properties":{"SpreadDescriptor":{"type":"string"}},"required":["SpreadDescriptor"]}},"required":["Spread"],"additionalProperties":false}},"MaxReplicas":{"type":"number"},"Platforms":{"type":"array","items":{"type":"object","properties":{"Architecture":{"type":"string"},"OS":{"type":"string"}},"required":["Architecture","OS"],"additionalProperties":false}}},"additionalProperties":false,"nullable":true},"updateConfigSwarm":{"type":"object","properties":{"Parallelism":{"type":"number"},"Delay":{"type":"number"},"FailureAction":{"type":"string"},"Monitor":{"type":"number"},"MaxFailureRatio":{"type":"number"},"Order":{"type":"string"}},"required":["Parallelism","Order"],"additionalProperties":false,"nullable":true},"rollbackConfigSwarm":{"type":"object","properties":{"Parallelism":{"type":"number"},"Delay":{"type":"number"},"FailureAction":{"type":"string"},"Monitor":{"type":"number"},"MaxFailureRatio":{"type":"number"},"Order":{"type":"string"}},"required":["Parallelism","Order"],"additionalProperties":false,"nullable":true},"modeSwarm":{"type":"object","properties":{"Replicated":{"type":"object","properties":{"Replicas":{"type":"number"}},"additionalProperties":false},"Global":{"type":"object","properties":{},"additionalProperties":false},"ReplicatedJob":{"type":"object","properties":{"MaxConcurrent":{"type":"number"},"TotalCompletions":{"type":"number"}},"additionalProperties":false},"GlobalJob":{"type":"object","properties":{},"additionalProperties":false}},"additionalProperties":false,"nullable":true},"labelsSwarm":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"nullable":true},"networkSwarm":{"type":"array","items":{"type":"object","properties":{"Target":{"type":"string"},"Aliases":{"type":"array","items":{"type":"string"}},"DriverOpts":{"type":"object","additionalProperties":{"type":"string"}}},"additionalProperties":false},"nullable":true},"stopGracePeriodSwarm":{"type":"number","nullable":true},"endpointSpecSwarm":{"type":"object","properties":{"Mode":{"type":"string"},"Ports":{"type":"array","items":{"type":"object","properties":{"Protocol":{"type":"string"},"TargetPort":{"type":"number"},"PublishedPort":{"type":"number"},"PublishMode":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false,"nullable":true},"ulimitsSwarm":{"type":"array","items":{"type":"object","properties":{"Name":{"type":"string"},"Soft":{"type":"number"},"Hard":{"type":"number"}},"required":["Name","Soft","Hard"],"additionalProperties":false},"nullable":true}}},"UpdateMattermostDto":{"type":"object","properties":{"appDeploy":{"default":false,"type":"boolean"},"appBuildError":{"default":false,"type":"boolean"},"databaseBackup":{"default":false,"type":"boolean"},"volumeBackup":{"default":false,"type":"boolean"},"instanceBackup":{"default":false,"type":"boolean"},"instanceRestart":{"default":false,"type":"boolean"},"dockerCleanup":{"default":false,"type":"boolean"},"serverThreshold":{"default":false,"type":"boolean"},"licenseLapse":{"default":false,"type":"boolean"},"licenseExpiring":{"default":false,"type":"boolean"},"agentRateLimited":{"default":false,"type":"boolean"},"previewTeardownStuck":{"default":false,"type":"boolean"},"serviceIncident":{"default":false,"type":"boolean"},"aiModelNotAnswering":{"default":false,"type":"boolean"},"name":{"type":"string","minLength":1},"webhookUrl":{"type":"string","format":"uri"},"channel":{"type":"string"},"username":{"type":"string"}}},"UpdateMemberEntitlementsDto":{"type":"object","properties":{"accessedProjects":{"type":"array","items":{"type":"string","minLength":1}},"accessedEnvironments":{"type":"array","items":{"type":"string","minLength":1}},"accessedServices":{"type":"array","items":{"type":"string","minLength":1}}}},"UpdateMemberRoleDto":{"type":"object","properties":{"role":{"type":"string","minLength":1,"maxLength":50}},"required":["role"]},"UpdateMongoDto":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"description":{"type":"string","nullable":true},"databaseUser":{"type":"string","minLength":1},"databasePassword":{"type":"string","pattern":"^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$"},"dockerImage":{"type":"string","pattern":"^(?:(?:(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])(?:\\.(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]))*|\\[(?:[a-fA-F0-9:]+)\\])(?::[0-9]+)?\\/)?[a-z0-9]+(?:(?:[._]|__|[-]+)[a-z0-9]+)*(?:\\/[a-z0-9]+(?:(?:[._]|__|[-]+)[a-z0-9]+)*)*(?::[\\w][\\w.-]{0,127})?(?:@[A-Za-z][A-Za-z0-9]*(?:[-_+.][A-Za-z][A-Za-z0-9]*)*:[0-9a-fA-F]{32,})?$"},"command":{"type":"string","nullable":true},"args":{"type":"array","items":{"type":"string"},"nullable":true},"replicaSets":{"type":"boolean"},"memoryReservation":{"type":"string","nullable":true},"memoryLimit":{"type":"string","nullable":true},"cpuReservation":{"type":"string","nullable":true},"cpuLimit":{"type":"string","nullable":true},"replicas":{"type":"integer","minimum":0,"maximum":9007199254740991},"healthCheckSwarm":{"type":"object","properties":{"Test":{"type":"array","items":{"type":"string"}},"Interval":{"type":"number"},"Timeout":{"type":"number"},"StartPeriod":{"type":"number"},"Retries":{"type":"number"}},"additionalProperties":false,"nullable":true},"restartPolicySwarm":{"type":"object","properties":{"Condition":{"type":"string"},"Delay":{"type":"number"},"MaxAttempts":{"type":"number"},"Window":{"type":"number"}},"additionalProperties":false,"nullable":true},"placementSwarm":{"type":"object","properties":{"Constraints":{"type":"array","items":{"type":"string"}},"Preferences":{"type":"array","items":{"type":"object","properties":{"Spread":{"type":"object","properties":{"SpreadDescriptor":{"type":"string"}},"required":["SpreadDescriptor"]}},"required":["Spread"],"additionalProperties":false}},"MaxReplicas":{"type":"number"},"Platforms":{"type":"array","items":{"type":"object","properties":{"Architecture":{"type":"string"},"OS":{"type":"string"}},"required":["Architecture","OS"],"additionalProperties":false}}},"additionalProperties":false,"nullable":true},"updateConfigSwarm":{"type":"object","properties":{"Parallelism":{"type":"number"},"Delay":{"type":"number"},"FailureAction":{"type":"string"},"Monitor":{"type":"number"},"MaxFailureRatio":{"type":"number"},"Order":{"type":"string"}},"required":["Parallelism","Order"],"additionalProperties":false,"nullable":true},"rollbackConfigSwarm":{"type":"object","properties":{"Parallelism":{"type":"number"},"Delay":{"type":"number"},"FailureAction":{"type":"string"},"Monitor":{"type":"number"},"MaxFailureRatio":{"type":"number"},"Order":{"type":"string"}},"required":["Parallelism","Order"],"additionalProperties":false,"nullable":true},"modeSwarm":{"type":"object","properties":{"Replicated":{"type":"object","properties":{"Replicas":{"type":"number"}},"additionalProperties":false},"Global":{"type":"object","properties":{},"additionalProperties":false},"ReplicatedJob":{"type":"object","properties":{"MaxConcurrent":{"type":"number"},"TotalCompletions":{"type":"number"}},"additionalProperties":false},"GlobalJob":{"type":"object","properties":{},"additionalProperties":false}},"additionalProperties":false,"nullable":true},"labelsSwarm":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"nullable":true},"networkSwarm":{"type":"array","items":{"type":"object","properties":{"Target":{"type":"string"},"Aliases":{"type":"array","items":{"type":"string"}},"DriverOpts":{"type":"object","additionalProperties":{"type":"string"}}},"additionalProperties":false},"nullable":true},"stopGracePeriodSwarm":{"type":"number","nullable":true},"endpointSpecSwarm":{"type":"object","properties":{"Mode":{"type":"string"},"Ports":{"type":"array","items":{"type":"object","properties":{"Protocol":{"type":"string"},"TargetPort":{"type":"number"},"PublishedPort":{"type":"number"},"PublishMode":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false,"nullable":true},"ulimitsSwarm":{"type":"array","items":{"type":"object","properties":{"Name":{"type":"string"},"Soft":{"type":"number"},"Hard":{"type":"number"}},"required":["Name","Soft","Hard"],"additionalProperties":false},"nullable":true}}},"UpdateMountDto":{"type":"object","properties":{"type":{"type":"string","enum":["bind","volume","file"],"description":"Must be 'file' when the mount belongs to a Compose stack. Nothing assembles a Compose stack's mount rows into a deploy spec, so a bind or a volume attached to one would never be read; declare those in the stack's own compose file."},"hostPath":{"type":"string"},"volumeName":{"type":"string","minLength":1,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9_.-]*$"},"filePath":{"type":"string"},"content":{"type":"string"},"mountPath":{"type":"string","minLength":1}}},"UpdateMysqlDto":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"description":{"type":"string","nullable":true},"databaseName":{"type":"string","minLength":1},"databaseUser":{"type":"string","minLength":1},"databasePassword":{"type":"string","pattern":"^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$"},"databaseRootPassword":{"type":"string","pattern":"^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$"},"dockerImage":{"type":"string","pattern":"^(?:(?:(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])(?:\\.(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]))*|\\[(?:[a-fA-F0-9:]+)\\])(?::[0-9]+)?\\/)?[a-z0-9]+(?:(?:[._]|__|[-]+)[a-z0-9]+)*(?:\\/[a-z0-9]+(?:(?:[._]|__|[-]+)[a-z0-9]+)*)*(?::[\\w][\\w.-]{0,127})?(?:@[A-Za-z][A-Za-z0-9]*(?:[-_+.][A-Za-z][A-Za-z0-9]*)*:[0-9a-fA-F]{32,})?$"},"command":{"type":"string","nullable":true},"args":{"type":"array","items":{"type":"string"},"nullable":true},"memoryReservation":{"type":"string","nullable":true},"memoryLimit":{"type":"string","nullable":true},"cpuReservation":{"type":"string","nullable":true},"cpuLimit":{"type":"string","nullable":true},"replicas":{"type":"integer","minimum":0,"maximum":9007199254740991},"healthCheckSwarm":{"type":"object","properties":{"Test":{"type":"array","items":{"type":"string"}},"Interval":{"type":"number"},"Timeout":{"type":"number"},"StartPeriod":{"type":"number"},"Retries":{"type":"number"}},"additionalProperties":false,"nullable":true},"restartPolicySwarm":{"type":"object","properties":{"Condition":{"type":"string"},"Delay":{"type":"number"},"MaxAttempts":{"type":"number"},"Window":{"type":"number"}},"additionalProperties":false,"nullable":true},"placementSwarm":{"type":"object","properties":{"Constraints":{"type":"array","items":{"type":"string"}},"Preferences":{"type":"array","items":{"type":"object","properties":{"Spread":{"type":"object","properties":{"SpreadDescriptor":{"type":"string"}},"required":["SpreadDescriptor"]}},"required":["Spread"],"additionalProperties":false}},"MaxReplicas":{"type":"number"},"Platforms":{"type":"array","items":{"type":"object","properties":{"Architecture":{"type":"string"},"OS":{"type":"string"}},"required":["Architecture","OS"],"additionalProperties":false}}},"additionalProperties":false,"nullable":true},"updateConfigSwarm":{"type":"object","properties":{"Parallelism":{"type":"number"},"Delay":{"type":"number"},"FailureAction":{"type":"string"},"Monitor":{"type":"number"},"MaxFailureRatio":{"type":"number"},"Order":{"type":"string"}},"required":["Parallelism","Order"],"additionalProperties":false,"nullable":true},"rollbackConfigSwarm":{"type":"object","properties":{"Parallelism":{"type":"number"},"Delay":{"type":"number"},"FailureAction":{"type":"string"},"Monitor":{"type":"number"},"MaxFailureRatio":{"type":"number"},"Order":{"type":"string"}},"required":["Parallelism","Order"],"additionalProperties":false,"nullable":true},"modeSwarm":{"type":"object","properties":{"Replicated":{"type":"object","properties":{"Replicas":{"type":"number"}},"additionalProperties":false},"Global":{"type":"object","properties":{},"additionalProperties":false},"ReplicatedJob":{"type":"object","properties":{"MaxConcurrent":{"type":"number"},"TotalCompletions":{"type":"number"}},"additionalProperties":false},"GlobalJob":{"type":"object","properties":{},"additionalProperties":false}},"additionalProperties":false,"nullable":true},"labelsSwarm":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"nullable":true},"networkSwarm":{"type":"array","items":{"type":"object","properties":{"Target":{"type":"string"},"Aliases":{"type":"array","items":{"type":"string"}},"DriverOpts":{"type":"object","additionalProperties":{"type":"string"}}},"additionalProperties":false},"nullable":true},"stopGracePeriodSwarm":{"type":"number","nullable":true},"endpointSpecSwarm":{"type":"object","properties":{"Mode":{"type":"string"},"Ports":{"type":"array","items":{"type":"object","properties":{"Protocol":{"type":"string"},"TargetPort":{"type":"number"},"PublishedPort":{"type":"number"},"PublishMode":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false,"nullable":true},"ulimitsSwarm":{"type":"array","items":{"type":"object","properties":{"Name":{"type":"string"},"Soft":{"type":"number"},"Hard":{"type":"number"}},"required":["Name","Soft","Hard"],"additionalProperties":false},"nullable":true}}},"UpdateNtfyDto":{"type":"object","properties":{"appDeploy":{"default":false,"type":"boolean"},"appBuildError":{"default":false,"type":"boolean"},"databaseBackup":{"default":false,"type":"boolean"},"volumeBackup":{"default":false,"type":"boolean"},"instanceBackup":{"default":false,"type":"boolean"},"instanceRestart":{"default":false,"type":"boolean"},"dockerCleanup":{"default":false,"type":"boolean"},"serverThreshold":{"default":false,"type":"boolean"},"licenseLapse":{"default":false,"type":"boolean"},"licenseExpiring":{"default":false,"type":"boolean"},"agentRateLimited":{"default":false,"type":"boolean"},"previewTeardownStuck":{"default":false,"type":"boolean"},"serviceIncident":{"default":false,"type":"boolean"},"aiModelNotAnswering":{"default":false,"type":"boolean"},"name":{"type":"string","minLength":1},"serverUrl":{"type":"string","minLength":1},"topic":{"type":"string","minLength":1},"accessToken":{"type":"string"},"priority":{"default":3,"type":"number","minimum":1}}},"UpdateOrganizationDto":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255},"logo":{"type":"string"}},"required":["name"]},"UpdatePatchDto":{"type":"object","properties":{"filePath":{"type":"string","minLength":1,"description":"A path relative to the repository root, with no \"..\" segment and none of \", `, $, a backslash, NUL or a line break."},"content":{"type":"string"},"type":{"type":"string","enum":["create","update","delete"]},"enabled":{"type":"boolean"}}},"UpdatePortDto":{"type":"object","properties":{"publishedPort":{"type":"integer","minimum":1,"maximum":65535},"targetPort":{"type":"integer","minimum":1,"maximum":65535},"protocol":{"type":"string","enum":["tcp","udp"]},"publishMode":{"type":"string","enum":["ingress","host"]}}},"UpdatePostgresDto":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"description":{"type":"string","nullable":true},"databaseName":{"type":"string","minLength":1},"databaseUser":{"type":"string","minLength":1},"databasePassword":{"type":"string","pattern":"^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$"},"dockerImage":{"type":"string","pattern":"^(?:(?:(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])(?:\\.(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]))*|\\[(?:[a-fA-F0-9:]+)\\])(?::[0-9]+)?\\/)?[a-z0-9]+(?:(?:[._]|__|[-]+)[a-z0-9]+)*(?:\\/[a-z0-9]+(?:(?:[._]|__|[-]+)[a-z0-9]+)*)*(?::[\\w][\\w.-]{0,127})?(?:@[A-Za-z][A-Za-z0-9]*(?:[-_+.][A-Za-z][A-Za-z0-9]*)*:[0-9a-fA-F]{32,})?$"},"command":{"type":"string","nullable":true},"args":{"type":"array","items":{"type":"string"},"nullable":true},"memoryReservation":{"type":"string","nullable":true},"memoryLimit":{"type":"string","nullable":true},"cpuReservation":{"type":"string","nullable":true},"cpuLimit":{"type":"string","nullable":true},"replicas":{"type":"integer","minimum":0,"maximum":9007199254740991},"healthCheckSwarm":{"type":"object","properties":{"Test":{"type":"array","items":{"type":"string"}},"Interval":{"type":"number"},"Timeout":{"type":"number"},"StartPeriod":{"type":"number"},"Retries":{"type":"number"}},"additionalProperties":false,"nullable":true},"restartPolicySwarm":{"type":"object","properties":{"Condition":{"type":"string"},"Delay":{"type":"number"},"MaxAttempts":{"type":"number"},"Window":{"type":"number"}},"additionalProperties":false,"nullable":true},"placementSwarm":{"type":"object","properties":{"Constraints":{"type":"array","items":{"type":"string"}},"Preferences":{"type":"array","items":{"type":"object","properties":{"Spread":{"type":"object","properties":{"SpreadDescriptor":{"type":"string"}},"required":["SpreadDescriptor"]}},"required":["Spread"],"additionalProperties":false}},"MaxReplicas":{"type":"number"},"Platforms":{"type":"array","items":{"type":"object","properties":{"Architecture":{"type":"string"},"OS":{"type":"string"}},"required":["Architecture","OS"],"additionalProperties":false}}},"additionalProperties":false,"nullable":true},"updateConfigSwarm":{"type":"object","properties":{"Parallelism":{"type":"number"},"Delay":{"type":"number"},"FailureAction":{"type":"string"},"Monitor":{"type":"number"},"MaxFailureRatio":{"type":"number"},"Order":{"type":"string"}},"required":["Parallelism","Order"],"additionalProperties":false,"nullable":true},"rollbackConfigSwarm":{"type":"object","properties":{"Parallelism":{"type":"number"},"Delay":{"type":"number"},"FailureAction":{"type":"string"},"Monitor":{"type":"number"},"MaxFailureRatio":{"type":"number"},"Order":{"type":"string"}},"required":["Parallelism","Order"],"additionalProperties":false,"nullable":true},"modeSwarm":{"type":"object","properties":{"Replicated":{"type":"object","properties":{"Replicas":{"type":"number"}},"additionalProperties":false},"Global":{"type":"object","properties":{},"additionalProperties":false},"ReplicatedJob":{"type":"object","properties":{"MaxConcurrent":{"type":"number"},"TotalCompletions":{"type":"number"}},"additionalProperties":false},"GlobalJob":{"type":"object","properties":{},"additionalProperties":false}},"additionalProperties":false,"nullable":true},"labelsSwarm":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"nullable":true},"networkSwarm":{"type":"array","items":{"type":"object","properties":{"Target":{"type":"string"},"Aliases":{"type":"array","items":{"type":"string"}},"DriverOpts":{"type":"object","additionalProperties":{"type":"string"}}},"additionalProperties":false},"nullable":true},"stopGracePeriodSwarm":{"type":"number","nullable":true},"endpointSpecSwarm":{"type":"object","properties":{"Mode":{"type":"string"},"Ports":{"type":"array","items":{"type":"object","properties":{"Protocol":{"type":"string"},"TargetPort":{"type":"number"},"PublishedPort":{"type":"number"},"PublishMode":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false,"nullable":true},"ulimitsSwarm":{"type":"array","items":{"type":"object","properties":{"Name":{"type":"string"},"Soft":{"type":"number"},"Hard":{"type":"number"}},"required":["Name","Soft","Hard"],"additionalProperties":false},"nullable":true}}},"UpdateProfileDto":{"type":"object","properties":{"firstName":{"type":"string","minLength":1,"maxLength":255},"lastName":{"type":"string","maxLength":255},"email":{"type":"string","maxLength":255,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"currentPassword":{"type":"string","minLength":1},"image":{"type":"string","format":"uri","nullable":true}}},"UpdateProjectDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"description":{"type":"string"},"env":{"type":"string"}}},"UpdatePushoverDto":{"type":"object","properties":{"appDeploy":{"default":false,"type":"boolean"},"appBuildError":{"default":false,"type":"boolean"},"databaseBackup":{"default":false,"type":"boolean"},"volumeBackup":{"default":false,"type":"boolean"},"instanceBackup":{"default":false,"type":"boolean"},"instanceRestart":{"default":false,"type":"boolean"},"dockerCleanup":{"default":false,"type":"boolean"},"serverThreshold":{"default":false,"type":"boolean"},"licenseLapse":{"default":false,"type":"boolean"},"licenseExpiring":{"default":false,"type":"boolean"},"agentRateLimited":{"default":false,"type":"boolean"},"previewTeardownStuck":{"default":false,"type":"boolean"},"serviceIncident":{"default":false,"type":"boolean"},"aiModelNotAnswering":{"default":false,"type":"boolean"},"name":{"type":"string","minLength":1},"userKey":{"type":"string","minLength":1},"apiToken":{"type":"string","minLength":1},"priority":{"default":0,"type":"number","minimum":-2,"maximum":2},"retry":{"type":"number","minimum":30,"nullable":true},"expire":{"type":"number","minimum":1,"maximum":10800,"nullable":true}}},"UpdateRedirectDto":{"type":"object","properties":{"regex":{"type":"string","minLength":1,"maxLength":1024},"replacement":{"type":"string","minLength":1,"maxLength":1024},"permanent":{"type":"boolean"}}},"UpdateRedisDto":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"description":{"type":"string","nullable":true},"databasePassword":{"type":"string","pattern":"^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$"},"dockerImage":{"type":"string","pattern":"^(?:(?:(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])(?:\\.(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]))*|\\[(?:[a-fA-F0-9:]+)\\])(?::[0-9]+)?\\/)?[a-z0-9]+(?:(?:[._]|__|[-]+)[a-z0-9]+)*(?:\\/[a-z0-9]+(?:(?:[._]|__|[-]+)[a-z0-9]+)*)*(?::[\\w][\\w.-]{0,127})?(?:@[A-Za-z][A-Za-z0-9]*(?:[-_+.][A-Za-z][A-Za-z0-9]*)*:[0-9a-fA-F]{32,})?$"},"command":{"type":"string","nullable":true},"args":{"type":"array","items":{"type":"string"},"nullable":true},"memoryReservation":{"type":"string","nullable":true},"memoryLimit":{"type":"string","nullable":true},"cpuReservation":{"type":"string","nullable":true},"cpuLimit":{"type":"string","nullable":true},"replicas":{"type":"integer","minimum":0,"maximum":9007199254740991},"healthCheckSwarm":{"type":"object","properties":{"Test":{"type":"array","items":{"type":"string"}},"Interval":{"type":"number"},"Timeout":{"type":"number"},"StartPeriod":{"type":"number"},"Retries":{"type":"number"}},"additionalProperties":false,"nullable":true},"restartPolicySwarm":{"type":"object","properties":{"Condition":{"type":"string"},"Delay":{"type":"number"},"MaxAttempts":{"type":"number"},"Window":{"type":"number"}},"additionalProperties":false,"nullable":true},"placementSwarm":{"type":"object","properties":{"Constraints":{"type":"array","items":{"type":"string"}},"Preferences":{"type":"array","items":{"type":"object","properties":{"Spread":{"type":"object","properties":{"SpreadDescriptor":{"type":"string"}},"required":["SpreadDescriptor"]}},"required":["Spread"],"additionalProperties":false}},"MaxReplicas":{"type":"number"},"Platforms":{"type":"array","items":{"type":"object","properties":{"Architecture":{"type":"string"},"OS":{"type":"string"}},"required":["Architecture","OS"],"additionalProperties":false}}},"additionalProperties":false,"nullable":true},"updateConfigSwarm":{"type":"object","properties":{"Parallelism":{"type":"number"},"Delay":{"type":"number"},"FailureAction":{"type":"string"},"Monitor":{"type":"number"},"MaxFailureRatio":{"type":"number"},"Order":{"type":"string"}},"required":["Parallelism","Order"],"additionalProperties":false,"nullable":true},"rollbackConfigSwarm":{"type":"object","properties":{"Parallelism":{"type":"number"},"Delay":{"type":"number"},"FailureAction":{"type":"string"},"Monitor":{"type":"number"},"MaxFailureRatio":{"type":"number"},"Order":{"type":"string"}},"required":["Parallelism","Order"],"additionalProperties":false,"nullable":true},"modeSwarm":{"type":"object","properties":{"Replicated":{"type":"object","properties":{"Replicas":{"type":"number"}},"additionalProperties":false},"Global":{"type":"object","properties":{},"additionalProperties":false},"ReplicatedJob":{"type":"object","properties":{"MaxConcurrent":{"type":"number"},"TotalCompletions":{"type":"number"}},"additionalProperties":false},"GlobalJob":{"type":"object","properties":{},"additionalProperties":false}},"additionalProperties":false,"nullable":true},"labelsSwarm":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"nullable":true},"networkSwarm":{"type":"array","items":{"type":"object","properties":{"Target":{"type":"string"},"Aliases":{"type":"array","items":{"type":"string"}},"DriverOpts":{"type":"object","additionalProperties":{"type":"string"}}},"additionalProperties":false},"nullable":true},"stopGracePeriodSwarm":{"type":"number","nullable":true},"endpointSpecSwarm":{"type":"object","properties":{"Mode":{"type":"string"},"Ports":{"type":"array","items":{"type":"object","properties":{"Protocol":{"type":"string"},"TargetPort":{"type":"number"},"PublishedPort":{"type":"number"},"PublishMode":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false,"nullable":true},"ulimitsSwarm":{"type":"array","items":{"type":"object","properties":{"Name":{"type":"string"},"Soft":{"type":"number"},"Hard":{"type":"number"}},"required":["Name","Soft","Hard"],"additionalProperties":false},"nullable":true}}},"UpdateRegistryDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1},"url":{"default":"","type":"string"},"registryType":{"default":"cloud","type":"string","enum":["selfHosted","cloud"]},"imagePrefix":{"type":"string","maxLength":255,"pattern":"^(?:[a-zA-Z0-9]+(?:(?:[._]|__|[-]+)[a-zA-Z0-9]+)*(?:\\/[a-zA-Z0-9]+(?:(?:[._]|__|[-]+)[a-zA-Z0-9]+)*)*)?$","nullable":true}}},"UpdateRequestedPreviewMaxTtlDto":{"type":"object","properties":{"requestedPreviewMaxTtlMinutes":{"type":"integer","minimum":1,"maximum":10080}},"required":["requestedPreviewMaxTtlMinutes"]},"UpdateResendDto":{"type":"object","properties":{"appDeploy":{"default":false,"type":"boolean"},"appBuildError":{"default":false,"type":"boolean"},"databaseBackup":{"default":false,"type":"boolean"},"volumeBackup":{"default":false,"type":"boolean"},"instanceBackup":{"default":false,"type":"boolean"},"instanceRestart":{"default":false,"type":"boolean"},"dockerCleanup":{"default":false,"type":"boolean"},"serverThreshold":{"default":false,"type":"boolean"},"licenseLapse":{"default":false,"type":"boolean"},"licenseExpiring":{"default":false,"type":"boolean"},"agentRateLimited":{"default":false,"type":"boolean"},"previewTeardownStuck":{"default":false,"type":"boolean"},"serviceIncident":{"default":false,"type":"boolean"},"aiModelNotAnswering":{"default":false,"type":"boolean"},"name":{"type":"string","minLength":1},"apiKey":{"type":"string","minLength":1},"fromAddress":{"type":"string","minLength":1},"toAddresses":{"minItems":1,"type":"array","items":{"type":"string"}}}},"UpdateScheduleDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"description":{"type":"string","nullable":true},"cronExpression":{"type":"string","minLength":1},"serviceName":{"type":"string","nullable":true},"shellType":{"type":"string","enum":["bash","sh"]},"command":{"type":"string"},"script":{"type":"string","nullable":true},"enabled":{"type":"boolean"},"timezone":{"type":"string","nullable":true}}},"UpdateSecurityDto":{"type":"object","properties":{"username":{"type":"string","minLength":1,"maxLength":255},"password":{"type":"string","minLength":1}}},"UpdateServerDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"description":{"type":"string","nullable":true},"ipAddress":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"sshKeyId":{"type":"string","minLength":1},"serverType":{"type":"string","enum":["deploy","build"]},"command":{"type":"string"}}},"UpdateServerIpDto":{"type":"object","properties":{"serverIp":{"type":"string"}},"required":["serverIp"]},"UpdateSlackDto":{"type":"object","properties":{"appDeploy":{"default":false,"type":"boolean"},"appBuildError":{"default":false,"type":"boolean"},"databaseBackup":{"default":false,"type":"boolean"},"volumeBackup":{"default":false,"type":"boolean"},"instanceBackup":{"default":false,"type":"boolean"},"instanceRestart":{"default":false,"type":"boolean"},"dockerCleanup":{"default":false,"type":"boolean"},"serverThreshold":{"default":false,"type":"boolean"},"licenseLapse":{"default":false,"type":"boolean"},"licenseExpiring":{"default":false,"type":"boolean"},"agentRateLimited":{"default":false,"type":"boolean"},"previewTeardownStuck":{"default":false,"type":"boolean"},"serviceIncident":{"default":false,"type":"boolean"},"aiModelNotAnswering":{"default":false,"type":"boolean"},"name":{"type":"string","minLength":1},"webhookUrl":{"type":"string","minLength":1},"channel":{"type":"string"}}},"UpdateSshKeyDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"description":{"type":"string","nullable":true},"lastUsedAt":{"type":"string","nullable":true}}},"UpdateSsoProviderDto":{"type":"object","properties":{"providerId":{"type":"string","minLength":1},"issuer":{"type":"string","format":"uri"},"domains":{"minItems":1,"type":"array","items":{"type":"string"}},"oidcConfig":{"type":"object","properties":{"clientId":{"type":"string","minLength":1},"clientSecret":{"type":"string","minLength":1},"authorizationEndpoint":{"type":"string","format":"uri"},"tokenEndpoint":{"type":"string","format":"uri"},"userInfoEndpoint":{"type":"string","format":"uri"},"tokenEndpointAuthentication":{"type":"string","enum":["client_secret_post","client_secret_basic"]},"jwksEndpoint":{"type":"string","format":"uri"},"discoveryEndpoint":{"type":"string","format":"uri"},"skipDiscovery":{"type":"boolean"},"scopes":{"type":"array","items":{"type":"string"}},"pkce":{"type":"boolean"},"mapping":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string"},"emailVerified":{"type":"string"},"name":{"type":"string"},"image":{"type":"string"},"extraFields":{"type":"object","additionalProperties":{}}},"required":["id","email","name"]}},"required":["clientId","clientSecret"]},"overrideUserInfo":{"type":"boolean"}},"required":["providerId","issuer","domains"]},"UpdateTagDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"color":{"type":"string"}}},"UpdateTeamsDto":{"type":"object","properties":{"appDeploy":{"default":false,"type":"boolean"},"appBuildError":{"default":false,"type":"boolean"},"databaseBackup":{"default":false,"type":"boolean"},"volumeBackup":{"default":false,"type":"boolean"},"instanceBackup":{"default":false,"type":"boolean"},"instanceRestart":{"default":false,"type":"boolean"},"dockerCleanup":{"default":false,"type":"boolean"},"serverThreshold":{"default":false,"type":"boolean"},"licenseLapse":{"default":false,"type":"boolean"},"licenseExpiring":{"default":false,"type":"boolean"},"agentRateLimited":{"default":false,"type":"boolean"},"previewTeardownStuck":{"default":false,"type":"boolean"},"serviceIncident":{"default":false,"type":"boolean"},"aiModelNotAnswering":{"default":false,"type":"boolean"},"name":{"type":"string","minLength":1},"webhookUrl":{"type":"string","minLength":1}}},"UpdateTelegramDto":{"type":"object","properties":{"appDeploy":{"default":false,"type":"boolean"},"appBuildError":{"default":false,"type":"boolean"},"databaseBackup":{"default":false,"type":"boolean"},"volumeBackup":{"default":false,"type":"boolean"},"instanceBackup":{"default":false,"type":"boolean"},"instanceRestart":{"default":false,"type":"boolean"},"dockerCleanup":{"default":false,"type":"boolean"},"serverThreshold":{"default":false,"type":"boolean"},"licenseLapse":{"default":false,"type":"boolean"},"licenseExpiring":{"default":false,"type":"boolean"},"agentRateLimited":{"default":false,"type":"boolean"},"previewTeardownStuck":{"default":false,"type":"boolean"},"serviceIncident":{"default":false,"type":"boolean"},"aiModelNotAnswering":{"default":false,"type":"boolean"},"name":{"type":"string","minLength":1},"botToken":{"type":"string","minLength":1},"chatId":{"type":"string","minLength":1},"messageThreadId":{"type":"string"}}},"UpdateTraefikPortsDto":{"type":"object","properties":{"serverId":{"type":"string","nullable":true},"additionalPorts":{"type":"array","items":{"type":"object","properties":{"targetPort":{"type":"number"},"publishedPort":{"type":"number"},"protocol":{"type":"string","enum":["tcp","udp","sctp"]}},"required":["targetPort","publishedPort","protocol"]}}},"required":["additionalPorts"]},"UpdateTrustedOriginDto":{"type":"object","properties":{"oldOrigin":{"type":"string","minLength":1},"newOrigin":{"type":"string","minLength":1}},"required":["oldOrigin","newOrigin"]},"UpdateUptimeCheckDto":{"type":"object","properties":{"domainId":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"intervalSeconds":{"type":"integer","minimum":30,"maximum":3600},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60},"expectedStatuses":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"string","pattern":"^(?:[1-5]xx|[1-5]\\d\\d)$"}},"downAfter":{"type":"integer","minimum":1,"maximum":20},"enabled":{"type":"boolean"},"keyword":{"type":"string","minLength":1,"maxLength":256,"nullable":true},"headerName":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[!#$%&'*+.^_`|~0-9A-Za-z-]+$","nullable":true},"headerValue":{"type":"string","minLength":1,"maxLength":4096,"pattern":"^[\\t\\x20-\\x7e\\x80-\\xff]+$","nullable":true}}},"UpdateVolumeBackupDto":{"type":"object","properties":{"name":{"type":"string","minLength":1},"volumeName":{"type":"string","minLength":1,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9_.-]*$"},"prefix":{"type":"string","minLength":1,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9_./-]*$"},"schedule":{"type":"string","minLength":1},"serviceName":{"type":"string","minLength":1,"pattern":"^[a-zA-Z0-9._-]+$","nullable":true},"turnOff":{"type":"boolean"},"keepLatestCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"nullable":true},"enabled":{"type":"boolean"},"destinationId":{"type":"string","minLength":1}}},"UpdateWhitelabelingDto":{"type":"object","properties":{"appName":{"type":"string","maxLength":120,"nullable":true},"logoUrl":{"type":"string","maxLength":2048,"nullable":true},"faviconUrl":{"type":"string","maxLength":2048,"nullable":true},"primaryColor":{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$","nullable":true},"accentColor":{"type":"string","pattern":"^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$","nullable":true},"customCss":{"type":"string","maxLength":50000,"nullable":true},"errorPages":{"type":"object","properties":{"notFoundMessage":{"type":"string","maxLength":500,"nullable":true},"serverErrorMessage":{"type":"string","maxLength":500,"nullable":true},"supportUrl":{"type":"string","maxLength":2048,"nullable":true}}}}},"UpgradeDto":{"type":"object","properties":{"prorationDate":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991,"minimum":0}},"required":["prorationDate"]},"UploadApplicationDropDto":{"type":"object","properties":{"dropBuildPath":{"type":"string","minLength":1}}},"UploadFileBodyDto":{"type":"object","properties":{"destinationPath":{"type":"string","minLength":1},"serverId":{"type":"string","nullable":true}},"required":["destinationPath"]},"ValidateDomainDto":{"type":"object","properties":{"domain":{"type":"string"},"serverIp":{"type":"string"}},"required":["domain"]},"VariableListDto":{"type":"object","properties":{"variables":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"linkedTo":{"type":"object","properties":{"source":{"type":"string"},"output":{"type":"string"}},"required":["source","output"],"nullable":true}},"required":["name","linkedTo"]}}},"required":["variables"]},"VerifyTwoFactorDto":{"type":"object","properties":{"code":{"type":"string","minLength":1}},"required":["code"]},"WhoamiDto":{"type":"object","properties":{"email":{"type":"string"},"organization":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"],"nullable":true},"key":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","nullable":true},"start":{"type":"string","nullable":true},"expiresAt":{"type":"string","nullable":true}},"required":["id","name","start","expiresAt"],"nullable":true}},"required":["email","organization","key"]},"WriteTraefikEnvDto":{"type":"object","properties":{"env":{"type":"string"},"serverId":{"type":"string","nullable":true}},"required":["env"]}}},"externalDocs":{"description":"Cloudgate API reference","url":"https://cloudgate.octabyte.io/docs/api"},"x-tagGroups":[{"name":"Account and Personal keys","tags":["Users","DeviceLogin","SignUp"]},{"name":"Organizations, members and roles","tags":["Organizations","CustomRole","Tags","AuditLog"]},{"name":"Projects, Environments and Plans","tags":["Projects","Environments","Templates","PendingSetups","ProjectConfigs","ProjectConfigSchema","Plans","WiredVariables","NetworkCloudResources"]},{"name":"Applications","tags":["Applications","Ports","Mounts","Security","Patch","RuntimeLog","CronRuns","ServiceCloudResources"]},{"name":"Deployments, previews and rollbacks","tags":["Deployments","PreviewDeployments","Rollbacks","Schedules"]},{"name":"Compose stacks","tags":["Compose"]},{"name":"Databases","tags":["Postgres","Mysql","Mariadb","Mongo","Redis","Libsql"]},{"name":"Buckets and backups","tags":["Buckets","Backups","VolumeBackups","Destinations"]},{"name":"Domains, certificates and redirects","tags":["Domains","Certificates","Redirects","Cdn"]},{"name":"Monitoring and health","tags":["ServiceHealth","UptimeChecks","ErrorRateThresholds","Traces","Monitoring"]},{"name":"Notifications","tags":["Notifications"]},{"name":"Servers and Cloud accounts","tags":["Servers","SshKeys","CloudAccounts","Cluster","Swarm","DockerOps","Traefik"]},{"name":"Git providers and registries","tags":["GitProviders","Github","Gitlab","Gitea","Bitbucket","GitProviderOauth","Registries"]},{"name":"Agents and AI","tags":["Agents","Ai","TokenSpend","ProjectTokenSpend","EnvironmentTokenSpend"]},{"name":"SSO, SCIM and licences","tags":["Sso","Scim","ForwardAuth","License"]},{"name":"Instance settings","tags":["About","Settings"]},{"name":"Billing and bought Servers","tags":["Billing","BoughtServers"]}]}