# Contract: Audit API **Base**: `https://api.ops.ligbox.com.br` (ou LAN `http://10.10.10.122:8080`) ## GET /api/v1/audit/overview Lista tenants registados com saúde agregada. ### Response 200 ```json { "generated_at": "2026-06-08T18:00:00Z", "tenants": [ { "tenant_id": 1, "name": "VM112 Ligbox Onboard", "ip": "10.10.10.112", "status": "degraded", "score": { "pass": 6, "warn": 1, "fail": 1, "total": 8 }, "domains_count": 2, "last_audit_at": "2026-06-08T17:55:00Z", "top_issues": [ { "domain": "exemplo.com", "check_id": "dns_dkim", "status": "fail", "message": "TXT not found" } ] } ] } ``` ### Status values `healthy` | `degraded` | `critical` | `unknown` --- ## GET /api/v1/audit/tenants/{tenant_id}/scorecard **Query**: `domain` (required) ### Response 200 ```json { "tenant_id": 1, "domain": "exemplo.com", "checked_at": "2026-06-08T17:55:00Z", "overall_status": "degraded", "checks": [ { "check_id": "carbonio", "label": "Carbonio domain", "status": "pass", "message": "Domain exists in Carbonio", "evidence": { "exists": true }, "checked_at": "2026-06-08T17:55:01Z" }, { "check_id": "nginx_vhost", "label": "carbonio-nginx vhost", "status": "pass", "message": "Vhost configured for mail.exemplo.com", "evidence": {}, "checked_at": "2026-06-08T17:55:02Z" }, { "check_id": "cert_le", "label": "Let's Encrypt certificate", "status": "warn", "message": "Expires in 21 days", "evidence": { "expires_at": "2026-06-29T12:00:00Z" }, "checked_at": "2026-06-08T17:55:03Z" }, { "check_id": "dns_mx", "label": "MX record", "status": "pass", "message": "MX points to mail.exemplo.com", "evidence": { "records": ["10 mail.exemplo.com"] }, "checked_at": "2026-06-08T17:55:04Z" }, { "check_id": "dns_spf", "label": "SPF", "status": "pass", "message": "SPF record present", "evidence": {}, "checked_at": "2026-06-08T17:55:05Z" }, { "check_id": "dns_dkim", "label": "DKIM", "status": "fail", "message": "default._domainkey TXT not found", "evidence": {}, "checked_at": "2026-06-08T17:55:06Z" }, { "check_id": "dns_dmarc", "label": "DMARC", "status": "pass", "message": "DMARC record present", "evidence": {}, "checked_at": "2026-06-08T17:55:07Z" }, { "check_id": "webmail_http", "label": "Webmail HTTPS", "status": "pass", "message": "HTTP 200", "evidence": { "url": "https://mail.exemplo.com/", "status_code": 200 }, "checked_at": "2026-06-08T17:55:08Z" } ] } ``` --- ## POST /api/v1/audit/run/{tenant_id} Trigger manual audit (ops debugging). **Query**: `domain` (required) ### Response 202 ```json { "status": "queued", "tenant_id": 1, "domain": "exemplo.com" } ``` --- ## Check IDs (canonical) `carbonio`, `nginx_vhost`, `cert_le`, `dns_mx`, `dns_spf`, `dns_dkim`, `dns_dmarc`, `webmail_http` ## Check status values `pass` | `warn` | `fail` | `error` | `skip`