{"openapi":"3.0.0","paths":{"/v1/workspaces":{"get":{"operationId":"Workspaces_list","parameters":[],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceListDto_Output"}}}}},"summary":"Listar workspaces do usuário","tags":["Workspaces"]},"post":{"description":"Quem cria vira proprietário (owner).","operationId":"Workspaces_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWorkspaceDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceDto_Output"}}}}},"security":[{"session":[]}],"summary":"Criar workspace","tags":["Workspaces"]}},"/v1/workspaces/{workspaceId}":{"get":{"operationId":"Workspaces_get","parameters":[],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Detalhes do workspace","tags":["Workspaces"]},"patch":{"operationId":"Workspaces_update","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWorkspaceDto"}}}},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Atualizar workspace","tags":["Workspaces"]},"delete":{"description":"Exclusão definitiva. Somente proprietários.","operationId":"Workspaces_remove","parameters":[],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OkDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]},{"session":[]}],"summary":"Excluir workspace","tags":["Workspaces"]}},"/v1/workspaces/{workspaceId}/plan":{"get":{"description":"Plano, status do teste, limites efetivos (plano + extras), uso reservado e mínimos por tipo de recurso.","operationId":"Workspaces_plan","parameters":[],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspacePlanDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Plano e uso do workspace","tags":["Workspaces"]}},"/v1/plans":{"get":{"description":"Planos pagos disponíveis, na versão corrente. Preço mensal em centavos de real. Não exige login.","operationId":"Plans_list","parameters":[],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicPlanListDto_Output"}}}}},"summary":"Catálogo de planos","tags":["Planos"]}},"/v1/workspaces/{workspaceId}/apps":{"get":{"operationId":"Apps_list","parameters":[],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppListDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Listar aplicações","tags":["Aplicações"]},"post":{"description":"Reserva vCPU e memória no plano do workspace. Apps web ganham um subdomínio em acq.lat. O código vem depois, no primeiro deploy.","operationId":"Apps_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAppDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Criar aplicação","tags":["Aplicações"]}},"/v1/workspaces/{workspaceId}/apps/{appId}":{"get":{"operationId":"Apps_get","parameters":[{"name":"appId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Detalhes da aplicação","tags":["Aplicações"]},"patch":{"description":"Nome, imagem, porta e tamanho. O tamanho novo é reservado na hora e aplicado ao container no próximo deploy.","operationId":"Apps_update","parameters":[{"name":"appId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAppDto"}}}},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Atualizar aplicação","tags":["Aplicações"]},"delete":{"description":"Libera a quota, remove containers e imagens e apaga a pasta do projeto (o volume da app) no servidor.","operationId":"Apps_remove","parameters":[{"name":"appId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OkDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Excluir aplicação","tags":["Aplicações"]}},"/v1/workspaces/{workspaceId}/apps/{appId}/env":{"get":{"description":"Valores de segredos nunca voltam (`value: null`).","operationId":"Apps_env","parameters":[{"name":"appId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvVarListDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Variáveis de ambiente","tags":["Aplicações"]},"put":{"description":"Substitui o conjunto inteiro. Um segredo enviado com valor vazio mantém o valor atual. Valem a partir do próximo deploy ou reinício.","operationId":"Apps_putEnv","parameters":[{"name":"appId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PutEnvDto"}}}},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvVarListDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Substituir variáveis de ambiente","tags":["Aplicações"]}},"/v1/workspaces/{workspaceId}/apps/{appId}/start":{"post":{"description":"Sobe de novo o container do deploy atual. Exige um deploy no ar (409 `app_not_deployed`).","operationId":"Apps_start","parameters":[{"name":"appId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Iniciar aplicação","tags":["Aplicações"]}},"/v1/workspaces/{workspaceId}/apps/{appId}/stop":{"post":{"description":"Para o container e tira a rota do ar. A reserva de vCPU e memória e a pasta do projeto continuam.","operationId":"Apps_stop","parameters":[{"name":"appId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Parar aplicação","tags":["Aplicações"]}},"/v1/workspaces/{workspaceId}/apps/{appId}/restart":{"post":{"description":"Reinicia o container do deploy atual. Variáveis e tamanho novos só valem no próximo deploy.","operationId":"Apps_restart","parameters":[{"name":"appId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Reiniciar aplicação","tags":["Aplicações"]}},"/v1/workspaces/{workspaceId}/apps/{appId}/deployments":{"get":{"operationId":"Deployments_list","parameters":[{"name":"appId","required":true,"in":"path","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"maxLength":200,"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"default":25,"type":"integer"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentPageDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Histórico de deploys","tags":["Deploys"]},"post":{"description":"Apps por imagem: faz pull de `image` (ou da imagem da app). Apps do GitHub: deploy de `commitSha` (ou do último commit da branch). Apps por upload: refaz o deploy com a imagem já construída, aplicando variáveis e tamanho novos.","operationId":"Deployments_create","parameters":[{"name":"appId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateImageDeploymentDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Deploy por imagem, de um commit ou refazer o deploy atual","tags":["Deploys"]}},"/v1/workspaces/{workspaceId}/apps/{appId}/deployments/upload":{"post":{"description":"Corpo = o arquivo .zip (Content-Type: application/zip). O Hydro detecta a linguagem e faz o build no servidor. Limite padrão de 200 MB.","operationId":"Deployments_upload","parameters":[{"name":"appId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/zip":{"schema":{"type":"string","format":"binary"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Deploy por upload de .zip","tags":["Deploys"]}},"/v1/workspaces/{workspaceId}/apps/{appId}/deployments/{deploymentId}":{"get":{"operationId":"Deployments_get","parameters":[{"name":"appId","required":true,"in":"path","schema":{"type":"string"}},{"name":"deploymentId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Detalhes do deploy","tags":["Deploys"]}},"/v1/workspaces/{workspaceId}/apps/{appId}/deployments/{deploymentId}/logs":{"get":{"description":"Leia em blocos: passe `nextAfter` como `after` até `done` ser verdadeiro.","operationId":"Deployments_logs","parameters":[{"name":"appId","required":true,"in":"path","schema":{"type":"string"}},{"name":"deploymentId","required":true,"in":"path","schema":{"type":"string"}},{"name":"after","required":false,"in":"query","schema":{"minimum":0,"maximum":9007199254740991,"default":0,"type":"integer"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":1000,"default":500,"type":"integer"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentLogsDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Logs de build e deploy","tags":["Deploys"]}},"/v1/workspaces/{workspaceId}/apps/{appId}/deployments/{deploymentId}/rollback":{"post":{"description":"Novo deploy com a imagem de um deploy anterior, sem build. A imagem precisa ainda estar no servidor (`imageAvailable`).","operationId":"Deployments_rollback","parameters":[{"name":"appId","required":true,"in":"path","schema":{"type":"string"}},{"name":"deploymentId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Rollback","tags":["Deploys"]}},"/v1/workspaces/{workspaceId}/apps/{appId}/deployments/{deploymentId}/cancel":{"post":{"operationId":"Deployments_cancel","parameters":[{"name":"appId","required":true,"in":"path","schema":{"type":"string"}},{"name":"deploymentId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Cancelar deploy na fila","tags":["Deploys"]}},"/v1/workspaces/{workspaceId}/apps/{appId}/metrics":{"get":{"description":"CPU, memória, rede, disco e a pasta do projeto por período: 1h (pontos de 1 min), 24h (5 min), 7d (30 min) e 30d (2 h).","operationId":"Runtime_metricsSeries","parameters":[{"name":"appId","required":true,"in":"path","schema":{"type":"string"}},{"name":"range","required":false,"in":"query","schema":{"default":"1h","type":"string","enum":["1h","24h","7d","30d"]}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppMetricsDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Histórico de consumo","tags":["Aplicações"]}},"/v1/workspaces/{workspaceId}/apps/{appId}/files":{"get":{"description":"A pasta do projeto no servidor, ao vivo: o código e o que a aplicação grava. Até 1000 entradas por pasta (`truncated` indica que havia mais).","operationId":"Files_list","parameters":[{"name":"appId","required":true,"in":"path","schema":{"type":"string"}},{"name":"path","required":false,"in":"query","schema":{"maxLength":1024,"pattern":"^(?:[^/\\\\\\u0000-\\u001f\\u007f]+(?:\\/[^/\\\\\\u0000-\\u001f\\u007f]+)*)?$","default":"","type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileListDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Listar uma pasta do projeto","tags":["Aplicações"]},"delete":{"description":"Pasta com conteúdo exige `recursive=true`.","operationId":"Files_remove","parameters":[{"name":"appId","required":true,"in":"path","schema":{"type":"string"}},{"name":"path","required":true,"in":"query","schema":{"maxLength":1024,"pattern":"^(?:[^/\\\\\\u0000-\\u001f\\u007f]+(?:\\/[^/\\\\\\u0000-\\u001f\\u007f]+)*)?$","type":"string"}},{"name":"recursive","required":false,"in":"query","schema":{"default":"false","type":"string","enum":["true","false"]}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OkDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Apagar arquivo ou pasta do projeto","tags":["Aplicações"]}},"/v1/workspaces/{workspaceId}/apps/{appId}/files/content":{"get":{"operationId":"Files_download","parameters":[{"name":"appId","required":true,"in":"path","schema":{"type":"string"}},{"name":"path","required":false,"in":"query","schema":{"maxLength":1024,"pattern":"^(?:[^/\\\\\\u0000-\\u001f\\u007f]+(?:\\/[^/\\\\\\u0000-\\u001f\\u007f]+)*)?$","default":"","type":"string"}}],"responses":{"200":{"description":""}},"security":[{"session":[]},{"bearer":[]}],"summary":"Baixar um arquivo do projeto","tags":["Aplicações"]},"put":{"description":"Corpo cru (`application/octet-stream`), até 100 MB. O arquivo é gravado num temporário e só substitui o anterior quando chega inteiro. Vale na hora; código novo só roda depois de reiniciar. Arquivo alterado aqui é mantido nos próximos deploys.","operationId":"Files_upload","parameters":[{"name":"appId","required":true,"in":"path","schema":{"type":"string"}},{"name":"path","required":true,"in":"query","schema":{"maxLength":1024,"pattern":"^(?:[^/\\\\\\u0000-\\u001f\\u007f]+(?:\\/[^/\\\\\\u0000-\\u001f\\u007f]+)*)?$","type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OkDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Enviar (ou substituir) um arquivo no projeto","tags":["Aplicações"]}},"/v1/workspaces/{workspaceId}/apps/{appId}/files/directories":{"post":{"operationId":"Files_mkdir","parameters":[{"name":"appId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDirectoryDto"}}}},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OkDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Criar pasta no projeto","tags":["Aplicações"]}},"/v1/workspaces/{workspaceId}/apps/{appId}/files/rename":{"post":{"description":"O destino não pode existir.","operationId":"Files_rename","parameters":[{"name":"appId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenameFileDto"}}}},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OkDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Renomear ou mover no projeto","tags":["Aplicações"]}},"/v1/workspaces/{workspaceId}/usage/apps":{"get":{"description":"CPU (% de um núcleo) e memória (% do limite) de cada app na última hora, em 12 pontos de 5 minutos, para os mini-gráficos da lista. Sem amostra, o ponto é null.","operationId":"Usage_apps","parameters":[],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppUsageSummaryDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Consumo recente das aplicações","tags":["Aplicações"]}},"/v1/workspaces/{workspaceId}/databases":{"get":{"operationId":"Databases_list","parameters":[],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatabaseListDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Listar bancos de dados","tags":["Bancos de dados"]},"post":{"description":"PostgreSQL, MySQL, Redis ou MongoDB. Reserva vCPU e memória no plano e fica no mesmo servidor das apps do workspace, acessível só pela rede privada (<identificador>.internal).","operationId":"Databases_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDatabaseDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatabaseDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Criar banco de dados","tags":["Bancos de dados"]}},"/v1/workspaces/{workspaceId}/databases/{databaseId}":{"get":{"operationId":"Databases_get","parameters":[{"name":"databaseId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatabaseDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Detalhes do banco de dados","tags":["Bancos de dados"]},"patch":{"description":"Mudar vCPU ou memória recria o container; os dados ficam.","operationId":"Databases_update","parameters":[{"name":"databaseId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDatabaseDto"}}}},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatabaseDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Renomear ou mudar o tamanho","tags":["Bancos de dados"]},"delete":{"description":"Apaga o container e os dados. Não pode ser desfeito.","operationId":"Databases_remove","parameters":[{"name":"databaseId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OkDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Excluir banco de dados","tags":["Bancos de dados"]}},"/v1/workspaces/{workspaceId}/databases/{databaseId}/start":{"post":{"operationId":"Databases_start","parameters":[{"name":"databaseId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatabaseDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Iniciar banco de dados","tags":["Bancos de dados"]}},"/v1/workspaces/{workspaceId}/databases/{databaseId}/stop":{"post":{"description":"A reserva do plano continua; os dados ficam.","operationId":"Databases_stop","parameters":[{"name":"databaseId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatabaseDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Parar banco de dados","tags":["Bancos de dados"]}},"/v1/workspaces/{workspaceId}/databases/{databaseId}/restart":{"post":{"operationId":"Databases_restart","parameters":[{"name":"databaseId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatabaseDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Reiniciar banco de dados","tags":["Bancos de dados"]}},"/v1/workspaces/{workspaceId}/databases/{databaseId}/credentials":{"get":{"description":"Usuário, senha e URLs de conexão. Cada consulta fica registrada na auditoria.","operationId":"Databases_credentials","parameters":[{"name":"databaseId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatabaseCredentialsDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Revelar credenciais","tags":["Bancos de dados"]}},"/v1/workspaces/{workspaceId}/databases/{databaseId}/rotate-password":{"post":{"description":"Gera uma senha nova e aplica no banco sem perder dados. Apps conectadas precisam ser conectadas de novo (ou ter a variável atualizada) e reiniciadas.","operationId":"Databases_rotate","parameters":[{"name":"databaseId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatabaseDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Trocar a senha","tags":["Bancos de dados"]}},"/v1/workspaces/{workspaceId}/databases/{databaseId}/connect":{"post":{"description":"Grava a URL de conexão como variável secreta da app (DATABASE_URL, REDIS_URL ou MONGODB_URL, se não for informada outra). Vale no próximo deploy ou reinício.","operationId":"Databases_connect","parameters":[{"name":"databaseId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectDatabaseDto"}}}},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectDatabaseResultDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Conectar a uma aplicação","tags":["Bancos de dados"]}},"/v1/workspaces/{workspaceId}/databases/{databaseId}/public":{"put":{"description":"Liga ou desliga o acesso pela internet, sempre com TLS e só para as faixas de IP informadas. O endereço é o IP do servidor com uma porta entre 20000 e 20999.","operationId":"Databases_setPublic","parameters":[{"name":"databaseId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatabasePublicDto"}}}},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatabaseDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Acesso externo","tags":["Bancos de dados"]}},"/v1/workspaces/{workspaceId}/apps/{appId}/domains":{"get":{"operationId":"Domains_list","parameters":[{"name":"appId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomDomainListDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Listar domínios da aplicação","tags":["Aplicações"]},"post":{"description":"Só apps web. A resposta traz o registro A (IP do servidor da app) e o TXT _hydro.<domínio> que provam a posse; depois de criá-los no DNS, chame verify.","operationId":"Domains_add","parameters":[{"name":"appId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddDomainDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomDomainDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Adicionar domínio","tags":["Aplicações"]}},"/v1/workspaces/{workspaceId}/apps/{appId}/domains/{domainId}/verify":{"post":{"description":"Consulta o DNS por resolvedores públicos. Com A e TXT certos, o domínio fica ativo e o certificado é emitido em seguida. O resultado da consulta vem em check.","operationId":"Domains_verify","parameters":[{"name":"appId","required":true,"in":"path","schema":{"type":"string"}},{"name":"domainId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomDomainDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Verificar DNS do domínio","tags":["Aplicações"]}},"/v1/workspaces/{workspaceId}/apps/{appId}/domains/{domainId}":{"delete":{"operationId":"Domains_remove","parameters":[{"name":"appId","required":true,"in":"path","schema":{"type":"string"}},{"name":"domainId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OkDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Remover domínio","tags":["Aplicações"]}},"/v1/workspaces/{workspaceId}/databases/{databaseId}/backups":{"get":{"operationId":"DatabaseBackups_list","parameters":[{"name":"databaseId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BackupListDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Listar backups do banco","tags":["Bancos de dados"]},"post":{"description":"Backup manual (no máximo um por hora). Os diários são automáticos, de madrugada.","operationId":"DatabaseBackups_create","parameters":[{"name":"databaseId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BackupDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Fazer backup agora","tags":["Bancos de dados"]}},"/v1/workspaces/{workspaceId}/databases/{databaseId}/backups/{backupId}/restore":{"post":{"description":"Em um banco novo (o original fica intacto) ou no mesmo banco (antes, um backup automático do estado atual; os dados atuais são substituídos).","operationId":"DatabaseBackups_restore","parameters":[{"name":"databaseId","required":true,"in":"path","schema":{"type":"string"}},{"name":"backupId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestoreDatabaseBackupDto"}}}},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestoreResultDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Restaurar um backup","tags":["Bancos de dados"]}},"/v1/workspaces/{workspaceId}/apps/{appId}/backups":{"get":{"operationId":"VolumeBackups_list","parameters":[{"name":"appId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BackupListDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Listar backups da pasta do projeto","tags":["Aplicações"]},"post":{"description":"No máximo um manual por hora.","operationId":"VolumeBackups_create","parameters":[{"name":"appId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BackupDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Fazer backup da pasta do projeto agora","tags":["Aplicações"]}},"/v1/workspaces/{workspaceId}/apps/{appId}/backups/{backupId}/restore":{"post":{"description":"Substitui a pasta do projeto pela do backup (antes, um backup automático do estado atual). A app para e volta.","operationId":"VolumeBackups_restore","parameters":[{"name":"appId","required":true,"in":"path","schema":{"type":"string"}},{"name":"backupId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestoreVolumeBackupDto"}}}},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestoreResultDto_Output"}}}}},"security":[{"session":[]},{"bearer":[]}],"summary":"Restaurar a pasta do projeto","tags":["Aplicações"]}}},"info":{"title":"AcquaCloud API","description":"API pública do Hydro, da AcquaCloud. Autentique com um token de API criado no painel (Authorization: Bearer hydro_pat_…).","version":"1","contact":{}},"tags":[],"servers":[{"url":"https://api.acquacloud.com.br"}],"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http","description":"Token de API: hydro_pat_…"},"session":{"type":"apiKey","in":"cookie","name":"hydro_session"}},"schemas":{"OkDto_Output":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"],"additionalProperties":false},"WorkspaceListDto_Output":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"slug":{"type":"string"},"role":{"type":"string","enum":["owner","admin","developer","viewer"]},"suspended":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","name","slug","role","suspended","createdAt"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false},"CreateWorkspaceDto":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":60},"slug":{"type":"string","minLength":3,"maxLength":40,"pattern":"^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$"}},"required":["name"]},"WorkspaceDto_Output":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"slug":{"type":"string"},"role":{"type":"string","enum":["owner","admin","developer","viewer"]},"suspended":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","name","slug","role","suspended","createdAt"],"additionalProperties":false},"UpdateWorkspaceDto":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":60},"slug":{"type":"string","minLength":3,"maxLength":40,"pattern":"^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$"}}},"WorkspacePlanDto_Output":{"type":"object","properties":{"status":{"type":"string","enum":["none","trialing","active","past_due","expired"]},"plan":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"slug":{"type":"string"},"name":{"type":"string"},"kind":{"type":"string","enum":["trial","paid"]},"version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"priceCents":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"nullable":true}},"required":["id","slug","name","kind","version","priceCents"],"additionalProperties":false,"nullable":true},"trialEndsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","nullable":true},"graceEndsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","nullable":true},"limits":{"type":"object","properties":{"cpuMillis":{"type":"integer","minimum":0,"maximum":1024000},"memoryMb":{"type":"integer","minimum":0,"maximum":16777216},"maxMembers":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["cpuMillis","memoryMb","maxMembers"],"additionalProperties":false},"usage":{"type":"object","properties":{"cpuMillis":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"memoryMb":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"diskMb":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"members":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["cpuMillis","memoryMb","diskMb","members"],"additionalProperties":false},"overQuota":{"type":"boolean"},"hasExtras":{"type":"boolean"},"minimums":{"type":"object","additionalProperties":{"type":"object","properties":{"cpuMillis":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"memoryMb":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"diskMb":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["cpuMillis","memoryMb","diskMb"],"additionalProperties":false},"required":["app","postgres","mysql","mariadb","mongodb","redis"]}},"required":["status","plan","trialEndsAt","graceEndsAt","limits","usage","overQuota","hasExtras","minimums"],"additionalProperties":false},"PublicPlanListDto_Output":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"cpuMillis":{"type":"integer","minimum":0,"maximum":1024000},"memoryMb":{"type":"integer","minimum":0,"maximum":16777216},"maxMembers":{"type":"integer","minimum":1,"maximum":10000},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"slug":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"priceCents":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"featured":{"type":"boolean"}},"required":["cpuMillis","memoryMb","maxMembers","id","slug","name","description","version","priceCents","featured"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false},"AppListDto_Output":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"workspaceId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"slug":{"type":"string"},"kind":{"type":"string","enum":["web","worker"]},"source":{"type":"string","enum":["upload","image","github"]},"image":{"type":["string","null"]},"port":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"nullable":true},"cpuMillis":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"memoryMb":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"url":{"type":["string","null"]},"subdomain":{"type":["string","null"]},"github":{"type":"object","properties":{"installationId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"repoId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"repoFullName":{"type":"string"},"branch":{"type":"string"},"rootDir":{"type":"string"},"autoDeploy":{"type":"boolean"},"watchRootOnly":{"type":"boolean"},"accessLost":{"type":"boolean"}},"required":["installationId","repoId","repoFullName","branch","rootDir","autoDeploy","watchRootOnly","accessLost"],"additionalProperties":false,"nullable":true},"desiredState":{"type":"string","enum":["running","stopped"]},"status":{"type":"string","enum":["idle","deploying","starting","running","restarting","crashed","stopped"]},"statusDetail":{"type":"object","properties":{"exitCode":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"nullable":true},"restarts":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"message":{"type":["string","null"]},"tail":{"type":["string","null"]},"at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["exitCode","restarts","message","tail","at"],"additionalProperties":false,"nullable":true},"currentDeployment":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"appId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"number":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"source":{"type":"string","enum":["upload","image","rollback","github"]},"status":{"type":"string","enum":["queued","building","deploying","active","superseded","failed","cancelled"]},"image":{"type":["string","null"]},"imageDigest":{"type":["string","null"]},"rollbackOf":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","nullable":true},"commit":{"type":"object","properties":{"sha":{"type":"string"},"message":{"type":["string","null"]},"author":{"type":["string","null"]},"branch":{"type":["string","null"]},"url":{"type":["string","null"]}},"required":["sha","message","author","branch","url"],"additionalProperties":false,"nullable":true},"failureReason":{"type":["string","null"]},"imageAvailable":{"type":"boolean"},"triggeredBy":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"nullable":true},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"startedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","nullable":true},"finishedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","nullable":true}},"required":["id","appId","number","source","status","image","imageDigest","rollbackOf","commit","failureReason","imageAvailable","triggeredBy","createdAt","startedAt","finishedAt"],"additionalProperties":false,"nullable":true},"runningSince":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","nullable":true},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","workspaceId","name","slug","kind","source","image","port","cpuMillis","memoryMb","url","subdomain","github","desiredState","status","statusDetail","currentDeployment","runningSince","createdAt","updatedAt"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false},"CreateAppDto":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":40},"slug":{"type":"string","minLength":2,"maxLength":30,"pattern":"^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$"},"subdomain":{"type":"string","minLength":3,"maxLength":40,"pattern":"^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$"},"kind":{"type":"string","enum":["web","worker"]},"source":{"type":"string","enum":["upload","image","github"]},"image":{"type":"string","minLength":1,"maxLength":255,"pattern":"^(?:[a-z0-9.-]+(?::[0-9]+)?\\/)?[a-z0-9]+(?:[._-][a-z0-9]+)*(?:\\/[a-z0-9]+(?:[._-][a-z0-9]+)*)*(?::[A-Za-z0-9_][A-Za-z0-9._-]{0,127})?(?:@sha256:[a-f0-9]{64})?$"},"port":{"type":"integer","minimum":1,"maximum":65535},"memoryMb":{"type":"integer","minimum":100,"maximum":262144},"github":{"type":"object","properties":{"installationId":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991,"minimum":0},"repoId":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991,"minimum":0},"branch":{"type":"string","minLength":1,"maxLength":255,"pattern":"^(?!\\/)(?!.*\\/$)(?!.*\\.\\.)(?!.*\\/\\/)[A-Za-z0-9._/-]+$"},"rootDir":{"default":"","type":"string","maxLength":200,"pattern":"^(?:[A-Za-z0-9_-][A-Za-z0-9._-]*(?:\\/[A-Za-z0-9_-][A-Za-z0-9._-]*)*)?$"},"autoDeploy":{"default":true,"type":"boolean"},"watchRootOnly":{"default":false,"type":"boolean"}},"required":["installationId","repoId","branch"]}},"required":["name","kind","source","memoryMb"]},"AppDto_Output":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"workspaceId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"slug":{"type":"string"},"kind":{"type":"string","enum":["web","worker"]},"source":{"type":"string","enum":["upload","image","github"]},"image":{"type":"array","items":{"type":"string"}},"port":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"nullable":true},"cpuMillis":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"memoryMb":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"url":{"type":"array","items":{"type":"string"}},"subdomain":{"type":"array","items":{"type":"string"}},"github":{"type":"object","properties":{"installationId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"repoId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"repoFullName":{"type":"string"},"branch":{"type":"string"},"rootDir":{"type":"string"},"autoDeploy":{"type":"boolean"},"watchRootOnly":{"type":"boolean"},"accessLost":{"type":"boolean"}},"required":["installationId","repoId","repoFullName","branch","rootDir","autoDeploy","watchRootOnly","accessLost"],"additionalProperties":false,"nullable":true},"desiredState":{"type":"string","enum":["running","stopped"]},"status":{"type":"string","enum":["idle","deploying","starting","running","restarting","crashed","stopped"]},"statusDetail":{"type":"object","properties":{"exitCode":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"nullable":true},"restarts":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"message":{"type":["string","null"]},"tail":{"type":["string","null"]},"at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["exitCode","restarts","message","tail","at"],"additionalProperties":false,"nullable":true},"currentDeployment":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"appId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"number":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"source":{"type":"string","enum":["upload","image","rollback","github"]},"status":{"type":"string","enum":["queued","building","deploying","active","superseded","failed","cancelled"]},"image":{"type":["string","null"]},"imageDigest":{"type":["string","null"]},"rollbackOf":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","nullable":true},"commit":{"type":"object","properties":{"sha":{"type":"string"},"message":{"type":["string","null"]},"author":{"type":["string","null"]},"branch":{"type":["string","null"]},"url":{"type":["string","null"]}},"required":["sha","message","author","branch","url"],"additionalProperties":false,"nullable":true},"failureReason":{"type":["string","null"]},"imageAvailable":{"type":"boolean"},"triggeredBy":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"nullable":true},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"startedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","nullable":true},"finishedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","nullable":true}},"required":["id","appId","number","source","status","image","imageDigest","rollbackOf","commit","failureReason","imageAvailable","triggeredBy","createdAt","startedAt","finishedAt"],"additionalProperties":false,"nullable":true},"runningSince":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","nullable":true},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","workspaceId","name","slug","kind","source","image","port","cpuMillis","memoryMb","url","subdomain","github","desiredState","status","statusDetail","currentDeployment","runningSince","createdAt","updatedAt"],"additionalProperties":false},"UpdateAppDto":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":40},"image":{"type":"string","minLength":1,"maxLength":255,"pattern":"^(?:[a-z0-9.-]+(?::[0-9]+)?\\/)?[a-z0-9]+(?:[._-][a-z0-9]+)*(?:\\/[a-z0-9]+(?:[._-][a-z0-9]+)*)*(?::[A-Za-z0-9_][A-Za-z0-9._-]{0,127})?(?:@sha256:[a-f0-9]{64})?$"},"port":{"type":"integer","minimum":1,"maximum":65535},"subdomain":{"type":"string","minLength":3,"maxLength":40,"pattern":"^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$"},"memoryMb":{"type":"integer","minimum":100,"maximum":262144},"github":{"type":"object","properties":{"branch":{"type":"string","minLength":1,"maxLength":255,"pattern":"^(?!\\/)(?!.*\\/$)(?!.*\\.\\.)(?!.*\\/\\/)[A-Za-z0-9._/-]+$"},"rootDir":{"type":"string","maxLength":200,"pattern":"^(?:[A-Za-z0-9_-][A-Za-z0-9._-]*(?:\\/[A-Za-z0-9_-][A-Za-z0-9._-]*)*)?$"},"autoDeploy":{"type":"boolean"},"watchRootOnly":{"type":"boolean"}}}}},"EnvVarListDto_Output":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"secret":{"type":"boolean"},"value":{"type":["string","null"]},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["key","secret","value","updatedAt"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false},"PutEnvDto":{"type":"object","properties":{"vars":{"maxItems":100,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","pattern":"^[A-Za-z_][A-Za-z0-9_]{0,127}$"},"value":{"type":"string","maxLength":32768},"secret":{"type":"boolean"}},"required":["key","value","secret"]}}},"required":["vars"]},"DeploymentPageDto_Output":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"appId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"number":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"source":{"type":"string","enum":["upload","image","rollback","github"]},"status":{"type":"string","enum":["queued","building","deploying","active","superseded","failed","cancelled"]},"image":{"type":["string","null"]},"imageDigest":{"type":["string","null"]},"rollbackOf":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","nullable":true},"commit":{"type":"object","properties":{"sha":{"type":"string"},"message":{"type":["string","null"]},"author":{"type":["string","null"]},"branch":{"type":["string","null"]},"url":{"type":["string","null"]}},"required":["sha","message","author","branch","url"],"additionalProperties":false,"nullable":true},"failureReason":{"type":["string","null"]},"imageAvailable":{"type":"boolean"},"triggeredBy":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"nullable":true},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"startedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","nullable":true},"finishedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","nullable":true}},"required":["id","appId","number","source","status","image","imageDigest","rollbackOf","commit","failureReason","imageAvailable","triggeredBy","createdAt","startedAt","finishedAt"],"additionalProperties":false}},"nextCursor":{"type":"array","items":{"type":"string"}}},"required":["data","nextCursor"],"additionalProperties":false},"DeploymentDto_Output":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"appId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"number":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"source":{"type":"string","enum":["upload","image","rollback","github"]},"status":{"type":"string","enum":["queued","building","deploying","active","superseded","failed","cancelled"]},"image":{"type":"array","items":{"type":"string"}},"imageDigest":{"type":"array","items":{"type":"string"}},"rollbackOf":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","nullable":true},"commit":{"type":"object","properties":{"sha":{"type":"string"},"message":{"type":["string","null"]},"author":{"type":["string","null"]},"branch":{"type":["string","null"]},"url":{"type":["string","null"]}},"required":["sha","message","author","branch","url"],"additionalProperties":false,"nullable":true},"failureReason":{"type":"array","items":{"type":"string"}},"imageAvailable":{"type":"boolean"},"triggeredBy":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"nullable":true},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"startedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","nullable":true},"finishedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","nullable":true}},"required":["id","appId","number","source","status","image","imageDigest","rollbackOf","commit","failureReason","imageAvailable","triggeredBy","createdAt","startedAt","finishedAt"],"additionalProperties":false},"CreateImageDeploymentDto":{"type":"object","properties":{"image":{"type":"string","minLength":1,"maxLength":255,"pattern":"^(?:[a-z0-9.-]+(?::[0-9]+)?\\/)?[a-z0-9]+(?:[._-][a-z0-9]+)*(?:\\/[a-z0-9]+(?:[._-][a-z0-9]+)*)*(?::[A-Za-z0-9_][A-Za-z0-9._-]{0,127})?(?:@sha256:[a-f0-9]{64})?$"},"commitSha":{"type":"string","pattern":"^[0-9a-f]{40}$"}}},"DeploymentLogsDto_Output":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"seq":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"phase":{"type":"string","enum":["build","deploy","runtime"]},"text":{"type":"string"},"at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["seq","phase","text","at"],"additionalProperties":false}},"nextAfter":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"done":{"type":"boolean"},"truncated":{"type":"boolean"}},"required":["data","nextAfter","done","truncated"],"additionalProperties":false},"AppMetricsDto_Output":{"type":"object","properties":{"range":{"type":"string","enum":["1h","24h","7d","30d"]},"stepSeconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"from":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"to":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"points":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"cpuPct":{"type":"number"},"cpuPctMax":{"type":"number"},"memBytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"memBytesMax":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"memLimitBytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"netRxBytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"netTxBytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"diskReadBytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"diskWriteBytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"dataBytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"nullable":true}},"required":["at","cpuPct","cpuPctMax","memBytes","memBytesMax","memLimitBytes","netRxBytes","netTxBytes","diskReadBytes","diskWriteBytes","dataBytes"],"additionalProperties":false}}},"required":["range","stepSeconds","from","to","points"],"additionalProperties":false},"FileListDto_Output":{"type":"object","properties":{"path":{"type":"string"},"entries":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","maxLength":255},"type":{"type":"string","enum":["file","dir","symlink","other"]},"size":{"type":"integer","minimum":0,"maximum":9007199254740991},"modifiedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"mode":{"type":"string","pattern":"^[0-7]{3,4}$"}},"required":["name","type","size","modifiedAt","mode"],"additionalProperties":false}},"truncated":{"type":"boolean"}},"required":["path","entries","truncated"],"additionalProperties":false},"CreateDirectoryDto":{"type":"object","properties":{"path":{"type":"string","maxLength":1024,"pattern":"^(?:[^/\\\\\\u0000-\\u001f\\u007f]+(?:\\/[^/\\\\\\u0000-\\u001f\\u007f]+)*)?$"}},"required":["path"]},"RenameFileDto":{"type":"object","properties":{"from":{"type":"string","maxLength":1024,"pattern":"^(?:[^/\\\\\\u0000-\\u001f\\u007f]+(?:\\/[^/\\\\\\u0000-\\u001f\\u007f]+)*)?$"},"to":{"type":"string","maxLength":1024,"pattern":"^(?:[^/\\\\\\u0000-\\u001f\\u007f]+(?:\\/[^/\\\\\\u0000-\\u001f\\u007f]+)*)?$"}},"required":["from","to"]},"AppUsageSummaryDto_Output":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"appId":{"type":"string"},"cpuPct":{"type":"array","items":{"type":["number","null"]}},"memPct":{"type":"array","items":{"type":["number","null"]}}},"required":["appId","cpuPct","memPct"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false},"DatabaseListDto_Output":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"workspaceId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"slug":{"type":"string"},"engine":{"type":"string","enum":["postgres","mysql","redis","mongodb"]},"version":{"type":"string"},"cpuMillis":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"memoryMb":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"status":{"type":"string","enum":["provisioning","starting","running","restarting","crashed","stopped","failed"]},"desiredState":{"type":"string","enum":["running","stopped"]},"internalHost":{"type":"string"},"port":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"username":{"type":"string"},"databaseName":{"type":"string"},"public":{"type":"object","properties":{"enabled":{"type":"boolean"},"host":{"type":["string","null"]},"port":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"nullable":true},"allowedCidrs":{"type":"array","items":{"type":"string"}}},"required":["enabled","host","port","allowedCidrs"],"additionalProperties":false,"nullable":true},"statusMessage":{"type":["string","null"]},"runningSince":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","nullable":true},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","workspaceId","name","slug","engine","version","cpuMillis","memoryMb","status","desiredState","internalHost","port","username","databaseName","public","statusMessage","runningSince","createdAt","updatedAt"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false},"CreateDatabaseDto":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":60},"slug":{"type":"string","minLength":2,"maxLength":30,"pattern":"^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$"},"engine":{"type":"string","enum":["postgres","mysql","redis","mongodb"]},"version":{"type":"string"},"memoryMb":{"type":"integer","minimum":16,"maximum":9007199254740991}},"required":["name","engine","memoryMb"]},"DatabaseDto_Output":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"workspaceId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"slug":{"type":"string"},"engine":{"type":"string","enum":["postgres","mysql","redis","mongodb"]},"version":{"type":"string"},"cpuMillis":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"memoryMb":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"status":{"type":"string","enum":["provisioning","starting","running","restarting","crashed","stopped","failed"]},"desiredState":{"type":"string","enum":["running","stopped"]},"internalHost":{"type":"string"},"port":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"username":{"type":"string"},"databaseName":{"type":"string"},"public":{"type":"object","properties":{"enabled":{"type":"boolean"},"host":{"type":["string","null"]},"port":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"nullable":true},"allowedCidrs":{"type":"array","items":{"type":"string"}}},"required":["enabled","host","port","allowedCidrs"],"additionalProperties":false,"nullable":true},"statusMessage":{"type":"array","items":{"type":"string"}},"runningSince":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","nullable":true},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","workspaceId","name","slug","engine","version","cpuMillis","memoryMb","status","desiredState","internalHost","port","username","databaseName","public","statusMessage","runningSince","createdAt","updatedAt"],"additionalProperties":false},"UpdateDatabaseDto":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":60},"memoryMb":{"type":"integer","minimum":16,"maximum":9007199254740991}}},"DatabaseCredentialsDto_Output":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"},"database":{"type":"string"},"host":{"type":"string"},"port":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"url":{"type":"string"},"publicUrl":{"type":"array","items":{"type":"string"}}},"required":["username","password","database","host","port","url","publicUrl"],"additionalProperties":false},"ConnectDatabaseDto":{"type":"object","properties":{"appId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"variable":{"type":"string","pattern":"^[A-Za-z_][A-Za-z0-9_]{0,127}$"}},"required":["appId"]},"ConnectDatabaseResultDto_Output":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"variable":{"type":"string"}},"required":["ok","variable"],"additionalProperties":false},"DatabasePublicDto":{"type":"object","properties":{"enabled":{"type":"boolean"},"allowedCidrs":{"default":[],"maxItems":50,"type":"array","items":{"type":"string"}}},"required":["enabled"]},"CustomDomainListDto_Output":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"appId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"hostname":{"type":"string"},"status":{"type":"string","enum":["pending","active","misconfigured","failed"]},"dns":{"type":"object","properties":{"a":{"type":"array","items":{"type":"string"}},"aaaa":{"type":"array","items":{"type":"string"}},"txtName":{"type":"string"},"txtValue":{"type":"string"}},"required":["a","aaaa","txtName","txtValue"],"additionalProperties":false},"check":{"type":"object","properties":{"a":{"type":"array","items":{"type":"string"}},"txt":{"type":"boolean"},"at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"error":{"type":["string","null"]}},"required":["a","txt","at","error"],"additionalProperties":false,"nullable":true},"verifiedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","nullable":true},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","appId","hostname","status","dns","check","verifiedAt","createdAt"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false},"AddDomainDto":{"type":"object","properties":{"hostname":{"type":"string","maxLength":253}},"required":["hostname"]},"CustomDomainDto_Output":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"appId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"hostname":{"type":"string"},"status":{"type":"string","enum":["pending","active","misconfigured","failed"]},"dns":{"type":"object","properties":{"a":{"type":"array","items":{"type":"string"}},"aaaa":{"type":"array","items":{"type":"string"}},"txtName":{"type":"string"},"txtValue":{"type":"string"}},"required":["a","aaaa","txtName","txtValue"],"additionalProperties":false},"check":{"type":"object","properties":{"a":{"type":"array","items":{"type":"string"}},"txt":{"type":"boolean"},"at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"error":{"type":["string","null"]}},"required":["a","txt","at","error"],"additionalProperties":false,"nullable":true},"verifiedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","nullable":true},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","appId","hostname","status","dns","check","verifiedAt","createdAt"],"additionalProperties":false},"BackupListDto_Output":{"type":"object","properties":{"enabled":{"type":"boolean"},"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"sourceType":{"type":"string","enum":["database","app_volume"]},"sourceId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"kind":{"type":"string","enum":["scheduled","manual","pre_restore"]},"status":{"type":"string","enum":["pending","running","completed","failed","expired"]},"sizeBytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"nullable":true},"error":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"completedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","nullable":true},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","nullable":true}},"required":["id","sourceType","sourceId","kind","status","sizeBytes","error","createdAt","completedAt","expiresAt"],"additionalProperties":false}}},"required":["enabled","data"],"additionalProperties":false},"BackupDto_Output":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"sourceType":{"type":"string","enum":["database","app_volume"]},"sourceId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"kind":{"type":"string","enum":["scheduled","manual","pre_restore"]},"status":{"type":"string","enum":["pending","running","completed","failed","expired"]},"sizeBytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"nullable":true},"error":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"completedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","nullable":true},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","nullable":true}},"required":["id","sourceType","sourceId","kind","status","sizeBytes","error","createdAt","completedAt","expiresAt"],"additionalProperties":false},"RestoreDatabaseBackupDto":{"type":"object","properties":{"target":{"type":"string","enum":["new","same"]},"name":{"type":"string","minLength":2,"maxLength":60},"confirm":{"type":"string","maxLength":60}},"required":["target"]},"RestoreResultDto_Output":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"databaseId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","nullable":true},"preRestoreBackupId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","nullable":true}},"required":["ok","databaseId","preRestoreBackupId"],"additionalProperties":false},"RestoreVolumeBackupDto":{"type":"object","properties":{"confirm":{"type":"string"}},"required":["confirm"]}}}}