---
title: "Publish a FIBER optical alert to NVSentinel as a HealthEvent"
method: POST
path: "/api/integrations/nvsentinel/publish"
tags: ["Integrations"]
---

# Publish a FIBER optical alert to NVSentinel as a HealthEvent

`POST /api/integrations/nvsentinel/publish`

## Request

- Base URL: `https://api.fiber.ac` (the document declares no server; this is the origin it was published from)
- URL: `https://api.fiber.ac/api/integrations/nvsentinel/publish`
- Auth: none declared

Body: {"alert_id": 123} or {"switch": "leaf-010", "port": "Ethernet1/41"} (port "-" = switch-level telemetry_silence). The alert is mapped to one `datamodels.HealthEvent` per GPU node whose uplink is that port (gpu_nodes.port_id). Dry-run (payload returned, nothing sent) when FIBER_NVSENTINEL_PUBLISH_URL is unset or `dry_run: true`. Real publishes are deduplicated per (node, check) for 1 h unless `force: true`; a failed send releases the dedup budget so the retry is not suppressed. Optional `hours` (default 24) bounds the alert lookup; optional `message`/`alert_type`/`severity` synthesise an alert when none is on record — that synthetic path is dry-run/demo only: it is forced to dry-run (unless FIBER_NVSENTINEL_ALLOW_SYNTHETIC_PUBLISH=1) and never sets isFatal, so a fabricated event cannot drive an NVSentinel cordon/drain.

## Request body

- object

## Response `200`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/fiber-ac/apis/fiber-api.md) · [All operations](https://skmtc.dev/fiber-ac/apis/fiber-api/llms.txt) · [OpenAPI document](https://skmtc.dev/fiber-ac/apis/fiber-api/revisions/58267250d793?raw)
