---
title: "GET /api/appointments"
method: GET
path: "/api/appointments"
tags: ["Clinical"]
---

# GET /api/appointments

`GET /api/appointments`

## Request

- Base URL: `https://app.drchrono.com`
- URL: `https://app.drchrono.com/api/appointments`
- Auth: OAuth 2
  - Authorization code: `https://app.drchrono.com/o/authorize/`
  - Token URL: `https://app.drchrono.com/o/token/` scopes: `calendar:read`, `calendar:write`, `clinical:read`, `clinical:write`

Retrieve or search appointment or breaks.
<b>Note:</b> Either `since`, `occurred_since`, `date` or `date_range` parameter must be specified.
          results returned in order of scheduled date.
<b>Note:</b> Membership plan charges get a placeholder appointment per billing cycle and are returned by default. They are marked with `is_membership_appointment`, and `exclude_membership=true` leaves them out.

## Query parameters

- `cursor` string: The pagination cursor value.
- `page_size` integer: Number of results to return per page.
- `status` string
- `patient` integer
- `office` integer
- `doctor` integer
- `since` string
- `occurred_since` string: Filter appointments based on scheduled time
- `date_range` string
- `verbose` boolean
- `date` string
- `ignore_virtual` boolean: Do not include virtual appointments that have not yet been materialized. This is useful when you need to get a list of appointments that are materialized and ready to be used.
- `show_archived` boolean: Include archived or deleted appointments in the response
- `exclude_membership` boolean: Leave membership plan charge appointments out of the response

## Response `200`

OK

- union: Availability response structure for single date or date range.
  - object
    - `dates` object[], required: List of dates and their open slots.
      - `date` string, date, required: Date in YYYY-MM-DD format.
      - `open_slots` object[], required: List of available time slots.
        - `start` string, required: Slot start time (HH:MM format)
        - `end` string, required: Slot end time (HH:MM format)
        - `availability` integer, required: Number of available slots (or adjust type to match implementation)
    - `office` integer: Office ID (if specified).
    - `doctor` integer: Doctor ID (if specified).
    - `exam_room` integer: Exam room ID (if specified).
    - `date_range` string[], required: Start and end date of the range.
    - `duration` integer, required: Duration of each slot in minutes.
  - object
    - `office` integer: Office ID (if specified).
    - `doctor` integer: Doctor ID (if specified).
    - `open_slots` object[]: List of available time slots.
      - `start` string, required: Slot start time (HH:MM format)
      - `end` string, required: Slot end time (HH:MM format)
      - `availability` integer, required: Number of available slots (or adjust type to match implementation)
    - `exam_room` integer: Exam room ID (if specified).
    - `duration` integer: Duration of each slot in minutes.
    - `date` string, date: Date in YYYY-MM-DD format.

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `403`: Permission Denied
- `500`: Internal Server Error

## Changes

- **2026-10-14** `98cabe79d150`: 1 info
  - added the new optional `query` request parameter `exclude_membership`
- **2026-07-13** `1f92de898aec`: 2 breaking, 3 warning
  - added `subschema #1: AvailabilityDateRangeResponse, subschema #2: AvailabilitySingleDateResponse` to the response body `oneOf` list for the response status `200`
  - the response's body type changed from `object` to no type for status `200`
  - removed the optional property `data` from the response with the `200` status
  - removed the optional property `next` from the response with the `200` status
  - …1 more

[Operation history](https://skmtc.dev/drchrono/apis/drchrono-api/changes/api/appointments/get.md)

---

[API](https://skmtc.dev/drchrono/apis/drchrono-api.md) - [All operations](https://skmtc.dev/drchrono/apis/drchrono-api/llms.txt) - [OpenAPI document](https://skmtc.dev/drchrono/apis/drchrono-api/revisions/98cabe79d150?raw)
