Gotify-style push, hosted, and on iPhone too.
Gotify is a clean self-hosted push server: one Go binary, a REST call to send, and every message stays on hardware you control. The trade is that you run it, and that the only official app is for Android. Pocket Alert is the hosted version of the same idea, with native iPhone and Android apps delivered through Apple and Google push, plus inbound webhooks, action buttons and scheduling that Gotify leaves to plugins or scripts.
What running Gotify costs you
Sending is one curl call. Keeping it working is the part that takes the time.
You run the server
Hosting, TLS, backups and upgrades are yours, and there is no hosted Gotify to fall back on. If the box is down, so are your alerts.
No official iPhone app
The only official app is for Android. The community iGotify app needs another self-hosted service and a relay to reach Apple.
An always-on connection
The Android app keeps a WebSocket open instead of using Google push, so it needs battery optimisation off and shows a permanent notification.
Webhooks need a plugin
Gotify accepts only its own message format. GitHub or Grafana JSON needs a Go plugin built for your exact server version, or a script.
Pocket Alert vs Gotify, feature by feature
Both send from one HTTP request. One runs on your server; the other runs on ours and on Apple and Google push.
| Feature | Pocket Alert | Gotify |
|---|---|---|
| Where you use it | ||
| iOS app | Community app plus an extra relay | |
| Android app | Play Store and F-Droid | |
| Web dashboard | Devices, keys, apps, webhooks | Built-in web UI |
| Chrome extension | Send a link or note to your phone | |
| Command-line tool | Official binary for Linux, macOS, Windows | gotify/cli |
| MCP server for AI agents | 10 tools | |
| Sending alerts | ||
| Send via HTTP API | POST /message | |
| Inbound webhook URL per source | One URL per service | Via plugins, Linux and macOS only |
| Payload mapping into the message | %field.path% into title, body and buttons | Go plugin or a script |
| Scheduled delivery | Up to 30 days, listable and cancellable | |
| Priority levels | Five, silent to critical | 0–10, mapped to sound and vibration |
| Critical alerts that override Do Not Disturb | On paid plans | No DND override documented |
| Action buttons on the notification | Up to 3: open, HTTP request, copy | Click URL, no buttons |
| Attachments | Images | Image by URL, via extras |
| Grouping by source | Applications, filtered in the app | Applications |
| Email delivery | ||
| SMS or phone-call delivery | ||
| Records and debugging | ||
| Message history | Account-wide, synced to app and web | Stored on your server |
| Webhook call log | Headers, payload, rendered message, result | |
| History retention | 7 days free, 365 on the top plan | Kept until deleted, no retention setting |
| Delivery statistics | Per application and per device | |
| Account and data | ||
| Content encryption | At rest with a per-account key, secrets redacted | Your own disk; not documented |
| Two-factor authentication | TOTP with recovery codes | Only through an OIDC provider |
| Open source or self-hosted | MIT, Docker or a single binary | |
Gotify data from gotify.net and the gotify/server (v3.1.1), gotify/android and gotify/cli repositories, checked October 2026.
What you’ll pay
| Pocket Alert | Gotify | |
|---|---|---|
| Free plan | 50 messages a day, no card | Free and open source, on your own server |
| Entry paid plan | $6/month — 1,000 messages a day, 5 webhooks | No paid plans, and no hosted version |
| Highest tier | $25/month — unlimited messages, 365-day history | Costs your server, your domain and your time |
Pocket Alert pricing as of October 2026. Gotify is free and has no hosted offering. See full pricing.
Coming from Gotify
Install and get a key
Install the app on your iPhone or Android phone, sign in, and copy your API key from the dashboard.
Swap the endpoint
Point scripts at the Pocket Alert endpoint with the key in the Token header, and turn priority into level.
Replace the plugins
For each service behind a webhook plugin or bridge, create a Pocket Alert webhook and map its JSON with %field.path%.
Retire the box
Shut down the server, and turn battery optimisation back on for your phone.
curl https://gotify.example.com/message \
-H 'X-Gotify-Key: YOUR_APP_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"title": "Backup failed",
"message": "nightly dump exited with code 1",
"priority": 8
}'curl https://api.pocketalert.app/v1/messages \
-H 'Token: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"title": "Backup failed",
"message": "nightly dump exited with code 1",
"level": "high"
}'Questions, answered
Not an official one. The Gotify Android app holds a WebSocket open to your server, which iOS does not allow in the background, and the project does not use third-party push services. The community iGotify app works around that with another self-hosted service that relays messages to Apple. Pocket Alert has native apps for iPhone and Android, delivered through Apple and Google push.
It keeps a permanent connection to your server instead of using Firebase Cloud Messaging, so Android would otherwise kill it, and it shows a permanent notification while it runs. Pocket Alert uses FCM on Android and APNs on iPhone, so the app does not need to stay awake to receive a push.
Gotify accepts only its own message format, so a GitHub or Grafana payload needs a Go plugin, built against your server’s exact Go version, or a script in between. A Pocket Alert webhook takes the raw payload, maps fields with %field.path% placeholders into the title, body and action buttons, and logs every call it receives.
Control over where the data lives. With Gotify, messages sit in your own database. Pocket Alert keeps message history on its servers, encrypted at rest with a per-account key, and the account can be protected with two-factor authentication. If keeping data on your own hardware is a hard requirement, Gotify is the right tool.
Gotify uses numbers from 0 to 10: 1–3 show an icon, 4–7 add sound, 8–10 add vibration. Pocket Alert has five named levels: silent, low, default, high and critical. A rough map is 0 to silent, 1–3 to low, 4–7 to default and 8–10 to high, with critical kept for alerts that should override Do Not Disturb on Android.
Keep the curl call. Drop the server.
An API key, a webhook URL and the app on your phone. Nothing to deploy, patch or keep online.