> For the complete documentation index, see [llms.txt](https://ajuda.digitalsac.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ajuda.digitalsac.io/digicrm/configuracao/integracao-comercial/provisionamento-de-clientes.md).

# Provisionamento de clientes

Esta página descreve uma **extensão opcional** para o sistema comercial controlar diretamente a criação e os upgrades no DigitalSac.

{% hint style="warning" %}
Se o endpoint de cadastro da sua integração anterior já provisiona corretamente o cliente, mantenha esse fluxo. Não chame também `/api/tenants` sem idempotência.
{% endhint %}

### Quando usar

Use o provisionamento direto quando o sistema comercial precisar criar, suspender, reativar ou atualizar tenants no DigitalSac. Ele não faz parte dos cinco endpoints mínimos de compatibilidade.

### Criar tenant

```http
POST https://api.exemplo.com/api/tenants
Authorization: Bearer SEU_COMPANY_TOKEN
Content-Type: application/json
```

```json
{
  "name": "Empresa Exemplo LTDA",
  "email": "contato@empresa.com.br",
  "document": "00000000000100",
  "phone": "5511999999999",
  "password": "SENHA_INICIAL_FORTE",
  "status": "active",
  "planId": 2,
  "partnerId": null,
  "dueAt": "2026-08-18T00:00:00.000Z",
  "recurrence": "MENSAL",
  "campaignMessages": 1000,
  "additionalUsers": 2,
  "additionalChannels": 1,
  "additionalSpace": 10,
  "additionalModules": {
    "activecampaigndigicalls": true
  }
}
```

A criação também provisiona um usuário administrador. Sempre envie senha forte. A licença pode limitar novos tenants.

### Campos obrigatórios

* `name`: mínimo 2 caracteres e único.
* `email`: válido e único.
* `document`: 11 a 14 caracteres.
* `phone`: string.
* `planId`: ID numérico local existente.
* `dueAt`: data obrigatória na criação.

Os adicionais são opcionais e usam zero como padrão.

### Consultar

```http
GET /api/tenants/{tenantId}
Authorization: Bearer SEU_COMPANY_TOKEN
```

Persista o `id` retornado como vínculo estável e chave de idempotência.

### Atualizar

```http
PUT /api/tenants/{tenantId}
Authorization: Bearer SEU_COMPANY_TOKEN
Content-Type: application/json
```

O `PUT` atual valida representação completa. Reenvie `name`, `email`, `document`, `phone` e `planId`; não o trate como `PATCH`.

```json
{
  "name": "Empresa Exemplo LTDA",
  "email": "contato@empresa.com.br",
  "document": "00000000000100",
  "phone": "5511999999999",
  "status": "active",
  "planId": 2,
  "dueAt": "2026-09-18T00:00:00.000Z",
  "recurrence": "MENSAL",
  "campaignMessages": 2000,
  "additionalUsers": 5,
  "additionalChannels": 3,
  "additionalSpace": 20,
  "additionalModules": {
    "activecampaigndigicalls": true,
    "activeinternalchat": true
  }
}
```

Se `additionalModules` for omitido, o atual é preservado. Se enviado, só flags reconhecidas e verdadeiras permanecem. Envie `{}` para remover todos os extras.

### Ciclo seguro

1. Persistir `tenantId`.
2. Consultar antes de alterar.
3. Montar payload completo.
4. Atualizar plano, adicionais, módulos, vencimento e status.
5. Consultar novamente e comparar.
6. Auditar sem registrar senha ou token.
