Documentation
Webhooks
Use webhooks when you want Siren to push alerts to your server. You create a webhook in the dashboard, choose which alert types and cities you care about, save the signing secret, and expose an HTTPS endpoint that accepts `POST` requests.
Create And Configure
NameLabel for your own dashboard usage.
Target URLYour receiver endpoint. Must be HTTPS.
Static headersOptional headers sent with every request, for example Authorization.
Event typesLeave empty to receive all supported alert types. Otherwise only selected types are sent.
CitiesLeave empty to receive all cities. Otherwise only matching city names are sent. If none match, nothing is delivered.
Signing Secret
When you create a webhook, Siren shows a signing secret once. Store it on your server. For every delivery, Siren sends:
x-siren-timestampx-siren-signature
The signature is HMAC-SHA256 over:timestamp + "." + raw request body
Verify that value on your server before trusting the payload.
Minimal Receiver Example
1import crypto from 'node:crypto';2import express from 'express';34const app = express();5app.use(express.json({6 verify(req, _res, buf) {7 req.rawBody = buf.toString('utf8');8 },9}));1011app.post('/webhooks/siren', (req, res) => {12 const secret = process.env.SIREN_WEBHOOK_SECRET;13 const timestamp = req.header('x-siren-timestamp');14 const signature = req.header('x-siren-signature');1516 const expected = crypto17 .createHmac('sha256', secret)18 .update(`${timestamp}.${req.rawBody}`)19 .digest('hex');2021 if (signature !== expected) {22 return res.status(401).send('invalid signature');23 }2425 const event = req.body;26 console.log(event.type, event.data.cities);2728 return res.sendStatus(204);29});3031app.listen(3000);
Payload Shape
1{2 "id": "event_id",3 "type": "missiles",4 "version": "2026-04-09",5 "occurredAt": "2026-04-09T12:34:56.000Z",6 "source": "poller",7 "data": {8 "alertType": "missiles",9 "title": "ירי רקטות וטילים",10 "instructions": "היכנסו למרחב המוגן",11 "cities": ["תל אביב", "רמת גן"]12 },13 "meta": {14 "test": false,15 "webhookId": "webhook_id",16 "filtered": true17 }18}
Operational Notes
- Return a `2xx` response after you accept the event.
- Disabled webhooks can be re-enabled from the dashboard.