Server alerts to your phone without Telegram or Slack

Updated October 17, 2026

Any server that can run curl can push an alert to your phone with NextMsg. There's no bot to create, no chat ID to look up and no workspace to join: one send key, one HTTP request. Below are recipes for failed systemd services, full disks and finished deploys.

Set the key once

Install the NextMsg app and copy your send key from Settings. On the server, store it in a file only root can read:

echo 'NEXTMSG_KEY=nextmsg_live_YOUR_KEY' | sudo tee /etc/nextmsg.env >/dev/null
sudo chmod 600 /etc/nextmsg.env

Test it:

sudo sh -c '. /etc/nextmsg.env; curl -fsS -d "Hello from $(hostname)" "https://api.nextmsg.app/p/$NEXTMSG_KEY?channel=servers"'

When a systemd service fails

Create one template unit, /etc/systemd/system/notify-failure@.service:

[Unit]
Description=Send a NextMsg alert that %i failed

[Service]
Type=oneshot
EnvironmentFile=/etc/nextmsg.env
ExecStart=/bin/sh -c 'curl -fsS --data-binary "❌ %i failed on %H" "https://api.nextmsg.app/p/$${NEXTMSG_KEY}?channel=servers"'

Then add one line to the [Unit] section of every service you care about (for example with sudo systemctl edit nginx):

[Unit]
OnFailure=notify-failure@%n.service

Run sudo systemctl daemon-reload. From now on, if that service crashes or a timer's job exits with an error, you get a push naming the unit and the host.

When a disk is almost full

Save as /usr/local/bin/check-disk, make it executable and run it from cron, for example every hour:

#!/bin/sh
# Alerts when the root filesystem is at least 90% full.
. /etc/nextmsg.env
used=$(df -P / | awk 'NR==2 { sub("%", "", $5); print $5 }')
if [ "$used" -ge 90 ]; then
  curl -fsS --data-binary "⚠️ Disk on $(hostname) is ${used}% full" \
    "https://api.nextmsg.app/p/$NEXTMSG_KEY?channel=servers" >/dev/null
fi
# sudo crontab -e
0 * * * * /usr/local/bin/check-disk

When a deploy finishes

Add a line at the end of your deploy script:

curl -fsS --data-binary "🚀 Deployed $(git rev-parse --short HEAD) to $(hostname)" \
  "https://api.nextmsg.app/p/$NEXTMSG_KEY?channel=deploys"

Why not a Telegram bot or Slack webhook?

  • Less setup: no BotFather, chat ID lookup, Slack app or channel permissions. The send key is the whole configuration.
  • One-way and least privilege: the key can only send to your inbox. It can't read messages, and there is no way to send commands back to the server.
  • A quiet inbox: alerts don't compete with chats. Channels such as servers and deploys become tabs in the app.
  • Offline-safe: messages wait on the server for up to 72 hours if your phone is off.

Prefer self-hosting or need attachments? See the comparison with ntfy, Pushover and Telegram bots.

More guides