Developer docs Security & compliance Live demo
Try the demo

Connections / Webhooks

Tell your own systems what happened, without exporting a patient record.

Bookings, cancellations, referrals, completed forms and payments are posted to your URL, signed and retried. Payloads carry identifiers and states, never patient details, so an integration is never an export nobody reviewed.

The webhooks page listing six subscriptions, each with its HTTPS address, the events it receives and an on or off status, above the form for adding a new subscription.
Signed, retried event notifications that carry identifiers, never patient details. Shown with sample data.

What it does

Webhooks, in practice

The events that matter

New patients and patient replies, appointments booked or cancelled, referrals received or moved on, intake forms completed, payments recorded, orders placed, care enrolments and out-of-range readings, and a patient waiting for a video visit.

Identifiers, never patient details

A webhook goes to a server we do not control, so payloads carry identifiers and states only. A subscriber who needs more asks for it, having proved who they are.

Signed, with an event id

Each request is signed — an HMAC of the timestamp and body — and carries an event id, because delivery is at-least-once and the receiver should recognise a repeat.

Retried, then switched off

Failures retry with doubling back-off up to an hour, eight attempts in all; a subscription that fails fifteen times in a row switches itself off.

Safe addresses only

Addresses on localhost or private networks are refused, a test event shows a signed delivery before going live, and payloads are deleted after thirty days.

How it works

From the first step to the last

  1. 1

    Subscribe

    An HTTPS address and the events it wants.

  2. 2

    Verify

    Check the signature with the secret, shown once.

  3. 3

    Receive

    Events as they happen, retried until your end says yes.

What it needs

Before you switch it on

  • Nothing elseWorks on its own, with or without an EMR connected.

Every module switches on and off by itself, per clinic, with its own screens, permissions and audit trail.

Worth knowing

Payloads deliberately contain no patient details; anything more is a separate, authenticated request.

See Webhooks working on a real system.

The demo runs every module against an unmodified OpenEMR, with invented patients. Nothing to install and no sales call.