Get a push notification to your device
from anything that can make an HTTP request

Install the free app, grab your key, and send an HTTP request to notifi.it/send.

~/deploy.sh
$ curl https://notifi.it/send -d key=nk_yourkeyhere -d title="hello world"
$ curl https://notifi.it/send \
    -d key=nk_yourkeyhere \
    -d title="hello world"

Replace nk_yourkeyhere with the key from the app. More fields in the API docs.

The app


One key per device.
Each iPhone, iPad or Mac gets its own key.
Get a push notification to your device
from anything that can make an HTTP request.
No signup, just HTTP.
Install the app, copy your key, start sending.
run.sh — -zshclaude — ~/notifitrain.py — -zsh
$ curl notifi.it/send \
-d key=nk_live_8f3a \
-d title="Hello from notifi" \
-d message="Your first notification." \
-d link=https://notifi.it/docs \
-d image=https://notifi.it/anaglyph-bell.png
{"ok":true}
Claude Code v2.1.238
Fable 8
Build an app to send notifications over HTTP
 to my iOS device and my macOS device.
 Make no mistakes.
It already exists. Check your phone.
# tell me when the training run ends
import requests, tensorflow as tf
run = model.fit(train_ds, epochs=40)
loss = run.history["val_loss"][-1]
requests.post("https://notifi.it/send",
headers={"Authorization": f"Bearer {KEY}"},
json={"title": "Training finished",
"message": f"val loss {loss:.3f}"})
{"ok":true}
Tuesday 11 August
10:24
Hello from notifi
Your first notification.
Tuesday 11 August
10:24
Claude Finished
No mistakes made.
Tue 11 Aug 10:24
Training finished
val loss 0.041

On the device


A notification opened on iPhone: a latency alert with its chart and a table of stages, rendered from Markdown.
A notification. The body is Markdown: headings, tables, images and code, rendered on the device. Attach a main image and a link.
The inbox hanging from the Mac menu bar: the bell sits in the bar and the popover beneath it lists the day’s notifications, the urgent one in red.
The inbox, from the Mac menu bar. Notifications are stored here, on the device (deleted from our servers immediately after receiving).

API


GET or POST https://notifi.it/send

JSON or form-encoded. Authenticate with Authorization: Bearer <key>, or pass key as a parameter. The full reference is at notifi.it/docs.

ParameterTypeNotes
key required string The key from the app. It picks which device gets the push. Send it as a header, Authorization: Bearer nk_yourkey, which keeps it out of logs; or pass it as this parameter.
title required string The notification title. Up to 200 characters.
message string The notification body. Markdown, up to 16,000 characters.
link URL A link to a website or internal app. Up to 2,048 characters.
image URL Image displayed with the notification. URL up to 2,048 characters.
occurred_at integer Unix milliseconds. Changes the timestamp shown in the app; defaults to when we receive the request.
is_critical boolean Ask for a critical alert: it breaks through Focus and stays on the lock screen. The key must also have Critical alerts switched on in the app.
send.sh
curl -X POST https://notifi.it/send \
  -H "Authorization: Bearer $NOTIFI_KEY" \
  -d "title=Hello from notifi" \
  -d "message=Your first notification." \
  -d "link=https://notifi.it/docs" \
  -d "image=https://notifi.it/anaglyph-bell.png"

Uses


Agents

  • An agent stopped and needs a decision
  • An Nvidia GPU dropped below $500
  • Training loss went NaN

Builds and deploys

  • A deploy failed
  • App Review approved the build
  • A build has been queued for 20 minutes

Servers and jobs

  • A disk crossed 90%
  • A health check has been down five minutes
  • A nightly backup did not run

Home and hardware

  • A humidity sensor went over 70%
  • The UPS switched to battery
  • The car finished charging

How it works


No signup, no email, no password. The app generates a keypair on first launch and that keypair is your identity.

Notifications are encrypted with your public key before they are stored, so the server only ever holds encrypted text. Apple relays an alert that just says notifi, and your phone decrypts the real title when it arrives.

See more.

The server deletes a notification as soon as your device confirms it has collected it. Your history stays on your device.

Send with is_critical=1 on a key you have marked critical, and the notification breaks through Focus and lands on the lock screen.

CI gets a key, the backup job gets a key, the scraper gets a key. If one leaks, revoke it and the rest keep working.

Plain HTTP, so anything that can make an HTTP request can send: a Linux box, a CI runner, a router, a home hub, another phone.

The app, the API and the crypto are on GitHub.

Why not just use ...


  • Quicker to set up than an SMTP relay
  • Your important notifications in one place, without cluttering your email inbox
  • Lighter than running Slack
  • No bot to register, unlike Telegram
  • Richer formatting than SMS allows
  • Encrypted, unlike Ntfy
  • Free, where Pushover charges

Download


On the Mac it lives in the menu bar. Each key delivers to one device, so a script pages your phone, your Mac, or both if you give it two keys.

Download on the App StoreiPhone and iPad · iOS 17+ Download the Mac app (.dmg)Apple silicon or T2 · macOS 14+

Both apps are free, with no account to create.

The Mac build updates itself.

Homebrew works too:

Homebrew
$ brew install --cask notifi-it/tap/notifi