Skip to Content
IntegrationsPushover

Pushover Integration

Send exit1.dev monitoring alerts as push notifications to your phone, tablet, or desktop via Pushover .

Pushover is a one-time-purchase notification service that delivers alerts to your devices over their own native push channels — no chat workspace required. Unlike Slack, Discord, or Teams, Pushover is API-based rather than webhook-based, so exit1.dev connects with your API token and user key instead of a webhook URL.

Setup

Step 1: Create a Pushover application

  1. Sign in at pushover.net 
  2. Open pushover.net/apps/build 
  3. Fill in:
    • Name — e.g. exit1.dev Alerts
    • Type — Application
    • Description — optional, e.g. Uptime monitoring notifications
    • URL — optional
    • Icon — optional
  4. Click Create Application
  5. Copy the API Token/Key shown at the top of the next page (30 characters, letters and digits)

Step 2: Copy your user key

  1. Go to pushover.net  (the dashboard)
  2. Copy the Your User Key value at the top right (30 characters)

If you want notifications delivered to a shared team, create a Delivery Group  instead and use its group key here.

Step 3: Connect in exit1.dev

  1. Open Webhooks in the exit1.dev app
  2. Click Add Webhook
  3. Pick Pushover as the platform
  4. Paste:
    • App API Token — from Step 1
    • User or Group Key — from Step 2
  5. (Optional) Pick a Default priority, Sound, or limit delivery to a specific Device
  6. Choose which events should send notifications
  7. Click Create Webhook, then Test webhook to confirm

A test notification should appear on your devices within a few seconds.

Form fields

FieldRequiredNotes
App API TokenYes30 chars, letters/digits. From your Pushover application page.
User or Group KeyYes30 chars, letters/digits. From your Pushover dashboard.
Default priorityNoLowest, Low, Normal (default), High, or Emergency. See Priority handling below.
Retry IntervalIf priority = EmergencySeconds between retries while waiting for acknowledgement. Minimum 30s. Default 60s.
Retry ExpirationIf priority = EmergencySeconds before Pushover stops retrying. Maximum 10,800s (3 hours). Default 3,600s.
Time to liveNoSeconds before Pushover auto-deletes the notification. Incompatible with Emergency. Leave blank to keep messages indefinitely.
SoundNoAny built-in Pushover sound , or leave blank to use your device default.
DeviceNoComma-separated device names. Leave blank to send to all your devices.

Priority handling

exit1.dev never sends every event at the priority you picked. It sorts events into three classes and applies one rule to each, so outages can wake you and the all-clear can’t:

Event classEventsCeiling
Criticalwebsite_down, website_error, ssl_error, domain_expired, dns_record_missing, dns_resolution_failedMay reach Emergency (2)
Warningssl_warning, domain_expiring, dns_record_changedCapped at High (1)
Recoverywebsite_up, domain_renewedCapped at Normal (0)

Three consequences worth internalising:

  • Only a real outage can ever page you at Emergency (the priority that repeats until you acknowledge).
  • Only an outage or a warning can bypass quiet hours — “your certificate expires in 3 days” is allowed to cut through, “your site is back up” is not.
  • A recovery never wakes you, at any setting. Good news is not urgent.

Default priority

Your chosen Default priority is the starting point, then the ceilings above apply:

Default priority you pick →CriticalWarningRecovery
Lowest (-2)High (1)Lowest (-2)Lowest (-2)
Low (-1)High (1)Low (-1)Low (-1)
Normal (0)High (1)Normal (0)Normal (0)
High (1)High (1)High (1)Normal (0)
Emergency (2)Emergency (2)High (1)Normal (0)

Critical events are additionally floored at High, so quiet hours can’t swallow an outage even on an integration you set to Low. Picking Emergency pages you for real outages only.

Per-check severity (P1–P5)

The Default priority above applies to every check the integration alerts on. To page differently for different sites — wake me for the production VPS, stay quiet for a dev box — give each check a severity instead of running multiple integrations.

Each check has a severity slider under Alert behavior in its settings, from P1 (Critical) to P5 (Minimal). It’s greyed out behind a Use default priority switch, which is on by default. Turn the switch off to set an explicit severity; that severity then replaces the integration’s Default priority for that check entirely — including P3, which is not a “neutral” setting:

Check severityCriticalWarningRecovery
P1 — CriticalEmergency (2)High (1)Normal (0)
P2 — HighHigh (1)High (1)Normal (0)
P3 — NormalNormal (0)Normal (0)Normal (0)
P4 — LowLow (-1)Low (-1)Low (-1)
P5 — MinimalLowest (-2)Lowest (-2)Lowest (-2)

An explicit severity is a hard ceiling on everything that check emits — a P3 check never sends anything above Normal, so it never bypasses quiet hours, not even for an outage. That’s the point: it’s how you mark a check “tell me, but don’t interrupt me”. If you want the High floor that critical events normally get, leave Use default priority switched on rather than setting P3.

This lets one Pushover integration page you at Emergency for a P1 outage while a P4/P5 dev box stays quiet. Bulk edit can set severity across many checks at once, or clear it back to the default.

Severity currently affects Pushover only. Other integrations (Slack, Discord, Teams, PagerDuty, generic webhooks) deliver every event the same way regardless of a check’s severity.

Emergency priority

Pushover emergency notifications repeat at the Retry Interval until you tap acknowledge in the Pushover app, then stop after Retry Expiration seconds whether you acknowledge or not. Both parameters are required by Pushover for priority=2 and exit1.dev sends safe defaults (60s / 3600s) if you leave the fields blank.

Emergency cannot be combined with Time to live — Pushover rejects the request. The form hides the TTL field when Emergency is selected.

Time to live (non-Emergency)

If you set a TTL, Pushover auto-deletes the notification from the recipient device after the configured number of seconds. Useful when “the site was down 6 hours ago” is no longer information you care about. Leave blank to keep notifications until the user dismisses them.

Notification format

A typical down notification looks like this on your device:

🚨 Production API is DOWN URL: https://api.example.com  Response Time: 8421ms Status Code: 500 Internal Server Error Error: Upstream timed out Previous Status: UP

The title is prefixed with an emoji for the event type — 🚨 down, ✅ up, 🔒 SSL error, ⚠️ SSL warning — and the body includes the previous status.

Each notification carries a Go to Incident link that opens the check’s incident page in the exit1.dev app. (This replaces the old “open the monitored URL” behaviour, which couldn’t open non-HTTP checks like ping://, tcp://, or udp://.) The monitored URL is still shown in the body and remains tappable for HTTP checks.

Pushover caps the message body at 1024 characters and the title at 250 characters; exit1.dev truncates with an ellipsis when needed.

Managing the integration

Updating credentials

Open the webhook in exit1.dev and re-enter the token, user key, priority, sound, or device. Saving rebuilds the stored endpoint URL.

Disconnecting

Delete the webhook from exit1.dev. To revoke access on Pushover’s side, delete the application from pushover.net/apps .

Troubleshooting

  • Test webhook returns HTTP 400 — Double-check both the API token and user key are exactly 30 characters. Pushover responds with {"status":0,"errors":[...]} describing which field failed.
  • Test webhook returns HTTP 429 — You’ve hit the Pushover monthly message quota (10,000/month on the free tier). Reset is at 00:00 UTC-6 (Central Time) on the 1st of the month.
  • Notifications stop arriving silently — Make sure the Pushover app on your device is signed in and notifications are allowed at the OS level. Pushover also has a 7-day device timeout on the free tier.
  • Wrong sound or device — Sound names are case-sensitive (pushover, not Pushover). Device names must match exactly as shown in your Pushover dashboard.
  • Critical alerts arrive at Normal priority — the High floor only applies to checks using the integration default. If the check has an explicit severity of P3, Normal is its hard ceiling for every event including outages. Turn Use default priority back on for that check, or raise it to P1/P2. Otherwise, confirm the webhook is subscribed to a critical event type (e.g. website_down) rather than a warning.
  • Recoveries arrive at Normal, not High — intended. A website_up notification is capped at Normal at every severity and every default priority, so the all-clear can’t bypass quiet hours. Outages are unaffected.

Pricing notes

Pushover is a one-time purchase per platform (~$5 USD for iOS, Android, or desktop) after a 30-day free trial. exit1.dev does not bundle Pushover delivery — you pay Pushover directly. exit1.dev sends one Pushover message per event per configured webhook; the free tier  of 10,000 messages/month per application is more than enough for typical uptime monitoring.

Last updated on