API de serviços gerenciados
Estas rotas permitem consultar o catálogo Valkey e operar um projeto gerenciado existente. A criação continua sendo feita pela rota pública de projetos com config.type_project: "valkey", config.profile e o plano correspondente.
Autenticação e permissões
Envie um token de sessão com o contexto da organização:
Authorization: Bearer <token>
x-organization-id: <organization-id>Para automações, use uma API Key da organização (x-api-key: znf_... ou Authorization: Bearer znf_...); nesse caso, x-organization-id é dispensável, porque a organização vem da própria chave. O catálogo público não exige esses cabeçalhos.
Com token de sessão, o cabeçalho de organização seleciona o contexto de cobrança e autorização quando o usuário participa de mais de uma organização. A API Key deve permanecer em um secret manager, nunca em um arquivo versionado. Para leituras, trate 404 como projeto inacessível ou inexistente sem tentar adivinhar IDs. Para rotação, mostre a resposta somente ao operador autorizado, atualize o secret da aplicação e descarte a senha da memória assim que os clientes forem reiniciados.
As operações do projeto exigem as permissões correspondentes ao recurso managed_service. Para criar Key-Value, Cache ou Queue pela rota de projetos, conceda managed_service.create em organization:*; para operar um serviço específico, use o ID do projeto:
| Operação | Permissão |
|---|---|
| Criar Key-Value, Cache ou Queue | managed_service.create em organization:* |
| Consultar estado | managed_service.status.read em managed_service:<project-id> |
| Consultar conexão mascarada | managed_service.connection.read em managed_service:<project-id> |
| Rotacionar credencial e listar aplicações vinculadas | managed_service.credentials.rotate em managed_service:<project-id> |
owner tem acesso completo na sessão de usuário. assistant, member e API Keys da organização precisam do grant específico. Os scopes managed_service.read, managed_service.version.update, managed_service.metrics.read, managed_service.lifecycle.update e managed_service.delete estão no catálogo, mas não possuem rota de API Key exposta atualmente.
Catálogo
GET /v1/managed-services/catalogNão exige autenticação. O catálogo informa a versão do Valkey, moeda, perfis, planos, preços por hora/mês/ano, benefícios, armazenamento incluído e disponibilidade pública de alta disponibilidade.
{
"status": "success",
"data": {
"engine": "valkey",
"version": "9.1.1",
"currency": "brl",
"profiles": [
{ "id": "key_value", "persistence": true },
{ "id": "cache", "persistence": false },
{ "id": "queue", "persistence": true }
],
"plans": [
{
"id": "queue-basic",
"profile": "queue",
"prices": { "hourly": 13, "monthly": 7490, "yearly": 74990 },
"features": ["1 vCPU", "1 GiB de RAM", "Alta disponibilidade com uma primária e duas réplicas"],
"included_storage_gb": 5,
"high_availability": { "key_value": true, "cache": false, "queue": true }
}
]
}
}Exemplo reduzido. high_availability indica, por perfil, se o plano tem alta disponibilidade. Os valores são centavos de BRL. Consulte o catálogo no momento da execução; não fixe preços em automações.
Consultar o estado
GET /v1/managed-services/:id/statusResposta reduzida:
{
"status": "success",
"data": {
"id": "<project-id>",
"status": "running",
"engine": "valkey",
"profile": "queue",
"version": "9.1.1",
"persistence": true,
"instances": 3
}
}Consultar a conexão
GET /v1/managed-services/:id/connectionA senha nunca é recuperada por esta rota:
{
"status": "success",
"data": {
"host": "valkey-<project-id>.managed.zenifra.com",
"port": "<porta>",
"username": "default",
"tls": true,
"connection_string": "valkeys://default:********@valkey-<project-id>.managed.zenifra.com:<porta>/0"
}
}Listar aplicações vinculadas
GET /v1/managed-services/:id/linked-applicationsLista as aplicações que usam o serviço e os nomes das variáveis de ambiente que receberam a conexão. Consulte antes de rotacionar a credencial para saber quais aplicações precisarão do novo segredo. O campo via indica a origem do vínculo: template (criada junto em um template) ou connection (conexão interna). Só aparecem aplicações que a credencial pode ler; aplicações excluídas não aparecem. Exige managed_service.credentials.rotate no serviço.
{
"status": "success",
"data": {
"linked_applications": [
{ "project_id": "6650f1a2b3c4d5e6f7a8b9c0", "variable_names": ["VALKEY_URL"], "via": ["connection"] }
]
}
}Rotacionar a credencial
A rotação é assíncrona e idempotente. Primeiro solicite a rotação; depois acompanhe a operação até a conclusão, quando a nova conexão é devolvida.
1. Solicitar a rotação
PATCH /v1/managed-services/:id/credentials
Idempotency-Key: <chave-unica-de-16-a-200-caracteres>O cabeçalho Idempotency-Key é obrigatório e aceita de 16 a 200 caracteres (A-Z, a-z, 0-9, ., _ e -). O serviço precisa estar em running, sem outra operação em andamento. A API responde 202:
{
"status": "accepted",
"data": {
"operation_id": "<operation-id>",
"state": "accepted"
}
}Repetir a solicitação com a mesma Idempotency-Key não inicia outra rotação: a API responde 202 com a mesma operação, no estado em que ela estiver.
2. Acompanhar a operação
GET /v1/managed-services/:id/credential-rotations/:operationIdConsulte em intervalos limitados até state chegar a um estado final. Enquanto a rotação não termina, a resposta traz apenas operation_id, state e credential_version. Quando a rotação é concluída (state: completed), a resposta inclui a nova conexão, com a senha, e você deve atualizar o secret da aplicação antes de descartar o valor anterior:
{
"status": "success",
"data": {
"operation_id": "<operation-id>",
"state": "completed",
"credential_version": 2,
"username": "default",
"host": "valkey-<project-id>.managed.zenifra.com",
"port": "<porta>",
"tls": true,
"connection_string": "valkeys://default:<nova-senha>@valkey-<project-id>.managed.zenifra.com:<porta>/0"
}
}Os estados são accepted, running, completed e failed. A operação é tentada no máximo 5 vezes, dentro de um prazo de 1 hora, e sempre termina em completed ou failed. Um failed pode ser seguido de nova tentativa automática dentro desse prazo; enquanto isso, uma nova solicitação recebe 409. Depois do prazo, solicite uma nova rotação com outra Idempotency-Key.
Mostre a resposta somente ao operador autorizado; ela é enviada com Cache-Control: no-store. Se a consulta ainda não trouxer a conexão, repita a chamada.
Erros comuns
| Código | Situação |
|---|---|
400 | ID, parâmetros ou Idempotency-Key inválidos ou ausentes |
401 | Sessão ou API Key ausente/inválida |
403 | Permissão da organização insuficiente (insufficient organization permission) |
404 | Serviço gerenciado inexistente ou de outra organização (managed service not found), ou operação de rotação não encontrada (credential rotation not found) |
409 | PROJECT_OPERATION_IN_PROGRESS: já existe uma rotação ou outra operação em andamento |
409 | PROJECT_STATE_CONFLICT: o serviço não está em running (por exemplo, parado) |
409 | O serviço está sendo excluído (managed service is being deleted) |
503 | Catálogo comercial ou operações de serviços gerenciados temporariamente indisponíveis |
Limites de requisições (contados por IP de origem): catálogo 60 por minuto; estado 60 por minuto; conexão 30 por minuto; aplicações vinculadas 50 por minuto; solicitação de rotação 5 a cada 5 minutos; consulta da rotação 60 por minuto.
Próximos passos
Última atualização em
Bancos de dados pela API
Consulte estado e conexão de bancos PostgreSQL, MariaDB e ClickHouse, renove a senha, atualize a versão e liste aplicações vinculadas pela API.
Métricas e Logs
Consulte métricas nativas e de recursos, estados de disponibilidade e logs do seu projeto pelos endpoints estáveis da API da Zenifra.