Pular para conteúdo

API: Tenants

Visão Geral

Gerenciamento de tenants (empresas/organizações). Apenas SuperAdmins têm acesso a estes endpoints.

Endpoints

GET /api/tenants

Lista todos os tenants.

Autorização: SuperAdmin

Response (200 OK):

[
  {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "name": "Empresa XYZ",
    "slug": "empresa-xyz",
    "isActive": true,
    "createdAt": "2024-01-15T10:00:00Z"
  }
]


GET /api/tenants/{id}

Retorna detalhes de um tenant.

Autorização: SuperAdmin

Response (200 OK):

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "name": "Empresa XYZ",
  "slug": "empresa-xyz",
  "settings": null,
  "isActive": true,
  "createdAt": "2024-01-15T10:00:00Z",
  "updatedAt": "2024-01-15T10:00:00Z"
}


POST /api/tenants

Cria um novo tenant.

Autorização: SuperAdmin

Request:

{
  "name": "Empresa XYZ",
  "slug": "empresa-xyz",
  "isActive": true
}

Response (201 Created):

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "name": "Empresa XYZ",
  "slug": "empresa-xyz"
}


PUT /api/tenants/{id}

Atualiza um tenant.

Autorização: SuperAdmin

Request:

{
  "name": "Empresa XYZ Ltda",
  "slug": "empresa-xyz",
  "isActive": true
}


DELETE /api/tenants/{id}

Remove um tenant e todos os dados associados.

Autorização: SuperAdmin

Response: 204 No Content

Atenção: Esta operação remove em cascata: - Usuários - Agentes - Instâncias - Conversas - Modelos de IA


Validações

Campo Regra
Name Obrigatório, máx 100 caracteres
Slug Obrigatório, único, apenas letras minúsculas, números e hífens

Multi-tenancy

O sistema implementa isolamento de dados por tenant:

  1. Query Filters: Todas as entidades com TenantId são filtradas automaticamente
  2. JWT: Token contém tenant_id claim
  3. TenantProvider: Extrai TenantId do token para cada request

SuperAdmin

  • TenantId = null no JWT
  • Acesso a todos os tenants
  • Pode gerenciar tenants, usuários globais, configurações do sistema

Erros Comuns

Status Código Descrição
404 TENANT_NOT_FOUND Tenant não encontrado
409 SLUG_EXISTS Slug já em uso
403 FORBIDDEN Usuário não é SuperAdmin