> For the complete documentation index, see [llms.txt](https://docs.discloud.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.discloud.com/api-and-integrations/api-overview/banco-de-dados.md).

# Banco de Dados

## Listar presets de bancos

> Devolve o catálogo Dispack de motores disponíveis (versões, portas, volumes), sugestões aleatórias de nome/senha e, por motor, \`vars\` com as chaves de ambiente obrigatórias/opcionais e o mapa \`fromSuggestions\` (suggested\* → env) para montar o body do POST /database sem hardcodar nomes.

```json
{"openapi":"3.0.3","info":{"title":"Discloud API","version":"2.0.0"},"tags":[{"name":"Bancos de Dados","description":"Operações sobre bancos de dados gerenciados (criar, ciclo de vida, backups e logs). Requer plano Diamond (4) ou superior para criar/restaurar. Create e restore respondem de imediato com um id; consulte GET /database/{dbID} para o estado."}],"servers":[{"url":"https://api.discloud.app/v2","description":"Servidor API"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"api-token"}},"schemas":{"Error":{"type":"object","properties":{"code":{"type":"integer"},"message":{"type":"string"}}}}},"paths":{"/database/presets":{"get":{"tags":["Bancos de Dados"],"summary":"Listar presets de bancos","description":"Devolve o catálogo Dispack de motores disponíveis (versões, portas, volumes), sugestões aleatórias de nome/senha e, por motor, `vars` com as chaves de ambiente obrigatórias/opcionais e o mapa `fromSuggestions` (suggested* → env) para montar o body do POST /database sem hardcodar nomes.","operationId":"listDatabasePresets","responses":{"200":{"description":"Presets carregados com sucesso","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Erro de autenticação","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## Criar banco de dados

> Inicia o provisionamento assíncrono de um banco gerenciado. Devolve HTTP 200 de imediato com o novo id. Consulte GET /database/{dbID} até o recurso existir e estar online. Plano mínimo Diamond (4). projectID opcional cobra a quota do dono do project e exige acesso de admin.

```json
{"openapi":"3.0.3","info":{"title":"Discloud API","version":"2.0.0"},"tags":[{"name":"Bancos de Dados","description":"Operações sobre bancos de dados gerenciados (criar, ciclo de vida, backups e logs). Requer plano Diamond (4) ou superior para criar/restaurar. Create e restore respondem de imediato com um id; consulte GET /database/{dbID} para o estado."}],"servers":[{"url":"https://api.discloud.app/v2","description":"Servidor API"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"api-token"}},"schemas":{"Error":{"type":"object","properties":{"code":{"type":"integer"},"message":{"type":"string"}}}}},"paths":{"/database":{"post":{"tags":["Bancos de Dados"],"summary":"Criar banco de dados","description":"Inicia o provisionamento assíncrono de um banco gerenciado. Devolve HTTP 200 de imediato com o novo id. Consulte GET /database/{dbID} até o recurso existir e estar online. Plano mínimo Diamond (4). projectID opcional cobra a quota do dono do project e exige acesso de admin.","operationId":"createDatabase","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["displayName","db","totalRam"],"properties":{"displayName":{"type":"string","description":"Nome amigável (obrigatório)"},"db":{"type":"object","required":["type","version"],"properties":{"type":{"type":"string","description":"Motor (postgres, mysql, mariadb, mongodb, redis, valkey, …)"},"version":{"type":"string"},"extensions":{"type":"array","items":{"type":"string"}},"port":{"type":"integer"}}},"vars":{"type":"object","additionalProperties":{"type":"string"},"description":"Credenciais/env em texto plano (não envie varsEncrypted)"},"totalRam":{"type":"integer","minimum":100,"description":"RAM em MB (mínimo 100)"},"projectID":{"type":"string","description":"Projecto opcional a vincular"},"autoRestart":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Criação iniciada","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Corpo inválido (campos em falta, varsEncrypted na criação, vars inválidas)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Erro de autenticação","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Plano ou quota de RAM insuficiente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Já existe outro processo em execução para este recurso","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Sem cluster disponível ou hostnames esgotados","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## Listar bancos de dados

> Lista bancos do utilizador e bancos ligados a projects de equipas onde é membro. Segredos (vars / varsEncrypted) são omitidos.

```json
{"openapi":"3.0.3","info":{"title":"Discloud API","version":"2.0.0"},"tags":[{"name":"Bancos de Dados","description":"Operações sobre bancos de dados gerenciados (criar, ciclo de vida, backups e logs). Requer plano Diamond (4) ou superior para criar/restaurar. Create e restore respondem de imediato com um id; consulte GET /database/{dbID} para o estado."}],"servers":[{"url":"https://api.discloud.app/v2","description":"Servidor API"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"api-token"}},"schemas":{"Error":{"type":"object","properties":{"code":{"type":"integer"},"message":{"type":"string"}}}}},"paths":{"/database":{"get":{"tags":["Bancos de Dados"],"summary":"Listar bancos de dados","description":"Lista bancos do utilizador e bancos ligados a projects de equipas onde é membro. Segredos (vars / varsEncrypted) são omitidos.","operationId":"listDatabases","responses":{"200":{"description":"Bancos listados com sucesso","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Erro de autenticação","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## Detalhes e estado do banco

> Devolve o estado ao vivo do container e vars em texto plano (desencriptadas). Mesmo modelo de acesso do dashboard: dono ou membro de equipa com acesso ao project.

```json
{"openapi":"3.0.3","info":{"title":"Discloud API","version":"2.0.0"},"tags":[{"name":"Bancos de Dados","description":"Operações sobre bancos de dados gerenciados (criar, ciclo de vida, backups e logs). Requer plano Diamond (4) ou superior para criar/restaurar. Create e restore respondem de imediato com um id; consulte GET /database/{dbID} para o estado."}],"servers":[{"url":"https://api.discloud.app/v2","description":"Servidor API"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"api-token"}},"schemas":{"Error":{"type":"object","properties":{"code":{"type":"integer"},"message":{"type":"string"}}}}},"paths":{"/database/{dbID}":{"get":{"tags":["Bancos de Dados"],"summary":"Detalhes e estado do banco","description":"Devolve o estado ao vivo do container e vars em texto plano (desencriptadas). Mesmo modelo de acesso do dashboard: dono ou membro de equipa com acesso ao project.","operationId":"getDatabase","parameters":[{"name":"dbID","in":"path","required":true,"description":"ID do banco","schema":{"type":"string"}}],"responses":{"200":{"description":"Estado da base de dados carregado","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Erro de autenticação","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Sem acesso a este banco","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Banco não encontrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## Eliminar banco de dados

> Remove permanentemente o registo e a infraestrutura. Exige delete\_app.

```json
{"openapi":"3.0.3","info":{"title":"Discloud API","version":"2.0.0"},"tags":[{"name":"Bancos de Dados","description":"Operações sobre bancos de dados gerenciados (criar, ciclo de vida, backups e logs). Requer plano Diamond (4) ou superior para criar/restaurar. Create e restore respondem de imediato com um id; consulte GET /database/{dbID} para o estado."}],"servers":[{"url":"https://api.discloud.app/v2","description":"Servidor API"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"api-token"}},"schemas":{"Error":{"type":"object","properties":{"code":{"type":"integer"},"message":{"type":"string"}}}}},"paths":{"/database/{dbID}":{"delete":{"tags":["Bancos de Dados"],"summary":"Eliminar banco de dados","description":"Remove permanentemente o registo e a infraestrutura. Exige delete_app.","operationId":"deleteDatabase","parameters":[{"name":"dbID","in":"path","required":true,"description":"ID do banco","schema":{"type":"string"}}],"responses":{"200":{"description":"Banco eliminado","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Erro de autenticação","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Sem permissão para eliminar","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Banco não encontrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Já existe outro processo em execução","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## Atualizar banco de dados

> Atualiza displayName, hostname e/ou totalRam. Exige commit\_app; alterar totalRam também exige edit\_ram. Hostname exige plano do dono \&gt; 3. Alterar hostname ou RAM dispara rebuild assíncrono da infra (rebuilding=true + opId); consulte GET /database/{dbID}.

```json
{"openapi":"3.0.3","info":{"title":"Discloud API","version":"2.0.0"},"tags":[{"name":"Bancos de Dados","description":"Operações sobre bancos de dados gerenciados (criar, ciclo de vida, backups e logs). Requer plano Diamond (4) ou superior para criar/restaurar. Create e restore respondem de imediato com um id; consulte GET /database/{dbID} para o estado."}],"servers":[{"url":"https://api.discloud.app/v2","description":"Servidor API"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"api-token"}},"schemas":{"Error":{"type":"object","properties":{"code":{"type":"integer"},"message":{"type":"string"}}}}},"paths":{"/database/{dbID}":{"patch":{"tags":["Bancos de Dados"],"summary":"Atualizar banco de dados","description":"Atualiza displayName, hostname e/ou totalRam. Exige commit_app; alterar totalRam também exige edit_ram. Hostname exige plano do dono &gt; 3. Alterar hostname ou RAM dispara rebuild assíncrono da infra (rebuilding=true + opId); consulte GET /database/{dbID}.","operationId":"updateDatabase","parameters":[{"name":"dbID","in":"path","required":true,"description":"ID do banco","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"displayName":{"type":"string"},"hostname":{"type":"string","description":"Hostname privado (1–2 segmentos a-z0-9_ ligados por -, máx. 25)"},"totalRam":{"type":"integer","minimum":100,"maximum":16384}}}}}},"responses":{"200":{"description":"Banco atualizado (opcionalmente em rebuild)","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Corpo inválido ou nenhum campo para atualizar","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Erro de autenticação","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Sem permissão ou plano insuficiente para hostname","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Banco não encontrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Hostname já em uso","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Já existe outro processo em execução","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## Iniciar banco de dados

> Inicia o container do banco. Exige start\_app. Sujeito a verificações de RAM/slot.

```json
{"openapi":"3.0.3","info":{"title":"Discloud API","version":"2.0.0"},"tags":[{"name":"Bancos de Dados","description":"Operações sobre bancos de dados gerenciados (criar, ciclo de vida, backups e logs). Requer plano Diamond (4) ou superior para criar/restaurar. Create e restore respondem de imediato com um id; consulte GET /database/{dbID} para o estado."}],"servers":[{"url":"https://api.discloud.app/v2","description":"Servidor API"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"api-token"}},"schemas":{"Error":{"type":"object","properties":{"code":{"type":"integer"},"message":{"type":"string"}}}}},"paths":{"/database/{dbID}/start":{"put":{"tags":["Bancos de Dados"],"summary":"Iniciar banco de dados","description":"Inicia o container do banco. Exige start_app. Sujeito a verificações de RAM/slot.","operationId":"startDatabase","parameters":[{"name":"dbID","in":"path","required":true,"description":"ID do banco","schema":{"type":"string"}}],"responses":{"200":{"description":"Iniciado (ou já em execução com status error)","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Erro de autenticação ou falha ao iniciar","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Sem permissão ou limite de recursos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Banco não encontrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Já existe outro processo em execução","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## Parar banco de dados

> Para o container do banco. Exige stop\_app.

```json
{"openapi":"3.0.3","info":{"title":"Discloud API","version":"2.0.0"},"tags":[{"name":"Bancos de Dados","description":"Operações sobre bancos de dados gerenciados (criar, ciclo de vida, backups e logs). Requer plano Diamond (4) ou superior para criar/restaurar. Create e restore respondem de imediato com um id; consulte GET /database/{dbID} para o estado."}],"servers":[{"url":"https://api.discloud.app/v2","description":"Servidor API"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"api-token"}},"schemas":{"Error":{"type":"object","properties":{"code":{"type":"integer"},"message":{"type":"string"}}}}},"paths":{"/database/{dbID}/stop":{"put":{"tags":["Bancos de Dados"],"summary":"Parar banco de dados","description":"Para o container do banco. Exige stop_app.","operationId":"stopDatabase","parameters":[{"name":"dbID","in":"path","required":true,"description":"ID do banco","schema":{"type":"string"}}],"responses":{"200":{"description":"Parado (ou já parado com status error)","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Erro de autenticação","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Sem permissão para parar","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Banco não encontrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Já existe outro processo em execução","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## Reiniciar banco de dados

> Reinicia o container do banco. Exige restart\_app.

```json
{"openapi":"3.0.3","info":{"title":"Discloud API","version":"2.0.0"},"tags":[{"name":"Bancos de Dados","description":"Operações sobre bancos de dados gerenciados (criar, ciclo de vida, backups e logs). Requer plano Diamond (4) ou superior para criar/restaurar. Create e restore respondem de imediato com um id; consulte GET /database/{dbID} para o estado."}],"servers":[{"url":"https://api.discloud.app/v2","description":"Servidor API"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"api-token"}},"schemas":{"Error":{"type":"object","properties":{"code":{"type":"integer"},"message":{"type":"string"}}}}},"paths":{"/database/{dbID}/restart":{"put":{"tags":["Bancos de Dados"],"summary":"Reiniciar banco de dados","description":"Reinicia o container do banco. Exige restart_app.","operationId":"restartDatabase","parameters":[{"name":"dbID","in":"path","required":true,"description":"ID do banco","schema":{"type":"string"}}],"responses":{"200":{"description":"Reiniciado com sucesso","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Erro de autenticação ou falha ao reiniciar","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Sem permissão ou limite de recursos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Banco não encontrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Já existe outro processo em execução","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## Criar backup do banco

> Cria um backup do banco gerenciado (síncrono). Exige backup\_app. Devolve metadados de download; chaves S3 são removidas da resposta.

```json
{"openapi":"3.0.3","info":{"title":"Discloud API","version":"2.0.0"},"tags":[{"name":"Bancos de Dados","description":"Operações sobre bancos de dados gerenciados (criar, ciclo de vida, backups e logs). Requer plano Diamond (4) ou superior para criar/restaurar. Create e restore respondem de imediato com um id; consulte GET /database/{dbID} para o estado."}],"servers":[{"url":"https://api.discloud.app/v2","description":"Servidor API"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"api-token"}},"schemas":{"Error":{"type":"object","properties":{"code":{"type":"integer"},"message":{"type":"string"}}}}},"paths":{"/database/{dbID}/backup":{"post":{"tags":["Bancos de Dados"],"summary":"Criar backup do banco","description":"Cria um backup do banco gerenciado (síncrono). Exige backup_app. Devolve metadados de download; chaves S3 são removidas da resposta.","operationId":"backupDatabase","parameters":[{"name":"dbID","in":"path","required":true,"description":"ID do banco","schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"gzip":{"type":"boolean","default":true}}}}}},"responses":{"200":{"description":"Backup criado","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Backup não suportado ou falhou","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Erro de autenticação","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Sem permissão para backup","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Banco não encontrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Já existe outro processo em execução","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Banco offline","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## Listar backups do banco

> Lista backups no S3 deste banco. Exige status\_app.

```json
{"openapi":"3.0.3","info":{"title":"Discloud API","version":"2.0.0"},"tags":[{"name":"Bancos de Dados","description":"Operações sobre bancos de dados gerenciados (criar, ciclo de vida, backups e logs). Requer plano Diamond (4) ou superior para criar/restaurar. Create e restore respondem de imediato com um id; consulte GET /database/{dbID} para o estado."}],"servers":[{"url":"https://api.discloud.app/v2","description":"Servidor API"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"api-token"}},"schemas":{"Error":{"type":"object","properties":{"code":{"type":"integer"},"message":{"type":"string"}}}}},"paths":{"/database/{dbID}/backups":{"get":{"tags":["Bancos de Dados"],"summary":"Listar backups do banco","description":"Lista backups no S3 deste banco. Exige status_app.","operationId":"listDatabaseBackups","parameters":[{"name":"dbID","in":"path","required":true,"description":"ID do banco","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Tamanho da página (1–1000, default 50). Alias maxKeys também aceite.","schema":{"type":"integer"}},{"name":"cursor","in":"query","required":false,"description":"Token de continuação de uma resposta anterior","schema":{"type":"string"}},{"name":"detail","in":"query","required":false,"description":"minimal (default) ou full","schema":{"type":"string","enum":["minimal","full"]}}],"responses":{"200":{"description":"Backups listados","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Erro de autenticação","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Sem permissão","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Banco não encontrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## Obter URL de download do backup

> Devolve uma URL pré-assinada do dump. Exige backup\_app.

```json
{"openapi":"3.0.3","info":{"title":"Discloud API","version":"2.0.0"},"tags":[{"name":"Bancos de Dados","description":"Operações sobre bancos de dados gerenciados (criar, ciclo de vida, backups e logs). Requer plano Diamond (4) ou superior para criar/restaurar. Create e restore respondem de imediato com um id; consulte GET /database/{dbID} para o estado."}],"servers":[{"url":"https://api.discloud.app/v2","description":"Servidor API"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"api-token"}},"schemas":{"Error":{"type":"object","properties":{"code":{"type":"integer"},"message":{"type":"string"}}}}},"paths":{"/database/{dbID}/backups/{backupId}/download":{"get":{"tags":["Bancos de Dados"],"summary":"Obter URL de download do backup","description":"Devolve uma URL pré-assinada do dump. Exige backup_app.","operationId":"downloadDatabaseBackup","parameters":[{"name":"dbID","in":"path","required":true,"description":"ID do banco","schema":{"type":"string"}},{"name":"backupId","in":"path","required":true,"description":"ID do backup","schema":{"type":"string"}},{"name":"expiresInDays","in":"query","required":false,"description":"Validade da URL em dias (1–14)","schema":{"type":"integer","minimum":1,"maximum":14}}],"responses":{"200":{"description":"URL de download gerada","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Pedido inválido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Erro de autenticação","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Sem permissão","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Banco ou backup não encontrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## Obter logs do banco

> Devolve logs recentes do container (mesmo formato dos logs de app). Exige logs\_app.

```json
{"openapi":"3.0.3","info":{"title":"Discloud API","version":"2.0.0"},"tags":[{"name":"Bancos de Dados","description":"Operações sobre bancos de dados gerenciados (criar, ciclo de vida, backups e logs). Requer plano Diamond (4) ou superior para criar/restaurar. Create e restore respondem de imediato com um id; consulte GET /database/{dbID} para o estado."}],"servers":[{"url":"https://api.discloud.app/v2","description":"Servidor API"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"api-token"}},"schemas":{"Error":{"type":"object","properties":{"code":{"type":"integer"},"message":{"type":"string"}}}}},"paths":{"/database/{dbID}/logs":{"get":{"tags":["Bancos de Dados"],"summary":"Obter logs do banco","description":"Devolve logs recentes do container (mesmo formato dos logs de app). Exige logs_app.","operationId":"getDatabaseLogs","parameters":[{"name":"dbID","in":"path","required":true,"description":"ID do banco","schema":{"type":"string"}}],"responses":{"200":{"description":"Logs carregados","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Erro de autenticação","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Sem permissão para ler logs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Banco não encontrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## Eliminar logs do banco

> Apaga os logs guardados do banco. Exige logs\_app.

```json
{"openapi":"3.0.3","info":{"title":"Discloud API","version":"2.0.0"},"tags":[{"name":"Bancos de Dados","description":"Operações sobre bancos de dados gerenciados (criar, ciclo de vida, backups e logs). Requer plano Diamond (4) ou superior para criar/restaurar. Create e restore respondem de imediato com um id; consulte GET /database/{dbID} para o estado."}],"servers":[{"url":"https://api.discloud.app/v2","description":"Servidor API"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"api-token"}},"schemas":{"Error":{"type":"object","properties":{"code":{"type":"integer"},"message":{"type":"string"}}}}},"paths":{"/database/{dbID}/logs":{"delete":{"tags":["Bancos de Dados"],"summary":"Eliminar logs do banco","description":"Apaga os logs guardados do banco. Exige logs_app.","operationId":"deleteDatabaseLogs","parameters":[{"name":"dbID","in":"path","required":true,"description":"ID do banco","schema":{"type":"string"}}],"responses":{"200":{"description":"Logs eliminados","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Erro de autenticação","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Sem permissão para eliminar logs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Banco não encontrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## Restaurar backup como novo banco

> Cria um novo banco gerenciado a partir de um backup (assíncrono). Exige backup\_app no banco de origem. Plano mínimo Diamond (4). Devolve o novo id de imediato; consulte GET /database/{id}.

```json
{"openapi":"3.0.3","info":{"title":"Discloud API","version":"2.0.0"},"tags":[{"name":"Bancos de Dados","description":"Operações sobre bancos de dados gerenciados (criar, ciclo de vida, backups e logs). Requer plano Diamond (4) ou superior para criar/restaurar. Create e restore respondem de imediato com um id; consulte GET /database/{dbID} para o estado."}],"servers":[{"url":"https://api.discloud.app/v2","description":"Servidor API"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"api-token"}},"schemas":{"Error":{"type":"object","properties":{"code":{"type":"integer"},"message":{"type":"string"}}}}},"paths":{"/database/{dbID}/restore":{"post":{"tags":["Bancos de Dados"],"summary":"Restaurar backup como novo banco","description":"Cria um novo banco gerenciado a partir de um backup (assíncrono). Exige backup_app no banco de origem. Plano mínimo Diamond (4). Devolve o novo id de imediato; consulte GET /database/{id}.","operationId":"restoreDatabaseBackup","parameters":[{"name":"dbID","in":"path","required":true,"description":"ID do banco de origem (dono do backup)","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["backupId","totalRam"],"properties":{"backupId":{"type":"string"},"totalRam":{"type":"integer","minimum":100},"displayName":{"type":"string"},"projectID":{"type":"string"},"vars":{"type":"object","additionalProperties":{"type":"string"}},"varsEncrypted":{"type":"string","description":"Mutuamente exclusivo com vars"},"autoRestart":{"type":"boolean"},"db":{"type":"object","properties":{"version":{"type":"string"}}}}}}}},"responses":{"200":{"description":"Restauro iniciado","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Corpo inválido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Erro de autenticação","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Sem permissão ou plano/quota insuficiente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Banco de origem ou projeto não encontrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Já existe outro processo em execução","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```
