Skip to content
Last9
Book demo

Receive Alert Notifications via Webhook

Set up a generic webhook notification channel and receive alert notifications from Last9 at any HTTP endpoint.

Getting started

The Webhook channel sends alert notifications as JSON to any HTTP endpoint you configure. Use it to forward alerts to custom services, automation, or tools Last9 does not integrate with natively.

For several popular platforms, Last9 auto-detects the webhook URL and formats the payload for that platform instead of sending the generic payload below. See the dedicated guides for Microsoft Teams, Flock, Google Chat, Telegram, Jira, and Zenduty.

Setting up a notification channel in Last9

  1. In Notification Channels, click Add Channel and choose Webhook.
  2. Enter the webhook URL of your endpoint.
  3. Save the channel. Assign it to an Alert Group to start receiving notifications.

Notification Payload

Last9 sends one JSON POST request per alert event. The generic webhook payload uses the following fields.

FieldTypeDescription
routing_keystringThe full generic webhook URL generated in Last9. This is used to send alerts to your configured endpoint
event_actionstringThe type of event. Can be trigger or resolve
dedup_keystringDeduplication key for correlating triggers and resolves. The maximum permitted length of this property is 255 characters
payload.summarystringA brief text summary of the event, used to generate the summaries/titles of any associated alerts
payload.sourcestringThe unique location of the affected system, preferably a hostname or FQDN
payload.severitystringThe perceived severity of the status the event is describing with respect to the affected system. This can be critical, error, warning or info
payload.timestamptimestampThe time at which the emitting tool detected or generated the event
payload.componentstringComponent of the source machine that is responsible for the event, for example mysql or eth0
payload.groupstringLogical grouping of components of a service, for example app-stack
payload.classstringThe class/type of the event, for example ping failure or cpu load
payload.custom_detailsobjectAdditional details about the event and affected system. The keys depend on the alert type, see Example payloads
payload.metric_alert_annotationsobjectAlert group alerts only. Annotations set on the alert rule, for example description and runbook. Omitted when the rule has none
payload.metric_alert_labelsetsobjectAlert group alerts only. Labels of the time series that fired, for example {"service": "checkout"}. Omitted when one notification covers several series
payload.metric_alert_group_labelsobjectAlert group alerts only. Labels the alert rule groups its series by, for example {"span_name": "POST /pay"}
payload.metric_alert_timingobjectAlert group alerts only. start and end of the alert
clientstringAlways Last9 Dashboard
client_urlstringLink to the alert in Last9
imagesarray of objectsList of images to include
linksarray of objectsList of links to include

Log alert fields

Alerts from log scheduled searches also include these top-level fields.

FieldTypeDescription
log_linesarray of objectsSample of the log lines that matched the search. Each line has timestamp, severity, and body
log_preview_errorstringWhy the log lines could not be fetched, if they could not. null otherwise
scheduled_search_conditionstringThe alert condition of the search, for example query_found
scheduled_search_log_countnumberThe evaluated alert value, truncated to an integer. For count-based searches, the number of log lines that matched in the evaluated window; for aggregate searches such as avg(response_time), the aggregate result (625.75 is sent as 625), not a count
view_logs_urlstringLink to the matching logs in Last9

Example payloads

An alert group alert that fires:

{
"payload": {
"summary": "Alert Rule checkout-service — checkout latency · 1 time series affected",
"timestamp": "2026-05-09T07:09:00.000+0000",
"severity": "critical",
"component": null,
"source": "3c437a7a-c8ce-47ca-a52a-3d6938549417:48aacd57-7782-4136-b5bd-2c7582fca12e:breach-static_threshold",
"group": "3c437a7a-c8ce-47ca-a52a-3d6938549417:48aacd57-7782-4136-b5bd-2c7582fca12e:breach-static_threshold",
"class": "Static Threshold",
"custom_details": {
"What happened": "p95 latency above 500 ms",
"Severity": "Breach",
"Duration": "88 out of 88 minutes",
"Condition": "p95 latency > 500",
"Metric": "p95 latency",
"Impact": "42.8% degradation",
"Series affected": "1 time series affected"
},
"metric_alert_annotations": {
"description": "p95 latency above 500 ms",
"runbook": "https://wiki.example.com/runbooks/checkout-latency"
},
"metric_alert_timing": {
"start": "2026-05-09T05:41:00.000+0000",
"end": "2026-05-09T07:09:00.000+0000"
}
},
"routing_key": "https://example.com/webhook",
"dedup_key": "3c437a7a-c8ce-47ca-a52a-3d6938549417:48aacd57-7782-4136-b5bd-2c7582fca12e:breach-static_threshold",
"images": [],
"links": [],
"event_action": "trigger",
"client": "Last9 Dashboard",
"client_url": "https://app.last9.io/v2/organizations/<org>/compass/entities/<entity-id>/health?..."
}

A log alert that fires:

{
"payload": {
"summary": "Scheduled Search Triggered - checkout errors",
"timestamp": "2026-05-28T07:53:39.000+0000",
"severity": "critical",
"component": null,
"source": "3c437a7a-c8ce-47ca-a52a-3d6938549417:48aacd57-7782-4136-b5bd-2c7582fca12e:breach-static_threshold",
"group": "3c437a7a-c8ce-47ca-a52a-3d6938549417:48aacd57-7782-4136-b5bd-2c7582fca12e:breach-static_threshold",
"class": "Static Threshold",
"custom_details": {
"severity": "Breach",
"client_url": "https://app.last9.io/v2/organizations/<org>/compass/entities/<entity-id>/health?...",
"rule_name": "checkout errors",
"telemetry": "logs",
"evaluation_frequency": "Every 5 Minutes",
"alert_condition": "When query matches",
"matched_log_count": "12 matching log entries"
}
},
"routing_key": "https://example.com/webhook",
"dedup_key": "3c437a7a-c8ce-47ca-a52a-3d6938549417:48aacd57-7782-4136-b5bd-2c7582fca12e:breach-static_threshold",
"images": [],
"links": [],
"event_action": "trigger",
"client": "Last9 Dashboard",
"client_url": "https://app.last9.io/v2/organizations/<org>/compass/entities/<entity-id>/health?...",
"log_lines": [
{
"timestamp": "2026-05-28T07:25:13Z",
"severity": "ERROR",
"body": "payment declined"
}
],
"log_preview_error": null,
"scheduled_search_condition": "query_found",
"view_logs_url": "https://app.last9.io/v2/organizations/<org>/compass/entities/<entity-id>/health?...",
"scheduled_search_log_count": 12
}

When the alert resolves, the payload carries only the fields needed to match the earlier trigger:

{
"routing_key": "https://example.com/webhook",
"dedup_key": "3c437a7a-c8ce-47ca-a52a-3d6938549417:48aacd57-7782-4136-b5bd-2c7582fca12e:breach-static_threshold",
"event_action": "resolve"
}

Troubleshooting

Please get in touch with us on Discord or Email if you have any questions.