Skip to main content
Coming soon. Webhook delivery is not switched on yet. This page describes the contract that will ship — event types, payload shape, signing and delivery behaviour — so you can build your receiver ahead of time. Until then, poll with updated filters and deleted_entities (see Querying). The changelog will announce availability.
Instead of polling, subscribe an HTTPS endpoint and PracticeHub will call it when records change on the account. Events fire for changes made through the API, in the PracticeHub app by staff, and by background jobs alike.
Webhooks are available on accounts created on PracticeHub 2.0. Existing accounts get them when they complete their move to 2.0 — until then, poll deleted_entities and updated filters as before.

Setting up an endpoint

1

Open the portal

In PracticeHub go to Developers → Webhooks → Manage endpoints. This opens the account’s webhook portal.
2

Add your endpoint

Enter your HTTPS URL, choose which event types it should receive (or all), and save. The portal shows the endpoint’s signing secret — copy it into your service.
3

Watch it work

The portal lists every delivery attempt with the response your endpoint returned, lets you replay any message, and can send a test event.

What you receive

Payloads are deliberately thin — the event type and the record’s id, never the record itself — so no clinical or personal data leaves PracticeHub through a webhook. Fetch the record from the API with your own key:
id is unique per event — use it to de-duplicate, since a delivery may be retried after a timeout. Events for one record are not guaranteed to arrive in order; the record you fetch is always current.

Event types

Every resource below emits {resource}.created, {resource}.updated and {resource}.deleted (a delete or void). The full, current list — with the semantic appointment events — is on Developers → Webhooks and in the portal when you add an endpoint. Several saves to one record within a single operation are reported once. A patients.deleted or payments.deleted means the record was soft-deleted or voided — it will no longer be returned by the API.

Verifying signatures

Every delivery is signed. Verify it before trusting it — the signature scheme is Standard Webhooks, so use the library for your language with the endpoint’s signing secret from the portal:
Rotate the secret from the portal at any time.

Delivery and retries

Respond with any 2xx within a few seconds — do the work afterwards. Non-2xx responses and timeouts are retried with exponential backoff over roughly a day; an endpoint that keeps failing is disabled and you are notified in the portal, where you can re-enable it and replay what was missed.