ligbox-ops-platform/specs/019-ops-console-active-operations/contracts/chamados-api.md
Ligbox Spec Hub 3a2c64834b Initial import: ligbox-ops-platform + specs + LAPTOP + obsidian merge (CT130)
Source: VM122 /opt + obsidian-infra + LAPTOP
Hub: CT130 spec-hub 10.10.10.130
2026-06-19 17:26:41 +00:00

5.3 KiB

API Contract — Chamados & Discover (019)

Base URL: https://api.ops.ligbox.com.br
Auth: Authorization: Bearer <jwt> (Spec 003)
Versão: v1 (draft)


Chamados

GET /api/v1/chamados

Lista chamados com filtros.

Query:

Param Tipo Descrição
status string novo, assumido, em_correcao, …
domain string Filtro domínio
assignee string Login ops
source string wazuh, onboard, support, audit
limit int default 50, max 200
offset int paginação

Response 200:

{
  "chamados": [
    {
      "public_id": "CH-2026-00042",
      "status": "em_correcao",
      "domain": "myvexx.com",
      "session_id": "sess_abc123",
      "wizard_step": "dns_cloudflare",
      "wizard_step_label": "DNS Cloudflare",
      "sources": ["onboard", "wazuh"],
      "max_severity": 12,
      "assignee": "ops_lead",
      "title": "[wazuh L12] vm112 — brute force",
      "created_at": "2026-06-16T10:00:00Z",
      "updated_at": "2026-06-16T10:15:00Z",
      "event_count": 5
    }
  ],
  "total": 1
}

GET /api/v1/chamados/{public_id}

Detalhe completo.

Response 200:

{
  "public_id": "CH-2026-00042",
  "status": "assumido",
  "assignee": "ops_lead",
  "domain": "myvexx.com",
  "session_id": "sess_abc123",
  "wizard_step": "dns_cloudflare",
  "wizard_step_at": "2026-06-16T10:14:00Z",
  "assist": {
    "time_on_step_sec": 142,
    "last_error": null,
    "planned_email": "admin@myvexx.com"
  },
  "observables": [
    { "tipo": "domain", "valor": "myvexx.com", "fonte": "onboard" },
    { "tipo": "agent", "valor": "vm112-mail", "fonte": "wazuh" },
    { "tipo": "rule_id", "valor": "5712", "fonte": "wazuh" }
  ],
  "infra": {
    "score": "6/8",
    "status": "degraded",
    "checks": []
  },
  "links": {
    "wazuh_deep_link": "https://wazuh.itecnologys.com/app/wazuh?...",
    "wizard_admin": null
  },
  "timeline": [
    {
      "event_type": "wazuh.alert",
      "source": "wazuh",
      "created_at": "2026-06-16T10:00:00Z",
      "summary": "L12 ssh brute force",
      "severity": 12
    },
    {
      "event_type": "onboarding.failed",
      "source": "onboard",
      "created_at": "2026-06-16T10:05:00Z",
      "summary": "DNS apply timeout"
    }
  ],
  "acoes_pendentes": [
    {
      "runbook_code": "traefik_cert_sync",
      "nivel": "R1",
      "status": "pendente_aprovacao",
      "exec_id": 7
    }
  ],
  "legacy_ticket_id": 15
}

POST /api/v1/chamados/{public_id}/assumir

Body: {} ou { "nota": "Assumido por NOC" }

Response 200:

{
  "public_id": "CH-2026-00042",
  "status": "assumido",
  "assignee": "ops_lead"
}

Errors: 409 se já assumido por outro (configurável override para ops_lead role).


POST /api/v1/chamados/{public_id}/eventos/anexar

Anexa eventos Discover ao hub (investigação).

Body:

{
  "webhook_event_ids": [901, 902]
}

Response 200:

{
  "public_id": "CH-2026-00042",
  "attached": 2,
  "timeline_count": 7
}

POST /api/v1/chamados/{public_id}/notas

Nota de investigação na timeline.

Body: { "texto": "Cliente confirmou DNS propagado" }


Gera deep link para dashboard Wazuh VM104.

Response 200:

{
  "url": "https://wazuh.itecnologys.com/...",
  "agent": "vm112-mail",
  "from": "2026-06-16T09:00:00Z",
  "to": "2026-06-16T11:00:00Z"
}

PATCH /api/v1/chamados/{public_id}

Body:

{
  "status": "em_correcao",
  "nota": "A corrigir cert admin"
}

POST /api/v1/chamados/{public_id}/runbooks/{code}/executar

Enfileira runbook.

Body:

{
  "params": { "domain": "myvexx.com" },
  "force_nivel": null
}

Response 202:

{
  "exec_id": 7,
  "runbook_code": "traefik_cert_sync",
  "nivel": "R1",
  "status": "pendente_aprovacao"
}

Discover

GET /api/v1/discover

Feed unificado estilo Wazuh Discover.

Query: source, domain, severity_min, from, to, q, limit, offset

Response 200:

{
  "events": [
    {
      "id": 901,
      "chamado_public_id": "CH-2026-00042",
      "source": "wazuh",
      "event_type": "wazuh.alert",
      "domain": "myvexx.com",
      "session_id": null,
      "severity": 12,
      "rule_id": "5712",
      "agent": "vm112-mail",
      "summary": "SSH brute force",
      "created_at": "2026-06-16T10:00:00Z"
    }
  ],
  "total": 901
}

Aprovações

GET /api/v1/aprovacoes?status=pendente

POST /api/v1/aprovacoes/{id}/aprovar

Body: { "decisao": "aprovado", "nota": "OK executar" }

POST /api/v1/aprovacoes/{id}/rejeitar

Body: { "decisao": "rejeitado", "nota": "Risco alto" }


VM112 — Assist (LAN)

GET /api/onboarding/session/{session_id}/ops-status

Header: X-Ops-Secret: <shared secret>
Caller: VM122 worker ou API (nunca browser directo)

Ver plan.md Phase 5.


WebSocket (Fase 6)

WS /api/v1/chamados/{public_id}/live

Auth: query ?token=<jwt> ou subprotocol

Messages:

{ "type": "event", "event_type": "dns.applied", "created_at": "…" }
{ "type": "wizard_step", "step": "account_create", "time_on_step_sec": 30 }