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 delivered instantly to your iOS or Android device. Trigger from scripts, CI/CD, monitoring — anything that can make an HTTP request.
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.
Open the app, get an API key. No accounts, no signup, no dashboards. One key per device, stored securely on your phone.
Your server, your data. Node.js backend with SQLite. Deploy anywhere — a VPS, a Raspberry Pi, your homelab.
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.
Create a group, share a join code. One API call rings all devices in the group simultaneously. First response wins, or collect all answers.
Register a URL and get POSTed when prompts are answered, calls are missed, or any event fires. HMAC-signed payloads for security.
If you don’t answer, it calls again. Configure up to 10 retries at custom intervals. Stops the moment you pick up.
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"}'
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."}'
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}'
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"]}'
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"}
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"}'
id, name, joinCode, memberCount, createdAt.
curl https://notifich.mario.gdn/api/groups \ -H "X-API-Key: YOUR_API_KEY"
curl -X POST https://notifich.mario.gdn/api/groups/GROUP_ID/leave \ -H "X-API-Key: YOUR_API_KEY"
{ "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"}
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"}]
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}
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}
curl -X DELETE https://notifich.mario.gdn/api/groups/GROUP_ID \ -H "X-API-Key: OWNER_API_KEY" # → {"success":true}
Open the app (iOS or Android). An API key is generated and your device registers with this server.
Copy your API key from the app. That’s your credential for all API calls.
Use curl, scripts, or any HTTP client to push notifications or trigger calls.