ligbox-ops-platform/specs/001-webhook-vm112-integration/contracts/webhook-onboard.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

85 lines
1.9 KiB
Markdown

# API Contract: POST /api/v1/webhooks/onboard
**Service**: Ligbox Ops Platform API (VM122)
**Base URL (LAN)**: `http://10.10.10.122:8080`
**Auth**: Header `X-Webhook-Secret`
## Request
```http
POST /api/v1/webhooks/onboard HTTP/1.1
Host: 10.10.10.122:8080
Content-Type: application/json
X-Webhook-Secret: <shared-secret>
```
## Response 200
```json
{
"accepted": true,
"event": "account.created"
}
```
## Response 401
```json
{
"detail": "invalid webhook secret"
}
```
## Event Types
| Event | Emissor (fase) | Cria ticket? |
|-------|----------------|--------------|
| `account.created` | Phase B (MVP) | Sim |
| `domain.validated` | Phase D | Não (só audit log) |
| `dns.applied` | Phase D | Não |
| `onboarding.completed` | Phase D | Nota/update |
| `onboarding.failed` | Phase D | Sim (prioridade) |
## Idempotency
Repetir o mesmo request (mesmo `event` + `session_id` + `domain`) retorna `200 accepted` sem criar ticket duplicado.
## cURL example
```bash
curl -sf -X POST "http://10.10.10.122:8080/api/v1/webhooks/onboard" \
-H "Content-Type: application/json" \
-H "X-Webhook-Secret: ligbox-ops-dev-secret" \
-d '{
"event": "account.created",
"domain": "teste.ops.ligbox",
"session_id": "demo-e2e-001",
"data": {
"email": "admin@teste.ops.ligbox",
"account_verified": true,
"needs_review": false
}
}'
```
## Related endpoints (read-only)
| Method | Path | Descrição |
|--------|------|-----------|
| GET | `/health` | Health check API |
| GET | `/api/v1/tenants` | Lista tenants |
| GET | `/api/v1/desk/tickets` | Lista tickets (verificar criação) |
| GET | `/api/v1/infra/vm112/status` | Poll health portal |