patients | Full | Nested numbers[] and address, reconciled by id — send the id you read back to keep/update a row, omit it to add one, leave it out to remove it; the file’s tags[] embedded read-only; delete is a soft delete with audit |
appointments | Full | The visit’s patient (id and display name) embedded on every read. Through the scheduling service — bookings validated as a staff click is (not diary-checked), status changes are real transitions; delete is permanent (only a deleted_entities audit row survives) and only allowed while the visit is pending or arrived with no active invoice; see Booking |
availability | — | Computed free slots, GET only (Booking) |
invoices | Full | Delete voids; ≥1 line item always; header-only or line-reconciling PATCH — a line’s id with no billable_item_id leaves its link unchanged; every new line needs a billable_item_id, and null is refused |
line_items | Full | POST one line or lines[] for several (all-or-nothing); the last line on an invoice cannot be removed |
payments | Full | Real, active methods only; delete voids |
refunds | Create | Refunds part or all of a payment the clinic took itself; provider-collected payments are refunded in PracticeHub. Never edited or deleted — see Billing |
payment_allocations | Create, delete | Not edited — remove and re-create |
files | Full | Multipart upload; signed-URL reads |
clinical_notes | Create | form_id (from form_templates) is required — no default form. No update or delete yet; a create always starts a new note (revision 1), never edits an existing one. Integration keys read and write; connected assistants read when the member’s role has Patient visit notes, and will write under the same permission once MCP writes are switched on (draft-only roles: drafts only) — see Clinical notes |
form_templates | Read-only | Note templates — id, name, form_type, status, schema (field names for clinical_notes.data). Templates built in PracticeHub 2.0 (Settings → Forms) only |
patient_logs, patient_log_tags | Full | |
payment_methods, referral_sources | No delete | Other records point at these; deactivate in PracticeHub instead |
care_plans | Read-only | A patient’s care plans with how each is paid for (billing), its visit schedules and the members who share it embedded. GET /care_plans/{id} carries the whole plan: each schedule’s phases and modalities and its visit tracking, the billing periods, and the services and products bundled. Plans are sold, scheduled and billed in PracticeHub — the API reports them. Plan templates, saved cards and payment references are never exposed |
billable_items | No delete | The account’s catalogue of services and products — what every invoice line bills (billable_item_id). Create and update run the same rules as Settings → Billing; deactivate with active: false rather than deleting |
appointment_types, locations | No delete | Create and update run through the same services as Settings, so defaults and side effects (calendar settings, address) are applied. Some settings are accepted on write but not yet returned on read — see the API Reference for each |
modalities, practitioners, resources, practitioner_availabilities | Read-only | Created and edited in PracticeHub for now — each has side effects (user + roles + licence; availability series) that a plain write would skip |
numbers, addresses | Read-only | Write them via patients (numbers[], address) |
tags | Read-only | The account’s patient tags — what a patient’s tags[] point at |
patient_tags | Create, delete only | A tag on a patient’s file: POST puts an active tag on, DELETE takes it off; no GET — a file’s tags are read on the patient (tags[]). A tag a care plan put there (editable: false) cannot be removed |
deleted_entities | Read-only | Tombstones for sync — what was deleted and when. Written by PracticeHub 2.0 only; a delete made in PracticeHub Classic on a mixed account leaves none |