Skip to content

Event Types & Sample Events

The events Spry can deliver to a webhook subscription, with sample payloads in the current 2026-06-11 minimized format. A single subscription can listen to any combination of these events.

event_type Fired when
patient.created A patient is registered
patient.updated A patient's profile is updated
appointment.created An appointment is booked
appointment.updated An appointment is modified (status change, reschedule, check-in)
appointment.cancelled An appointment is cancelled
case.created A patient case (plan of care) is opened
case.updated A patient case is modified (insurance, referring physician, status, …)

Each payload follows the common envelope. The minimized format carries only identifiers and a non-PHI status under data — look up the full record from the Spry API by id.

Patient Events

patient.created and patient.updated carry the patient identifier and status.

data Fields

Field Type Description
organisation_id integer Owning organisation
patient_id integer Spry patient identifier — look the patient up via the Spry API
status string ACTIVE, INACTIVE, or ARCHIVED

Sample — patient.updated

{
  "event_id": "evt_3d1fa7e8-1234-4567-89ab-cdef01234567",
  "event_type": "patient.updated",
  "api_version": "2026-06-11",
  "timestamp": 1776249887,
  "data": {
    "organisation_id": 74,
    "patient_id": 45741,
    "status": "ACTIVE"
  }
}

Appointment Events

appointment.created, appointment.updated, and appointment.cancelled carry the appointment and related identifiers plus the appointment status.

data Fields

Field Type Description
organisation_id integer Owning organisation
appointment_id integer Spry appointment identifier — look the appointment up via the Spry API
patient_id integer Patient the appointment belongs to
spry_case_id string Linked plan-of-care case (SPRY_CASE_<id>)
clinic_id integer Clinic the appointment belongs to
status string See Appointment Status Values

Sample — appointment.updated

{
  "event_id": "evt_8f3a2b9c-1234-4567-89ab-cdef01234567",
  "event_type": "appointment.updated",
  "api_version": "2026-06-11",
  "timestamp": 1776246130,
  "data": {
    "organisation_id": 74,
    "appointment_id": 113191,
    "patient_id": 45675,
    "spry_case_id": "SPRY_CASE_69d778fa05e30511a1a2b282",
    "clinic_id": 44,
    "status": "PATIENT_CHECKIN"
  }
}

Appointment Status Values

Value Description
CONFIRMED Booked and confirmed
PATIENT_CHECKIN Patient has checked in
IN_PROGRESS Session in progress
COMPLETED Session completed
CANCELLED Cancelled
NO_SHOW Patient did not arrive

Case Events

A case is a patient's plan-of-care container — it ties a patient to a specialization, referring physician, insurance cards, ICD/CPT codes, and treatment status. case.created and case.updated carry the case identifier and treatment status.

data Fields

Field Type Description
organisation_id integer Owning organisation
spry_case_id string Canonical Spry case identifier (SPRY_CASE_<id>) — look the case up via the Spry API
patient_id integer Patient the case belongs to
treatment_status string e.g. ACTIVE

Sample — case.updated

{
  "event_id": "evt_2c9f1a7b-aaaa-bbbb-cccc-1234567890ab",
  "event_type": "case.updated",
  "api_version": "2026-06-11",
  "timestamp": 1781153619,
  "data": {
    "organisation_id": 74,
    "spry_case_id": "SPRY_CASE_6a2a3ee88546243488bdd2e1",
    "patient_id": 48998,
    "treatment_status": "ACTIVE"
  }
}

Test Webhook

A test webhook uses the same envelope but adds "test": true to the payload so you can ignore test deliveries in production code paths.