# Contrato — API Wizard `POST /api/internal/provision/mail-bundle`

**Spec:** [043](../spec.md) · [035](../../035-ligbox-mail-bundles-foss-openpanel/spec.md)  
**VM:** 112 (`10.10.10.112:8090`)  
**Status:** ✅ Implementado no repo · deploy VM112 pendente  
**Auth:** `X-Ops-Internal-Token` (mesmo valor Desk `OPS_INTERNAL_TOKEN`)

---

## POST `/api/internal/provision/mail-bundle`

Provisiona domínio Carbonio + conta gerente com quotas do bundle mail.

### Request

```json
{
  "domain": "empresa.com.br",
  "admin_email": "admin@empresa.com.br",
  "admin_name": "João Silva",
  "seats": 25,
  "mail_gb_per_seat": 30,
  "files_gb_per_seat": 200,
  "foss_order_id": 55
}
```

| Campo | Obrigatório | Descrição |
|-------|-------------|-----------|
| `domain` | sim | Domínio cliente |
| `admin_email` | sim | Conta gerente (`admin@{domain}`) |
| `admin_name` | não | Display name Carbonio |
| `seats` | não (default 25) | Licenças mail bundle |
| `mail_gb_per_seat` | não (default 30) | Quota GB/caixa gerente |
| `files_gb_per_seat` | não (default 200) | Nextcloud (fase 034) |
| `foss_order_id` | não | Correlação FOSS order |

### Response 200

```json
{
  "ok": true,
  "domain": "empresa.com.br",
  "admin_email": "admin@empresa.com.br",
  "mail_host": "mail.empresa.com.br",
  "webmail_url": "https://mail.empresa.com.br/",
  "files_url": "https://files.empresa.com.br/",
  "seats": 25,
  "provisioned": true,
  "already_provisioned": false,
  "account_reused": false
}
```

### Erros

| HTTP | Condição |
|------|----------|
| 401 | Token interno inválido |
| 400 | Domínio/email inválido |
| 502 | Carbonio/zmprov falhou |
| 503 | `OPS_INTERNAL_TOKEN` ausente no wizard |

---

## GET `/api/internal/provision/mail-bundle/{domain}`

Estado do bundle (sem senhas).

---

## Código

| Artefacto | Path repo |
|-----------|-----------|
| Serviço | `projects/wizard/backend/app/services/mail_bundle.py` |
| Router | `projects/wizard/backend/app/routers/internal_provision.py` |
| Deploy VM112 | `deploy/vm112-wizard/deploy-mail-bundle-vm112.py` |
| Cliente Desk | `projects/ops-desk/api/app/vm123/wizard_client.py` |

---

## Deploy VM112

```bash
# Na VM112 (SSH)
cd /opt/ligbox-spec-hub/repos/ligbox-ops-platform   # ou clone Forgejo
git pull
python3 deploy/vm112-wizard/deploy-mail-bundle-vm112.py
systemctl restart ligbox-wizard

# Teste
curl -s -X POST http://127.0.0.1:8090/api/internal/provision/mail-bundle \
  -H "X-Ops-Internal-Token: $OPS_INTERNAL_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"domain":"teste.ligbox.com.br","admin_email":"admin@teste.ligbox.com.br","seats":25}'
```

---

*Roger · 2026-07-01 · Spec 043 fecho ciclo mail-bundle*
