curl --request GET \
--url https://{your-subdomain}.neetocal.com/api/external/v2/meetings/{meeting_sid}/unavailable-slots \
--header 'X-Api-Key: <x-api-key>'const options = {method: 'GET', headers: {'X-Api-Key': '<x-api-key>'}};
fetch('https://{your-subdomain}.neetocal.com/api/external/v2/meetings/{meeting_sid}/unavailable-slots', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://{your-subdomain}.neetocal.com/api/external/v2/meetings/{meeting_sid}/unavailable-slots"
headers = {"X-Api-Key": "<x-api-key>"}
response = requests.get(url, headers=headers)
print(response.text){
"dates": [
{
"date": "2026-10-19",
"available_time_ranges": "",
"day_reasons": [
{
"reason": "holiday",
"holiday_name": "Company offsite",
"booking_sid": null,
"client_name": null,
"meeting_name": null,
"calendar_event_title": null,
"calendar_name": null,
"booking_limit_level": null
}
],
"blocked": []
},
{
"date": "2026-10-20",
"available_time_ranges": "10:30-17:00",
"day_reasons": [],
"blocked": [
{
"from": "09:00",
"to": "10:30",
"host_email": "oliver@example.com",
"reason": "booking",
"holiday_name": null,
"booking_sid": "8sqtzrs",
"client_name": "Emma Smith",
"meeting_name": "Product demo",
"calendar_event_title": null,
"calendar_name": null,
"booking_limit_level": null
}
]
}
]
}{
"error": "<string>"
}List unavailable slots
Explain why a scheduling link has no open slots. For each date of a month, or of one day, the response lists the open time ranges and the blocked ones with the reason for each, such as a holiday, a date override, an existing booking or a connected calendar event.
With a user session, only a host of the scheduling link or a workspace admin can call this.
curl --request GET \
--url https://{your-subdomain}.neetocal.com/api/external/v2/meetings/{meeting_sid}/unavailable-slots \
--header 'X-Api-Key: <x-api-key>'const options = {method: 'GET', headers: {'X-Api-Key': '<x-api-key>'}};
fetch('https://{your-subdomain}.neetocal.com/api/external/v2/meetings/{meeting_sid}/unavailable-slots', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://{your-subdomain}.neetocal.com/api/external/v2/meetings/{meeting_sid}/unavailable-slots"
headers = {"X-Api-Key": "<x-api-key>"}
response = requests.get(url, headers=headers)
print(response.text){
"dates": [
{
"date": "2026-10-19",
"available_time_ranges": "",
"day_reasons": [
{
"reason": "holiday",
"holiday_name": "Company offsite",
"booking_sid": null,
"client_name": null,
"meeting_name": null,
"calendar_event_title": null,
"calendar_name": null,
"booking_limit_level": null
}
],
"blocked": []
},
{
"date": "2026-10-20",
"available_time_ranges": "10:30-17:00",
"day_reasons": [],
"blocked": [
{
"from": "09:00",
"to": "10:30",
"host_email": "oliver@example.com",
"reason": "booking",
"holiday_name": null,
"booking_sid": "8sqtzrs",
"client_name": "Emma Smith",
"meeting_name": "Product demo",
"calendar_event_title": null,
"calendar_name": null,
"booking_limit_level": null
}
]
}
]
}{
"error": "<string>"
}{your-subdomain} with your workspace’s subdomain. Learn how to find your subdomain in Workspace subdomain.
Headers
Use the X-Api-Key header to provide your workspace API key. Refer to Authentication for more information.
Path Parameters
The unique identifier (SID) of the scheduling link. You can get this from the response of the List scheduling links endpoint.
"vj5pgkh"
Query Parameters
Time zone, in IANA format, in which times are given.
"America/New_York"
Year to check, between 2000 and 2100.
2026
Month to check, from 1 to 12.
10
Day of the month, from 1 to 31. If omitted, every date in the month is returned.
19
To check a particular host only, for scheduling links with more than one host. The email must belong to one of the scheduling link's hosts, otherwise the request is rejected with a 422 error.
"oliver@example.com"
Slot length in minutes. Must be one of the durations the scheduling link offers. Defaults to its default duration.
60
Response
OK - Request succeeded
Hide child attributes
Hide child attributes
"2026-10-19"
Open time ranges of the date as HH:MM-HH:MM, joined by a comma and a space. Empty when nothing is open.
"10:30-17:00"
Reasons that block the whole day, such as a holiday.
Hide child attributes
Hide child attributes
Why the time is blocked.
past_time, outside_booking_window, host_availability, outside_range, holiday, host_availability_override, lead_time, booking_limit_reached, booking_limit_reached_day, booking_limit_reached_week, booking_limit_reached_month, duration_exceeds_availability, duration_exceeds_member_availability, booking, booking_before_buffer, booking_after_buffer, calendar_event_before_buffer, calendar_event_after_buffer, slot_before_buffer, slot_after_buffer, google_calendar_event, outlook_event, icloud_event, icloud_event_travel_time, booking_limit_per_slot_reached, overlapping_group_slot_booking, unknown "holiday"
Name of the holiday, for holiday.
SID of the booking that takes the time, for booking reasons.
Client of that booking.
Scheduling link of that booking.
Title of the calendar event, for calendar reasons.
Calendar the event belongs to.
Level of the booking limit that was reached, for booking limit reasons.
Blocked time ranges, in time order. Neighbouring ranges with the same host and reason are merged.
Hide child attributes
Hide child attributes
Why the time is blocked.
past_time, outside_booking_window, host_availability, outside_range, holiday, host_availability_override, lead_time, booking_limit_reached, booking_limit_reached_day, booking_limit_reached_week, booking_limit_reached_month, duration_exceeds_availability, duration_exceeds_member_availability, booking, booking_before_buffer, booking_after_buffer, calendar_event_before_buffer, calendar_event_after_buffer, slot_before_buffer, slot_after_buffer, google_calendar_event, outlook_event, icloud_event, icloud_event_travel_time, booking_limit_per_slot_reached, overlapping_group_slot_booking, unknown "holiday"
Name of the holiday, for holiday.
SID of the booking that takes the time, for booking reasons.
Client of that booking.
Scheduling link of that booking.
Title of the calendar event, for calendar reasons.
Calendar the event belongs to.
Level of the booking limit that was reached, for booking limit reasons.
Start of the blocked range, HH:MM.
"09:00"
End of the blocked range, HH:MM.
"10:30"
Host the range is blocked for. null when it is blocked for every host.
"oliver@example.com"