Crit Alarm
Alert to acknowledge

From system failure to bedside alarm in two seconds.

Crit Alarm turns standard HTTP requests from your servers into loud, persistent sirens on your phone. Post, ring, acknowledge, close.

The alert pipeline

Your systems post. The server opens an incident. The relay wakes the phone. The phone rings.

01 · PUBLISH

Your systems

Uptime Kuma, cron, shell scripts, or CI pipelines post standard HTTP webhooks to your topic URL.

02 · INCIDENT

Server engine

The server validates the bearer token, opens an incident row in SQLite, and starts durable timers.

03 · PUSH RELAY

Wake-up ping

The relay pokes Apple APNs and Google FCM with an opaque hash. Your alert text does not go through it.

04 · BEDROOM

Critical alarm

Your phone gets the ping, fetches the incident from your server, and sounds the alarm.

Step 1

Create a topic and configure delivery

Every topic gets a dedicated endpoint and a private bearer token. There are no public topics.

Topic security and privacy

You name your topic, for example prod-db or nas-backup. The server assigns a secret token prefixed with ca_live_. Only callers holding this token can publish alerts or query incident status.

Critical delivery starts OFF on every new topic. You turn it on in the app for the topics that need to wake you.

Generated topic endpoints

On Plays at alarm volume
Step 2

Publish from any server, script, or webhook

Crit Alarm speaks ntfy-compatible HTTP. Anything that can make an HTTP request can alert you.

Simple curl publish

curl -X POST https://api.critalarm.app/t/prod-db \
  -H "Authorization: Bearer ca_live_7Hq2mN9xPz4wKd8" \
  -H "Priority: critical" \
  -H "Title: Primary database down" \
  -H "Tags: postgres,db-1" \
  -d "pg_isready failed 3 times in 90 s. Replica promoted to primary on db-2."

Uptime Kuma configuration

# In Uptime Kuma:
# Notification Type: ntfy
# Server URL: https://api.critalarm.app
# Topic: prod-db
# Priority: 5 (Critical)
# Authentication: Bearer ca_live_7Hq2mN9xPz4wKd8

Supported HTTP headers

  • Authorization: Bearer <token>

    Proves the request is allowed to publish to your topic.

  • Priority: critical

    Selects severity (min, low, default, high, critical, or numbers 1 to 5).

  • Title: <summary>

    The headline on the lock screen.

  • Tags: postgres,db-1

    Labels you can filter by in the app.

  • Actions: view, Dashboard, https://...

    Buttons on the notification.

Step 3

What the relay sees

The relay never sees your hostnames, your logs, or the text of your alerts.

What goes through the relay

When an incident opens, your server sends Apple and Google a hash of the topic name and the incident id. Nothing else.

Your phone then asks your own server for the title, the body and the priority. Apple and Google never see any of it.

What each side sees

What passes through Apple and Google push servers:
{"topic_hash":"a4f9b2...","incident_id":"inc_01J7Q"}
What stays on your server:
"pg_isready failed 3 times in 90 s. Replica promoted."
Step 4

The 3am bedside critical alarm

When a priority 5 alert arrives, the phone sounds an alarm and keeps sounding it.

What the alarm does

On Android the alarm takes over the whole screen and plays at alarm volume. On iOS it arrives as a Time-Sensitive notification.

  • Plays at alarm volume
  • Repeats every 30 seconds for up to 60 minutes
  • Escalates to a second device after 5 minutes
  • Stops when you acknowledge
Step 5

Two-stage resolution: wake up, then close

Acknowledge the siren from your bedside. Close the incident once you reach your computer.

STAGE 1

"I am up" (Acknowledge)

You tap Acknowledge from your lock screen, notification action, or watch. The siren stops immediately. The screen flips to cobalt.

A desk timer starts (default: 10 minutes). If you fall back asleep and it runs out, the alarm starts again.

Desk timer default: 10 minutes
STAGE 2

"At my desk" (Close incident)

Once you reach your workstation and resolve the root cause, you close the incident. Close it from the app or with an API call.

# Acknowledge an incident from your workstation terminal
curl -X POST https://api.critalarm.app/t/prod-db/ack \
  -H "Authorization: Bearer ca_live_7Hq2mN9xPz4wKd8" \
  -d '{"incident_id":"inc_01J7Q"}'

One incident, start to finish

A failover at 03:12, acknowledged at 03:14.

What the phone did Delivery log for msg_01J7Q
Delivered
03:12:04
Rang
4 times, 30 s apart
Acknowledged
03:14:18 by Z
Escalation
not needed

If the server restarts

A reboot in the middle of an incident does not stop the alarm.

When the server comes back it picks the incident up where it left off and keeps ringing.

Your control over the alarm

Critical defaults to OFF

Every new topic starts non-critical. You choose which ones may wake you.

Every topic has a token

Publishing needs the topic token. Nobody else can push to your phone.

The app never invents an alert

The app never generates alerts on its own and never inspects device contents.

You can turn it off

Turn critical delivery off for one topic, or for everything, in Settings.

Ready to wire up your first topic?

5 free topics on our server. Unlimited on yours.