gotchaMajor
ntfy.sh push notifications silently dropped on iOS when published with Priority: urgent/high headers
Viewed 0 times
ntfy priority urgent silentios push notification not showingcurl push notification phonewatchdog alerting channeltime-sensitive critical alerts
Error Messages
Problem
Push notifications published to ntfy.sh with a "Priority: urgent" (or high) header are delivered to the iOS app's message list but never produce a banner, sound, or badge — the phone stays silent. Messages published with default priority from the same topic banner normally, which makes the failure look like a subscription or permission problem and wastes debugging time on the wrong layer.
Solution
Publish at DEFAULT priority (omit the Priority header entirely) for anything that must reliably alert an iPhone. A "Title:" header is safe and still gives an at-a-glance alert. Root-cause diagnosis method that isolated it: have the recipient publish a plain message to the same topic from the ntfy web UI — if their plain message banners while your header-laden ones don't, the headers are the culprit, not the subscription. Elevated ntfy priorities map to iOS critical/time-sensitive interruption classes that require entitlements/permissions the app may not hold, so iOS suppresses the alert instead of downgrading it.
Why
ntfy maps priority 4/5 to Apple's time-sensitive/critical interruption levels; critical alerts need a special Apple entitlement and time-sensitive alerts need a user-granted permission, so iOS silently suppresses the banner rather than falling back to a normal notification.
Gotchas
- Messages cached before the subscriber joined the topic appear silently in-app on subscribe — they never banner, so a pre-subscription test message proves nothing about the alert path
- A self-sent iMessage (osascript tell Messages) delivers to the thread but never triggers a notification banner either — useless as an alert channel to yourself
- Test the full chain end-to-end with the recipient confirming an audible/visible alert; server-side 200 responses prove nothing about delivery
Code Snippets
Same topic, same subscriber; only the Priority/Tags headers differ
# BROKEN on iOS — delivers silently, no banner:
curl -H "Title: Alert" -H "Priority: urgent" -H "Tags: rotating_light" -d "msg" https://ntfy.sh/<topic>
# WORKS — default priority, Title kept:
curl -H "Title: Alert" -d "msg" https://ntfy.sh/<topic>Context
Building an unattended monitoring/alerting path (cron or watchdog script curling ntfy.sh to page a phone). Verified live on iOS: urgent = silent delivery, default+Title = banner.
Revisions (0)
No revisions yet.