AI API Advisor
Describe your use case and get recommended API endpoints
Getting Started
Before You Begin
All API requests require authentication using credentials provided during business onboarding. You'll receive: BusinessID, ApplicationID, LocationID, and ApplicationKey.
Base URLs
Two environments are available. Use the sandbox for development and integration testing — it accepts the same requests as production but is isolated from real customer data. Switch to production only after your integration is validated.
Timestamps & time zones: the platform-written bookkeeping stamps
— LastModifiedTime on every synced record
(and in webhook payloads) and EventTime in the
webhook event log — are always UTC, serialized ISO-8601 with a trailing
Z. The
LastModifiedFrom /
LastModifiedTo filters are interpreted as UTC too.
Dates that originate in the practice management system (appointment times,
CreatedDate,
LastUpdatedDate, …) are returned as
practice-local wall time, exactly as the PMS records them. The slot endpoints
(/AvailableSlots,
/live/AvailableSlots) work in practice-local time too:
SlotDateTime carries no offset, and “today” and the
same-day cut-off follow the location’s configured time zone, which each response reports as
LocationTimeZone.
Explore the APIs
Everything in the left menu, grouped by what you are trying to do. Each card jumps straight to that part of the reference.
Start here: exchange your onboarding credentials for a 24-hour APIToken that every other call requires.
The on-prem connector that syncs each practice’s PMS to the cloud — install, connect, and optionally white-label it.
Fast synced reads for everything in the chart — patients, appointments, ledgers, claims, treatment plans, notes, perio, recalls, referrals, and more.
Realtime reads straight from the practice system — same shapes as the synced endpoints, just prefix the path with /live.
Create and update records in the PMS — patients, appointments, notes, documents, procedures, treatment plans, perio charts, and insurance payments. Add "Realtime": true to get the result in the same response. Read Reference IDs first.
Find open appointment slots across providers and operatories — the building block for online booking.
Push notifications when data changes — keep your system in sync without polling.
Ask questions in plain English, or hand the whole platform to an AI agent over the Model Context Protocol.
Provision businesses and locations programmatically — bring a new practice online without a support ticket.
Case-Insensitive Filters: All filter parameter names are case-insensitive. You can send PatientId, patientId, or PATIENTID and they will all work.
Parameters Go in the JSON Body — Even on GET
Every endpoint reads its parameters (filters, Skip/Take, date ranges) from the JSON request body only.
Parameters placed in the URL query string are silently ignored — the request still succeeds, but runs with defaults as if you had sent no parameters at all.
This applies to GET endpoints too: send a JSON body with your GET request, exactly as every cURL example in these docs does (--data on a GET is intentional).
The single exception is /AvailableSlots, which also accepts query-string parameters as a fallback when no body is sent.
Why this bites: list endpoints return at most 1,000 records per call. If your Skip/Take end up in the query string, you'll silently receive only the first 1,000 rows of a larger dataset.
To read a full dataset, send Skip/Take in the body and keep incrementing Skip by Take until a call returns fewer rows than Take.