Working hours

Working hours define when providers can be booked through NexHealth. Before you can use GET /available_slots to show live provider availability, each provider must have working hours.

Working hours are the time windows when online booking is allowed. They are either:

  • Synced: NexHealth reads them from the provider's health record system, for supported systems.
  • Manual: you create them through the NexHealth /working_hours endpoint.

Why working hours matter

When you request available slots, NexHealth looks only inside a provider's working hours. If no working hours exist, GET /available_slots returns no availability, even if the provider has open time in the health record system.

📘

Working hours set the boundaries for online booking

The available slots endpoint fills those boundaries with the open times from the provider's schedule.

Synced and manual working hours

DescriptionTypeEditable in NexHealth?source value
NexHealth reads them from the provider's health record system, if supported.Synced❌ No. Update it in the health record system."synced"
You create them through the /working_hours API.Manual✅ Yes. Create and update it through NexHealth."manual"

Check a working hour's source attribute to see how it is managed.

With synced working hours, NexHealth reads and refreshes schedules from these supported health record systems:

athenahealth, Denticon, Dentrix Enterprise, Eaglesoft, eClinicalWorks, ModMed, Open Dental and OrthoTrac.

📘

Turn on syncing

To turn on syncing from the health record system for your account, contact [email protected].

Relationship to available slots

GET /available_slots builds open times by subtracting booked appointments and unavailable times on the calendar from working hours, synced or manual.

For example, if a provider works 9:00 AM to 5:00 PM on Mondays, NexHealth checks the health record system for existing appointments and returns the remaining free slots inside that window.

👍

Tip

GET /available_slots only returns times inside working hours.

Working hour labels (Open Dental only)

For Open Dental, NexHealth supports labeled templates synced from the health record system. They appear in the label attribute of a synced working hour.

label valueMeaning
nullStandard provider working hour
labelTemplated time block synced from Open Dental

Custom recurrence

For manual working hours, you can define your own recurrence pattern with these fields:

FieldDescription
refWhen the recurrence starts
unitThe time unit (day, week or month)
numHow many units between each recurrence

This lets you set schedules such as:

“Every 2 weeks on Monday and Wednesday.”

Time zones

All times are in the location's local time zone. The tz_offset field shows the UTC offset. For example, "-0400" means 4 hours behind UTC.

Operatory field

If a location has map_by_operatory = true, you must send the operatory_id field when you create or update a working hour. This maps booking availability to the right rooms or chairs in the practice.

🚧

Note

Leaving out operatory_id when map_by_operatory = true returns an error.

Key takeaways

  • You need at least one working hour before you use GET /available_slots.
  • NexHealth syncs working hours from a health record system, or you create them through NexHealth.
  • You can only edit manual working hours in NexHealth.
  • NexHealth calculates availability inside the time windows set by working hours.
👍

Tip

Check that your working hours are set up correctly before you call GET /available_slots. This avoids empty results.

Example response

{
  "code": true,
  "description": null,
  "error": null,
  "data": [
    {
      "id": 72941563,
      "provider_id": 518347926,
      "location_id": 445892,
      "operatory_id": 287456,
      "begin_time": "09:00",
      "end_time": "11:00",
      "days": ["Monday"],
      "specific_date": "2025-09-29",
      "custom_recurrence": null,
      "tz_offset": "-0400",
      "active": true,
      "source": "synced",
      "label": {
        "id": 52187,
        "location_id": null,
        "name": "2 Hours"
      }
    },
    {
      "id": 73091254,
      "provider_id": 518347930,
      "location_id": 445892,
      "operatory_id": null,
      "begin_time": "09:00",
      "end_time": "17:00",
      "days": ["Monday"],
      "specific_date": "2025-09-29",
      "custom_recurrence": null,
      "tz_offset": "-0400",
      "active": true,
      "source": "synced",
      "label": null
    }
  ],
  "count": 1382
}
ChangelogMCP serverErrorsdevelopers@nexhealth.com