Developers
Open ManaNotes
On this page
Reference data

Practitioners, locations, services & availability

Read-only lists you need to construct a booking: the clinic’s practitioners, locations and billable items, plus each practitioner’s working hours and live availability. All require appointments:read.

These read-only endpoints surface the reference data your clinic needs to build a booking: its practitioners, its locations (sites), the billable items (services) you book by BillableItemId, each practitioner’s working hours, and their live availability — the open slots to book into.

GET/api/v1/practitioners

List practitioners

Returns the practitioners in the client’s clinic. LocationIds lists the sites each practitioner works at (empty means the clinic’s default site only), and HomeLocationId is where their bookings go when you don’t pass a LocationId. Requires appointments:read.

Request
cURL
curl https://api.mananotes.co.nz/api/v1/practitioners \
  -H "Authorization: Bearer eyJhbGci..."
Response
200 OK · application/json
{
  "data": [
    {
      "id": "65f0a1...",
      "email": "jo@clinic.co.nz",
      "PreferredName": "Jo",
      "ProviderFirstname": "Joanna",
      "ProviderLastname": "Smith",
      "ServiceCode": "PHY3",
      "ClinicId": "65f0c0...",
      "HomeLocationId": "65f0f1...",
      "LocationIds": ["65f0f1...", "65f0f2..."],
      "Active": true
    }
  ]
}
GET/api/v1/locations

List locations

Returns the clinic’s physical sites, default first. Every LocationId, locationIds and HomeLocationId elsewhere in the API refers to these ids. Deactivated sites (Active: false) stay listed because old appointments still point to them, but they can’t take new bookings. Solo practitioners and clinics that haven’t set up locations get an empty list: treat that as one implicit site. Requires appointments:read.

Request
cURL
curl https://api.mananotes.co.nz/api/v1/locations \
  -H "Authorization: Bearer eyJhbGci..."
Response
200 OK · application/json
{
  "data": [
    {
      "id": "65f0f1...",
      "Name": "City Branch",
      "IsDefault": true,
      "Active": true,
      "OnlineBookingEnabled": true,
      "ContactNumber": "+6491234567",
      "ContactEmail": "city@clinic.co.nz",
      "ClinicAddress": {
        "Line1": "12 Queen Street",
        "City": "Auckland",
        "PostCode": "1010",
        "Country": "New Zealand"
      }
    }
  ]
}
GET/api/v1/practitioners/{id}/working-hours

List working hours & breaks

Returns a practitioner’s weekly working hours and break times — the clinic configuration that shapes availability. There’s no separate “blocked time” resource: blocked time is modelled as an appointment. Times are clinic-local (Pacific/Auckland) in HH:mm, and Day is a weekday enum. In a multi-site clinic each site has its own weekly pattern: a row’s LocationId says which site it’s for (null means the default site). Requires appointments:read.

Path parameters
idstringrequired
The id of the practitioner.
Request
cURL
curl https://api.mananotes.co.nz/api/v1/practitioners/65f0a1.../working-hours \
  -H "Authorization: Bearer eyJhbGci..."
Response
200 OK · application/json
{
  "data": [
    {
      "id": "66a1c2d3e4f5a6b7c8d9e0f1",
      "PractitionerId": "65f0a1...",
      "LocationId": "65f0f1...",
      "Day": "MONDAY",
      "StartTime": "09:00",
      "EndTime": "17:00",
      "BreakTimes": [
        {
          "id": "66a2b3c4d5e6f7a8b9c0d1e2",
          "Name": "Lunch",
          "LocationId": "65f0f1...",
          "Day": "MONDAY",
          "StartTime": "12:00",
          "EndTime": "13:00"
        }
      ]
    }
  ]
}
GET/api/v1/billable-items

List billable items

Returns the bookable services/products for the clinic. An appointment requires a BillableItemId. Requires appointments:read.

Query parameters
limitintegeroptional
1–200. Defaults to 20.
offsetintegeroptional
Number of records to skip.
searchstringoptional
Filter by code or name.
Request
cURL
curl "https://api.mananotes.co.nz/api/v1/billable-items?search=physio" \
  -H "Authorization: Bearer eyJhbGci..."
Response
200 OK · application/json
{
  "data": [
    {
      "id": "65f0b1...",
      "Code": "PHY3",
      "Name": "Physio — follow-up",
      "UnitPrice": 45.00,
      "Duration": 30,
      "Type": "Service",
      "Active": true,
      "IsACCClaimable": true
    }
  ],
  "totalCount": 1
}
GET/api/v1/practitioners/{id}/availability

Get open appointment slots

Computes a practitioner’s open slots for a service across a date range, honouring working hours, breaks, booking lead time and existing appointments. Dates are yyyy-MM-dd and slots come back in clinic-local time (Pacific/Auckland). Unlike the public booking portal, this trusted channel doesn’t require online booking to be enabled. Requires appointments:read.

Path parameters
idstringrequired
The id of the practitioner.
Query parameters
billableItemIdstringrequired
The service to compute slots for; its duration sizes each slot.
fromstringrequired
First day of the range (yyyy-MM-dd, clinic-local).
tostringrequired
Last day of the range, inclusive (yyyy-MM-dd, clinic-local). If the practitioner doesn’t take same-day bookings, today in Pacific/Auckland is never included.
locationIdstringoptional
Only slots inside this site’s working hours (see locations). Existing appointments block slots at every site, because a practitioner can only be in one place. Omitted: every site the practitioner works at.
Request
cURL
curl "https://api.mananotes.co.nz/api/v1/practitioners/65f0a1.../availability?billableItemId=65f0b1...&from=2026-07-06&to=2026-07-12" \
  -H "Authorization: Bearer eyJhbGci..."
Response
200 OK · application/json
{
  "data": [
    { "Date": "2026-07-06", "StartTime": "09:00", "EndTime": "09:30" },
    { "Date": "2026-07-06", "StartTime": "09:30", "EndTime": "10:00" }
  ]
}