CentralCRM API
Postman
CentralCRM API
Collection completa da API CentralCRM. **Base URL:** `{{baseUrl}}` (default `http://localhost:3000/api`) **Autenticação:** execute `Auth — Login` — o `accessToken` é guardado automaticamente (Bearer nas rotas protegidas). **Tenant:** muitas rotas exigem `tenantId` no JWT ou cabeçalho `x-tenant-id: {{tenantId}}`. **Swagger:** `GET {{baseUrl}}/docs` | OpenAPI JSON: `GET {{baseUrl}}/docs-json` **Atualizado:** 2026-06-06 — inclui diretório (sync roles/contacts), operacional, presença, portal e cadastro completo.
Variáveis
| Chave | Valor |
|---|---|
baseUrl | http://localhost:3000/api |
accessToken | |
tenantId | f1e2d3c4-b5a6-4789-8012-345678901234 |
companyId | 64c6dd93-5fe7-4765-8fe1-87ecc2c194e4 |
parentCompanyId | 64c6dd93-5fe7-4765-8fe1-87ecc2c194e4 |
subTenantId | f1e2d3c4-b5a6-4789-8012-345678901234 |
userId | 413c0c2c-501d-4bd9-bd8c-bf3f488c7bf7 |
addressId | |
documentId | |
estabelecimentoId | |
portalTenantId | |
cnpj | 00000000000191 |
cep | 89010025 |
Meta & Saúde
{{baseUrl}}Root — info da APIGET /api — links para docs e swagger.
{{baseUrl}}/healthHealth checkGET /api/health — estado da BD e dependências.
Auth
{{baseUrl}}/v1/auth/loginLoginPOST /api/v1/auth/login — BD G_DB_POSTGRESS. Guarda accessToken automaticamente.
Headers
| Nome | Valor |
|---|---|
Content-Type | application/json |
Body
{
"email": "usuario@exemplo.com",
"password": "sua-senha",
"tenantId": "{{tenantId}}"
}
{{baseUrl}}/v1/auth/registerRegisterPOST /api/v1/auth/register — cria `public."user"` + tabelas relacionais (G_DB_POSTGRESS). Resposta: UserFullResponseDto.
Headers
| Nome | Valor |
|---|---|
Content-Type | application/json |
Body
{
"nome": "Novo Utilizador",
"email": "novo@exemplo.com",
"password": "SenhaForte123"
}
{{baseUrl}}/v1/auth/logoutLogoutPOST /api/v1/auth/logout — decrementa metadata.sessoesAtivas.
Headers
| Nome | Valor |
|---|---|
Content-Type | application/json |
{{baseUrl}}/v1/auth/users/{{userId}}Get user (full)GET /api/v1/auth/users/:userId — perfil completo (próprio utilizador ou admin).
{{baseUrl}}/v1/auth/users/{{userId}}Patch userPATCH /api/v1/auth/users/:userId — atualização parcial.
Headers
| Nome | Valor |
|---|---|
Content-Type | application/json |
Body
{
"displayName": "Nome Atualizado",
"status": "ativo"
}
{{baseUrl}}/v1/auth/users/{{userId}}/permissionsPatch user permissionsHeaders
| Nome | Valor |
|---|---|
Content-Type | application/json |
Body
{
"grant": ["perm-user-edit"],
"revoke": []
}
CRM Admin — Utilizadores
{{baseUrl}}/v1/crm-admin/usersListar utilizadores (admin)GET /api/v1/crm-admin/users — lista public."user" (apenas admin). BD G_DB_POSTGRESS.
Empresas (global)
{{baseUrl}}/v1/companiesCriar empresaHeaders
| Nome | Valor |
|---|---|
Content-Type | application/json |
x-tenant-id | {{tenantId}} |
Body
{
"razaoSocial": "ACME Serviços LTDA",
"tenantId": "{{tenantId}}"
}
{{baseUrl}}/v1/companies?pageNumber=1&pageSize=10Listar empresas (paginado)CentralCRM — Cadastro completo
{{baseUrl}}/centralcrm/cadastrocompanyPOST cadastrocompanyPOST /api/centralcrm/cadastrocompany — sem prefixo v1. Requer perm-user-edit.
Headers
| Nome | Valor |
|---|---|
Content-Type | application/json |
Body
{
"isFilial": false,
"razaoSocial": "ACME Serviços LTDA",
"nomeFantasia": "ACME",
"cnpj": "12.345.678/0001-90",
"subdominio": "minha-empresa",
"contacts": [
{
"nome": "João Silva",
"email": "joao@acme.com.br",
"criarUsuarioNoSistema": true
}
]
}
Diretório de empresas
{{baseUrl}}/v1/company/directoryCriar empresa no tenantHeaders
| Nome | Valor |
|---|---|
Content-Type | application/json |
x-tenant-id | {{tenantId}} |
Body
{
"razaoSocial": "Nova Empresa SA"
}
{{baseUrl}}/v1/company/directory?pageNumber=1&pageSize=10Listar empresas (tenant)Headers
| Nome | Valor |
|---|---|
x-tenant-id | {{tenantId}} |
{{baseUrl}}/v1/company/directory/{{companyId}}Detalhe do diretório (sync roles)Sincroniza metadata.contacts.role_number ↔ user.role_number, atualiza user.role e devolve contacts com campo `role` (não role_number).
Headers
| Nome | Valor |
|---|---|
x-tenant-id | {{tenantId}} |
{{baseUrl}}/v1/company/directory/{{companyId}}PATCH empresa (metadata)Headers
| Nome | Valor |
|---|---|
Content-Type | application/json |
x-tenant-id | {{tenantId}} |
Body
{
"nomeFantasia": "Nome Atualizado"
}
{{baseUrl}}/v1/company/directory/{{companyId}}/brandingPUT brandingHeaders
| Nome | Valor |
|---|---|
Content-Type | application/json |
x-tenant-id | {{tenantId}} |
Body
{
"corPrincipal": "#191B1F",
"logotipo": "https://cdn.example.com/logo.png"
}
{{baseUrl}}/v1/company/directory/{{companyId}}/addressesPOST endereçoHeaders
| Nome | Valor |
|---|---|
Content-Type | application/json |
x-tenant-id | {{tenantId}} |
Body
{
"cep": "01310-100",
"endereco": "Av. Paulista",
"numero": "1000",
"cidade": "São Paulo",
"estado": "SP",
"principal": true
}
{{baseUrl}}/v1/company/directory/{{companyId}}/addresses/{{addressId}}PATCH endereçoHeaders
| Nome | Valor |
|---|---|
Content-Type | application/json |
x-tenant-id | {{tenantId}} |
Body
{
"complemento": "Sala 10"
}
{{baseUrl}}/v1/company/directory/{{companyId}}/addresses/{{addressId}}DELETE endereçoHeaders
| Nome | Valor |
|---|---|
x-tenant-id | {{tenantId}} |
{{baseUrl}}/v1/company/directory/{{companyId}}/documentsPOST documentoHeaders
| Nome | Valor |
|---|---|
Content-Type | application/json |
x-tenant-id | {{tenantId}} |
Body
{
"tipo": "contrato",
"caminhoArquivo": "https://cdn.example.com/doc.pdf"
}
{{baseUrl}}/v1/company/directory/{{companyId}}/documents/{{documentId}}DELETE documentoHeaders
| Nome | Valor |
|---|---|
x-tenant-id | {{tenantId}} |
Utilizadores por empresa
{{baseUrl}}/v1/company/{{companyId}}/userContagem users da empresaGET /api/v1/company/{companyId}/user — devolve `{ total }`.
Headers
| Nome | Valor |
|---|---|
x-tenant-id | {{tenantId}} |
{{baseUrl}}/v1/company/{{companyId}}/user/with-subcompaniesContagem users (mãe + sub-empresas)Headers
| Nome | Valor |
|---|---|
x-tenant-id | {{tenantId}} |
{{baseUrl}}/v1/company/{{companyId}}/tenentid/{{subTenantId}}Listar sub-empresasHeaders
| Nome | Valor |
|---|---|
x-tenant-id | {{tenantId}} |
{{baseUrl}}/v1/company/{{companyId}}/tenentid/{{subTenantId}}/userListar users das sub-empresasHeaders
| Nome | Valor |
|---|---|
x-tenant-id | {{tenantId}} |
Operacional (por empresa)
{{baseUrl}}/v1/company/directory/{{companyId}}/operational/estabelecimentosListar estabelecimentosHeaders
| Nome | Valor |
|---|---|
x-tenant-id | {{tenantId}} |
{{baseUrl}}/v1/company/directory/{{companyId}}/operational/estabelecimentos/{{estabelecimentoId}}Detalhe estabelecimentoHeaders
| Nome | Valor |
|---|---|
x-tenant-id | {{tenantId}} |
{{baseUrl}}/v1/company/directory/{{companyId}}/operational/dashboard?dataInicio=2026-01-01&dataFim=2026-12-31Dashboard TPVHeaders
| Nome | Valor |
|---|---|
x-tenant-id | {{tenantId}} |
{{baseUrl}}/v1/company/directory/{{companyId}}/operational/top-estabelecimentos?limite=10Top estabelecimentosHeaders
| Nome | Valor |
|---|---|
x-tenant-id | {{tenantId}} |
{{baseUrl}}/v1/company/directory/{{companyId}}/operational/comissoes/resumoComissões resumoHeaders
| Nome | Valor |
|---|---|
x-tenant-id | {{tenantId}} |
{{baseUrl}}/v1/company/directory/{{companyId}}/operational/alugueis/resumoAlugueis resumoHeaders
| Nome | Valor |
|---|---|
x-tenant-id | {{tenantId}} |
{{baseUrl}}/v1/company/directory/{{companyId}}/operational/propostasListar propostasHeaders
| Nome | Valor |
|---|---|
x-tenant-id | {{tenantId}} |
Presença
{{baseUrl}}/v1/presence/active-usersActive users (tenant)Headers
| Nome | Valor |
|---|---|
x-tenant-id | {{tenantId}} |
{{baseUrl}}/v1/presence/active-users-globalActive users global (admin){{baseUrl}}/v1/presence/online-count/main-companies?parentCompanyId={{parentCompanyId}}Online count — empresas mãeHeaders
| Nome | Valor |
|---|---|
x-tenant-id | {{tenantId}} |
{{baseUrl}}/v1/presence/online-count/sub-companiesOnline count — sub-empresasHeaders
| Nome | Valor |
|---|---|
x-tenant-id | {{tenantId}} |
{{baseUrl}}/v1/presence/online-count/aggregated-by-parent?parentCompanyId={{parentCompanyId}}Online count — agregado por mãeHeaders
| Nome | Valor |
|---|---|
x-tenant-id | {{tenantId}} |
White label
{{baseUrl}}/v1/white-labels/{{tenantId}}?pageNumber=1&pageSize=10Listar por tenantHeaders
| Nome | Valor |
|---|---|
x-tenant-id | {{tenantId}} |
Portal
{{baseUrl}}/v1/portal/subdomain-url?portalTenantId={{portalTenantId}}URL do subdomínio (público)APIs externas
{{baseUrl}}/v1/external-apis/opencnpj/{{cnpj}}OpenCNPJ — consultar CNPJ{{baseUrl}}/v1/external-apis/cep/v1/{{cep}}BrasilAPI — CEP v1{{baseUrl}}/v1/external-apis/cep/v2/{{cep}}BrasilAPI — CEP v2{{baseUrl}}/v1/external-apis/banks/v1BrasilAPI — bancos v1