---
title: "Get available appointment slots"
description: "Retrieve available booking slots for a specific date, optionally filtered by admin/agent"
---

> Documentation Index
> Fetch the complete documentation index at: https://developer.channelautomations.com/llms.txt
> Use this file to discover all available pages before exploring further.

Path: Channel Automation API › Calendar

`GET /api/calendar/availability`

Retrieve available booking slots for a specific date, optionally filtered by admin/agent

## Query parameters

- `date` (`get/api/calendar/availability.query.date`; string, required) — Date to check availability for (YYYY-MM-DD format)
  - format `date`; example `"2025-07-15"`
- `workspace_id` (`get/api/calendar/availability.query.workspace_id`; string, required) — Workspace the calendar belongs to
  - example `"61395"`
- `admin_id` (`get/api/calendar/availability.query.admin_id`; string, required) — Admin/agent whose calendar is being queried
  - example `"61395"`
- `event_type_id` (`get/api/calendar/availability.query.event_type_id`; string, optional) — Restrict to a single event type. Defaults to the workspace's oldest enabled type.
  - format `uuid`
- `service_appointment_id` (`get/api/calendar/availability.query.service_appointment_id`; string, optional) — Required only for workspaces backed by an external availability provider. When present, slots come from the provider instead of the native schedule.

## Code samples

### cURL

```bash
curl --request GET \
  --url 'https://api.channelautomation.com/api/calendar/availability?date=2025-07-15&workspace_id=61395&admin_id=61395'
```

### TypeScript

```typescript
const url = 'https://api.channelautomation.com/api/calendar/availability?date=2025-07-15&workspace_id=61395&admin_id=61395';
const options = {method: 'GET'};

fetch(url, options)
  .then(res => res.json())
  .then(json => console.log(json))
  .catch(err => console.error(err));
```

### Python

```python
import requests

url = "https://api.channelautomation.com/api/calendar/availability?date=2025-07-15&workspace_id=61395&admin_id=61395"

response = requests.get(url)

print(response.text)
```

## Responses

### 200

Available slots retrieved successfully

#### Example

```json
{
  "success": true,
  "slots": [
    {
      "id": "event-uuid-1",
      "start_time": "2025-07-15T09:00:00Z",
      "end_time": "2025-07-15T10:00:00Z",
      "is_booked": false,
      "admin_id": "admin-uuid",
      "title": "Consultation Slot",
      "description": "Available for product consultation",
      "location": "Virtual Meeting",
      "booking_type": "single",
      "max_bookings": 1
    }
  ],
  "date": "2025-07-15",
  "count": 5
}
```

- `success` (`get/api/calendar/availability.response.200.success`; boolean, optional)
  - example `true`
- `slots` (`get/api/calendar/availability.response.200.slots`; array<object>, optional)
  - `id` (`get/api/calendar/availability.response.200.slots.id`; string, optional) — Unique identifier for the calendar slot
    - example `"event-uuid-1"`
  - `start_time` (`get/api/calendar/availability.response.200.slots.start_time`; string, optional) — Start time of the appointment slot
    - format `date-time`; example `"2025-07-15T09:00:00Z"`
  - `end_time` (`get/api/calendar/availability.response.200.slots.end_time`; string, optional) — End time of the appointment slot
    - format `date-time`; example `"2025-07-15T10:00:00Z"`
  - `is_booked` (`get/api/calendar/availability.response.200.slots.is_booked`; boolean, optional) — Whether the slot is already booked
    - example `false`
  - `admin_id` (`get/api/calendar/availability.response.200.slots.admin_id`; string, optional) — ID of the admin/agent assigned to this slot
    - example `"admin-uuid"`
  - `title` (`get/api/calendar/availability.response.200.slots.title`; string, optional) — Title/name of the appointment slot
    - example `"Consultation Slot"`
  - `description` (`get/api/calendar/availability.response.200.slots.description`; string, optional) — Description of what this slot is for
    - example `"Available for product consultation"`
  - `location` (`get/api/calendar/availability.response.200.slots.location`; string, optional) — Location where the appointment will take place
    - example `"Virtual Meeting"`
  - `booking_type` (`get/api/calendar/availability.response.200.slots.booking_type`; string, optional) — Type of booking allowed
    - example `"single"`
  - `max_bookings` (`get/api/calendar/availability.response.200.slots.max_bookings`; integer, optional) — Maximum number of bookings allowed for this slot
    - example `1`
- `date` (`get/api/calendar/availability.response.200.date`; string, optional)
  - format `date`; example `"2025-07-15"`
- `count` (`get/api/calendar/availability.response.200.count`; integer, optional)
  - example `5`

### 400

Missing required date parameter

#### Example

```json
{
  "success": false,
  "error": "Missing required parameter: date"
}
```

- `success` (`get/api/calendar/availability.response.400.success`; boolean, optional)
  - example `false`
- `error` (`get/api/calendar/availability.response.400.error`; string, optional)
  - example `"Missing required parameter: date"`

### 500

Internal server error

#### Example

```json
{
  "error": "Internal server error",
  "details": "string",
  "success": false
}
```

- `error` (`get/api/calendar/availability.response.500.error`; string, optional)
  - example `"Internal server error"`
- `details` (`get/api/calendar/availability.response.500.details`; string, optional)
- `success` (`get/api/calendar/availability.response.500.success`; boolean, optional)
  - example `false`


Source: https://developer.channelautomations.com/api/get-api-calendar-availability/index.md
