Membros

O sistema de membros controla quem tem acesso a cada projeto e com qual nível de permissão. Cada membro é associado a um projeto com um papel específico que determina suas capacidades.

Papéis (Roles)

PapelPermissões
adminAcesso total: gerenciar projeto, ambientes, membros, push/pull de segredos, re-key do vault
developerPush/pull de segredos, criar e editar ambientes. Sem acesso a gerenciamento de membros
viewerApenas leitura: listar projetos, ambientes e nomes de segredos (sem valores)
text
https://api.criptenv.dev/v1/projects/{project_id}/members

POST Convidar Membro

Envia um convite para um usuário participar do projeto. Se o usuário ainda não possui conta no CriptEnv, ele receberá um email de convite. Requer papel de admin.

text
POST /v1/projects/{project_id}/members
ParâmetroTipoDescrição
project_idobrigatóriostringID do projeto (path parameter)
emailobrigatóriostringEmail do usuário a ser convidado
roleobrigatóriostringPapel do membro: admin, developer ou viewer
Exemplo — Convidar membro
curl -X POST "https://api.criptenv.dev/v1/projects/proj_k8j2m4n6/members" \
  -H "Authorization: Bearer cek_a1b2c3d4e5f6" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "maria@exemplo.com",
    "role": "developer"
  }'
201Created
json
{
  "data": {
    "id": "mbr_r3s5t7u9",
    "project_id": "proj_k8j2m4n6",
    "user": {
      "id": "usr_d4e5f6g7",
      "email": "maria@exemplo.com",
      "name": "Maria Santos"
    },
    "role": "developer",
    "status": "pending",
    "invited_at": "2025-01-20T14:30:00Z",
    "invited_by": "usr_a1b2c3d4"
  }
}
409Conflict
json
{
  "error": {
    "code": "already_member",
    "message": "Este usuário já é membro do projeto."
  }
}

Info

Quando o papel é admin ou developer, o membro precisa da senha mestra do projeto (compartilhada criptograficamente) para acessar os segredos. O papel viewer não necessita da senha, pois só vê metadados.

GET Listar Membros

Retorna todos os membros de um projeto, incluindo seus papéis e status.

text
GET /v1/projects/{project_id}/members
ParâmetroTipoDescrição
project_idobrigatóriostringID do projeto (path parameter)
pageintegerNúmero da páginaPadrão: 1
per_pageintegerItens por páginaPadrão: 20
rolestringFiltrar por papel: admin, developer ou viewer
statusstringFiltrar por status: active, pending ou revoked
Exemplo — Listar membros
curl -X GET "https://api.criptenv.dev/v1/projects/proj_k8j2m4n6/members" \
  -H "Authorization: Bearer cek_a1b2c3d4e5f6"
200OK
json
{
  "data": [
    {
      "id": "mbr_a1b2c3d4",
      "user": {
        "id": "usr_a1b2c3d4",
        "email": "joao@exemplo.com",
        "name": "João Silva"
      },
      "role": "admin",
      "status": "active",
      "joined_at": "2025-01-10T08:00:00Z"
    },
    {
      "id": "mbr_r3s5t7u9",
      "user": {
        "id": "usr_d4e5f6g7",
        "email": "maria@exemplo.com",
        "name": "Maria Santos"
      },
      "role": "developer",
      "status": "pending",
      "invited_at": "2025-01-20T14:30:00Z"
    }
  ],
  "pagination": {
    "page": 1,
    "per_page": 20,
    "total": 2,
    "total_pages": 1
  }
}

PATCH Atualizar Papel do Membro

Altera o papel de um membro existente. Requer papel de admin. O último admin do projeto não pode ter seu papel rebaixado.

text
PATCH /v1/projects/{project_id}/members/{member_id}
ParâmetroTipoDescrição
project_idobrigatóriostringID do projeto (path parameter)
member_idobrigatóriostringID do membro (path parameter)
roleobrigatóriostringNovo papel: admin, developer ou viewer
Exemplo — Promover membro para admin
curl -X PATCH "https://api.criptenv.dev/v1/projects/proj_k8j2m4n6/members/mbr_r3s5t7u9" \
  -H "Authorization: Bearer cek_a1b2c3d4e5f6" \
  -H "Content-Type: application/json" \
  -d '{
    "role": "admin"
  }'
200OK
json
{
  "data": {
    "id": "mbr_r3s5t7u9",
    "project_id": "proj_k8j2m4n6",
    "user": {
      "id": "usr_d4e5f6g7",
      "email": "maria@exemplo.com",
      "name": "Maria Santos"
    },
    "role": "admin",
    "status": "active",
    "updated_at": "2025-01-20T15:00:00Z"
  }
}

Info

Ao promover um membro para admin, ele terá acesso a gerenciar outros membros e re-criptografar o vault. Certifique-se de que essa pessoa é de confiança.

DELETE Remover Membro

Remove um membro do projeto. Requer papel de admin. Após remover um membro, considere executar um re-key no vault para garantir forward secrecy.

text
DELETE /v1/projects/{project_id}/members/{member_id}
ParâmetroTipoDescrição
project_idobrigatóriostringID do projeto (path parameter)
member_idobrigatóriostringID do membro a ser removido (path parameter)
Exemplo — Remover membro
curl -X DELETE "https://api.criptenv.dev/v1/projects/proj_k8j2m4n6/members/mbr_r3s5t7u9" \
  -H "Authorization: Bearer cek_a1b2c3d4e5f6"
204No Content

Resposta vazia — o membro foi removido do projeto.

Info

Após remover um membro que tinha acesso aos segredos (admin ou developer), execute POST /v1/projects/{id}/vault/re-key para re-criptografar todos os segredos com uma nova chave. Isso garante que o membro removido não possa mais acessar os dados, mesmo que tenha copiado a chave anteriormente.

Fluxo Completo de Onboarding

1. Convidar → 2. Aceitar → 3. Compartilhar chave
# 1. Admin convida o novo membro
curl -X POST "https://api.criptenv.dev/v1/projects/proj_k8j2m4n6/members" \
  -H "Authorization: Bearer cek_admin_key" \
  -H "Content-Type: application/json" \
  -d '{"email": "dev@exemplo.com", "role": "developer"}'

# 2. Novo membro aceita o convite (via dashboard ou API)
# O status muda de "pending" para "active"

# 3. Admin compartilha a chave mestra do projeto (criptografada com a chave pública do novo membro)
# Isso permite que o novo membro descriptografe os segredos