Appearance
ErrLens sends the full event JSON to an n8n Webhook node. From there you can route the event through any n8n workflow — fan it to Notion, PagerDuty, your on-call rotation, a Slack DM filtered by environment, whatever the workflow author wants.
We deliberately do not sign the payload for the n8n kind. n8n's stock Webhook node doesn't validate signatures and forcing operators to add a Function node just to verify HMAC is friction we'd rather avoid.
{
"event": "issue.first_seen",
"delivery_id": "fb1f...-uuid",
"occurred_at": "2026-05-13T09:00:00Z",
"project": {
"id": "uuid",
"slug": "checkout-api",
"name": "checkout-api",
"platform": "go"
},
"issue": {
"id": "uuid",
"title": "panic: runtime error: invalid memory address",
"culprit": "handlers/charge.go:142",
"level": "fatal",
"environment": "prod",
"release": "checkout-api@4.2.1",
"times_seen": 1,
"first_seen": "2026-05-13T09:00:00Z",
"url": "https://acme.errlens.dev/projects/checkout-api/issues/uuid"
}
}event is either issue.first_seen (new issue) or project.frequency (threshold rule crossed). The shape is identical — issue carries the representative issue for frequency alerts.
Headers on every delivery:
X-ErrLens-Event — same value as eventX-ErrLens-Delivery — the delivery's UUID (for idempotency)X-ErrLens-Kind: n8n — tells the receiver which formatter ranX-ErrLens-N8N: 1 — n8n-specific markerPOST. Path = whatever you like, e.g. errlens.https://n8n.example.com/webhook/errlens.This minimal workflow receives the ErrLens event and posts a formatted message to a Slack channel via the Slack node. Copy / paste into n8n via Workflow → Import from clipboard:
{
"nodes": [
{
"parameters": { "httpMethod": "POST", "path": "errlens" },
"type": "n8n-nodes-base.webhook",
"name": "ErrLens",
"typeVersion": 1
},
{
"parameters": {
"channel": "#alerts",
"text": "={{ $json.event }}: {{ $json.issue.title }} ({{ $json.project.slug }}) → {{ $json.issue.url }}"
},
"type": "n8n-nodes-base.slack",
"name": "Slack",
"typeVersion": 2
}
],
"connections": {
"ErrLens": { "main": [[{ "node": "Slack", "type": "main", "index": 0 }]] }
}
}X-ErrLens-Signature.