Skip to content

Quickstart

By the end of this page you will have fired an alarm and watched it resolve the people it would have alerted - without alerting anyone. Everything here happens in the console except the last step, which is one HTTP call.

Sign up at console.openalarm.io. The first-run steps ask for your name and create your first location with its address - the people you alert see which location triggered, and the address tells them exactly where to go.

Contacts → Add Contact. Add yourself first: name, and your own mobile number or email. You will be the one alerted in a moment, which is the honest way to see what your real contacts would receive. Saving a contact records your attestation that they agreed to be contacted - for yourself, that is an easy yes.

An alarm alerts whoever its escalation policy says, in the order it says.

Policies → New Policy. One level is enough to start: add your contact to it and pick the channel to reach them on - text, call, or email.

Sources → Alarms → New Alarm. Give it a name, then open the Away mode in the Modes list and bind it to your policy. A new alarm starts in Test - a test trigger runs the real policy and records who would have been reached, without contacting anyone - so there is nothing to set here. The alarm belongs to the location you are viewing; with one location there is nothing to choose.

Developers → API Keys → New API Key. The key authorizes alarm actions and nothing else. Copy it now; it is shown once. Keys can be scoped to a single alarm, which is the right shape for a key that lives in a webhook config.

Terminal window
ALARM_ID='k7m3x9q2f8d4w1b5n6p0r3t7v2x5z9c4'
API_KEY='oa_m9s346q3d25vt4f5v37e3s3e28jt97kb6cq643dzvmxxqkfbf5kznwj47tan9zt2'
curl "https://api.openalarm.io/v1/alarm/${ALARM_ID}/trigger" \
-H "X-API-Key: ${API_KEY}"
{
"error": false,
"message": null,
"traceId": "8f14e45f-ea0d-4a1b-9f2c-6b3d70c5e881",
"data": {
"environment": "test",
"location": { "id": "2c9wvhrq52k5refhtvmmr0f8yjz5j9e9", "name": "Home" }
}
}

environment: test confirms nobody was contacted. Open the alarm in the console: the log shows the trigger, and the incident lists your contact with the delivery marked suppressed - who would have been reached, on which channel, at what time. The chain exactly as it would have run. See Test Mode for everything a test does and does not do.

The same call as a rest_command, fired by any automation:

rest_command:
openalarm_trigger:
url: "https://api.openalarm.io/v1/alarm/k7m3x9q2f8d4w1b5n6p0r3t7v2x5z9c4/trigger"
headers:
X-API-Key: !secret openalarm_api_key

Better: the official integration installs through HACS and turns every alarm into a device with actions and a panel entity - no YAML endpoints to maintain.

UniFi Protect’s Alarm Manager calls the same URL directly - a bodyless GET with the key in a custom header, no middleman needed. The UniFi Protect guide walks through it.

Flip the alarm’s Environment from Test to Live in the console. Nothing else changes - same URL, same key, same policy - except that the next trigger reaches your contacts for real. Add the people who should actually be alerted, and you are done.