Navigation

Check Availability

Retrieve available or busy time slots for a calendar and schedule

POST /public/calendar/checkAvailability

Returns available (free) or busy time slots for a given calendar and schedule over a specified date range. Slots are generated from the schedule rules, filtered against existing blocking events, and limited by the max-slots-per-day setting. Supports timezone conversion — when target_timezone is provided, all returned slot times are converted to that timezone.

Requires a valid api_key in the JSON request body

Parameters

Name In Type Required Description
api_key body string Yes Your Zyntro API key
calendar_id body string Yes The UUID of the calendar to check
schedule_id body string Yes The UUID of the schedule (defines available time blocks, slot duration, and gap between slots)
days_ahead body integer No Number of days to look ahead from the start date. Default: 7
start_date body string No Start date in YYYY-MM-DD HH:MM:SS format. Defaults to now.
mode body string No What to return: free (available slots, default) or busy (occupied slots)
current_timezone body string No IANA timezone for interpreting the start_date. Default: UTC
target_timezone body string No IANA timezone for the returned slot times. If omitted, slots are returned in the calendar's configured timezone. Set this to the contact's timezone to show them slots in their local time.

Important: The target_timezone field controls what timezone the returned slot times are expressed in. If your contact is in America/New_York but the calendar is configured in Asia/Singapore, set target_timezone to America/New_York and the slots will be returned in Eastern time — making them directly presentable to the contact without any client-side conversion.

Request Body

Content-Type: application/json

Example

json
{
    "mode": "free",
    "api_key": "YOUR_API_KEY",
    "days_ahead": 7,
    "calendar_id": "3d21426f-9042-40d9-a0b2-94037f551d51",
    "schedule_id": "8d3be70d-69e1-44c5-9ba7-c551a88f7112",
    "target_timezone": "America/New_York"
}

Code Samples

bash
curl -X POST https://app.zyntrohq.com/public/calendar/checkAvailability \
  -H "Content-Type: application/json" \
  -d '{
    "api_key": "YOUR_API_KEY",
    "calendar_id": "3d21426f-9042-40d9-a0b2-94037f551d51",
    "schedule_id": "8d3be70d-69e1-44c5-9ba7-c551a88f7112",
    "days_ahead": 7,
    "mode": "free",
    "target_timezone": "America/New_York"
  }'

Response

200 Slots retrieved
json
{
    "data": {
        "mode": "free",
        "slots": [
            {
                "end": "2026-04-03 09:30:00",
                "label": "Thursday, Apr 3 at 9:00 AM",
                "start": "2026-04-03 09:00:00"
            },
            {
                "end": "2026-04-03 11:00:00",
                "label": "Thursday, Apr 3 at 10:30 AM",
                "start": "2026-04-03 10:30:00"
            },
            {
                "end": "2026-04-04 14:30:00",
                "label": "Friday, Apr 4 at 2:00 PM",
                "start": "2026-04-04 14:00:00"
            }
        ],
        "end_date": "2026-04-10 00:00:00",
        "slot_count": 12,
        "start_date": "2026-04-03 00:00:00",
        "backup_slots": [
            {
                "end": "2026-04-03 11:30:00",
                "label": "Thursday, Apr 3 at 11:00 AM",
                "start": "2026-04-03 11:00:00"
            }
        ],
        "target_timezone": "America/New_York",
        "current_timezone": "UTC",
        "backup_slot_count": 5
    },
    "status": "success"
}
200 Error
json
{
    "data": [
        "Invalid calendar_id value"
    ],
    "status": "error"
}

Info: When max_slots_per_day is configured on the schedule, the endpoint shuffles available slots per day and returns only that many in the main slots array. The remaining slots are returned in backup_slots — available if the primary slots do not work for the contact. In busy mode, no backup slots are returned.

Tip: Each slot includes a label field formatted as a human-readable string (e.g., "Thursday, Apr 3 at 9:00 AM"). This label is already in the target_timezone and can be presented directly to the contact without additional formatting.

Errors

Code Message Resolution
MISSING_API_KEY Missing required parameter api_key
The api_key is missing.
Include your API key.
MISSING_CALENDAR Missing required parameter calendar_id
The calendar_id is missing.
Include the calendar UUID.
MISSING_SCHEDULE Missing required parameter schedule_id
The schedule_id is missing.
Include the schedule UUID.
INACTIVE_USER User account is inactive or suspended
The account is not active.
Contact your admin.
INVALID_ORG Invalid organization
No org found for the user.
Contact support.
INVALID_CALENDAR Invalid calendar_id value
No calendar with that ID exists.
Verify the calendar_id.
INACTIVE_CALENDAR Calendar is inactive or not correctly setup
The calendar exists but is not active.
Activate the calendar in Sales > Calendar.
INVALID_SCHEDULE Invalid schedule_id value
No schedule with that ID exists.
Verify the schedule_id.
DATE_ERROR End date must be greater than start date
The calculated end date is before the start date.
Ensure start_date and days_ahead produce a valid range.

Was this article helpful?

NotebookLM Overviews