n8n and the outgoing webhook
Updated 2026-09-08 ยท Pharos 0.5.10
Inbound is just the API: an HTTP Request node posting to
/api/v1/incidents or /api/v1/components/{id}.
Outbound is configured under Integrations. Paste an n8n webhook URL and save; the first save generates a 32-character signing secret. It fires on every incident created or updated โ by you, by the API, or by a check that opened one itself.
{
"event": "incident.created",
"incident": {
"id": 12,
"name": "Mail queue backed up",
"status": "Identified",
"impact": "major",
"occurred_at": "2026-08-25T16:50:03+00:00",
"resolved_at": null,
"components": ["Mail relay", "Webmail"]
}
}
Every request carries X-Pharos-Signature: a lowercase hex HMAC-SHA256 of the
exact request body, keyed with your secret. Verify it โ anyone who learns your webhook URL
can otherwise forge events.
const expected = crypto.createHmac('sha256', SECRET)
.update(req.body) // the RAW body; a JSON parser changes the bytes
.digest('hex');
if (!crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(received))) {
return res.status(401).json({ error: 'bad signature' });
}
Delivery is one attempt with a five-second timeout and no retries. A slow receiver must never hold up publishing an incident, so a failure is logged and never shown to you mid-outage.