Skip to main content
Instead of polling, your server receives a signed 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 needs integrations.keys.manage. The URL must be https on a public host name (no IP addresses, no localhost).
201 Created
Store 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 a POST with a JSON body and three headers:
The signature is base64(HMAC-SHA256(key, "{webhook-id}.{webhook-timestamp}.{raw body}")), where key is the base64-decoded part of your secret after whsec_. To verify:
  1. Compute the signature over the raw body bytes, before any JSON parsing.
  2. Compare it in constant time with each v1, entry of webhook-signature (space-separated: during a secret rotation there are two).
  3. Reject timestamps more than 5 minutes from your clock, to stop replays.
  4. Answer 2xx quickly; do the work afterwards.
Or use the official Standard Webhooks libraries, which do the same checks:
Install them with npm install standardwebhooks or pip install standardwebhooks.

4. Send a test

Response
The test is delivered to this webhook whatever it subscribes to. At most 5 tests per minute per webhook (429 WEBHOOK_TEST_RATE_LIMITED).

The delivery body

Retries and duplicates

  • A delivery succeeds when your server answers 2xx within 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. failingSince and disablesAt on the webhook tell you it is coming.
  • webhook-id is 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

The answer carries the new 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
Deleting removes the webhook and its delivery log; nothing more is sent.