Uptimeify Docs
Incident managementAlert sources

Zabbix

Send Zabbix trigger alerts to Uptimeify Incident Management via a Webhook media type, using the ready-made media type Uptimeify generates for you.

Uptimeify's Zabbix preset maps a Zabbix Webhook media type's payload directly: trigger name, severity, status, and host are pre-mapped. Uptimeify also gives you a ready-made media type you can import into Zabbix, so you do not have to create it by hand or write the JavaScript yourself.

1. Create the alert source in Uptimeify

Go to Incident Management → Alert Sources → New, pick the Zabbix preset, name it, and create it. On the success screen:

  • Copy the ingest URL (https://<your-domain>/api/im/ingest/<token>), shown once.
  • Use the download media type action to save uptimeify-zabbix-media-type.yaml.

2. Import the media type into Zabbix

  1. In Zabbix, go to Alerts → Media types (Zabbix 7.x; Administration → Media types on 6.x and older) and click Import.
  2. Select the downloaded uptimeify-zabbix-media-type.yaml and confirm. A media type named Uptimeify appears.
  3. Give it the ingest URL. Either define the global macro {$UPTIMEIFY.INGEST.URL} under Administration → Macros with the URL from step 1, or open the media type and paste the URL straight into its ingest_url parameter.
  4. Enable the media type.

The ingest URL must be a media type parameter. Zabbix resolves macros in parameter values only, never inside the script body — a {$UPTIMEIFY.INGEST.URL} written into the JavaScript would be POSTed to as a literal string and no alert would ever arrive.

What the media type sends

The imported media type declares one parameter per field the preset maps, so the payload matches the preset's selectors without any further editing:

ParameterZabbix macroUsed for
ingest_url{$UPTIMEIFY.INGEST.URL}Where the alert is POSTed
event_id{EVENT.ID}Dedup key — pairs PROBLEM and OK into one incident
event_severity{EVENT.SEVERITY}Severity (see map below)
trigger_name{EVENT.NAME}Title
trigger_status{EVENT.STATUS}OK resolves the alert, anything else keeps it open
host_name{HOST.NAME}Host
event_source, event_value, date, timerespective macrosCarried through for context

The script treats HTTP 200/202 as success and throws on anything else, so a failed delivery shows up as a failed alert attempt in Zabbix instead of disappearing silently. A 404 there means the token in your ingest URL matches no alert source.

Testing the media type

Zabbix's Test button on a media type passes every parameter through literally — it does not resolve macros. If you test straight after importing, ingest_url arrives as the string {$UPTIMEIFY.INGEST.URL} and the attempt fails with cannot get URL: URL rejected: Bad hostname. That is expected, not a misconfiguration.

To test properly, replace the ingest_url value in the test dialog with your real ingest URL. The other parameters can stay as they are — the preset only needs trigger_name and trigger_status to produce a usable alert, and the dialog lets you type real values for those too.

3. Wire it up to a trigger action

  1. Add the new media type to a Zabbix user under Users → Users → (user) → Media. Zabbix requires a "Send to" address value even for a webhook. Any non-empty value works, the script ignores it.
  2. Create or edit a Trigger action under Data collection → Actions → Trigger actions, with an operation that sends a message to that user via your new media type.
  3. Trigger a test problem (or wait for the next real one) and confirm it shows up under Incident Management → Alert Sources → your Zabbix source.

Default field mapping

Zabbix webhook parameterNormalized field
trigger_nameTitle
event_severitySeverity (via the map below)
trigger_statusStatus: OK resolves the alert, anything else keeps it open
host_nameHost
event_idDedup key: groups PROBLEM/OK events for the same trigger into one alert

Severity map

Zabbix event_severityUptimeify severity
Disastersev1
Highsev2
Averagesev3
Warningsev4
Informationsev4
Not classifiedsev4

Sample payload

This is the shape of payload Uptimeify's Zabbix preset expects, the same shape the media type produces:

{
  "event_id": "6633487",
  "event_source": "0",
  "event_value": "1",
  "event_severity": "Disaster",
  "trigger_name": "Zabbix agent is not available on Zabbix server",
  "trigger_status": "PROBLEM",
  "host_name": "Zabbix server",
  "date": "2026.07.17",
  "time": "12:00:00"
}

You can send this exact payload against your source's mapping from the Payload Mapping tab in the dashboard to verify the setup before wiring up a real trigger.

On this page