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" }
GET /api/v1/chamados/{public_id}/links/wazuh
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 }