API Keys da Organização
API keys globais permitem automatizar operações da Zenifra sem usar a sessão pessoal de um usuário. Cada chave pertence a uma organização, registra quem criou, respeita RBAC e pode ser limitada por IP de origem.
Use esse recurso para CI/CD, scripts internos, jobs de operação e integrações server-side.
Criar uma API key
No console da organização:
- acesse Chaves de API no menu lateral;
- clique em Criar chave de API;
- informe um nome descritivo;
- escolha as permissões necessárias, partindo de um modelo de política, de políticas reutilizáveis ou de ajustes manuais;
- escolha a expiração (30, 60, 90 dias, 1 ano, data personalizada ou sem expiração; o padrão é 90 dias) e, opcionalmente, os IPs permitidos;
- copie a chave exibida após a criação.

Vídeo: preenchendo uma chave de API da organização e uma chave de IA.
A chave completa aparece apenas uma vez. Depois disso, o console mostra somente metadados, como status, quem criou, último acesso, último IP e expiração, além de um preview parcial da chave.
Você só pode conceder a uma API Key permissões que você já possui na organização. Criar chaves exige api_key.create em organization:*; o owner já tem esse acesso.
Quando a criação é feita por outra API Key, a chave nova não pode ultrapassar as restrições da chave que chamou: se a chave chamadora expira, a nova precisa expirar na mesma data ou antes (sem expiração não é aceito); se a chave chamadora tem IPs permitidos, a nova precisa informar uma lista contida nela. Caso contrário, a API responde 403 com code: "API_KEY_RESTRICTIONS_EXCEEDED".
Editar uma API key
Na lista de chaves, use Editar para alterar o nome, a expiração e os IPs permitidos de uma chave ativa ou expirada. Definir uma nova data futura em uma chave expirada volta a liberá-la. As permissões não podem ser editadas: para mudar o escopo, crie uma nova chave e revogue a antiga.
Editar exige api_key.update na chave (ou em api_key:*); o owner já tem esse acesso. Chaves revogadas não podem ser editadas e respondem 404. Uma API Key não pode editar a si mesma (403), e a edição feita por outra API Key segue a mesma regra da criação: a expiração e os IPs permitidos não podem ultrapassar os da chave que chamou (403 API_KEY_RESTRICTIONS_EXCEEDED).
Pela API:
curl -X PATCH https://api.zenifra.com/v1/organizations/<organization-id>/api-keys/<api-key-id> \
-H "Authorization: Bearer znf_sua_chave" \
-H "Content-Type: application/json" \
-d '{"expires_at": "2027-01-31T23:59:00.000Z"}'O corpo aceita name, allowed_ips e expires_at (data futura ou null para remover a expiração).
Aviso de expiração
Quando faltam 30 dias para uma chave expirar, a Zenifra envia um e-mail para quem criou a chave e para o responsável pela organização, com o nome da chave, o preview e a data de expiração. Para manter a automação funcionando, estenda a expiração pela edição ou faça a rotação da chave.
Usar em requisições HTTP
Envie a API key em um header de autenticação:
curl https://api.zenifra.com/v1/project \
-H "Authorization: Bearer znf_sua_chave"Também é aceito:
curl https://api.zenifra.com/v1/project \
-H "x-api-key: znf_sua_chave"Prefira Authorization: Bearer para manter compatibilidade com a CLI e ferramentas HTTP comuns.
Usar com a CLI
Em automações, use variável de ambiente:
export ZENIFRA_API_KEY=znf_sua_chave
zenifra projects --type http --page 1 --limit 15
zenifra deploy --project <project-id> --branch mainPara salvar localmente:
zenifra auth api-key --key znf_sua_chaveComo a API key já é vinculada a uma organização, comandos de automação não precisam de org set. Comandos pessoais, como listar organizações, continuam exigindo login de usuário.
Permissões e escopo
A API key usa o mesmo modelo de permissões da organização. Conceda apenas o necessário para a automação.
Exemplos:
- deploy de um projeto específico;
- leitura de logs e métricas;
- criação de projeto via pipeline;
- consulta de builds;
- rotação controlada de recursos operacionais.
Se uma chave vazar, o impacto fica limitado às permissões concedidas e aos IPs permitidos.
Escopo efetivo
A cada requisição, a chave vale somente a interseção entre os scopes concedidos a ela e as permissões atuais de quem a criou na organização (diretas ou herdadas de políticas). Chaves criadas pelo owner valem o escopo integral concedido a elas enquanto ele continuar owner.
- Se o criador perde uma permissão, por mudança de papel, de permissões diretas, de políticas vinculadas ou pela edição ou remoção de uma política, a chave perde o mesmo acesso na hora, sem precisar ser editada. Se ele voltar a receber a permissão, a chave volta a valer até o limite dos próprios scopes.
- Se o criador deixa de ser membro ativo da organização ou exclui a conta, a chave deixa de autenticar e as requisições recebem
401. - Na transferência de propriedade, o antigo
ownerpassa a sermembersem permissões, então as chaves criadas por ele deixam de ter acesso até que o novoownerconceda permissões a ele. Antes de transferir, crie as chaves das automações críticas com o novoownerou com um membro dedicado.
Ao criar um projeto com uma API Key, a própria chave recebe project.read, project.image.update e project.deploy.trigger no projeto novo, para que o pipeline consiga publicar nele. Quem criou a chave, quando não é owner, recebe os mesmos grants.
Catálogo completo de scopes
O campo permissions.resources aceita os scopes abaixo. Use * somente quando a automação realmente precisar de todos os recursos daquele tipo; para menor privilégio, informe o ID da organização, projeto, banco, serviço ou chave correspondente.
Projetos e Previews
| Scope | Uso |
|---|---|
project.create | Criar aplicações HTTP e Jobs agendados, inclusive a partir de templates. Use em organization:*. |
project.read | Consultar um projeto específico. |
project.logs.read | Consultar logs, builds e logs de execuções de Jobs. |
project.metrics.read | Consultar métricas, capacidade e uso operacional. |
project.network.visitors.read | Consultar dados de visitantes: eventos individuais de requisição (com IP de origem e user agent) e IPs de origem com maior volume. |
project.billing.read | Consultar uso e custos de um projeto ou de seus Previews. |
project.env.read | Consultar variáveis de ambiente sem expor a chave. |
project.env.update | Atualizar variáveis de ambiente. |
project.name.update | Alterar o nome do projeto. |
project.description.update | Alterar a descrição do projeto. |
project.domain.update | Alterar exposição, domínio e domínios personalizados. |
project.network.update | Alterar regras de acesso de rede. |
project.instances.update | Alterar instâncias, auto-scaling, health check e alertas. |
project.image.update | Alterar a imagem publicada. |
project.source.update | Consultar ou alterar a integração de código. |
project.schedule.update | Alterar o agendamento de um Job agendado. |
project.job-run.cancel | Cancelar uma execução em andamento de um Job agendado. |
project.deploy.trigger | Acionar uma publicação. |
project.stop | Parar um projeto. |
project.resume | Retomar um projeto. |
project.plan.update | Alterar plano ou renovação automática. |
project.storage.update | Alterar o tamanho do armazenamento. |
project.delete | Remover um projeto. |
project.preview.read | Consultar as configurações, os planos, a lista e o detalhe de Previews e acompanhar suas operações. |
project.preview.configure | Habilitar ou alterar as configurações de Preview. |
project.preview.deploy | Criar ou atualizar um Preview, consultar seu detalhe e acompanhar sua operação. Criar ou atualizar também exige project.env.read ou project.image.update no projeto principal. |
project.preview.delete | Remover um Preview. |
Templates
| Scope | Uso |
|---|---|
template.create | Criar um template privado. Use em organization:*. |
template.read | Consultar um template autorizado. |
template.update | Editar um template autorizado. |
template.publish | Publicar ou tornar privado um template. |
template.delete | Remover um template. |
Bancos de dados
| Scope | Uso |
|---|---|
database.create | Criar PostgreSQL, MariaDB ou ClickHouse (Analytics). Use em organization:*. |
database.status.read | Consultar o estado de um banco. |
database.connection.read | Consultar dados de conexão autorizados. |
database.password.rotate | Solicitar rotação de senha. |
database.version.update | Atualizar a versão do banco. |
Serviços gerenciados
| Scope | Uso |
|---|---|
managed_service.create | Criar serviços Valkey com perfil Key-Value, Cache ou Queue. Use em organization:*. |
managed_service.read | Não exposto atualmente a API Keys da organização. |
managed_service.status.read | Consultar o estado de um serviço. |
managed_service.connection.read | Consultar dados de conexão sem credencial. |
managed_service.credentials.rotate | Solicitar rotação de credencial. |
managed_service.version.update | Não exposto atualmente a API Keys da organização. |
managed_service.metrics.read | Não exposto atualmente a API Keys da organização. |
managed_service.lifecycle.update | Não exposto atualmente a API Keys da organização. |
managed_service.delete | Não exposto atualmente a API Keys da organização. |
IA
| Scope | Uso |
|---|---|
ai_key.create | Criar uma chave de IA. Use em organization:*. |
ai_key.read | Consultar uma chave de IA autorizada. |
ai_key.update | Alterar o orçamento de uma chave de IA. |
ai_key.delete | Remover uma chave de IA. |
ai_usage.read | Consultar uso e custos de IA; pode ser limitado ao ID de uma chave de IA. |
API Keys da organização
| Scope | Uso |
|---|---|
api_key.create | Criar uma API Key da organização. Use em organization:*. |
api_key.read | Consultar API Keys autorizadas. |
api_key.update | Editar nome, expiração e IPs permitidos de uma API Key autorizada. |
api_key.delete | Revogar uma API Key autorizada. |
Billing
| Scope | Uso |
|---|---|
billing.read | Consultar a configuração de pagamento da organização. |
billing.payment.configure | Configurar método de pagamento ou iniciar sua vinculação. |
billing.transactions.read | Consultar transações da organização. |
billing.checkout.create | Criar checkout em uma integração autorizada. |
Administração da organização
| Scope | Uso |
|---|---|
member.invite | Convidar um membro. Somente com sessão de usuário; não funciona com API Key. |
member.permissions.update | Alterar permissões e políticas de membros. Somente com sessão de usuário; não funciona com API Key. |
Administração de membros, convites e políticas, além de ações pessoais como listar organizações, aceitar convites e alterar dados da conta, exigem uma sessão de usuário.
Chave mínima para operar um Preview
Depois que Preview estiver habilitado no projeto principal, uma automação que só precisa criar/atualizar, consultar e remover o Preview deve receber apenas estes grants no projeto principal:
{
"resources": {
"project": {
"<project-id>": [
"project.read",
"project.env.read",
"project.preview.read",
"project.preview.deploy",
"project.preview.delete"
]
}
}
}O Preview herda as variáveis de ambiente do projeto principal, por isso criar ou atualizar um Preview exige project.env.read ou project.image.update no projeto principal. Sem nenhum dos dois, a API responde 403 com code: "PREVIEW_ENV_ACCESS_REQUIRED".
project.preview.configure não é necessário para o ciclo operacional. As configurações de Preview aceitam API Key da organização: consultá-las exige project.preview.read e alterá-las exige project.preview.configure. Conceda project.preview.configure somente à automação que realmente precisa habilitar ou alterar Previews. Para consultar custos dos Previews, adicione project.billing.read separadamente.
Requisito mínimo por operação
Cada scope abaixo é limitado ao mesmo project-id do projeto principal:
| Operação | Scope mínimo | Resource ID |
|---|---|---|
| Consultar o projeto principal | project.read | project:<project-id> |
| Consultar configurações, planos e lista de Previews | project.preview.read | project:<project-id> |
| Alterar as configurações de Preview | project.preview.configure | project:<project-id> |
| Criar ou atualizar um Preview | project.preview.deploy e project.env.read (ou project.image.update) | project:<project-id> |
| Consultar o detalhe ou a operação do Preview | project.preview.read ou project.preview.deploy | project:<project-id> |
| Remover um Preview | project.preview.delete | project:<project-id> |
| Consultar custos dos Previews | project.billing.read | project:<project-id>; opcional |
Assim, a automação que executa o ciclo completo precisa exatamente dos cinco scopes do exemplo anterior. Não adicione project.preview.configure se a automação não altera as configurações de Preview.
IP allowlist
Ao criar a chave, informe IPs fixos que podem chamar a API. Quando a lista está preenchida, requisições vindas de outro IP são recusadas com 403 e code: "API_KEY_IP_NOT_ALLOWED".
Use IP allowlist quando a automação roda em:
- runners próprios;
- servidores internos;
- NAT corporativo;
- jobs com egress IP conhecido.
O campo aceita IPv4 e IPv6 literal. CIDR não é aceito. Endereços IPv4 representados em IPv6 (como ::ffff:203.0.113.10) são comparados como o IPv4 correspondente.
Revogação e rotação
Revogue uma chave quando:
- ela não é mais usada;
- o responsável saiu da equipe (ao remover um membro da organização, ou quando ele exclui a conta, as API Keys e as chaves de IA criadas por ele são revogadas automaticamente);
- o IP de origem mudou;
- há suspeita de vazamento;
- as permissões ficaram amplas demais.
Para rotação segura, crie uma nova chave, atualize a automação, valide o uso e revogue a antiga.
Próximos passos
Última atualização em
Permissões Granulares em Organizações
Configure permissões por membro, recurso e ação, diretamente ou com políticas reutilizáveis, para proteger projetos, bancos, billing, origens Git, chaves de IA e API keys globais.
Segurança, privacidade e confiabilidade
Práticas de segurança da Zenifra para organizações, permissões, segredos, API keys, bancos, logs, LGPD e operação.