Bancos de dados pela API
Use estas rotas para operar um projeto de banco de dados (PostgreSQL, MariaDB ou ClickHouse) já criado. Para criar o banco, veja Criar, listar e remover projetos. Serviços Valkey (Key-Value, Cache e Queue) usam as rotas de Serviços gerenciados.
Autenticação e permissões
Todas as rotas aceitam uma API Key da organização (x-api-key: znf_... ou Authorization: Bearer znf_...) ou um token de usuário com x-organization-id. As permissões usam o recurso database:<project-id>:
| Rota | Scope |
|---|---|
GET /v1/project/:id/database/status | database.status.read |
GET /v1/project/:id/database/connection | database.connection.read |
GET /v1/project/:id/database/linked-applications | database.password.rotate |
PATCH /v1/project/:id/database/password | database.password.rotate |
PATCH /v1/project/:id/database/version | database.version.update |
owner tem acesso completo. assistant, member e API Keys precisam do scope no ID do banco ou em database:*. Sem ele, a resposta é 403 com insufficient organization permission.
Consultar o estado
GET /v1/project/:id/database/status{
"status": "success",
"message": "got database status successfully",
"data": {
"project_id": "6650f1a2b3c4d5e6f7a8b9c1",
"name": "banco-pedidos",
"plan": "db-basic",
"status": "<estado-atual>"
}
}status é um texto informativo com o estado atual do banco; quando o estado detalhado não está disponível, a API devolve o status do projeto. Use-o para exibição e diagnóstico, não como valor fixo de automação. A resposta também pode trazer um objeto com detalhes específicos do mecanismo; não dependa desses detalhes. Para o ciclo de vida do projeto, use GET /v1/project/:id (Informações de projetos).
Em bancos Analytics (ClickHouse), data.clickhouse traz apenas status, instances, readyInstances e storage (e cpu e memory quando disponíveis):
{
"status": "success",
"message": "got database status successfully",
"data": {
"project_id": "6650f1a2b3c4d5e6f7a8b9c2",
"name": "analytics-pedidos",
"plan": "analytics-production",
"status": "<estado-atual>",
"clickhouse": {
"status": "<estado-atual>",
"instances": 3,
"readyInstances": 3,
"storage": "<armazenamento>"
}
}
}Não dependa de outros campos. Durante uma troca de plano, instances e readyInstances ajudam a acompanhar o andamento; para o estado da troca, use plan_change em GET /v1/project/:id (Informações de projetos).
Um banco parado responde status: "stopped" em qualquer mecanismo. Se o projeto não existir na organização ou não for um banco, a resposta é 404 com database project not found; um :id em formato inválido retorna 400.
Limite: 50 requisições por minuto.
Consultar a conexão
GET /v1/project/:id/database/connection{
"status": "success",
"message": "got database connection successfully",
"data": {
"host": "<host>",
"port": 5432,
"database": "<database>",
"username": "<username>",
"connectionStringRO": "postgresql://<username>:********@<host-leitura>:5432/<database>",
"connectionString": "postgresql://<username>:********@<host>:5432/<database>"
}
}A senha nunca é devolvida por esta rota: as strings de conexão vêm com a senha mascarada como ********. connectionStringRO aparece apenas quando o banco tem endpoint somente leitura (PostgreSQL com 2 ou mais instâncias, por exemplo). Bancos ClickHouse também retornam httpsPort. Se você perdeu a senha, renove-a com a rota abaixo. Projeto inexistente ou que não é banco retorna 404 com database project not found.
Limite: 50 requisições por minuto.
Listar aplicações vinculadas
GET /v1/project/:id/database/linked-applicationsLista as aplicações que usam este banco e os nomes das variáveis de ambiente que receberam a conexão: as criadas junto com o banco a partir de um template e as ligadas por uma conexão interna. O campo via indica a origem do vínculo (template, connection ou ambos). Aplicações excluídas não aparecem. Consulte antes de renovar a senha para saber quais aplicações precisarão de novas credenciais. Só aparecem aplicações que a credencial pode ler (project.read). Projeto inexistente retorna 404; projeto que não é banco retorna 400.
{
"status": "success",
"data": {
"linked_applications": [
{ "project_id": "6650f1a2b3c4d5e6f7a8b9c0", "variable_names": ["DATABASE_URL"], "via": ["template"] }
]
}
}Evite consultas repetidas: a resposta da renovação de senha também traz essa lista.
Limite: 50 requisições por minuto.
Renovar a senha
PATCH /v1/project/:id/database/passwordGera uma nova senha aleatória para o banco PostgreSQL, MariaDB ou ClickHouse. Envie um corpo vazio ({}). A operação é síncrona: a resposta 200 só chega depois que a nova senha foi aplicada, e a senha anterior deixa de funcionar. Atualize as aplicações que usam o banco. Para Key Value, cache e fila, use a rotação de credencial de serviços gerenciados.
{
"status": "success",
"message": "database credentials updated with success",
"data": {
"password": "<nova-senha>",
"linked_applications": [
{ "project_id": "6650f1a2b3c4d5e6f7a8b9c0", "variable_names": ["DATABASE_URL"], "via": ["template"] }
]
}
}A nova senha aparece somente nesta resposta, enviada com Cache-Control: no-store. Guarde-a em local seguro antes de descartar a resposta.
O banco precisa estar em running. Se a renovação falhar no meio, a Zenifra restaura a credencial anterior. Enquanto uma renovação estiver aberta, parar o banco, trocar o plano, mudar instâncias ou armazenamento respondem 409 com PROJECT_OPERATION_IN_PROGRESS.
| Código | Situação |
|---|---|
404 | Projeto não encontrado |
409 | DATABASE_CREDENTIAL_ROTATION_IN_PROGRESS: já existe uma renovação em andamento ou em recuperação |
409 | PROJECT_OPERATION_IN_PROGRESS: outra operação está em andamento no projeto |
409 | PROJECT_STATE_CONFLICT: o banco não está em running |
422 | PROJECT_OPERATION_NOT_SUPPORTED: o projeto não é PostgreSQL, MariaDB ou ClickHouse |
503 | DATABASE_CREDENTIAL_ROTATION_FAILED: a renovação não pôde ser concluída; tente novamente |
Limite: 5 requisições por minuto.
Atualizar a versão
PATCH /v1/project/:id/database/version| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
version | string | Sim | Versão principal de destino, entre as oferecidas pelo plano do banco: PostgreSQL 16, 17 ou 18; MariaDB 11. Consulte as versões de cada plano em GET /v1/project/database/catalog |
{
"version": "18"
}{
"status": "success",
"message": "database version updated with success"
}A troca só avança de versão: não é possível voltar para uma versão anterior. O banco precisa estar em running. Faça backup e valide a compatibilidade da aplicação antes de trocar de versão. ClickHouse tem uma única versão disponível e não aceita esta operação.
| Código | Situação |
|---|---|
400 | version ausente ou DATABASE_VERSION_NOT_AVAILABLE: a versão não é oferecida pelo plano do banco |
404 | Projeto não encontrado |
409 | DATABASE_VERSION_ALREADY_CURRENT: o banco já está na versão pedida |
409 | DATABASE_VERSION_DOWNGRADE_NOT_SUPPORTED: a versão pedida é anterior à atual (Database versions cannot be downgraded) |
409 | PROJECT_STATE_CONFLICT: o banco não está em running; ou PROJECT_OPERATION_IN_PROGRESS: outra operação está em andamento |
422 | PROJECT_OPERATION_NOT_SUPPORTED: o projeto não é PostgreSQL ou MariaDB (ClickHouse, Key Value, aplicações HTTP, Jobs e previews) |
500 | Falha ao aplicar a nova versão |
Limite: 5 requisições por minuto.
Exemplos
curl "https://api.zenifra.com/v1/project/6650f1a2b3c4d5e6f7a8b9c1/database/connection" \
-H "x-api-key: znf_..."
curl -X PATCH "https://api.zenifra.com/v1/project/6650f1a2b3c4d5e6f7a8b9c1/database/password" \
-H "x-api-key: znf_..." \
-H "Content-Type: application/json" \
-d '{}'Próximos passos
- Conheça planos e limites em Planos de banco de dados.
- Libere o acesso de origem certa ao criar o banco com
network_access, descrito em Criar, listar e remover projetos. - Acompanhe uso e custos em Cobrança do projeto.
- Consulte métricas em Métricas e Logs.
Última atualização em