Push to
your phone.

Send yourself push notifications, simulated calls that bypass Do Not Disturb, and interactive prompts you can answer from the lock screen. One API key. One curl command. That’s it.

Push Notifications

Push notifications delivered instantly to your iOS or Android device. Trigger from scripts, CI/CD, monitoring — anything that can make an HTTP request.

Call Alerts

Incoming calls via CallKit (iOS) or full-screen alerts (Android) that cut through Do Not Disturb. Optional TTS — pick up and hear a spoken message.

API Key Auth

Open the app, get an API key. No accounts, no signup, no dashboards. One key per device, stored securely on your phone.

Self-Hosted

Your server, your data. Node.js backend with SQLite. Deploy anywhere — a VPS, a Raspberry Pi, your homelab.

Interactive Prompts

Ask yourself a question from a script and block until you answer. Tap a button on the notification, and the answer comes back as the HTTP response. Perfect for gating deploys, approving Claude Code edits, or any decision you want to make while away from your PC.

Yes / No Multi-choice Free-text reply Lock-screen answerable

Groups

Create a group, share a join code. One API call rings all devices in the group simultaneously. First response wins, or collect all answers.

Webhooks

Register a URL and get POSTed when prompts are answered, calls are missed, or any event fires. HMAC-signed payloads for security.

Repeat Calls

If you don’t answer, it calls again. Configure up to 10 retries at custom intervals. Stops the moment you pick up.

POST /api/notify
Send a push notification. Requires X-API-Key header.
curl -X POST https://notifich.mario.gdn/api/notify \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  -d '{"title":"Deploy Complete","body":"v2.4.1 is live"}'
POST /api/call
Trigger an incoming call alert that bypasses DND. Optional: callerName (defaults to "Notifich"), message (spoken via TTS when you answer).
curl -X POST https://notifich.mario.gdn/api/call \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  -d '{"callerName":"Server Alert","message":"CPU at 95%. Autoscaling triggered."}'
POST /api/prompt BLOCKING
Send a question with answer buttons. The request hangs until you tap an answer on your phone or the timeout elapses. Required: title, body, options (1–10 strings). Optional: allowFreeText, timeoutSeconds (5–600, default 300). Response: {"status":"answered","choice":"…"} or {"status":"timeout"}.
curl --max-time 320 -X POST https://notifich.mario.gdn/api/prompt \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  -d '{"title":"Approve deploy?","body":"Build #1423",
       "options":["Yes","No","Hold"],"timeoutSeconds":300}'
POST /api/webhooks
Register a URL to receive event callbacks. Events: prompt.answered, prompt.timeout, call.sent, call.answered, call.missed. Payloads are HMAC-signed if you provide a secret.
curl -X POST https://notifich.mario.gdn/api/webhooks \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  -d '{"url":"https://your-server.com/hook","events":["prompt.answered","call.missed"]}'
POST /api/groups
Create a group. Returns id, name, and a 6-digit joinCode to share. The creator becomes the group owner. Use "group":"name" in any notify/call/prompt to reach all members.
curl -X POST https://notifich.mario.gdn/api/groups \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  -d '{"name":"oncall-team"}'
# → {"id":"uuid","name":"oncall-team","joinCode":"482910"}
POST /api/groups/join
Join a group using a 6-digit joinCode. Your device will receive all future notifications sent to that group.
curl -X POST https://notifich.mario.gdn/api/groups/join \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  -d '{"joinCode":"482910"}'
GET /api/groups
List all groups you belong to. Returns id, name, joinCode, memberCount, createdAt.
curl https://notifich.mario.gdn/api/groups \
  -H "X-API-Key: YOUR_API_KEY"
POST /api/groups/:id/leave
Leave a group. Your device stops receiving notifications from that group.
curl -X POST https://notifich.mario.gdn/api/groups/GROUP_ID/leave \
  -H "X-API-Key: YOUR_API_KEY"
GET /api/account
Validate an API key and return account info: { "id": 42, "platform": "ios" }. Use this to confirm a key is valid and retrieve the numeric id needed to add users to groups programmatically — without transmitting their key further.
curl https://notifich.mario.gdn/api/account \
  -H "X-API-Key: USER_API_KEY"
# → {"id":42,"platform":"android"}
Owner API — manage group membership programmatically
GET /api/groups/:id/members OWNER
List all members of a group. Returns memberId, platform, isOwner, addedAt. Use for reconciling who should be in the group vs who currently is.
curl https://notifich.mario.gdn/api/groups/GROUP_ID/members \
  -H "X-API-Key: OWNER_API_KEY"
# → [{"memberId":42,"platform":"android","isOwner":false,"addedAt":"2025-01-15 10:30:00"}]
POST /api/groups/:id/members OWNER
Add a member by their numeric memberId (from GET /api/account). Idempotent — safe to call even if they are already a member. The user does not need to enter a join code.
# Step 1 — validate the user's key and get their id
curl https://notifich.mario.gdn/api/account -H "X-API-Key: USER_KEY"
# → {"id":42,"platform":"ios"}

# Step 2 — add them to the group (authenticate as the owner)
curl -X POST https://notifich.mario.gdn/api/groups/GROUP_ID/members \
  -H "Content-Type: application/json" \
  -H "X-API-Key: OWNER_API_KEY" \
  -d '{"memberId":42}'
# → {"success":true,"memberId":42,"memberCount":3}
DELETE /api/groups/:id/members OWNER
Remove a member by memberId. Idempotent. The group persists even if all members are removed — only an explicit DELETE /api/groups/:id destroys it.
curl -X DELETE https://notifich.mario.gdn/api/groups/GROUP_ID/members \
  -H "Content-Type: application/json" \
  -H "X-API-Key: OWNER_API_KEY" \
  -d '{"memberId":42}'
# → {"success":true,"memberCount":2}
DELETE /api/groups/:id OWNER
Permanently delete a group and all its memberships.
curl -X DELETE https://notifich.mario.gdn/api/groups/GROUP_ID \
  -H "X-API-Key: OWNER_API_KEY"
# → {"success":true}
01

Install App

Open the app (iOS or Android). An API key is generated and your device registers with this server.

02

Copy Key

Copy your API key from the app. That’s your credential for all API calls.

03

Send Requests

Use curl, scripts, or any HTTP client to push notifications or trigger calls.