REST API
Patients, appointments, practitioners, locations, invoices, payments, files and more — read, filter, create, update, delete.
MCP Server
Connect Claude, ChatGPT or your own agent. Same data, same rules, discovered automatically.
How it is put together
- One account, one tenant. Every clinic has its own subdomain and its own isolated database. Your base URL is
https://{clinic}.{region}.practicehub.io/v3/api— the host the practice signs in on (the region host is the one in the practice’s login URL —neptune(London),mercury(Frankfurt),vulcan(Ohio),jupiter(Singapore) orapollo(Sydney)) — and a credential only ever reaches the account it was created on. - Resources, not endpoints. Each resource (
patients,appointments, …) is a uniform collection: list with filters, fetch one, create, update, delete.GET /schematells you exactly what every resource exposes and accepts. - The app’s rules apply. Writes go through the same services PracticeHub itself uses — a booking checks the patient is active and the resource is at that location, a payment updates the balance, voiding an invoice releases its allocations. You get field-level validation and meaningful status codes instead of surprises.
- Your data on our records. Every record carries a
metadataobject for your own identifiers, which you can filter on. - Push, not poll. Webhooks tell you when records change — whether the change came through the API, from staff in the app, or from a background job — with thin, signed payloads.
- Built to be discovered. The OpenAPI reference on this site is generated from the running API, and the MCP server exposes the same model to AI clients.
Where to next
1
Authenticate
Create an API key and make your first call — Authentication.
2
Query
Filters, sorting, pagination and discovery — Querying.
3
Write
Creating and changing records safely — Writing.
4
Build
Complete worked integrations — a booking widget, a CRM sync, an accounting export, a webhook receiver — and the best practices they follow. Stuck? FAQ.
Coming from the legacy
/api? Why the new API walks through every difference and the reasoning; Migrating from the legacy API has the before/after tables. Attribute names and filter syntax are unchanged, so most integrations move in an afternoon.