A webhook is a mechanism that enables real-time data exchange between applications. When an event occurs—such as scheduling a new appointment—the webhook sends the relevant information to a designated endpoint in another system, eliminating the need for manual checks. The receiving application determines how to process this data based on its internal business logic.
💡Note: Salvus Health does not control or influence how third-party systems process webhook data.
To subscribe to Salvus Health webhooks, third-party applications must provide:
A destination URL where webhook events will be sent.
An authorization secret if the DestinationURL requires authentication via an API key.
Subscriptions are tied to specific user accounts.
Each user account can create one webhook subscription.
The webhook system allows users to select which events they want to subscribe to.
Webhooks are triggered only for pharmacies that the user account has access to.
At the moment we support appointments events. And we plan in the near future to support more events of Reservations, Care-Flow, Measurements, etc.
| Event Value | Description |
|---|---|
EVENT_DESC_CREATE_APPOINTMENT |
Triggered when a user or pharmacist schedules an appointment |
EVENT_DESC_UPDATE_APPOINTMENT |
Triggered when an appointment is rescheduled |
EVENT_DESC_CANCEL_APPOINTMENT |
Triggered when an appointment is canceled |
EVENT_DESC_CONFIRM_APPOINTMENT |
Triggered when a pharmacist confirms a pending appointment |
EVENT_DESC_REJECT_APPOINTMENT |
Triggered when a pharmacist rejects a pending appointment |
To ensure transparency and debugging capabilities, webhook activity is logged as follows:
Webhook Activation Status – Verify if an active webhook exists for the specific pharmacy and event.
Subscribers List – Identify subscribers for the given event and pharmacy.
Event Data – Log the data being sent in the payload.
Delivery Status – Track whether the event was successfully delivered or failed.
Webhooks send event data in JSON format. Below is an example of an appointment scheduling payload:
{
"event_type": "appointment_scheduled",
"resource": "Appointment",
"timestamp": "2025-01-07T02:00:00Z",
"pharmacy_identifier": "APB-XXX",
"data": {
"id": "7df410ee-7a64-4e44-a64a-84f29d20bc63",
"type": "vaccine_reservation",
"status": "scheduled",
"notes": "Bring ID and vaccination card.",
"date": "2025-01-15",
"time": "14:30",
"timezone": "Belgium",
"duration_minutes": 30,
"user": {
"firstName": "John",
"lastName": "Doe",
"email": "johndoe@example.com",
"phone": "+1234567890",
"postalCode": "1800"
},
"location": {
"name": "City Health Clinic",
"address": "123 Main Street, Springfield"
}
} }
💡 Note: The
datafield varies depending on the event type (e.g., Appointments, Reservations, Questionnaires).