Skip to Content
Scheduling APIGet Available Slots

Get Available Slots

Query the available time slots for a specific event type within a date range.

Endpoint

GET /api/public/scheduling/{userSlug}/{eventSlug}/slots

Authentication: None required

Path Parameters

ParameterTypeDescription
userSlugstringThe user’s unique URL slug
eventSlugstringThe event type’s URL slug

Query Parameters

ParameterTypeRequiredDescription
dateFromstringYesStart date in YYYY-MM-DD format
dateTostringYesEnd date in YYYY-MM-DD format
timezonestringYesGuest’s IANA timezone (e.g., America/New_York)

Response

Returns 200 OK with an array of dates, each containing available time slots.

[ { "date": "2026-03-16", "slots": [ { "startTime": "2026-03-16T14:00:00Z", "endTime": "2026-03-16T14:30:00Z", "spotsRemaining": null }, { "startTime": "2026-03-16T15:00:00Z", "endTime": "2026-03-16T15:30:00Z", "spotsRemaining": null } ] }, { "date": "2026-03-17", "slots": [ { "startTime": "2026-03-17T09:00:00Z", "endTime": "2026-03-17T09:30:00Z", "spotsRemaining": null } ] } ]

Response Fields

FieldTypeDescription
datestringDate in YYYY-MM-DD format
slotsarrayArray of available time slots
slots[].startTimestringSlot start time in ISO 8601 UTC
slots[].endTimestringSlot end time in ISO 8601 UTC
slots[].spotsRemainingnumber | nullRemaining spots for group events; null for 1:1 events

How Slot Availability Works

The API calculates available slots by:

  1. Loading the host’s weekly availability schedule and any date overrides
  2. Generating candidate slots based on the event type’s duration and slot interval
  3. Removing slots that conflict with existing bookings or synced calendar events
  4. Applying buffer times before and after existing meetings
  5. Enforcing minimum notice period, daily limits, and weekly limits
  6. For team events: checking availability across all team members

Dates with no available slots are omitted from the response.

Errors

StatusDescription
400Missing or invalid query parameters
404User or event type not found

Code Examples

cURL

curl "https://app.proximity.io/api/public/scheduling/jane-doe/30min-call/slots?\ dateFrom=2026-03-15&dateTo=2026-03-21&timezone=America/New_York"

JavaScript

const params = new URLSearchParams({ dateFrom: '2026-03-15', dateTo: '2026-03-21', timezone: 'America/New_York', }); const response = await fetch( `https://app.proximity.io/api/public/scheduling/jane-doe/30min-call/slots?${params}` ); const days = await response.json(); for (const day of days) { console.log(`\n${day.date}:`); for (const slot of day.slots) { console.log(` ${slot.startTime} — ${slot.endTime}`); } }

Python

import requests response = requests.get( "https://app.proximity.io/api/public/scheduling/jane-doe/30min-call/slots", params={ "dateFrom": "2026-03-15", "dateTo": "2026-03-21", "timezone": "America/New_York", }, ) days = response.json() for day in days: print(f"\n{day['date']}:") for slot in day["slots"]: print(f" {slot['startTime']}{slot['endTime']}")
Last updated on