patients | Full | Nested numbers[] and address; delete is a soft delete with audit |
appointments | Full | Through the scheduling service — bookings clash-checked, status changes are real transitions; see Booking |
availability | — | Computed free slots, GET only (Booking) |
invoices | Full | Delete voids; ≥1 line item always; header-only or line-reconciling PATCH |
line_items | Full | One line at a time; the last line on an invoice cannot be removed |
payments | Full | Real, active methods only; delete voids |
payment_allocations | Create, delete | Not edited — remove and re-create |
files | Full | Multipart upload; signed-URL reads |
notifications | Update read only | Patient push-notification log |
patient_logs, patient_log_tags, exercises, banners, self_service_portals | Full | |
appointment_types, modalities, payment_methods, referral_sources | No delete | |
practitioners, locations, practitioner_availabilities | Read-only | Created and edited in PracticeHub for now — each has side effects (user + roles + licence; address + calendar settings; availability series) that a plain write would skip. Writes will arrive routed through those flows |
numbers, addresses | Read-only | Write them via patients (numbers[], address) |
patient_payment_methods | Read-only | Stored cards are created and removed inside PracticeHub (a tokenised card from the payment gateway is required); a hosted “add a card” flow for integrations is under consideration |
discount_codes | Read-only | |
deleted_entities | Read-only | Tombstones for sync — what was deleted and when |