Projetos

Projetos são a unidade organizacional principal do CriptEnv. Cada projeto contém ambientes e segredos, e pode ter múltiplos membros com diferentes papéis.

text
https://api.criptenv.dev/v1/projects

POST Criar Projeto

Cria um novo projeto. O usuário autenticado torna-se automaticamente o proprietário (admin) do projeto.

text
POST /v1/projects

Parâmetros do Body

ParâmetroTipoDescrição
nameobrigatóriostringNome do projeto (3-64 caracteres, slug-friendly)
descriptionstringDescrição opcional do projeto (máx: 256 caracteres)
encryptionstringAlgoritmo de criptografia. Opções: aes-256-gcmPadrão: aes-256-gcm
Exemplo — Criar projeto
curl -X POST "https://api.criptenv.dev/v1/projects" \
  -H "Authorization: Bearer cek_a1b2c3d4e5f6" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "meu-app",
    "description": "Backend do aplicativo principal"
  }'
201Created
json
{
  "data": {
    "id": "proj_k8j2m4n6",
    "name": "meu-app",
    "description": "Backend do aplicativo principal",
    "encryption": "aes-256-gcm",
    "created_at": "2025-01-15T10:30:00Z",
    "updated_at": "2025-01-15T10:30:00Z",
    "owner_id": "usr_a1b2c3d4"
  }
}

GET Listar Projetos

Retorna todos os projetos dos quais o usuário autenticado é membro. Suporta paginação e filtros.

text
GET /v1/projects

Query Parameters

ParâmetroTipoDescrição
pageintegerNúmero da páginaPadrão: 1
per_pageintegerItens por página (máx: 100)Padrão: 20
searchstringBusca por nome do projeto
Exemplo — Listar projetos
curl -X GET "https://api.criptenv.dev/v1/projects?page=1&per_page=10" \
  -H "Authorization: Bearer cek_a1b2c3d4e5f6"
200OK
json
{
  "data": [
    {
      "id": "proj_k8j2m4n6",
      "name": "meu-app",
      "description": "Backend do aplicativo principal",
      "created_at": "2025-01-15T10:30:00Z",
      "member_count": 3,
      "environment_count": 2
    },
    {
      "id": "proj_m2n4p6q8",
      "name": "frontend-app",
      "description": "Aplicação React",
      "created_at": "2025-01-10T08:00:00Z",
      "member_count": 5,
      "environment_count": 3
    }
  ],
  "pagination": {
    "page": 1,
    "per_page": 10,
    "total": 2,
    "total_pages": 1
  }
}

GET Obter Projeto por ID

Retorna os detalhes completos de um projeto específico, incluindo metadados de ambientes e contagem de segredos.

text
GET /v1/projects/{project_id}

Path Parameters

ParâmetroTipoDescrição
project_idobrigatóriostringID do projeto (ex: proj_k8j2m4n6)
Exemplo — Obter projeto
curl -X GET "https://api.criptenv.dev/v1/projects/proj_k8j2m4n6" \
  -H "Authorization: Bearer cek_a1b2c3d4e5f6"
200OK
json
{
  "data": {
    "id": "proj_k8j2m4n6",
    "name": "meu-app",
    "description": "Backend do aplicativo principal",
    "encryption": "aes-256-gcm",
    "created_at": "2025-01-15T10:30:00Z",
    "updated_at": "2025-01-15T10:30:00Z",
    "owner_id": "usr_a1b2c3d4",
    "member_count": 3,
    "environments": [
      { "id": "env_a1b2c3", "name": "production", "secret_count": 12 },
      { "id": "env_d4e5f6", "name": "staging", "secret_count": 10 }
    ]
  }
}
404Not Found
json
{
  "error": {
    "code": "not_found",
    "message": "Projeto não encontrado."
  }
}

PATCH Atualizar Projeto

Atualiza os metadados de um projeto. Requer papel de admin no projeto.

text
PATCH /v1/projects/{project_id}

Parâmetros do Body

ParâmetroTipoDescrição
namestringNovo nome do projeto
descriptionstringNova descrição do projeto
Exemplo — Atualizar projeto
curl -X PATCH "https://api.criptenv.dev/v1/projects/proj_k8j2m4n6" \
  -H "Authorization: Bearer cek_a1b2c3d4e5f6" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "meu-app-v2",
    "description": "Backend refatorado v2"
  }'
200OK
json
{
  "data": {
    "id": "proj_k8j2m4n6",
    "name": "meu-app-v2",
    "description": "Backend refatorado v2",
    "encryption": "aes-256-gcm",
    "created_at": "2025-01-15T10:30:00Z",
    "updated_at": "2025-01-20T14:22:00Z",
    "owner_id": "usr_a1b2c3d4"
  }
}

DELETE Deletar Projeto

Remove permanentemente o projeto, todos os seus ambientes, segredos e associações de membros. Esta ação é irreversível.

text
DELETE /v1/projects/{project_id}

Info

A exclusão de um projeto é permanente. Todos os segredos criptografados serão removidos e não poderão ser recuperados. Certifique-se de ter um backup antes de executar esta operação.
Exemplo — Deletar projeto
curl -X DELETE "https://api.criptenv.dev/v1/projects/proj_k8j2m4n6" \
  -H "Authorization: Bearer cek_a1b2c3d4e5f6"
204No Content

Resposta vazia — o projeto foi removido com sucesso.

POST Re-encrypt Vault

Re-criptografa todos os segredos do projeto com uma nova chave mestra. Esta operação é necessária quando um membro é removido do projeto para garantir que ele não possa mais acessar os segredos (forward secrecy).

text
POST /v1/projects/{project_id}/vault/rekey
ParâmetroTipoDescrição
new_key_idobrigatóriostringID da nova chave de criptografia gerada no cliente
reencrypted_secretsobrigatórioobject[]Array de segredos re-criptografados com a nova chave
Exemplo — Re-encrypt vault
curl -X POST "https://api.criptenv.dev/v1/projects/proj_k8j2m4n6/vault/rekey" \
  -H "Authorization: Bearer cek_a1b2c3d4e5f6" \
  -H "Content-Type: application/json" \
  -d '{
    "new_key_id": "key_new123abc",
    "reencrypted_secrets": [
      {
        "env_id": "env_a1b2c3",
        "secrets": [
          {
            "name": "DATABASE_URL",
            "ciphertext": "base64_novo_ciphertext",
            "nonce": "base64_nonce",
            "tag": "base64_tag"
          }
        ]
      }
    ]
  }'
200OK
json
{
  "data": {
    "project_id": "proj_k8j2m4n6",
    "reencrypted_count": 25,
    "environments_processed": 3,
    "new_key_id": "key_new123abc",
    "completed_at": "2025-01-20T14:30:00Z"
  }
}