POST when something happens in the clinic. Brelio signs deliveries with the Standard Webhooks scheme, so any Standard Webhooks library verifies them.
In this version the only event you can subscribe to is
webhookEndpoint.tested, the test delivery. Appointment and patient events are next; GET /v1/webhook-event-types always lists what is available.1. List the event types
Response
privacy is operational or personal (about patients). Clinical events are never delivered by webhook. personal events are delivered only while the clinic’s patients data area is on; patient fields in other events are sent as null while it is off.
2. Create the webhook
Your key needsintegrations.keys.manage. The URL must be https on a public host name (no IP addresses, no localhost).
201 Created
secret now, in your secret manager: it is shown only here and when you rotate it. Webhooks are created over REST only, never over MCP, so the secret never reaches an AI model.
3. Verify every delivery
Each delivery is aPOST with a JSON body and three headers:
base64(HMAC-SHA256(key, "{webhook-id}.{webhook-timestamp}.{raw body}")), where key is the base64-decoded part of your secret after whsec_. To verify:
- Compute the signature over the raw body bytes, before any JSON parsing.
- Compare it in constant time with each
v1,entry ofwebhook-signature(space-separated: during a secret rotation there are two). - Reject timestamps more than 5 minutes from your clock, to stop replays.
- Answer
2xxquickly; do the work afterwards.
npm install standardwebhooks or pip install standardwebhooks.
4. Send a test
Response
429 WEBHOOK_TEST_RATE_LIMITED).
The delivery body
Retries and duplicates
- A delivery succeeds when your server answers
2xxwithin 15 seconds. Redirects are not followed. - A failed delivery is retried after 5 s, 5 min, 30 min, 2 h, 5 h, 10 h and then every 12 h, for 3 days.
- If nothing gets through for 3 days, the webhook is disabled and the clinic’s owners are notified.
failingSinceanddisablesAton the webhook tell you it is coming. webhook-idis the delivery’s id and stays the same on every retry and on a manual redelivery. Store the ids you processed and skip repeats.- Deliveries can arrive out of order. Use
timestamp, or read the record from the API, when order matters.
Diagnose a webhook
recentDeliveries shows each delivery’s status (pending, succeeded, failed, skipped), attempts, lastStatusCode, lastError and nextAttemptAt. After fixing your server, send a delivery again now instead of waiting:
Rotate the secret
secret. For 24 hours (previousSecretExpiresAt) deliveries are signed with both secrets, so you can deploy the new one without missing anything. The receivers above already accept either signature.
Delete it
Response