Delivery Channels

ntfy

Set up ntfy for instant push notifications from n8n workflows, scripts, and monitoring tools. Self-hosted or using the free public server -- no account required.

ntfy (pronounced "notify") is an open-source push notification service. No signup, no API key, no app store approval process. Send a POST request to a topic URL, and every device subscribed to that topic gets a notification. It's the fastest path from "I want push notifications" to actually receiving them.

Setup takes under 3 minutes.

Subscribe to a Topic

  1. Install the ntfy app on your phone: Android (Google Play) or iOS (App Store)
  2. Open the app and tap + to subscribe to a topic
  3. Enter a topic name -- this is your notification channel. Use something unique and hard to guess:
homelab-alerts-k8x9m2

Anyone who knows the topic name can send to it (on the public server), so don't use predictable names like "test" or "alerts".

  1. Tap Subscribe

That's it. Your phone is now listening for messages on that topic.

Send a Test Notification

From any terminal:

curl -d "ntfy is working" ntfy.sh/homelab-alerts-k8x9m2

Your phone should buzz within a second. The simplicity is the entire point -- one curl command, no headers, no JSON, no auth.

For richer notifications with titles and priority:

curl -H "Title: Server Alert" \
     -H "Priority: high" \
     -H "Tags: warning" \
     -d "Disk usage at 90% on NXS-INTELLIGENCE" \
     ntfy.sh/homelab-alerts-k8x9m2

Add to n8n

n8n doesn't have a native ntfy node, but it doesn't need one. Use an HTTP Request node:

  • Method: POST
  • URL: https://ntfy.sh/your-topic-name
  • Body Content Type: Raw / Text
  • Body: Your notification message

For structured notifications with title and priority, use JSON body and set the header Content-Type: application/json:

{
  "topic": "homelab-alerts-k8x9m2",
  "title": "Release Alert",
  "message": "New version of Grafana released: v11.5.0",
  "priority": 3,
  "tags": ["package"]
}

Priority levels: 1 (min), 2 (low), 3 (default), 4 (high), 5 (urgent). Urgent notifications bypass Do Not Disturb on most phones.

Self-Hosted Option

The public ntfy.sh server works fine for personal use, but if you want full control:

# docker-compose.yml
services:
  ntfy:
    image: binwiederhier/ntfy
    container_name: ntfy
    command: serve
    ports:
      - "8090:80"
    volumes:
      - ./ntfy-cache:/var/cache/ntfy
    restart: unless-stopped
docker compose up -d

Then point your app and workflows to http://your-server:8090 instead of ntfy.sh.

Self-hosting gives you access control (username/password per topic), message history, and no rate limits.

Configuration Notes

  • The public server (ntfy.sh) is rate-limited to ~250 messages/day per IP. More than enough for homelab alerts. Self-hosted has no limits.
  • Topic names are the only "security" on the public server. Use random suffixes like -k8x9m2 to prevent strangers from subscribing or sending to your topics.
  • ntfy supports click actions, attachments, and action buttons in notifications. Useful for linking directly to a GitHub release page or Grafana dashboard.
  • Messages are stored server-side for 12 hours (public server) or configurable duration (self-hosted). If your phone is offline, it picks up missed notifications when it reconnects.
  • The ntfy CLI (ntfy publish) is an alternative to curl for scripts. Install with pip install ntfy or download the binary from GitHub.