Send push notifications and update iOS Live Activities from scripts, automations, and APIs. One HTTP request. Instantly on your phone.
curl -d "Build #847 deployed to prod" \ https://api.pushtower.com/send/my-channel
fetch("https://api.pushtower.com/send/my-channel", { method: "POST", body: "Build #847 deployed to prod" })
import requests requests.post("https://api.pushtower.com/send/my-channel", data="Build #847 deployed to prod")
http.Post( "https://api.pushtower.com/send/my-channel", "text/plain", strings.NewReader("Build #847 deployed to prod"), )
reqwest::Client::new() .post("https://api.pushtower.com/send/my-channel") .body("Build #847 deployed to prod") .send().await?;
If it can make an HTTP request, it can send you a push notification. No SDK, no app integration, no vendor dashboard.
Door opened, washing machine done, temperature dropped below threshold. Get instant alerts from Home Assistant, Node-RED, or any webhook.
POST /send/home {"title":"Garage door open","body":"Left open for 10 min"} Watch builds and deploys progress in real time on your lock screen with Live Activities. Know instantly when something fails.
GitHub Actions → PushTower → Live Activity on your wrist Disk full, SSL expiring, service down. Push notifications cut through where emails and Slack messages get buried.
POST /send/alerts {"title":"CPU at 95%","priority":"critical"} Know the moment your print finishes or fails. Pipe OctoPrint, Klipper, or BambuLab webhooks straight to your phone.
OctoPrint webhook → PushTower → "Print done (2h 14m)" Crypto dipped, stock hit your target, eBay listing price dropped. Run a cron job and get notified exactly when it matters.
crontab → check_price.py → PushTower → your phone Soil moisture, air quality, water leak detected. Connect any ESP32, Raspberry Pi, or Arduino sensor to real push notifications.
ESP32 → HTTP POST → PushTower → instant alert No marketing fluff. Just the features you need to get alerts from your stuff to your phone.
Update progress bars, status indicators, and timers on the Dynamic Island and Lock Screen. The only push tool that supports this.
AES-256-GCM encryption with per-device keys stored in the Secure Enclave. The server never sees your notification content.
One POST request with a title and body. No SDKs, no API keys, no config files, no dashboard to set up first.
30+ built-in notification sounds or bring your own. Set different sounds per channel so you know what fired without looking.
Schedule notifications for later. Set quiet hours so your phone doesn't buzz at 3am when a backup job finishes.
Run PushTower on your own server with Docker. Your data, your infrastructure, your rules. Open source under MIT.
No certificates. No Firebase console. No config files. Just install and POST.
Download PushTower from the App Store. Tap "Get Started" — no account, no email, no password. You get an API key instantly.
POST to your channel URL from the getting-started page. Your phone buzzes. That's it — you're set up.
Add the API call to your scripts, CI pipeline, Home Assistant, or cron job. Every notification shows up on your phone in real time.
No SDK, no client library, no setup wizard. If your language can make an HTTP request, you're good.
curl -X POST https://api.pushtower.com/send/home \ -d '{ "title": "Front door unlocked", "body": "Opened by John at 6:42 PM", "sound": "doorbell", "priority": "high" }'
fetch("https://api.pushtower.com/send/home", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ title: "Front door unlocked", body: "Opened by John at 6:42 PM", sound: "doorbell", priority: "high" }) })
import requests requests.post("https://api.pushtower.com/send/home", json={ "title": "Front door unlocked", "body": "Opened by John at 6:42 PM", "sound": "doorbell", "priority": "high" })
body := strings.NewReader(`{ "title": "Front door unlocked", "body": "Opened by John at 6:42 PM", "sound": "doorbell", "priority": "high" }`) http.Post( "https://api.pushtower.com/send/home", "application/json", body, )
curl -X POST https://api.pushtower.com/send/ci \ -d '{ "activityId": "build-847", "event": "update", "title": "CI Build #847", "message": "Deploying to production...", "progress": 85 }'
fetch("https://api.pushtower.com/send/ci", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ activityId: "build-847", event: "update", title: "CI Build #847", message: "Deploying to production...", progress: 85 }) })
import requests requests.post("https://api.pushtower.com/send/ci", json={ "activityId": "build-847", "event": "update", "title": "CI Build #847", "message": "Deploying to production...", "progress": 85 })
body := strings.NewReader(`{ "activityId": "build-847", "event": "update", "title": "CI Build #847", "message": "Deploying to production...", "progress": 85 }`) http.Post( "https://api.pushtower.com/send/ci", "application/json", body, )
Start free. Upgrade when you need Live Activities, encryption, or more volume.
Paid plans support the development of PushTower as an open-source project. ❤️
Yes. The Free plan includes 200 notifications per month and 3 channels — enough for personal scripts, hobby projects, and home automations. No credit card required.
Live Activities are persistent updates that appear on the iOS lock screen and inside the Dynamic Island on iPhone 14 Pro and newer. PushTower lets you start, update, and end Live Activities with a single HTTP request — perfect for CI builds, deploys, rides, deliveries, or any long-running process.
Yes. PushTower is open source under the MIT license. You can run the entire stack on your own server with Docker — unlimited notifications, no plan restrictions, no telemetry.
No. PushTower charges per notification sent, not per device. Subscribe as many phones, tablets, and Macs as you want to any channel.
Notifications beyond your plan limit are rejected with an HTTP 429 response. You can upgrade at any time, and the limit resets at the start of every billing month.
Yes. Subscriptions can be cancelled from your account at any time. You keep paid features until the end of your current billing period, then drop back to the Free plan automatically.
Yes. On Pro and Ultimate plans, payloads are encrypted on your device or server before they leave, and decrypted only on the receiving device. PushTower servers cannot read message contents.
Any tool that can make an HTTP request. We provide examples for cURL, JavaScript, Python, Go, and Rust, but PushTower also works seamlessly with shell scripts, GitHub Actions, n8n, Home Assistant, Zapier, and Make.
PushTower is invite-only while we onboard early users. Drop your email and we'll let you know the moment your account is ready.