> 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/servidores-e-cadastro-inicial.md).

# Servidores e cadastro inicial

O DigitalSac consulta servidores e encaminha o cadastro inicial ao sistema comercial. Este é o mesmo contrato usado pelas integrações anteriores.

### Endpoints

```http
GET  /v1/digitalsac/servers
GET  /v1/digitalsac/servers/default
GET  /v1/digitalsac/servers/default-id
POST /v1/digitalsac/register
```

Os três `GET` devem responder em até 10 segundos; o cadastro, em até 30 segundos.

### Lista de servidores

```json
{
  "success": true,
  "total": 1,
  "data": [{
    "id": "1",
    "default": "1",
    "name": "Servidor Principal",
    "ip": "https://app.exemplo.com",
    "url": "https://api.exemplo.com",
    "token": "TOKEN_INTERNO_DO_SERVIDOR",
    "status": "active",
    "created_at": "2026-01-01 00:00:00"
  }]
}
```

| Campo     | Tipo                  | Obrigatório | Descrição           |
| --------- | --------------------- | ----------- | ------------------- |
| `id`      | string/number         | sim         | ID estável          |
| `default` | string/number/boolean | sim         | Identifica o padrão |
| `name`    | string                | recomendado | Nome do servidor    |
| `ip`      | string                | sim         | URL pública/app     |
| `url`     | string                | sim         | URL da API/backend  |
| `token`   | string                | recomendado | Segredo interno     |
| `status`  | string                | recomendado | Estado do servidor  |

Deve existir exatamente um servidor padrão ativo. `default` aceita `"1"`, `1` ou `true`. O token nunca deve chegar ao navegador.

### Servidor padrão

`GET /v1/digitalsac/servers/default` devolve o mesmo objeto em `data`.

### ID do servidor padrão

São aceitos:

```json
{ "success": true, "data": { "id": "1" } }
```

```json
{ "id": "1" }
```

Também são aceitos string ou número diretamente.

### Cadastro recebido

```http
POST /v1/digitalsac/register
Authorization: Bearer SEU_CUSTOM_COMMERCIAL_TOKEN
apiKey: SEU_CUSTOM_COMMERCIAL_TOKEN
serverId: 1
Content-Type: application/json
```

```json
{
  "planId": 2,
  "serverId": "1",
  "partnerId": null,
  "name": "Empresa Exemplo LTDA",
  "phone": "5511999999999",
  "email": "contato@empresa.com.br",
  "document": "00000000000100",
  "password": "SENHA_INICIAL_FORTE",
  "locale": "pt-BR"
}
```

{% hint style="info" %}
O DigitalSac normaliza `planId` antes do envio. Seu endpoint recebe **string ou número**, não o objeto de seleção usado pelo frontend.
{% endhint %}

Valide token, plano, servidor, nome, telefone, e-mail, documento e senha. Trate e-mail/documento duplicado com HTTP `409`. Armazene apenas o hash da senha.

### Resposta de sucesso

```json
{
  "success": true,
  "message": "Cadastro recebido com sucesso",
  "data": {
    "id": 987,
    "serverId": "1",
    "planId": 2,
    "status": "pending",
    "accessUrl": "https://app.exemplo.com"
  }
}
```

O formato legado `Success`, `Message` e `Data` também é aceito.

### Resposta de erro

```json
{
  "success": false,
  "message": "E-mail já cadastrado",
  "data": { "field": "email", "code": "EMAIL_ALREADY_EXISTS" }
}
```

Use `400` para dados inválidos, `401` para token, `403` para permissão, `404` para plano/servidor, `409` para duplicidade e `500` para erro interno.

### Depois do cadastro

Na compatibilidade v1, mantenha o processamento que sua integração já executa. O provisionamento pela API `/api/tenants` é uma extensão opcional; não duplique os dois fluxos.
