Jane App Use Cases: What You Can Build for Allied-Health Clinics
Physiotherapy, chiropractic, massage and mental-health clinics do not run on dental software — a great many of them run on Jane. Here are five things a software vendor can build on the CRMBridge Jane integration, and the API calls behind each one.
Allied health runs on Jane — and it is not dentistry
Jane is the cloud practice management system a large share of physiotherapy, chiropractic, massage therapy, mental-health and naturopathic clinics run their day on, particularly in Canada and the United States. If you sell software to those clinics — a reminder tool, an AI receptionist, an intake product, a payments or reporting platform — Jane is where the schedule, the patient list and the invoices live.
It is worth being clear about what is different from a dental system, because it changes what you build. Jane clinics book treatments with practitioners, not procedure codes with providers in operatories. One clinic often houses several disciplines with different treatment menus. Online booking is the norm rather than the exception. Late-cancellation and no-show fees are a standard part of the business, with their own fee templates. And billing is invoice-per-visit, with a running amount owing per patient.
CRMBridge exposes all of that through the same endpoints you would use for any other system. On the read side: patients, appointments, practitioners and staff, locations with their addresses, payment methods, the clinic’s fee templates, appointment states and cancellation reasons, and each patient’s amount owing. On the write side: register a patient, update a patient, book, reschedule and cancel appointments, post a payment against open invoices, add a note to a patient’s profile and upload a document to their file. The integration page has the full list.
How the connection works
There is no database to reach and no vendor partner program to join. The CRMBridge Integrator signs in with the clinic’s own Jane login and works through the same services Jane’s administration screens use. A staff member completes a one-time sign-in step in the Integrator; from then on the session is maintained automatically. Each Jane location connects as its own CRMBridge location, so a three-site group is three LocationId values behind one set of credentials.
Two behaviours matter for everything below. Every write is read back from Jane before it is reported as done, so “booked” means the appointment is on the practitioner’s schedule, not that a request was sent. And times are handled in the clinic’s own time zone: a booking that would not land at the hour the caller asked for is refused rather than placed at the wrong time. A failed booking is recoverable; a 3 p.m. appointment that silently became 6 p.m. is not.
Use case 1: an after-hours booking agent
Clinics miss bookings when the phone rings at 7 p.m. A voice or chat agent on the Jane integration can find the patient, offer open times with the right practitioner, book the visit and leave a note — the front desk arrives to a normal appointment on the schedule. The flow is four calls: search the patient, check availability, book, note.
POST https://api.crmbridge.ai/v1/CreateNewAppointment
BusinessID / APIToken / LocationId headers
{
"CRMPracticeid": "1",
"PatientId": "10442",
"ProviderId": "7",
"AppointmentDate": "2026-10-03",
"TimeHour": 14,
"TimeMin": 30,
"AppointmentLength": 45,
"AppointmentType": "Initial Assessment",
"Realtime": true
}
// Response - the booking was placed in Jane and read back
{ "Success": true, "WritebackStatus": "Succeeded", "CreatedEntityId": "88213" }
AppointmentType is the treatment name, and it matters: Jane will not book a visit without one. If you leave it out and the practitioner offers a single one-on-one treatment, that is used; if they offer several, the call fails and lists the candidates so your agent can ask the caller rather than guess. With Realtime: true the response waits for the outcome, so the agent can confirm the time on the call.
Finish with POST /CreateNote to put a two-line summary of the conversation on the patient’s profile. It lands in the profile’s Notes panel — visible to the front desk, and deliberately not a signed chart entry.
Use case 2: reminders, confirmations and reschedules
Read the schedule for the next few days with GET /GetAppointments, send the reminders, and act on the replies. A “can we move it?” becomes POST /UpdateAppointment with the new date and time; the reschedule is verified against Jane’s record before it is reported. A “please cancel” becomes a cancellation with one of the clinic’s own reasons:
// The clinic's cancellation reasons are published as reference data
GET https://api.crmbridge.ai/v1/GetDefinitions
{ "DefinitionType": "CancelReason" }
// Cancel with one of them
POST https://api.crmbridge.ai/v1/CancelAppointment
{
"CRMPracticeId": "1",
"AppointmentId": "88213",
"PatientId": "10442",
"CancelReason": "Patient request",
"Realtime": true
}
The reason has to be one the clinic configured — an unknown reason fails and lists the valid ones. That is not pedantry: cancellation reasons drive Jane’s late-cancellation policy and the clinic’s own reporting, so a made-up reason would quietly corrupt both. The appointment states themselves (booked, arrived, no-show and so on) are also published, so your reminder logic can skip visits that are already done or already cancelled.
Use case 3: intake before the patient arrives
New-patient intake is where allied-health clinics lose the most front-desk time. An intake product can register the patient in Jane the moment they book online, update their details when the form comes back, and attach the signed consent to their file — so check-in is a greeting, not a clipboard.
POST /CreateNewPatientruns Jane’s own duplicate check first. A match fails the call rather than creating a twin record — the same convention CRMBridge uses on every system, because a duplicate chart is far more expensive to clean up than a rejected request.POST /UpdatePatientoverlays only the fields you send onto the patient’s current Jane record; phones are normalized, provinces and postal codes map to Jane’s fields, and the saved record is read back.POST /UploadDocumentputs the signed form into the patient’s file in Jane, where the practitioner already looks for it.
Practical note: not every field on a patient round-trips. Gender and preferred practitioner, for example, are not applied on update because Jane’s edit form does not expose them the way the API contract does. The documentation marks which fields each write honours; read it before promising a clinic that a field syncs.
Use case 4: online payments and balances
Every Jane patient carries an amount owing, and every clinic has a list of payment methods. Together they support a simple, valuable product: a balance reminder with a pay-now link, where the payment lands on the patient’s Jane account without the front desk re-keying it.
// Which payment methods the clinic accepts
GET https://api.crmbridge.ai/v1/GetPaymentTypes
// Post the payment against the patient's open invoices
POST https://api.crmbridge.ai/v1/PostPatientPayment
{
"CRMPracticeId": "1",
"PatientId": "10442",
"ProviderId": "7",
"PaymentTypeId": "1180",
"Amount": 95.00,
"PaymentDate": "2026-09-26",
"PaymentNote": "Paid online - invoice reminder",
"Realtime": true
}
The amount is allocated to the patient’s open invoices oldest-first, which is what a bookkeeper would do by hand. Two Jane-specific details: Jane stamps the payment with the time it is posted, so the PaymentDate you send is validated but not what appears on the receipt; and Jane has no free-text note on a payment, so PaymentNote is accepted for consistency with other systems but not shown in Jane. Amounts owing for the collections side come from the receivables endpoints, per patient.
Use case 5: one dashboard for a multi-location group
Groups that run several Jane locations — and groups whose sites mix Jane with other systems — want one view of utilisation and money. Because each location is its own LocationId and the data model is the same everywhere, the report is a loop, not a project:
GET /GetPracticesandGET /GetProvidersgive you the locations (with addresses) and the practitioner roster to attribute against.GET /GetAppointmentsover a date window, grouped by practitioner and state, is booked-versus-attended utilisation per clinician.- Amounts owing per patient, summed per location, is the receivables picture — and the clinic’s late-cancellation and no-show fee templates from
GET /GetAdjustmentTypestell you which of those balances are policy fees rather than treatment.
For a live dashboard, use the incremental pattern: keep the highest LastModifiedTime you have seen and pass it as LastModifiedFrom next time, so each refresh pulls only what changed.
What is not there yet
In the spirit of not over-promising: recall lists, treatment plans, procedure posting and insurer records are not part of the Jane integration today, and account adjustments cannot be posted through it. If one of those is central to what you are building, tell us — that is exactly the feedback that sets the order we add things in.
Everything described above is available now. The full field reference and worked examples are in the API documentation, and the Jane integration page summarises what can be read and written.
Build for allied health on the same API
Patients, schedules, payments and notes for Jane clinics — through the same endpoints that cover 40+ dental, veterinary and allied-health systems.