Level 1 - One provider, one operatory, fixed weekly schedule
Go back to the main guide here: https://docs.nexhealth.com/docs/scheduling-configuration-guide#/
Throughout this guide, we will use the example office called Happy Smiles Dental to demonstrate working hour configurations.
Happy Smiles Dental - Configuration 1
Dr. Smith works Mondays through Thursdays, 9:00 AM to 5:00 PM, in Operatory 1. Same hours every week. No lunch break in the schedule. No exceptions.
This straightforward configuration is the simplest one most practices start with. Every other level adds a layer of complexity on top.
Configure
One POST. The provider's full week goes in the days array.
curl -X POST 'https://nexhealth.info/working_hours?subdomain=YOUR_SUBDOMAIN&location_id=YOUR_LOCATION_ID' \
-H 'Nex-Api-Version: v20240412' \
-H 'Authorization: Bearer YOUR_BEARER_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"working_hour": {
"active": true,
"provider_id": YOUR_PROVIDER_ID,
"operatory_id": YOUR_OPERATORY_ID,
"begin_time": "09:00",
"end_time": "17:00",
"days": ["Monday", "Tuesday", "Wednesday", "Thursday"]
}
}'
The response echoes the record back with source: "manual" and label: null. That null label is the marker and it means "this is the base provider working hours" You'll see why that distinction matters in later levels.
Response (trimmed):
{
"data": [
{
"source": "manual",
"label": null
}
]
}
Retrieve slots
Ask for Dr. Smith's bookable time on a Monday:
curl -X GET 'https://nexhealth.info/available_slots?subdomain=YOUR_SUBDOMAIN&start_date=2026-05-07&days=1&lids[]=YOUR_LOCATION_ID&pids[]=YOUR_PROVIDER_ID&slot_length=60&slot_interval=45&overlapping_operatory_slots=false&appointments_per_timeslot=1' \
-H 'Nex-Api-Version: v20240412' \
-H 'accept: application/vnd.Nexhealth+json;version=2' \
-H 'Authorization: Bearer YOUR_BEARER_TOKEN'The response returns a continuous run of bookable windows from 9:00 AM to 5:00 PM.
Response (trimmed):
{
"data": [
"lid": 21241,
"pid": 158936024,
"slots": [
{
"time": "2026-05-07T09:00:00.000-07:00",
"end_time": "2026-05-07T17:00:00.000-07:00",
"operatory_id": 1,
"working_hour_label_id": null
},
]
}
Slot length is determined by the appointment type or the specified slot_interval. The slots themselves are simply the working hour window cut into bookable chunks.
Gotchas
The POST succeeded but slots are still empty.
Configured working hours is a pre-requisite to utilizing the /available_slots endpoint.
Below is an example 200 response for an /available_slots call without configured availability:
{
"code": true,
"description": "Next available slot not found. Please confirm that the provider has active availabilities.",
"error": null,
"data": [
{
"lid": 21241,
"pid": 158936024,
"slots": [],
"next_available_date": null
}
],
"count": 1
}