Set up your first webhook
Pick a URL, pick the events, copy the secret. Three minutes end to end.
This article assumes you already know what webhooks are for. If not, read that first.
Before you start
- You must be a Coordinator of at least one Circle.
- You need a publicly reachable URL that will receive the POSTs. If you are testing, use webhook.site to grab a free temporary URL.
- Your subscription must be active.
Steps
- Sign in at getwello.co.uk.
- Open Settings → Developer API.
- Scroll down to the Webhooks section.
- In the create form:
- Name: something you will recognise later, like "Home Assistant kitchen Sonos".
- Circle: if you Coordinate more than one Circle, pick which one this webhook is for. One subscription per Circle.
- URL: the URL we should POST to. Must be
https://in production. For local testing,http://localhostis also accepted. - Events: tick the ones you want to receive. You can change this later by deleting and re-creating the subscription.
- Click Create webhook.
- A modal pops up showing your signing secret, which starts with
whsec_. Copy it now. This is the only time it is shown. If you lose it, you delete the subscription and start again. - Paste the secret into your integration. How you do this depends on what you are using:
- Home Assistant: usually in
secrets.yamlasgetwello_webhook_secret: whsec_.... - n8n: as a credential, or directly in an HMAC verification node.
- Custom code: as an env var or constant; never commit it to a public repo.
- Home Assistant: usually in
- Click I've saved it, close.
Test it works
- Back on the Developer API page, find your new webhook in the list.
- Click Test. We fire a synthetic
webhook.testevent to your URL. - A green box appears if your receiver returned a 2xx status. If you see red, the URL is unreachable, the receiver rejected the POST, or returned an error. Check your receiver's logs.
What we send
Every webhook is an HTTPS POST with JSON body. Headers include:
Content-Type: application/jsonX-Getwello-Event: check_in.created(or whichever event)X-Getwello-Timestamp: 1717840923(Unix seconds at the time we signed)X-Getwello-Signature: t=1717840923,v1=8f7d...(HMAC-SHA256 signature)X-Getwello-Delivery-Id: a unique id for this specific delivery, useful for deduplication
Body example:
{
"event": "check_in.created",
"occurred_at": "2026-06-08T08:14:32Z",
"circle_id": "9d3...",
"data": {
"check_in_id": "5a2...",
"checkin_member_user_id": "a1b...",
"status": "well",
"for_local_date": "2026-06-08"
}
}
How to verify the signature
This is the bit that proves the request really came from Getwello. Every modern language has an HMAC library; here is the recipe:
- Read the raw request body as a string. (Do not parse the JSON first; the signature is over the bytes you received.)
- Read the
tvalue from the signature header. - Concatenate:
signed_string = t + "." + body - Compute HMAC-SHA256 of
signed_stringusing yourwhsec_secret as the key. - Compare your computed signature (hex) to the
v1value from the header, using a constant-time comparison. - Also reject any signature where
tis more than 5 minutes old. Stops replay attacks.
In Node.js this looks like:
import { createHmac, timingSafeEqual } from "node:crypto";
function verify(secret, body, header) {
const match = header.match(/^t=(\d+),v1=([a-f0-9]+)$/);
if (!match) return false;
const [, t, provided] = match;
if (Math.abs(Date.now() / 1000 - parseInt(t)) > 300) return false;
const expected = createHmac("sha256", secret)
.update(`${t}.${body}`)
.digest("hex");
return timingSafeEqual(Buffer.from(expected), Buffer.from(provided));
}
Auto-disable on consecutive failures
If your receiver fails 5 times in a row (any non-2xx response, or no response within 6 seconds), the subscription auto-disables. It stays in your list with an "Auto-disabled" pill. Fix the receiver, then either delete-and-recreate the subscription or contact us.
Worked example
For a real end-to-end recipe wiring Getwello to Home Assistant so the kitchen Sonos announces check-ins, see Sonos announces "Mum has just checked in" via Home Assistant.
More on developer api, mcp and webhooks
- What the Developer API is for, in plain English
- Create your first API key
- Set up the Getwello MCP server with Claude Desktop
- What webhooks are, and why you would want one
- Recipe: Sonos announces "Mum has just checked in" via Home Assistant
- Troubleshooting integrations
- Set up Getwello with Slack, end to end
- Set up Getwello with Amazon Alexa
- Set up Getwello with Apple Shortcuts and Siri
- Set up Getwello with Google Home and Nest
- Set up Getwello with Zapier
- Set up Getwello with Notion
- Set up Getwello with n8n
- Set up Getwello with Make.com
- Set up Getwello with Discord
- Set up Getwello with Microsoft Teams
- Set up Getwello with Telegram
- Set up Getwello with IFTTT
- Set up Getwello with Pushover
- Set up Getwello with Cursor
- Set up Getwello with Ollama
- Set up Getwello with Apple HomeKit
- Set up Getwello with SmartThings
- Set up Getwello with Hubitat
- Set up Getwello with Tasker
- Set up Getwello with Sonos
- Set up Getwello with Google Calendar
- Set up Getwello with Apple Calendar
- Set up Getwello with Obsidian
- Set up Getwello with ntfy
Didn't answer your question?
Email hello@getwello.co.uk